取消 OP_RETURN 数据限制的这个事情这两天在 Bitcoin Core 的 PR #
32359# 下吵翻天了。
中文社区里似乎关注不多,但有必要记录和讨论一下这个事情。
0/背景起因
事情起因是开发者 Peter Todd 提交了这个 PR (https://t.co/mChCbLgyPQ),因为认为目前的 OP_RETURN 限制 80 字节没太大意义,因为想提交的人总可以想办法绕过去。所以在这个 PR 里可以看到,是删除掉了默认的 80 字节限制。而且 PR 里同时还直接删除了自定义配置选项(-datacarrier 和 -datacarriersize),相当于也断了节点希望能自主配置的后路。
1/支持意见
支持者认为现有限制无效,因为可通过直接提交矿工 mempool(如 MARA Slipstream)或者无限制节点实现(如 Libre Relay)来绕过。
比如,目前已知的最大一笔 OP_RETURN 输出是 79,870 字节
https://t.co/zskrwg2DCD
还有这种用 OP_RETURN 把链当成留言板的。也有工具来帮忙打包上链(https://t.co/yNSnZeZhss),只要你愿意支付 fee(比特币上不叫 gas!见一次说一次)
https://t.co/0frBGpHf7S
https://t.co/lIlf9CVYg5
所以支持者的意见是,既然绕不过去,也就别防君子不防小人了,我们直接去掉,可能还能和矿工多激励相容一些。
2/反对意见
反对意见也很直观和明确:这样会更加助推各种非交易数据写在链上,挤占原有给交易的空间,推高交易成本,把空间留给了其他 shitcoin。
但可能有朋友会奇怪:“既然能绕过去么?那节点限制还有用么?”
有用。这也是反对的基础之一。
3/共识规则
要回答这个问题,还是要从 OP_RETURN 以及它所涉及的“共识规则”、“节点策略”说起。
OP_RETURN 的意思就是“返回”,从当前脚本执行中退出掉。也因此,脚本在后面写什么数据也都像代码注释一样,所以这笔交易实际是不可花费的,所以一般这笔输出金额都是 0。
而脚本里施加是否能花费的条件,是属于共识规则层面,所有节点都必须遵守的。
4/节点策略
但节点能做的也不少,因为节点自身可以决定怎么去处理拿到的交易数据。
最典型的就是这次讨论的核心——上链前:在区块打包前对于这笔交易是否能在 P2P 网络里传播做限制。Bitcoin Core 以前就是对于大于 83 字节的 OP_RETURN 交易不去传播,但如果在新的区块里存在这类交易,因为符合共识规则,那么节点也会承认这笔交易有效而链不会分叉。
但上链后,节点也可以有所作为,比如自动丢弃 OP_RETURN 附带的数据,降低自身的存储开销。
在比特币里你可能没法兼济天下(软硬分叉),但你完全可以独善其身(节点策略)。
5/可能会有什么影响
支持(ACK 或概念 ACK)、反对(NACK)都各自有支持的观点,是不是真的会被合并到 Bitcoin Core 的代码库中尚不确定。但如果合并了可能会有哪些影响?
好的影响来看,如支持者所说可能能给矿工潜在带来收入。
但矿池真的喜欢么?我个人无责任猜测可能也会比较复杂,一方面如果区块空间竞争的越激烈,矿工和矿池的收入应该会更多;但另一方面,对于矿池提供的非标准交易打包的服务不算利好,因为这些交易可以在网络中更广泛的传播,而不需要使用以前的“独家”服务了。
另外可能利好的是各类想用 OP_RETURN 的“比特币生态”项目,例如 Runes 和最近的 Alkanes,以及其他一些侧链项目等。
但负面影响则绝对是对 Bitcoin-only 用户的区块空间的挤占。
所以如果这个 PR 通过了而实在不喜欢这么简单粗暴的取消限制又该怎么办呢?我的答案是可以选择另一些仍然有限制的客户端 Bitcoin Knots,或者在安全的前提下运行老版本即可(https://t.co/GSBuF1y1D6) 。
就算不合并,这次也启发了我可能是要对 Bitcoin Core 的角色进行重新审视,以及个人该改用哪种全节点了。
如之前 Antoine Poinsot 的一系列文章所述,Bitcoin Core 的优先级不明确。我理解是需要在安全补丁(工程实现)、节点策略(会对网络造成事实影响)、共识规则(影响软分叉)几个方面不断权衡,那么可能选择一个更符合自己理念的客户端会是更优决策。
但这也并不是对开发者的指责。毕竟就像以前 Shinobi 所述,开发者和你并不是劳务雇佣关系,而且你总是去点右上角的 fork。
相关链接
- https://t.co/Di3cDnTBRE
- https://t.co/0frBGpHf7S
- https://t.co/yNSnZeZhss
- https://t.co/3Be0N40zsU
- https://t.co/tGi5etaYpt