Time:2022-06-29 Click:319
侧链作为比特币的扩展和功能扩展机制的想法是一个非常古老的概念。一种基本的侧链“祖先”思想,合并开采链,甚至可以追溯到中本聪消失之前。
该提议只是由同一组矿工开采两条完全独立且不相关的链的想法,无法在链之间移动任何东西。最初的侧链提案是在 2014 年由许多人在论文发表一周左右后继续创建 Blockstream 的。基本思想是能够让硬币在主比特币区块链和其他侧链之间来回移动,当你将硬币从一条链发送到另一条链时,使用简单的支付验证 (SPV) 证明来证明事情是有效的。由于围绕链重组实施的复杂性、盗窃的可能性和采矿中心化的风险,这从未实现(所有这些都可以在第 4 节中阅读比特币白皮书)。
侧链的 Peg 机制可以有两种方式,一种方式和两种方式。含义应该很明显——在双向锚定中,硬币可以在母链和侧链之间来回移动,而在单向锚定中,它们只能从父链移动到侧链而不能向后移动。目前,在比特币上实施的双向侧链挂钩的唯一形式是通过联合共识,这意味着挂钩由一组受信任的“托管人”保证,他们控制着多签钱包中挂钩到侧链的资金,直到它们被撤回。
然而,人们继续致力于其他非联合侧链钉的设计。在这里,我将以 Ruben Somsen 的 Spacechain 提案为例。它是一种使用盲合矿设计的单向挂钩机制,类似于Paul Stztorc的。这意味着硬币只能进入侧链而永远不会离开,并且矿工不必运行新软件来获得挖掘侧链的补偿(但是,正如我稍后将介绍的那样,他们可以通过这样做获得更多收益)。
空间链提案
合并挖掘要求矿工运行比特币链和他们正在挖掘的任何其他链的节点,以便为两条链编译块并在他们正在挖掘的比特币块头中提交它们。盲目合并挖掘利用了这样一个事实,即在现实中,比特币矿工只需要在他们的比特币区块中提交另一条链的区块头,其他人实际上可以不厌其烦地为另一条链拼凑区块。
Somsen 为此提出的机制可以利用ANYPREVOUT (APO) 允许任何人进行公开竞争,以便能够竞争构建下一个侧链块,同时保证每个比特币主链块只能提交一个块。鲁本提议的另一个好处是它不需要特定的软分叉来实现部署空间链的可能性。Eltoo/ANYPREVOUT 被提议为闪电网络带来好处,支持灵活的状态链以及通道工厂。空间链只是启用 ANYPREVOUT 铺平道路的许多事情的另一种可能性。
他的盲目合并挖掘提议的总体思路是,通过使用 APO,您可以预定义一长串交易,这些交易将相同的初始 UTXO 输入其中并承诺始终重新创建它。因此,想象一个单一的 satoshi UTXO,每个预先创建的交易保证在确认时重新创建相同的 UTXO 作为输出。可以把它想象成一种标记,这个特殊的 UTXO 是一个标识符,任何查看比特币主区块链的人都可以知道,“这是我找到对侧链 X 块的承诺的地方。” 但是,这留下了一个问题:矿工费。如果必须以相同的数量重新创建该 UTXO,则没有资金来支付费用。
这可以通过利用SIGHASH_SINGLE(来自输入的签名仅对单个输入和相应的输出进行签名)和SIGHASH_ANYONECANPAY(人们可以自由地添加额外的输入和输出而不会使签名无效,只要输入/输出使用SIGHASH_SINGLE 保持原样,以不使该签名无效)。然后任何人都可以添加输入并更改输出以支付交易的矿工费用。
这也是用于提交到侧链块的块头的机制。与 Taproot 通过使用树的 Merkle 根调整普通公钥来提交不同支出条件的树的方式相同,任何人都可以使用侧链块的块头哈希调整普通公钥。然后,侧链节点可以通过指向主链中交易的指针来显示和中继该区块头,以证明它实际上是被开采的。从那里,侧链节点将进行所有正常的验证,以确保侧链块遵循适当的共识规则,并像在主链上一样在侧链网络上中继实际块。
如果主链上用于提交侧链区块的交易之一被用于提交无效区块,甚至完全是垃圾数据,那么当侧链节点看到链上使用的提交交易时,可能会发生两种情况:一,无效块将在侧链网络中传播,当它未能通过验证检查时,它将被孤立;或者二,数据永远不会被泄露,在这种情况下,下一个侧链区块将建立在最后一个实际泄露的区块之上并提交,未泄露的提交将被忽略。第二种可能性遵循与主链相同的最长链逻辑,因此即使后来透露了一些东西,它仍然会因为未来的区块没有建立在它之上而成为孤儿。
但仍然存在双重支出的问题。任何拥有用于生成标记 UTXO 的私钥的人都可能双花任何一个用于提交到侧链块的预定义交易,并从那时起使整个集合失效。
这是通过将签名实际插入到 UTXO 本身的锁定脚本中来解决的。这锁定了输入和输出的签名,保证在使用它的下一个交易中重新创建标记 UTXO。因为该签名将在使用 UTXO 时自动传递和检查,所以不可能简单地将其替换为另一个并将其花费到不同的目的地。
这留下了最后一个悬而未决的问题。理论上,将多个交易连续提交到一个比特币区块中是可能的,这样大量的侧链区块就被矿工确认在一个主链区块中。这可能被滥用来拒绝服务攻击侧链网络。
为了解决这个问题,可以在标记 UTXO 脚本中插入一个 CHECKSEQUENCEVERIFY (CSV) 相对时间锁,以保证在单个给定主链块内只能确认使用标记 UTXO 的一个交易。