作者:Shinobi [SHI256]

来源:https://medium.com/block-digest-mempool/my-worries-about-too-generalized-covenants-5eff33affbb6

在比特币领域,限制条款就是让你能够人为限制一个 UTXO 可以花费在哪里的脚本或功能。一般来说,限制条款的定义是:

“通常是正式、严肃、有约束力的约定:合约。”

限制条款可以应用到一切事物上,例如,为冷存储金库带来额外的安全性、执行二层的安全模型等等。因此,在分析我眼中的“风险点”之前,我们先来介绍一些即将上线的限制条款构造技术。这些限制条款只是增加了效用,我没有看出它们带来了任何全局风险。

ANYPREVOUT/eltoo

ANYPREVOUT 的高明之处在于,可以让用户无需通过交易 ID(TXID)和输出索引引用特定的 UTXO 即可为一笔交易包含一个输入。当你要将一个输入包含到一笔交易内时,你必须通过交易 ID 指向创建该输入的那笔交易、用交易的输出索引号指明你要使用哪个输出。ANYPREVOUT 可以帮你免去这一操作。这使得你可以将原先的输入替换成同一个签名匹配的其它输入(同时脚本和金额都不变)。

闪电网络使用 ANYPREVOUT 的方式很巧妙。你先构建一笔交易(触发交易)来为 ANYPREVOUT 输出提供资金,然后构建第二笔交易(承诺交易)来花费这笔资金,但只是又一次创建了相同的输出(你应该使用新的输入来支付交易费)。背后的构想是,如果发送到链上的交易就是最新交易,等时间锁窗口期结束后,你可以将第三笔交易(结算交易)上链,用来结算支付通道的余额。但是,如果有人将过时的承诺交易上链怎么办 ?有了 ANYPREVOUT,最新的承诺交易可以花费过时的承诺交易,而且得益于 eltoo 的构造,只有新的承诺交易能够花费过时的承诺交易。因此,一旦最新的承诺交易得到确认,就能确保结算金额正确无误,不会产生惩罚。

ANYPREVOUT 也可以利用上述替换逻辑来构建金库,让已经花费的交易能够在短时间内回滚。对于冷存储设置来说,这是一种非常有用的安全机制。

最后,你可以创建一长串预定义交易,只用来通过 ANYPREVOUT 反复重新创建相同的 UTXO。这对于承诺到其它数据集和确保只达成一笔承诺交易的应用帮助很大(因为你可以追踪单个交易链,查看其它输出承诺了什么数据)。Ruben Somsen 的 Spacechain 构想就采用了这一方案。这里我想要强调的是,无论从何种意义上来说,这对于一般经济活动而言没有任何帮助,因为一串预定义的交易链只会一遍又一遍地反复创建相同的 UTXO,此举本身就没有任何意义。

OP_CTV

OP_CHECKTEMPLATEVERIFY 是一个非常有趣的提案。它可以让你订立一个有效限制条款,在共识层面上限制使用 OP_CTV 锁定的 UTXO 只能花到你定义的地方。完全由你定义。你还可以将交易链接到一起,先创建一个用 OP_CTV 锁定的输出,然后花费这个输出创建另一个用 OP_CTV 锁定的输出,以此类推。OP_CTV 之所以能做到这一点,是因为它将你想用来花费某 UTXO 的交易的哈希值加入到了该 UTXO 的脚本中,从而该交易就变成了花费该 UTXO 的唯一方法。

OP_CTV 有很多用途。创建一个 UTXO 来确保成千上万用户能够提现成功,这在链上确实需要一些时间来处理,但是无法被更改或阻止。在手续费高峰期,OP_CTV 对于托管式交易所来说是绝佳选择。它还可以用来创建通道工厂的一个变种,可以打造很安全的冷存储金库,甚至可以用来打造无需交互即可收款的闪电网络通道。

