跳转到正文
buybitcoinsmart

术语表 /开发者参考

OP_RETURN

OP_RETURN 是什么?
OP_RETURN 是一种操作码,可使交易输出被证明无法花费,从而允许将少量任意数据写入区块链,而不会使有效币的集合膨胀。

任何人都无法花费脚本以0x6a 开头的输出,因此全节点会将其从必须随时备查的 UTXO 集中剔除。Bitcoin Core 0.9.0于2014年3月将此类输出设为标准输出,允许40字节,并在0.11.0中将有效载荷扩大至80字节。如果您只是购买并持有比特币,永远不需要自己创建这类输出,但您会通过手续费市场为他人创建的输出付费。

运作方式

脚本一执行到 OP_RETURN 就会立即失败。被这样锁定的输出无法被任何条件满足,而且与销毁地址不同:销毁地址是把币发送到一个无人持有密钥的哈希,而这里的不可花费性对软件来说是可见的,而不只是极有可能。这种可见性正是关键所在:节点会维护一份包含每一笔可花费输出的索引,凡是可以证明已失效的输出,就永远不必进入该索引。

构建此类输出的钱包会将其金额设为零,并把有效载荷放在操作码之后,通常作为一次数据推送。结果是一笔交易中既有一个向某人付款的普通输出,又有一个只携带字节、不含资金的第二个输出。

该操作码的第一个版本是一场灾难。2010年,输入脚本和输出脚本是连在一起执行的,而 OP_RETURN 会终止评估并报告成功,因此花费者只要把它附加上去,就能带走属于他人的币。当年的修复既将执行的两个部分分开,也把该操作码改成了无条件失败。四年之后,它才有了数据载体这一现代用途,当时开发者已经在把数据塞进节点永远无法修剪的伪造公钥中。

随后出现了转发限制,而这些限制都不是共识规则。Bitcoin Core 在版本0.9.0中推出了40字节的标准数据载体,于2015年7月在0.11.0中将允许大小翻倍至80字节,并规定每笔交易只允许一个此类输出。经过一场漫长而火药味十足的公开争论,版本30.0取消了默认的大小上限和单输出规则,理由是这些限制很容易被绕过,反而把数据推向了更糟糕的地方。Bitcoin Knots 保留了更严格的默认设置,节点策略上的这一分歧是当今比特币仍在持续的争议之一。

购买比特币时为何重要

没有人会要求您创建 OP_RETURN 输出,如果有网站让您向这类输出发送比特币,那就是诈骗:这类输出根本没有可供发送的对象。部分交易所和区块链会使用备注字段,但比特币的提币从不需要备注。

真正影响到您的是手续费。写入链上的数据与您的提币争夺同样有限的空间,其影响是可以衡量的。区块840,000于2024年4月20日被挖出,收取了约37.6个比特币的手续费,是迄今为止所有区块中最高的,原因是一个新的代币协议恰好在该区块高度激活,成千上万的人争相向其中写入数据。凡是当天下午恰好从交易所提币的人,都为此付出了数倍于当时通行水平的费用。

应对之道在于把握时机,而不是愤愤不平。手续费在一周之内就可能波动一个数量级,因此在安静的周末整合您的币、将其从交易所转出,或进行任何不紧急的转账,所需费用只是数据高峰期同一笔转账的一小部分。正因如此,值得优先选择允许您自行设定费率、而不是替您估算费率的钱包。如果您对这一策略问题有强烈看法,运行 Bitcoin Knots 而不是 Bitcoin Core 是表明立场的直接方式,因为转发策略由每个节点运营者各自决定。

实例:80字节的成本

最大尺寸的传统数据载体输出在网络传输中为92字节:8字节的金额字段(设为零),1字节的脚本长度,然后是83字节的脚本,由操作码、一条推送指令、一个长度字节和80字节的有效载荷组成。其中没有任何隔离见证数据,因此每个字节计为4个权重单位,共368个权重单位,即92虚拟字节。按每虚拟字节10聪计算,在计入交易其余部分之前,这笔输出的费用为920聪。

作为对比,一个普通的原生 SegWit 输出为31字节,即31虚拟字节,因此数据输出的费用是向某人付款的三倍。数据从来都不是免费的,手续费市场是比特币唯一的配给机制。

OP_RETURN vs 空数据交易

OP_RETURN 是操作码;空数据交易是 Bitcoin Core 对交易中一旦出现此类输出的整个交易模式的称呼。软件会在解码后的 JSON 中将该输出类型显示为 "nulldata",区块浏览器通常显示的就是这个字符串。这一区分虽小,却能避免一种常见的误解:空数据交易并不是不转移资金的交易。它几乎总是同时向某人付款,数据则附带在第二个输出中。

OP_RETURN vs 铭文

铭文根本不使用 OP_RETURN,这正是人们对比特币数据存储困惑不断的根源。2023年1月发布的序数方案将内容隐藏在一个永远不会被执行的 Taproot 脚本分支中,而该分支位于见证数据里,每个字节只占1个权重单位,而不是4个。实际后果是规模上的差异。OP_RETURN 的有效载荷在转发策略下十年来一直被限制在80字节,而单个铭文可以接近整个区块的大小,每字节的权重成本仅为四分之一。2024年4月推出的 Runes 则走了相反的路,有意将其协议消息编码在 OP_RETURN 中,因此关于比特币上数据的两场争论,其实是关于两种不同机制的争论。

请勿混淆

常见问题

我可以在比特币区块链上写入一条信息吗?

可以,在 OP_RETURN 输出中,且每个字节都按当前费率支付手续费。最大为80字节的旧式有效载荷会使您的交易增加约92个虚拟字节,大约是普通支付输出成本的三倍。

发送到 OP_RETURN 输出的币会永久丢失吗?

根本没有可发送的对象。这类输出创建时的金额为零,没有任何钱包允许您向其付款。如果某个网站要求您向 OP_RETURN 地址发送比特币,那就是诈骗,因为不存在这样的地址。

Bitcoin Core 真的取消了80字节的限制吗?

Bitcoin Core 30.0取消了默认的大小上限和每笔交易只允许一个输出的规则,而 Bitcoin Knots 保留了此前更严格的默认设置。这两项限制都从来不是共识规则,因此矿工始终可以自由地打包更大的数据。

铭文使用 OP_RETURN 吗?

不使用。铭文将内容存放在见证数据内一个不会被执行的 Taproot 脚本分支中,该部分按每字节1个权重单位计费,而不是4个。OP_RETURN 数据位于交易的非见证部分,每字节成本是前者的四倍。

接着阅读

相关术语

开发者参考中的更多术语

阅读本页英文版