sBTC 签名者

概览

停机问题 sBTC 签名者合约arrow-up-right (sbtc-bootstrap-signers.clar)管理 sBTC 系统的签名者集合。它处理签名者密钥的轮换并提供用于生成多重签名地址的工具。

常量

  • 密钥大小:公钥的要求长度(33 字节)。

错误常量

  • ERR_KEY_SIZE_PREFIX:批处理时密钥大小错误的前缀。

  • ERR_KEY_SIZE (u200):表示提供的密钥长度不正确。

  • ERR_INVALID_CALLER (u201):表示函数调用者不是当前的签名者主体。

  • ERR_SIGNATURE_THRESHOLD (u202):表示无效的签名阈值(必须大于 50% 且≤ 总签名者密钥的 100%)。

公开函数

rotate-keys-wrapper

轮换签名者的密钥。在更新签名者集合时调用。

  • 参数:

    • new-keys: (list 128 (buff 33)) - 新签名者公钥列表

    • new-aggregate-pubkey: (buff 33) - 新的聚合公钥

    • new-signature-threshold: uint - 新的签名阈值

  • 返回: (response (buff 33) uint)

函数流程:

1

验证签名阈值

确保证新的签名阈值有效(必须大于 50% 且≤ 总签名者密钥的 100%)。

2

验证调用者

验证调用者是否为当前的签名者主体。

3

验证密钥

检查每个新密钥和聚合公钥的长度(必须为 33 字节)。

4

更新注册表

调用 sBTC 注册表合约以更新密钥和地址。

只读函数

pubkeys-to-spend-script

生成多重签名的 p2sh 赎回脚本。

  • 参数:

    • pubkeys: (list 128 (buff 33)) - 公钥列表

    • m: uint - 所需签名数量

  • 返回: (buff 1024) - p2sh 赎回脚本

pubkeys-to-hash

计算 p2sh 赎回脚本的 hash160。

  • 参数:

    • pubkeys: (list 128 (buff 33)) - 公钥列表

    • m: uint - 所需签名数量

  • 返回: (buff 20) - 赎回脚本的 hash160

pubkeys-to-principal

从一组公钥和 m-of-n 阈值生成主体(Stacks 地址)。

  • 参数:

    • pubkeys: (list 128 (buff 33)) - 公钥列表

    • m: uint - 所需签名数量

  • 返回: principal - 生成的 Stacks 地址

pubkeys-to-bytes

将公钥列表连接成带有长度前缀的缓冲区。

  • 参数:

    • pubkeys: (list 128 (buff 33)) - 公钥列表

  • 返回: (buff 510) - 带长度前缀的连接公钥

concat-pubkeys-fold

将公钥缓冲区与长度前缀连接。

  • 参数:

    • pubkey: (buff 33) - 单个公钥

    • iterator: (buff 510) - 连接的累加器

  • 返回: (buff 510) - 更新后的连接缓冲区

bytes-len

返回字节缓冲区的长度作为单个字节。

  • 参数:

    • bytes: (buff 33) - 输入字节缓冲区

  • 返回: (buff 1) - 作为单个字节的长度

uint-to-byte

将 uint 转换为单个字节。

  • 参数:

    • n: uint - 输入数字

  • 返回: (buff 1) - 作为单个字节的数字

私有函数

signer-key-length-check

检查每个密钥的长度是否正好为 33 字节。

  • 参数:

    • current-key: (buff 33) - 要检查的公钥

    • helper-response: (response uint uint) - 用于错误处理的累加器

  • 返回: (response uint uint) - 更新的累加器或错误

常量

BUFF_TO_BYTE

将无符号整数值(0-255)映射到其对应字节表示的常量列表。

与其他合约的交互

  • .sbtc-registry:调用 get-current-signer-datarotate-keys 以管理签名者数据。

安全注意事项

circle-exclamation

最后更新于

这有帮助吗?