Spacechains:这个新的比特币侧链提案如何运作

源节点: 1544330

Spacechains 是一种拟议的比特币侧链,它提供了一种利用盲合并矿场设计的单向挂钩机制。

侧链作为比特币的扩展和功能扩展机制的想法是一个非常古老的概念。侧链的一种基本“祖先”思想, 合并开采的链,甚至可以追溯到中本聪消失之前。

该提案的想法只是两个完全独立且不相关的链由同一组矿工开采,并且无法在链之间移动任何东西。这 原始侧链提案 该论文于 2014 年由许多人创建,他们在该论文发表一周左右后创立了 Blockstream。基本思想是能够让硬币在主比特币区块链和其他侧链之间来回移动,当您将硬币从一条链发送到另一条链时,使用简单的支付验证(SPV)证明来证明事情是有效的。由于链重组实施的复杂性、盗窃的可能性以及挖矿集中化的风险(所有这些都可以在第四节中阅读),这一目标从未实现。 比特币白皮书).

侧链的挂钩机制可以有两种,一种是单向的,另一种是双向的。含义应该是显而易见的——在双向挂钩中,代币可以在母链和侧链之间来回移动,而在单向挂钩中,它们只能从母链移动到侧链,而永远不会返回。目前,在比特币上实施的双向侧链挂钩的唯一形式是通过联合共识,这意味着该挂钩由一组值得信赖的“托管人”保证,这些“托管人”保持对多重签名钱包中挂钩侧链资金的控制,直到资金被撤回。

然而,人们仍在继续研究非联合侧链挂钩的其他设计。在这里,我将以 Ruben Somsen 的 Spacechain 提案为例。这是一种单向挂钩机制,采用盲合并地雷设计,类似于 保罗·史托克的。这意味着币只能进入侧链而永远不会离开,并且矿工不必运行新软件来获得侧链挖矿的补偿(但是,正如我稍后将介绍的那样,他们可以通过这样做获得更多收益)。

太空链提案

合并挖矿要求矿工运行比特币链和他们正在挖掘的任何其他链的节点,以便编译两条链的区块并将其提交到他们正在挖掘的比特币区块头中。盲目合并挖矿利用了这样一个事实:实际上,比特币矿工只需要在他们的比特币区块中提交另一条链的区块头,其他人实际上可以不厌其烦地将另一条链的区块放在一起。

Somsen 提出的机制可以利用 任何预留 (APO)允许公开竞争,任何人都能够竞争构建下一个侧链区块,同时保证每个比特币主链区块只能提交一个区块。 Ruben 提议的另一个好处是,它不需要特定的软分叉来实现部署空间链的可能性。 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 的交易。

总的来说,它看起来像这样: 

来源

还值得注意的是,该设计的两种变体可以使用 CHECKTEMPLATEVERIFY (CTV) 来实现,或者根本不需要任何更改。这两种设计变体只是具有次优的权衡。

CTV 变体将使用该功能来使用 CTV 而不是 APO 来提交交易链,并进行黑客攻击,包括 UTXO 锁定脚本内的签名。 CTV 承诺花费 CTV UTXO 的交易的所有输出,但除了自身之外,它不承诺任何输入。

这意味着您可以向 CTV 交易添加输入,但不能添加输出。因此,您可以像 APO 设计中一样自带费用,但不能向侧链区块头添加承诺。

所以,我们这里需要做的是创建一个完全在CTV交易链外的交易,以便侧链承诺创建一个刚好足以支付CTV交易费用的UTXO(因为你无法在CTV交易中创建新的找零输出)该交易中,您添加的输入 100% 用于费用),并且在准备费用 UTXO 的交易内,我们承诺侧链区块头。因此,第一步:创建付费输出的交易和对侧链区块头的承诺。第二步:我们获取费用输出并将其添加为 CTV 交易的输入,确认后,“挖掘”我们特定的侧链区块。这个变体看起来像这样:

来源

下一个变体仅使用预签名交易。它今天就可以部署,但由于脚本功能的限制,它要求创建空间链的人预先支付所有交易费用。

交易链以单个 UTXO 开始,并在链中创建两个输出。第一个输出是标记 UTXO,它表明交易链与特定空间链相关,第二个输出是小价值 UTXO,任何人都可以公开使用,允许将另一个输入/输出附加到它。第二笔交易是任何人都可以公开承诺成为第一个花费空间链交易链的第二笔输出的地方,并使用它来提交到他们的侧链区块头。

在 CTV 变体中,必须在二级交易中提交侧链区块,因为 CTV 不允许在花费 CTV 锁定的输入的交易中添加新输出。此变体需要使用辅助交易,因为如果您向预签名链添加任何新的输入或输出,您将更改交易的 TXID 并使该交易之后的所有预签名交易无效。这个变体看起来像这样: 

来源

最后一个变体的一个缺点是,如果预签署用于侧链区块承诺的所有交易的人不删除用于执行此操作的私钥,则他们可以通过双花当前标记 UTXO 来有效地停止链时间。

现在你就得到了它。这是比特币侧链设计的最新提议,它可以通过三种不同的方式实现,但明显需要注意的是,现在可以完成的实现路径存在要求某人删除私钥的问题。

本文只是自 2014 年最初设计以来针对比特币发布的主要侧链设计提案系列文章中的第一篇。其余的请留意。

这是 Shinobi 的客座帖子。 所表达的观点完全是他们自己的观点,不一定反映 BTC Inc 或比特币杂志的观点。

时间戳记:

更多来自 比特币杂志