作者:Shinobi

来源:https://bitcoinmagazine.com/technical/federated-sidechains-bitcoin-original

联盟侧链是当前唯一一种已经有部署案例的比特币侧链(最新的论文可见此处)。使用联盟化锚定机制和共识系统的想法,最初只是侧链白皮书的一个附录。由于当时没有能够引入矿工的可靠双向锚定设计,所以联盟锚定被认为是一种能够立即让侧链得到部署的方式,并且,等到某些得到正确设计的东西变得安全可部署,它就可以使用简易支付验证(SPV)升级成双向可验证锚(就像 softchains 一样)。还需要指出的是,从激励的角度看,对很小的系统来说,使用一种基于矿工的锚定机制可能是危险的,因为他们可以偷走非常小的一个群体的钱,而不会触怒广大比特币社区的大部分人。联盟侧链对比较小的系统来说是有用的,因为用户团体可能很小,不足以阻止矿工欺骗基于矿工的锚定机制。

联盟侧链的大体思路是,在主链上,一群预先选定的受信任参与者使用多签名合约来托管用户存入侧链的比特币,并且由这些参与者来生产侧链的区块、使用密码学密钥来签名而不是使用工作量证明来为区块附加合法性。整个安全模型都基于联盟中有大量的差异化参与者存在,他们在地理上非常分散而且身份公开透明。

联盟侧链在托管比特币和区块签名上都使用阈值机制,比如 5-of-7 的多签名。选择这样做而不是要求全体签名,是为了平衡这种系统的两种主要风险:盗窃用户资金和联盟成员私钥丢失。联盟成员勾结就可以偷走所有锁定在侧链中的资金(假如他们真的这么说的化),这就是为什么说整个安全模式都基于许多成员分散在不同的法律辖区。你肯定希望政府们合起伙来逼迫联盟搞事情的难度尽可能高、可能性尽可能小,所以你希望需要签名的人越多越好。但反过来,要是你要求任意操作都需要所有 7 个成员的签名,那么只要某个成员的私钥丢失,就会导致侧链中的所有资金都丢失。因此我们要求大部分成员都签名,但不必所有成员都签名。这为联盟成员私钥丢失留出了一些余量,同时保持了为盗取用户资金需要强迫或勾结的成员数量。

这使得系统的安全模型在安全阈值上是双向的。如前所述,在我们假设的情境中,为了盗取资金,7 个成员中必须有 5 个串通或被迫串通,才能偷走侧链上的资金。但是,只要 3 个成员丢失、毁坏或被迫禁用自己的私钥,就能让侧链上的所有资金冻结、无法移动 —— 可能是永远无法再动。这些阈值是两种风险平衡的结果。

两者都需要足够高,才能让两种最坏的情形的发生概率尽可能低。

除了这些核心的属性,联盟侧链的实现有很高的自由度,不论是侧链自身的设计,还是处理区块签名和资金托管的密钥管理方案。

Liquid

Liquid 是比特币上部署的第一条联盟侧链,是为了交易所之间的隐私交易、发行别的资产(比如稳定币和证券代币)而设计的。它的代码几乎完全是建立在比特币自身代码的基础上的。Liquid 网络的一个核心特性是 “机密交易”,这个功能使用密码学的范围证明来隐藏交易的金额,而且在特定的假设下,依然能保证没有人能凭空花费不存在的钱。Liquid 也实现了 “机密资产”,是机密交易的延伸。除了数量,机密资产还隐藏了被花费的代币种类。

这两种功能为联盟侧链最大的短板之一 —— 审查 —— 提供了强大的解决方案。达到阈值的大多数成员(在我们这个假想的例子中,是 7 个成员中的 5 个)达成一致,即可审查某一笔交易或某一个 UTXO,比如他们怀疑或确认这些活动跟非法活动有关。在这种情况下,他们甚至有理性的动机去这么做,避免给政府理由叫停整个系统。机密交易/机密资产 可以提供足够高的隐私性,即使某个联盟成员有理由审查某种类型的交易,他们也很难把想审查的交易挑出来。

将资金锁进 Liquid 的操作相对比较简单,分成两步。希望进入侧链的用户先获得联盟的多签名地址,然后使用 pay-to-contract 技术,用自己控制的一个 Liquid 地址 “调整” 多签中的每一个公钥。当联盟成员发现某个 Liquid 地址有人使用之后,他们可以推导出调整后的公钥的私钥。在信息公开以前,没有人知道,甚至联盟成员自己也不知道,这笔发到调整后地址的交易是一笔将资金锁入 Liquid 的交易。然后,用户将该交易广播到主链上,等待 100 个区块确认。区块确认完之后,用户可以在 Liquid 网络中提交一笔交易,将币转给自己。这笔交易使用一个特殊的输入,包含了他们用来调整联盟成员公钥的 Liquid 地址、一个证明自己控制着这个地址的签名,以及证明存款交易在主链上已经获得至少 100 个区块确认的默克尔证明。

退出 Liquid 的流程甚至更简单。用户构造一笔交易,将 Liquid 上的比特币烧掉,使用 OP_RETURN 操作码包含一个在主链上接收资金的地址,以及一个从某一联盟成员(具体是谁是保密的)处取得的零知识证明。当联盟成员们看到这样一笔带有有效证明的交易之后,他们会在主网上签发退款交易。这种证明用来防止欺诈(非法取款),并允许提供证明的联盟成员实现白名单和取款限制。任何人都可以自由地将比特币锁入 Liquid 网络,但需要一个联盟成员的帮助才能从 Liquid 中退出。

