The sBTC Withdrawal contract (sbtc-withdrawal.clar
) manages the withdrawal process for the sBTC system. It handles the initiation, acceptance, and rejection of withdrawal requests, ensuring proper validation and interaction with other sBTC contracts.
ERR_INVALID_ADDR_VERSION
(u500): Invalid address version.ERR_INVALID_ADDR_HASHBYTES
(u501): Invalid address hashbytes.ERR_DUST_LIMIT
(u502): Withdrawal amount below dust limit.ERR_INVALID_REQUEST
(u503): Invalid withdrawal request ID.ERR_INVALID_CALLER
(u504): Caller is not the current signer principal.ERR_ALREADY_PROCESSED
(u505): Withdrawal request already processed.ERR_FEE_TOO_HIGH
(u505): Paid fee higher than requested.ERR_WITHDRAWAL_INDEX_PREFIX
: Prefix for withdrawal index errors.ERR_WITHDRAWAL_INDEX
(u506): General withdrawal index error.
MAX_ADDRESS_VERSION
(u6): Maximum value of an address version.MAX_ADDRESS_VERSION_BUFF_20
(u4): Maximum version for 20-byte hashbytes.MAX_ADDRESS_VERSION_BUFF_32
(u6): Maximum version for 32-byte hashbytes.DUST_LIMIT
(u546): Minimum amount of sBTC for withdrawal.
Initiates a new withdrawal request.
- Parameters:
amount
:uint
- Amount of sBTC to withdrawrecipient
:{ version: (buff 1), hashbytes: (buff 32) }
- Bitcoin address detailsmax-fee
:uint
- Maximum fee for the withdrawal
- Returns:
(response uint uint)
Accepts a withdrawal request.
- Parameters:
request-id
:uint
- Withdrawal request IDbitcoin-txid
:(buff 32)
- Bitcoin transaction IDsigner-bitmap
:uint
- Bitmap of signersoutput-index
:uint
- Output index in the Bitcoin transactionfee
:uint
- Actual fee paid
- Returns:
(response bool uint)
Rejects a withdrawal request.
- Parameters:
request-id
:uint
- Withdrawal request IDsigner-bitmap
:uint
- Bitmap of signers
- Returns:
(response bool uint)
Processes multiple withdrawal requests (accept or reject).
- Parameters:
withdrawals
:(list 600 {...})
- List of withdrawal details
- Returns:
(response uint uint)
Validates the recipient's Bitcoin address format.
- Parameters:
recipient
:{ version: (buff 1), hashbytes: (buff 32) }
- Bitcoin address details
- Returns:
(response bool uint)
Helper function to process individual withdrawals in the batch operation.
- Parameters:
withdrawal
:{...}
- Individual withdrawal detailshelper-response
:(response uint uint)
- Accumulator for processing
- Returns:
(response uint uint)
.sbtc-token
: Callsprotocol-lock
,protocol-burn-locked
,protocol-mint
, andprotocol-unlock
for token operations..sbtc-registry
: Callscreate-withdrawal-request
,get-withdrawal-request
,get-current-signer-data
,complete-withdrawal-accept
, andcomplete-withdrawal-reject
for managing withdrawal requests and signer data.
- Access Control: Only the current signer principal can accept or reject withdrawal requests.
- Dust Limit: Enforces a minimum withdrawal amount to prevent spam and ensure economic viability.
- Fee Management: Ensures that the actual fee doesn't exceed the maximum fee set by the user.
- Address Validation: Implements thorough validation of Bitcoin address formats.
- State Management: Prevents double-processing of withdrawal requests.
The contract supports various Bitcoin address types, including:
- P2PKH (Pay-to-Public-Key-Hash)
- P2SH (Pay-to-Script-Hash)
- P2SH-P2WPKH (P2SH nested P2WPKH)
- P2SH-P2WSH (P2SH nested P2WSH)
- P2WPKH (Pay-to-Witness-Public-Key-Hash)
- P2WSH (Pay-to-Witness-Script-Hash)
- P2TR (Pay-to-Taproot)
Each address type is represented by a specific version byte and hashbytes format in the recipient structure.