sBTC 存款
概览
停机问题 sBTC 存款合约 (sbtc-deposit.clar)管理 sBTC 系统的存款流程。它在用户存入比特币时处理验证和铸造 sBTC 代币,并与 sBTC 注册表合约交互以更新协议状态。
常量
txid 长度:交易 ID 的必需长度(32 字节)。尘埃限制:有效存款的最小金额(546 satoshi)。
错误常量
ERR_TXID_LEN(u300):表示提供的交易 ID 长度不正确。ERR_DEPOSIT_REPLAY(u301):表示尝试重放已完成的存款。ERR_LOWER_THAN_DUST(u302):表示存款金额低于尘埃限制。ERR_DEPOSIT_INDEX_PREFIX:用于批处理过程中与存款相关错误的前缀。ERR_DEPOSIT(u303):一般存款错误。ERR_INVALID_CALLER(u304):表示调用者无权执行该操作。
公开函数
complete-deposit-wrapper
处理单个存款请求。
参数:
txid:(buff 32)- 比特币交易 IDvout-index:uint- 存款交易的输出索引amount:uint- 要铸造的 sBTC 数量(以 satoshi 为单位)recipient:principal- 接收铸造 sBTC 的 Stacks 地址
返回:
(response bool uint)
验证和授权
验证调用者是否为当前签名人主体。
检查存款金额是否高于尘埃限制。
验证交易 ID 的长度。
重放保护
确保该存款之前未被处理(防止重放)。
执行
通过铸造 sBTC 代币给接收者,使用
.sbtc-token的protocol-mint.通过更新 sBTC 注册表合约中的存款状态,使用
.sbtc-registry的complete-deposit.
complete-deposits-wrapper
在单笔交易中处理多个存款请求。
参数:
deposits:(list 650 {txid: (buff 32), vout-index: uint, amount: uint, recipient: principal})- 存款数据列表
返回:
(response uint uint)
授权
验证调用者是否为当前签名人主体。
批量处理
遍历存款列表,使用以下方式处理每一项
complete-individual-deposits-helper函数。
私有函数
complete-individual-deposits-helper
在批处理操作中处理单个存款的辅助函数。
参数:
deposit:{txid: (buff 32), vout-index: uint, amount: uint, recipient: principal}- 单个存款数据helper-response:(response uint uint)- 用于跟踪已处理存款的累加器
返回:
(response uint uint)
调用存款包装器
调用
complete-deposit-wrapper用于单个存款。
成功处理
如果成功,则增加已处理存款计数。
错误处理
如果发生错误,会将其传播并附加索引信息(使用
ERR_DEPOSIT_INDEX_PREFIX或相关错误常量)。
与其他合约的交互
.sbtc-registry:调用get-current-signer-data,get-completed-deposit,和complete-deposit以管理存款状态。.sbtc-token:调用protocol-mint以创建新的 sBTC 代币。
安全注意事项
访问控制:只有当前签名人主体可以调用存款完成函数。
重放防护:合约会检查先前处理过的存款以防止重放攻击。
尘埃限制:强制执行最低存款金额以防止垃圾交易并确保经济可行性。
交易 ID 验证:确保提供的交易 ID 长度正确。
这有帮助吗?