sBTC 存款

概览

停机问题 sBTC 存款合约arrow-up-right (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) - 比特币交易 ID

    • vout-index: uint - 存款交易的输出索引

    • amount: uint - 要铸造的 sBTC 数量(以 satoshi 为单位)

    • recipient: principal - 接收铸造 sBTC 的 Stacks 地址

  • 返回: (response bool uint)

1

验证和授权

  1. 验证调用者是否为当前签名人主体。

  2. 检查存款金额是否高于尘埃限制。

  3. 验证交易 ID 的长度。

2

重放保护

  1. 确保该存款之前未被处理(防止重放)。

3

执行

  1. 通过铸造 sBTC 代币给接收者,使用 .sbtc-tokenprotocol-mint.

  2. 通过更新 sBTC 注册表合约中的存款状态,使用 .sbtc-registrycomplete-deposit.


complete-deposits-wrapper

在单笔交易中处理多个存款请求。

  • 参数:

    • deposits: (list 650 {txid: (buff 32), vout-index: uint, amount: uint, recipient: principal}) - 存款数据列表

  • 返回: (response uint uint)

1

授权

  1. 验证调用者是否为当前签名人主体。

2

批量处理

  1. 遍历存款列表,使用以下方式处理每一项 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)

1

调用存款包装器

  1. 调用 complete-deposit-wrapper 用于单个存款。

2

成功处理

  1. 如果成功,则增加已处理存款计数。

3

错误处理

  1. 如果发生错误,会将其传播并附加索引信息(使用 ERR_DEPOSIT_INDEX_PREFIX 或相关错误常量)。


与其他合约的交互

  • .sbtc-registry:调用 get-current-signer-data, get-completed-deposit,和 complete-deposit 以管理存款状态。

  • .sbtc-token:调用 protocol-mint 以创建新的 sBTC 代币。


安全注意事项

  1. 访问控制:只有当前签名人主体可以调用存款完成函数。

  2. 重放防护:合约会检查先前处理过的存款以防止重放攻击。

  3. 尘埃限制:强制执行最低存款金额以防止垃圾交易并确保经济可行性。

  4. 交易 ID 验证:确保提供的交易 ID 长度正确。

这有帮助吗?