sBTC Withdrawal
Overview
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.
Constants
Error Codes
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.
Other Constants
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.
Public Functions
initiate-withdrawal-request
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)
accept-withdrawal-request
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)
reject-withdrawal-request
Rejects a withdrawal request.
Parameters:
request-id
:uint
- Withdrawal request IDsigner-bitmap
:uint
- Bitmap of signers
Returns:
(response bool uint)
complete-withdrawals
Processes multiple withdrawal requests (accept or reject).
Parameters:
withdrawals
:(list 600 {...})
- List of withdrawal details
Returns:
(response uint uint)
Read-only Functions
validate-recipient
Validates the recipient's Bitcoin address format.
Parameters:
recipient
:{ version: (buff 1), hashbytes: (buff 32) }
- Bitcoin address details
Returns:
(response bool uint)
Private Functions
complete-individual-withdrawal-helper
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)
Interactions with Other Contracts
.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.
Security Considerations
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.
Bitcoin Address Types
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.
Last updated