至于密钥管理和安全性,Blockstream 公司开发了 “硬件安全模块(HSM)” 来处理密钥并执行签名操作。这些硬件设备保管用于区块签名和 存入/取出资金 的私钥,保证它们不被篡改和窃取。为了提供在设备出错、丢失私钥时候的复原工具,同时防止为恶意目的抽取私钥,每一个成员的私钥备份都是加密过的,只有成员自己和 Blockstream 一起,才能解密并导入新的一台 HSM 中。没有任何人能直接解密备份。对付私钥丢失的最后一道防线是 “紧急取款密钥”。联盟存放侧链资金的每一个地址都有两种花费路径:一种要求达到阈值的联盟成员签名;另一种是在 1 个月的时间锁之后,要求达到阈值的紧急密钥签名(这个时间锁的长度是可以改的)。这是第二组密钥,可以由联盟、其他人或两者的结合来保管,保证即使很多联盟成员私钥丢失,依然可以取回资金。联盟会定期移动主链上自己托管的资金,避免时间锁超时,只要联盟没有出错,紧急路径就永远不会被动用。当前,Blockstream 维护着地理上分散的复原密钥。

最后,还有一种功能叫做 “动态联盟”:联盟中的大多数可以为联盟增加或减少成员。这是通过对签名软件的软件升级来实现的,先是确定需要增加或删减的成员,然后是长达一个月的表态期,最后是软件升级。如果在一个月内,五分之四的区块都表示支持联盟的变更,网络就会 “分叉” 到使用新的联盟作为区块签名者。然后网络就会使用新的联盟和新的存款地址,但会将旧的存款地址保留 1 个月,以防止存入资金的交易因为联盟的变更而作废。而且,不能一次移除太多联盟成员,让剩下的成员无法从旧的地址中取款。所有这些联盟更新的侧链都是共识规则的一部分,由 HSM 来执行和验证。

Rootstock(RSK)

Rootstock 也是一条联盟侧链,但是跟 Liquid 有许多设计上的差异。首先,从功能上来说,它本质上是的以太坊的像素级复制。它完全支持 Solidity(以太坊所用的编程语言),所以部署在以太坊上的合约可以很容易移植到 Rootstock 上。这样做的理由是显然的:以太坊拥有最大的应用需求,可以发布比特币无法实现的功能。当然,以太坊的架构有许多缺点和风险,但你不能否认人们对它有需求。

架构上的另一个重大区别是联盟的角色 —— 在 Rootstock 中,他们集体管理托管资金的主链多签名地址,但正常情况下不会参与区块生产。RSK 的区块生产是比特币矿工通过合并挖矿来完成的,他们可以同时挖掘比特币和 Rootstock 链。虽然这并没有为锁入 Roostock 的比特币提供有意义的安全差异,但对发行在 Rootstock 上的其它资产是有意义的。只要足够多成员勾结,联盟总是能在主链上偷走比特币,但因为矿工才挖掘区块,所以 Rootstock 上的其它资产不受影响,依然可以转移。要是这些资产足够有价值,即使 Rootstock 上的比特币代币没有真实比特币的背书,它们可能依然有市场需求,因为人们还要用它们来给其它资产支付手续费、让矿工继续挖矿。

但是,矿工的参与并不是绝对的。只要大多数比特币矿工都挖掘 RSK,他们就在整体上控制了 Rootstock 区块链的交易排序,但如果参与的矿工比例降到了一半(或稍微再低一些),共识规则允许联盟签发区块检查点,来防止深于检查点区块的链重组。要是挖矿算力掉得太厉害,他们甚至可以成为区块签名者,就像 Liquid 的联盟一样。这是一个非常动态的系统,既可以没有矿工,也可以没有联盟,区块链依然能向前出块。

存款的流程也非常简单:将比特币发送到 RSK 的存款地址,等待足够多的区块确认即可。在足够多的确认之后,侧链上的一个 Solidity 合约会发现这笔交易,并给侧链上一个你的公钥(你所存入的 UTXO 的公钥)所控制的账户增加余额。取款的流程也由一个智能合约来控制,它会跟联盟的 HSM 沟通,联盟会签名由合约告知的主链取款交易。

在 Rootstock 最初发布的时候,退出侧链所需的只是联盟中多数成员 HSM 签名由侧链智能合约传回的交易。在 2020 年,他们实现了一种新的锚定机制,叫做 “POWPeg”。这个升级让 HSM 可以实际上验证来自矿工的 SPV 证明。现在,HSM 会拒绝签名退出交易,除非当前大多数的 RSK 矿工都在退出交易的后面继续挖矿。这个安全模型最终取决于 HSM 要保持安全,但除非大多数 HSM 都被篡改或被抽取出私钥,不然他们不会签名没有足够多 PoW 见证的退出操作。

结语

自 8 年前始,人们一直在设计侧链,而在我们 已经 讲过的 4 种(以及少数我们没有提到、只是获得了懂技术的比特币爱好者的关注的)不同设计中(中文译本分别为:123),当前只有联盟侧链是已经有部署案例的。联盟系统可能不是许多人想要的那种免信任的侧链,但依然是很有用的系统 —— 尤其是在只有信任某个托管商,才能满足市场需求的时候。联盟化马上就成了侧链分散托管商风险的默认升级手段。

好了,这就是联盟侧链的内核了。接下来是本系列的最后一篇文章,我们要历数当前所有重要提议的缺点和不足。至少,我们要想想,在 “完美” 的侧链中人们真正想要的是什么,以及如何可能实现它。

(完)