但是,我又要强调一点,OP_CTV 实际上无法用来锁死用于一般交易的比特币。你无法预先知道自己的所有交易,因此你无法通过 OP_CTV 来保护原本打算自由使用的比特币。你能预知的情形是有限的。因此,使用 OP_CTV 锁定的交易链条必然会终结,创建不受 OP_CTV 锁定的 UTXO。

风险

上述两个构想全都无法真正对整个比特币系统构成系统性风险。它们增强了可编程性和功能,可以用来扩展二层协议并提高安全性。它们提供了一种相比全局规则集更能严格锁定比特币的方式,但是从逻辑上来说,这种更为严格的控制最后必定会走向终点。但是……一般来说,过于泛化的 限制条款绝对会构成系统性威胁。上述两个方案都需要确切知道你想让比特币流向何处,直到限制条款结束后再还其自由。如果我有一个不需要知道这些的限制条款呢?

想想 Blockstream AMP(资产管理平台)。这个基于 Liquid 区块链的工具可以让资产发行方在 2/2 多签钱包中发行自己的资产,由资产发行方和资产所有者各持一把私钥。其目的是让发行方能够遵守监管要求,例如,只允许特定人员持有资产,在批准交易之前审查交易是否存在法律问题等等。问题在于,这不是一个共识规则,而是一个应用层流程。私钥有可能遭到泄露,法律法规有可能更改,资产有可能会在不改变全局共识的情况下离开“围墙花园”。

但是,如果你可以使用限制条款来满足类似的需求呢?如果我可以构建一个比特币脚本来让名义上的所有者和政府都能使用各自的私钥来花费里面的 UTXO 呢?如果这个脚本同样可以在 不预先定义名义上的所有者**私钥 的情况下限制其 UTXO 只能发送给 类似的脚本 呢?这个脚本无所谓所有者的私钥是什么,只在乎政府的私钥是不是包含在脚本内,是不是能够花费脚本中的 UTXO。

除非进行硬分叉,否则这些比特币在共识层面上将永远无法逃离这个系统。

如果这个脚本被锁定到某个私钥,另有签名证明某个身份认证机构已经将现实世界的身份与这个脚本相关联,并批准了该脚本。如果这些比特币一直被这个脚本锁住,只能发送给其它“身份已获许可”的私钥呢?

如果交易所开始将比特币存入这类脚本呢?如果机构这些做呢?一旦一些币被锁到了这样的脚本里,离开这样的脚本的唯一办法就是硬分叉。再见了,可互换性。

矿工

51% 攻击。我敢肯定,大多数读者心里想的是“谁在乎呢,比特币到那时都已经崩溃了,你还在说什么呢?将比特币锁进这么愚蠢的限制条款,这种白痴只能自求多福了。抱歉,问题在你。”

非也,51% 攻击不一定会导致比特币彻底崩坏。除非出现大规模的全球协作攻击,否则 51% 攻击的成本极其高昂,而且攻击者最终只能做两件事:

  • 只要攻击方有雄厚的经济实力持续发动攻击,就能审查交易

  • 通过重组区块来撤销已确认交易

除非能够永远持续下去,否则 51% 攻击不会“摧毁”比特币,只会扰乱它。但是,如果你引入能够启用永久限制型脚本(就像我在上文提到的那样永远无法逃脱)的泛化限制条款类型……好吧。如果你用 51% 攻击来胁迫用户将比特币转移到这类限制条款内呢?除非进行硬分叉,否则这些比特币永远都无法从限制条款中逃脱。如此一来,51% 攻击就变成了一种针对比特币供应量的全局系统性攻击,会产生永久影响。当攻击结束时,这种影响也不会消失,而是永恒存在。唯一的解决办法就是硬分叉(祝好运)。

我认为,凡是能够让 51% 攻击的结果永久化(而不是暂时出错)的东西都是愚蠢的,心怀恶意的参与者会利用这种攻击来永久分化比特币的供应量,同时破坏可替代性和隐私性。

最后,我还想说的是,千万别忘了 Chain Anchor。(如果你还没有听说过它,请阅读原文。)

(完)