查看原文
其他

比特币质押101系列文章——巴比龙比特币质押合约


在本文中,我们将基于上一篇文章介绍的技术背景来逐步解释如何构建巴比龙无需信任且自我托管的比特币质押合约。



1. 对于上一篇文章的回顾

2. 锁定

3. 罚减

     3.1. 简易版罚减

     3.2. 增加烧毁销毁

     3.3. 启用安全委托机制

     3.4. 增加原子罚减机制

     3.5. 启用部分罚减机制

4. 再质押

5. 安全的按需解绑

6. 总结


1. 对上一篇文章的回顾

为了使比特币成为一个有效的质押资产,它首先应具备可罚减和可锁定的特性,同时还具有可罚减的解除质押期限,并且可以委托。


比特币一般用 UTXO 来表示。比特币持有者可以拥有多个UTXO,并使用BTC脚本在不同的UTXO上指定不同的花费条件。


BTC支持的Schnorr签名算法具有以下属性:

1)如果使用相同的随机数来签署两条不同的消息,则签署者的私钥是可被提取的。这使得该私钥成为一个潜在的EOTS(可提取的一次性签名)算法,可以防止双重投票行为。


2)BTC支持的Schnorr签名算法使adaptor signature发挥作用,即为了花费由两个人共同拥有的UTXO,第二个人需要通过解密第一个人的adaptor signature来获得第一人的Schnorr签名。但这样做会导致第二个人的Schnorr私钥可被提取。Adaptor signature因此阻止了第二个人花费该UTXO。


现在,让我们假设一个名为Alice的质押者想要质押1个比特币。为此,她需创建一个价值1个比特币的UTXO,并通过比特币脚本指定其花费条件。这实际上是一个质押合约。我们将逐步构建它,为了方便检索,我们会为我们构建的每个版本标注版本号。


2. 锁定


为了实现锁定,Alice可以简单地对她的质押UTXO设置一个时间锁定:



在上述合约中,Alice将她的比特币锁定了1000个比特币区块(大约一周的时间)。在时间锁定到期后,只有Alice才能花费它。


这个简单的条件为质押者提供了一个有保障的安全退出途径。即使世界上其他网络都掉线了,只要比特币网络正常运行,Alice就可以拿回她的1个比特币。

3. 罚减

3.1 简易版罚减


为了实现罚减,Alice需要创建一个Schnorr密钥对作为她的EOTS密钥对 [eots_secret_key, eots_public_key]。然后她在质押合约中创建一个新的花费条件,并将eots_public_key放在那里:



现在,Alice可以使用这对EOTS密钥对提供验证证明。例如,Alice在高度为1000的PoS链-X上进行投票:


1)Alice生成一对 [secret_nonce, public_nonce]。

2)Alice预先公开声明,在链-X的高度达到1000,这个public_nonce是唯一可以验证她投票的nonce。这样,没有人会接受她使用其他nonce对签名的投票。

3)一旦Alice验证了区块高度1000,她就会使用上述secret_nonce和eots_secret_key来对该区块进行签名,并将签名发布出去以进行投票。

4)公众可以使用Alice的eots_public_key和预先声明的public_nonce来验证投票。


现在,如果Alice想作恶,并希望在区块高度1000时对链-X 分叉攻击,她将必须使用相同的secret_nonce和eots_secret_key为另一个区块1000进行投票。如果有人看到她的两次投票,就可以解密她的eots_secret_key,并使用上述条件-2来取回Alice的1个比特币,Alice将被成功罚减。


总的来说,上述合约和预先声明的要求,使得我们有可能实现一种可以对抗双重投票的机制。如果Alice在任何验证过程中存在双重投票,她的1个比特币就会被罚减。


“等一下,这个机制有很多漏洞!”你可能会很快意识到这点。别着急,这只是开始。

让我们继续探讨并一起修复它。

3.2 增加烧毁机制

合约V1的一个重大问题是,罚减条件只需要Alice的EOTS签名。因此,Alice可以随时通过这个条件提取她的1个比特币,以规避罚减。

