以「标准」方式在比特币中存储数据在比特币中添加「数据」的标准方式是调用 OP_RETURN 操作码。比特币开发人员注意到,人们通过大额多位交易将数据(如比特币白皮书)存储在UTXO中。这样做的问题是,这个数据集是不可修改的,而且会随着时间的推移而增长。另一方面,OP_RETURN 输出是可修改的,不会增加UTXO的臃肿。下面是2014年3月 0.9.0 发布说明中有关这方面的摘录:关于 OP_RETURN:关于0.9中的OP_RETURN功能和区块链中的数据,社区中存在一些混淆和误解。这一变更并不是对在区块链中存储数据的认可。OP_RETURN 的更改创建了一个可证明的可修改的输出,以避免数据存储方案(其中一些已经部署)将任意数据(如图像)存储为永久不可消耗的TX输出,从而导致比特币的UTXO数据库臃肿。在区块链中存储任意数据仍然是个坏主意;在其他地方存储非货币数据成本更低,效率更高。Bitcoin Core的大部分工作都集中在确保在有人试图滥用Bitcoin Core来存储数据的情况下,该系统仍能以去中心化的方式按照预期目的运行。Bitcoin Core一直都不鼓励这样做,因为它不是用来存储图像和数据的,而是用来在网络空间中传输数字货币的。为了激励人们不做傻事,OP_RETURN 交易并没有被定为非标准交易,因此它们可以被同行和矿工转发,但有一个注意事项:他们只能推送40个字节(后来增加到80,83个字节,我猜是为了支持更大的Root Merkle哈希值,因为这是 OP_RETURN 唯一合理的使用情况)。比特币还添加了一个名为-datacarriersize 的选项,它限制了你从这些输出中转发或挖掘的总字节数。为什么Ordinals在技术上是一种欺骗行为Ordinals通过 OP_IF 块内的 OP_PUSH 将数据伪装成比特币脚本程序数据,从而绕过了数据载体大小的限制。Ordinals不使用 OP_RETURN,不受数据载体大小限制,因此节点运行者和矿工目前对他们希望转发并包含在区块中的数据的总大小控制有限。Luke的Bitcoin Core分叉版有一些对抗这种垃圾邮件选项,所以我们希望很快也能在Bitcoin Core中看到这些选项。Ordinals还利用了Segwit v1(见证人折扣)和v2/Taproot(无任意脚本大小限制)中的功能。每项功能的引入都有其有趣且合理的原因。Segwit v1的目的是降低许多输出的成本,这有助于减少UTXO集合的大小。Ordinals利用这一折扣,将Monke Jpegs伪装成比特币脚本进行存储。请记住,比特币不是用来存储数据的,所以只要比特币开发者不小心让数据中转变得便宜和容易,那么这就应该被视为一种漏洞。希望它能被修复,或者至少为节点运行者提供打击这种垃圾邮件的工具。我们何去何从这个故事有趣的地方在于,人们似乎很看重比特币区块链上存储的图片,他们愿意支付一定费用将其放入区块中,所以非意识形态的矿工和不关心比特币健康和去中心化的人很乐意支付或收取费用,然后继续前进。数据不应该有折扣,如果人们想要存储数据,就应该支付全价。他们应该使用Op_return和哈希值,比如Opentimestamps或其他合理的协议来存储比特币中的数据。通过以上分析,我认为这是一个非常糟糕的数据垃圾漏洞,比特币开发者们应该研究解决方案。我很高兴看到像Luke这样真正关心网络健康和去中心化的开发者正在努力解决这个问题。

Reply to this note

Please Login to reply.

Discussion

No replies yet.