sBTC 签名者
概览
停机问题 sBTC 签名者合约 (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)
函数流程:
验证签名阈值
确保证新的签名阈值有效(必须大于 50% 且≤ 总签名者密钥的 100%)。
验证调用者
验证调用者是否为当前的签名者主体。
验证密钥
检查每个新密钥和聚合公钥的长度(必须为 33 字节)。
更新注册表
调用 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-data和rotate-keys以管理签名者数据。
安全注意事项
访问控制:只有当前的签名者主体可以调用密钥轮换函数。
密钥验证:确保证所有提供的密钥长度正确。
签名阈值:强制执行最低阈值(超过 50% 的签名者)和最高阈值(100%)。
多重签名生成:提供用于安全生成多重签名地址的工具。
最后更新于
这有帮助吗?