为了解决这个问题,我们必须确保当质押UTXO通过罚减条件被花费时,质押的比特币只能被发送到预先定义的烧毁地址,而不是发送给Alice。一个最简单的烧毁地址是0000...0000;没有人知道相应的密钥,因此该地址中的资金是无法被花费的。

还记得在上一篇文章中的提到的Alice的妈妈吗?她确保了在时间锁定到期之前,Alice只能将她的比特币发送给她的爸爸?同样的机制也适用于这里。


在此,我们在罚减条件中添加了一个契约委员会,这是一个M/N多重签名。这意味着只有当至少N个委员会成员中的M个同意时,UTXO才可以被花费。


为了保证被罚减的资产被发送的这个烧毁地址,契约委员会只需签署一个将Alice的1个比特币发送到预定义销毁地址的罚减交易。这样,Alice就无法提取她的1个比特币来规避罚减。因此,委员会的成员应该从那些不希望Alice规避罚减的群体中选择,比如PoS系统的基金会。


事实上,由于罚减条件需要Alice的EOTS密钥,除了强制销毁地址之外,


- 契约委员会无法对Alice采取任何行动:

- 契约委员会无法窃取Alice的质押;

- 契约委员会无法让Alice被错误地罚减。因为如果Alice是诚实的,除了Alice自己,没有人能知道她的EOTS密钥。


因此,Alice根本不需要信任契约委员会。即使契约委员会想不公平地制裁她,也无法伤害到Alice。契约委员会唯一能做的就是帮助Alice以她自己的方式取回她的质押。


3.3 启用安全委托机制


委托看起来很简单。Alice可以在罚减条件中放入第三方验证者的EOTS公钥。这样,如果验证者作恶,Alice就会被罚减。


然而,从Alice的角度来看,这样的委托并不安全。被委托的验证者和契约委员会可能会勾结起来窃取她的比特币。


这个问题很容易解决。Alice可以像上一篇文章中的妈妈一样,通过将自己的普通公钥(而不是EOTS公钥)也添加到罚减条件中来对抗验证者和契约委员会。Alice只需要预先签署一个将她的1个比特币发送到预定义销毁地址的罚减交易,这样委托的验证者和契约委员会就没有办法勾结以窃取她质押的比特币。



现在我们已经完成了对于质押合约罚减条件的探讨。通过在罚减条件中包括三组签名(质押者、验证者、契约委员会),并要求质押者和契约委员会只签署罚减资金被发送到烧毁地址的罚减交易,这样就可以确保:


- 没有人可以窃取Alice的质押;


- 如果Alice或她委托的验证者作恶,她的质押会被罚减;


- 如果Alice或她委托的验证者是诚实的,她的质押永远不会被罚减;


- 当发生罚减时,质押只能发送到预定义的销毁地址,而不能被提取。


你可能会想说,“还是觉得好像哪里不太对劲…” 

是的,你很敏锐!还有最后一部分我们需要一起来探讨:原子罚减。


3.4 增加原子罚减机制


在已委托的情况下,一旦Alice和契约委员会设定了预先授权,触发罚减条件所需的唯一签名就是被委托的验证者的签名。如果验证者变得不可靠,并与Alice产生矛盾,验证者可以简单地签署罚减交易并将其发送到比特币网络,让Alice独自被罚减。不会影响其他委托给这个验证者的质押。


Adaptor signature 在这里就能起到重要作用。Alice可以进一步使用被委托的验证者的EOTS公钥对她的签名进行加密,并使用生成的adaptor signature作为她的预授权。这样,为了针对Alice,验证者将不得不使用自己的EOTS私钥解密adaptor signature,这将导致该验证者的EOTS私钥被提取。一旦私钥被提取,所有委托给该验证者的质押都会变得可罚减,包括验证者自己的质押。因此,实现了原子罚减。


我们还可以要求契约委员会签署adaptor signature。这样,即使Alice无法生成adaptor signature(比如,由于缺乏钱包支持),也可以实现原子罚减。



