Babylon 质押交易脚本

文章探讨了Babylon如何通过Taproot升级实现BTC的隐私交易与智能合约扩展,涉及TimeLockScript、单多签脚本和MAST在BabylonBTC质押交易中的运用。
摘要由CSDN通过智能技术生成

Babylon BTC Staking

Babylon 的质押交易本质就是一笔BTC的交易,不过这笔交易是基于Taproot 的 Script 的交易

Taproot

Taproot是比特币网络的一次重大升级。这一升级在2021年11月激活,旨在提升比特币隐私性,提高交易效率,并扩展比特币的智能合约功能。
下面是Taproot升级的主要特性:
提升隐私性:不论是复杂的智能合约还是简单的比特币转账,所有这些操作在链上看起来一样。这降低了区分不同交易类型的可能性,提高了隐私性。
优化存储和带宽:通过另一种公钥和签名的方式(Schnorr签名),Taproot升级可以有效减小交易的数据量,这就降低了存储和网络传输的负担。
扩展智能合约功能:Taproot包含了对Merkle抽象语法树(MAST)的实现,这使得比特币能够创建更复杂的智能合约,而且不同于现有的支付到脚本哈希(P2SH)交易,MAST允许用户按需选择性的公开部分脚本,提高了隐私性和效率。
改进灵活性:Taproot的设计让未来的升级更具灵活性,容易添加新的功能。

Babylon BTC 质押的锁定脚本

下面主要描述Taproot通过MAST构建一笔包含多脚本的交易,以Babylon BTC 质押交易为例
当前Babylon 质押所使用到的锁定脚本

  • TimeLockScript

OP_CHECKSIGVERIFY OP_CHECKSEQUENCEVERIFY

  • SingleSigScript

OP_CHECKSIGVERIFY

  • MulSigScript

OP_CHECKSIGADD … OP_CHECKSIGADD threshold OP_GREATERTHANOREQUAL OP_VERIFY

Babylon质押交易的三个锁定路径

  • TimeLockPathScript:当达到指定的锁定高度以后,staker 可以花费此输出
    使用TImeLockScript
  • UnboundingPathScript:staker 主动解质押,script 包含两个锁定脚本
unbondingPathScript := aggregateScripts(
  stakerSigScript,
  covenantMultisigScript,
)
stakerSigScript:staker 的单签名锁定脚本
covenantMultisigScript:convenant 委员会的多签
  • SlashingPathScript: 罚没的脚本,由Babylon 节点监控,自动发起;该脚本包含三个锁定脚本
slashingPathScript := aggregateScripts(
  stakerSigScript,
  fpSigScript,
  covenantMultisigScript,
)
stakerSigScript:BTC 质押者的单签脚本
fpSigScript:finality provider 的多签脚本,staker 可以质押到多个finality provider,多签阈值是  1
covenantMultisigScript: convenant 委员会的多签,阈值从babylon节点获取

由于质押交易是需要通过Script Path(非 Key Path)来解锁,所以Key 就可以取任意值,BIP341 文档中给的值为

0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0

Babylon 也默认使用该值作为internal pubkey

MAST 构建脚本的方式

构建
三个锁定脚本全为叶子节点,从叶子节点开始,逐渐构建二叉树如下:

在这里插入图片描述

实际的交易输出地址为:

  • outputkey = txscript.ComputeTaprootOutputKey(internal_pubkey,S[:])
    address = btcutil.NewAddressTaproot(schnorr.SerializePubKey(outputKey), net)

  • 输出脚本为:
    pkScript = txscript.PayToAddrScript(taprootAddress)

  • output为:
    output = wire.NewTxOut(int64(stakingAmount), taprootPkScript)

花费
以A = TimeLockScript 路径验证,则需要提供 3 个witness

  1. staker sig
  2. TimeLockScript
  3. ControlBlock
    ControlBlock 需要包含一下内容

验证时需要满足通过 ControlBlock + TimeLockScript + internal_pubkey 能够重新计算出 outputkey
比较outputkey 与从 output 地址中获取的 outputkey 是否一致,若不一致则验证失败,交易失败
如一直,则将TimeLockScript 作为验证脚本,将staker sig 压入栈中,根据TimeLockScript验证栈中信息,直至验证完成。

注:当前交易构建的方式就满足了隐私性,通过交易的输出output并不能识别出任何有效信息,包括脚本信息,所以此种情况下也必须完全记录所有脚本的情况,忘记构建时的脚本就意味着该输出无法被花费

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值