本文档详细介绍了 Babylon 比特币质押协议的交易规范,定义了质押、解绑、罚没和提现四种核心交易类型。通过对比特币 Taproot 脚本路径的深入设计,阐述了如何利用时间锁和协调员委员会多签机制来实现比特币的去中心化质押与安全保障。
Babylon BTC Staking 协议将 Bitcoin 转变为一种质押资产,旨在将该资产及其持有者引入 Bitcoin Supercharged Networks (BSN) 生态系统和 Babylon Genesis 链(第一个 BSN)。
Bitcoin 持有者可以通过在 Bitcoin 网络上使用特殊的交易锁定其 BTC 来进行质押。一旦锁定,该 Bitcoin 将为选定的受保护 BSN 提供经济安全性,从而为质押者开启新的机会,例如赚取质押收益。
本文档规定了 BTC 质押协议中涉及的交易结构。这些交易必须符合定义的格式,并提交特定的 Taproot 脚本。这些脚本中的值受 Babylon Genesis 链定义的参数以及质押者的选择所管辖。
⚡ 有关检索 Babylon Genesis 参数和注册有效质押交易的信息,请参考 注册 Bitcoin 质押文档
Bitcoin 质押协议交易规范在很大程度上基于 Bitcoin 的 Taproot 升级,该升级引入了 Schnorr 签名。
Bitcoin 质押协议涉及以下利益相关者:
<StakerPk>)进行标识。
⚡ 质押者公钥不需要与质押交易的 UTXO 出资者匹配。出资 UTXO 可以源自任何来源,包括多重签名、MPC 或阈值控制的账户。
<FinalityProviderPk>)进行标识,并参与特定 BSN 的最终性投票轮次。选择 Finality Provider 也隐式地确定了他们所保护的 BSN,因为每个 Provider 只能保护一个 BSN。Bitcoin 质押者通过在质押脚本中包含其 EOTS 密钥来指定他们选择的 Finality Provider。
⚠️ 目前,只能选择一个保护 Babylon Genesis 链的 Finality Provider。未来的协议版本将支持更多的 BSN,并允许 BTC 质押者委托给保护这些网络的 Provider。
CovenantPk1..CovenantPkN 标识)的作用是保护 BSN 免受来自 BTC 质押者和 Finality Provider 的攻击。它通过表现为一个与 BTC 质押者共同签署 BTC 交易的 M-out-of-N 多重签名来实现这一点。通过共同签名,Covenant 委员会在质押的 Bitcoin 上强制执行花费规则,使其只能以符合协议的方式被花费。共同签名发布在 Babylon Genesis 链上,是质押激活的先决条件。Covenant 委员会无法采取不利于质押者的行动,除非拒绝其质押请求。⚠️ 质押脚本不得包含重复的密钥。
StakerPk、FinalityProviderPk和每个CovenantPk的公钥在单个质押中必须是唯一的。
Bitcoin 质押协议定义了四种关键交易类型:
下图显示了上述交易如何创建和花费不同的 Bitcoin 输出:
stateDiagram-v2
active: Staking 输出
unbonding: Unbonding 输出
state stake_slashing <<fork>>
state unbonding_slashing <<fork>>
burn_staking: 销毁地址输出
change_staking: 找零输出
burn_unbonding: 销毁地址输出
change_unbonding: 找零输出
[*] --> active: Staking 交易
active --> unbonding: Unbonding 交易
unbonding --> [*]: Unbonding Withdrawal 交易
unbonding --> unbonding_slashing: Slashing 交易
unbonding_slashing --> burn_unbonding
unbonding_slashing --> change_unbonding
change_unbonding --> [*]: Withdrawal 交易
active --> [*]: Staking Withdrawal 交易
active --> stake_slashing: Slashing 交易
stake_slashing --> burn_staking
stake_slashing --> change_staking
change_staking --> [*]: Withdrawal 交易
Staking 输出是一个只能通过脚本花费路径进行花费的 Taproot 输出。关键花费路径通过使用“Nothing Up My Sleeve”(NUMS)点作为内部密钥而被禁用。使用的 NUMS 点是 BIP341 中定义的:
H = lift_x(0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0)
该点是通过对 secp256k1 基点 G 的标准未压缩编码作为 X 坐标进行哈希处理而得出的。
Staking 输出可以通过以下三条脚本路径之一进行花费:
<StakerPK> OP_CHECKSIGVERIFY <TimelockBlocks> OP_CHECKSEQUENCEVERIFY
字段:
<StakerPK> 是 BTC 质押者的公钥。<TimelockBlocks> 定义了资金承诺保持锁定状态的 Bitcoin 区块数量。此持续时间从 Staking 交易在 Bitcoin 区块中确认后开始。
要求:
65535。Unbonding 路径: 此路径允许质押者在时间锁到期之前按需解锁其 Bitcoin。
<StakerPk> OP_CHECKSIGVERIFY
<CovenantPk1> OP_CHECKSIG <CovenantPk2> OP_CHECKSIGADD ... <CovenantPkN> OP_CHECKSIGADD
<CovenantThreshold> OP_NUMEQUAL
字段:
StakerPK 是 BTC 质押者的公钥。CovenantPk1..CovenantPkN 是按字典顺序排序的 Covenant 委员会公钥,如 Babylon Genesis 参数中所定义。CovenantThreshold 是一个 Babylon 参数,指定需要多少个 Covenant 委员会成员签名。它在 Babylon Genesis 参数中定义。此路径通过要求 Covenant 委员会法定人数的签名,防止在没有符合协议的 Unbonding 情况下立即提现。
Slashing 路径: 此路径用于在质押委托给的 Finality Provider 被证明发生双重签名时,罚没质押资金。
<StakerPk> OP_CHECKSIGVERIFY
<FinalityProviderPk> OP_CHECKSIGVERIFY
<CovenantPk1> OP_CHECKSIG <CovenantPk2> OP_CHECKSIGADD ... <CovenantPkN> OP_CHECKSIGADD
<CovenantThreshold> OP_NUMEQUAL
字段:
StakerPK 是 BTC 质押者的公钥。FinalityProviderPk 是质押委托给的 Finality Provider 的公钥。
⚡ 目前,仅支持单个 Finality Provider。一旦启用多重质押,脚本将被修改以容纳更多 Finality Provider。
CovenantPk1..CovenantPkN 是按字典顺序排序的 Covenant 委员会公钥,如 Babylon Genesis 参数中所定义。CovenantThreshold 是一个 Babylon 参数,指定需要多少个 Covenant 委员会成员签名。它在 Babylon Genesis 参数中定义。此路径只能在 BTC 质押者、Finality Provider 和 Covenant 委员会的协作下执行。质押者需要提交一份花费 Slashing 路径的预签名,以便其质押被接受。需要 Covenant 签名是为了防止不符合协议的提现。有关注册质押程序的更多详细信息,请参阅 注册 Bitcoin 质押文档。
⚡ Unbonding 路径和 Slashing 路径之间的关键区别
主要区别在于 Slashing 路径中存在
<FinalityProviderPk>,这具有以下影响:
- 为了使质押请求生效,BTC 质押者必须在质押请求中包含一个有效的(未签名的)Unbonding 交易。只有当 Babylon Genesis 链收到由 Covenant 委员会签署的
CovenantThreshold个签名时,它才会生效。由于 Unbonding 路径不包括<FinalityProviderPk>,质押者可以随时退出,而无需 Finality Provider 的同意。- 相比之下,Slashing 路径确实包含
<FinalityProviderPk>,并且需要质押者和 Covenant 模拟委员会的CovenantThreshold共同预签署的 Slashing 交易才能生效。这确保了需要 Finality Provider 的配合来防止罚没,但执行罚没时不需要其配合。如果 Finality Provider 行为不当,其密钥将被暴露,并可用于执行罚没。
Unbonding 输出是一个只能通过脚本花费路径进行花费的 Taproot 输出。关键花费路径通过使用“Nothing Up My Sleeve”(NUMS)点作为内部密钥而被禁用。使用的 NUMS 点是 BIP341 中定义的:
H = lift_x(0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0)
该点是通过对 secp256k1 基点 G 的标准未压缩编码作为 X 坐标进行哈希处理而得出的。
Unbonding 输出可以通过以下两条脚本路径之一进行花费:
<StakerPK> OP_CHECKSIGVERIFY <TimelockBlocks> OP_CHECKSEQUENCEVERIFY
字段:
<StakerPK> 是 BTC 质押者的公钥。<TimelockBlocks> 定义了 Unbonding 时间。它必须等于 Babylon Genesis 参数中为 Unbonding 定义的值。<StakerPk> OP_CHECKSIGVERIFY
<FinalityProviderPk> OP_CHECKSIGVERIFY
<CovenantPk1> OP_CHECKSIG <CovenantPk2> OP_CHECKSIGADD ... <CovenantPkN> OP_CHECKSIGADD
<CovenantThreshold> OP_NUMEQUAL
字段:
StakerPK 是 BTC 质押者的公钥。FinalityProviderPk 是质押委托给的 Finality Provider 的公钥。
⚡ 目前,仅支持单个 Finality Provider。一旦启用多重质押,脚本将被修改以容纳更多 Finality Provider。
CovenantPk1..CovenantPkN 是按字典顺序排序的 Covenant 委员会公钥,如 Babylon Genesis 参数中所定义。CovenantThreshold 是一个 Babylon 参数,指定需要多少个 Covenant 委员会成员签名。它在 Babylon Genesis 参数中定义。⚡ Unbonding 输出中的 Slashing 路径
Unbonding 输出中 Slashing 路径的存在确保了在 Unbonding 期间,如果 BTC 质押者委托的 Finality Provider 发生双重签名,该质押者仍可能被罚没。
Slashing 退款输出在发生罚没的情况下,将质押资金的非罚没部分退还给质押者。它是一个提交到以下时间锁脚本的输出:
<StakerPK> OP_CHECKSIGVERIFY <TimelockBlocks> OP_CHECKSEQUENCEVERIFY`
字段:
<StakerPK> 是 BTC 质押者公钥。<TimelockBlocks> 定义了资金在可访问之前保持锁定状态的时间。设置此时间锁是为了确保 Slashing 路径不会被恶意用于比 Unbonding 时间更快地检索剩余资金。它必须等于 Babylon Genesis 参数中定义的 Unbonding 时间值。
- 原文链接: github.com/babylonlabs-i...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!