3.5 启用部分罚减


在执行罚减时,烧毁所有质押听起来很可怕。幸运的是,许多PoS系统支持部分罚减,其中仅对每个质押的一小部分进行罚减,其余部分将返还给质押者。


退款会有延迟,以减少重新进入的攻击。当罚减比例很小时,这种攻击最为常见。也就是说,恶意的质押者可以将罚减机制作为退出的一种方式来取回资金,然后立即再次作为质押者重新进入系统,并再次发动攻击。延迟退款将大大减少此类攻击。


在比特币质押中启用部分罚减很简单。罚减交易不是只有一个输出将整个质押发送到销毁地址,而是可以有两个输出:一个将质押的一部分发送到销毁地址,另一个将剩余部分在预先锁定的时间之后返回给Alice。


以下是一个示例,其中罚减的百分比为10%,退款延迟为500个比特币区块。在500个比特币区块后,Alice 可以取回 0.9 个比特币。0.01比特币的余额是交易费用。



4. 再质押


再质押意味着Alice(或她委托的验证者)可以使用她的1个比特币同时参与多个PoS系统。如果Alice(或她委托的验证者)攻击其中任何一个系统,她将会被罚减并被从所有系统中移除。


一个简单的解决方案是,Alice(或她委托的验证者)使用相同的EOTS密钥参与所有她感兴趣的PoS系统。这样就实现了再质押的罚减目标,而不需要改变质押合约。然而,这样做是极不安全的,验证者社区强烈不建议这样做,因为单个密钥的意外泄露将危及该验证者参与的所有 PoS 系统中的所有委托质押。


因此,每个验证者应该为每个不同的PoS系统使用不同的EOTS密钥。例如,如果三个验证者验证四个PoS系统,那么应该有12个EOTS密钥。


这样一来,对于Alice来说,再质押就变成了简单地选择一个EOTS密钥来重新参与她想要再质押的每个PoS系统。要实现这一点,我们只需要将质押合约中的EOTS密钥字段从接受一个密钥扩展到接受一个密钥列表,并指定只要任何一个密钥完成签署,就满足了EOTS条件。



5. 安全的按需解绑


我们的上一篇文章(系列第二篇)解释了为了使质押安全地解绑,需要有一个解绑期,在此期间,质押必须仍然被锁定且可被罚减。


为了实现这一点,我们需要将Alice当前的质押(具有较长的时间锁定)转换为一个新的质押(其时间锁必须等于一个较小的固定时间锁),并请求Alice预先签署相对应的新的罚减交易。


此外,为了执行上述正确的解绑,我们需要向质押的UTXO添加第三个花费条件(解绑条件),其中需要Alice和契约委员会的签名。


更具体而言:

1)为了准备解除绑定,Alice将创建一个解除绑定交易(unbonding transaction),通过这个新的第3个条件花费原始的质押UTXO。这个解绑交易有一个新的质押UTXO,其时间锁定等于一个固定的解绑期限,且罚减条件与原始质押相同。

2)然后,Alice创建一个新的罚减交易,花费新的质押UTXO。

3)Alice公布解绑交易、罚减交易以及她对罚减交易的预授权。

4)契约委员会将审核上述信息,并签署解绑交易和新的罚减交易。

5)当Alice想要执行解绑时,她签署解绑交易。由于Alice和契约委员会的签名都已存在,Alice可以将解绑交易提交给比特币网络以执行解除绑定。

6)在较短的时间锁定到期后,她可以提取她的比特币。



6. 总结


哇哦!真的很多内容需要消化,但我们做到了!我们构建了一个合约,将比特币转化为一种一流的质押资产,其具有所有人们希望的质押资产的属性:无需信任、自我托管、可锁定、可罚减(包括部分罚减和原子罚减)、可委托、可再质押和可按需解绑!






关注巴比龙Babylon中文

官网:https://babylonchain.io/

Telegram: https://t.me/babyloncommunityzh

Discord: https://discord.gg/babylonglobal

推特:@babylon_zh

















继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存