跳转到正文
buybitcoinsmart

术语表 /交易与手续费

空数据交易

又称数据载体交易、OP_RETURN 交易、null data transaction、OP_RETURN。

空数据交易是什么?
空数据交易携带一个存储短消息而非资金的输出,该输出被标记为可证明无法花费,因此节点可以将其从可花费币集合中丢弃。

早在有安全的方式之前,人们就想把内容写入区块链。这种安全的方式是以 OP_RETURN 开头的输出:一旦有人试图花费它,就会立即失败,因此全节点可以把它从内存中丢弃,而不必永久追踪。几乎所有此类输出都包含零聪,发送方只需为字节数付费。

运作方式

空数据输出是一种永远无法被满足的锁定脚本,这正是其目的所在。

脚本以 OP_RETURN 操作码开头,后面跟一个数据推送。由于操作码一旦执行到就会中止脚本,任何签名组合都无法解锁该输出,节点可以不把它放入内存中保存的未花费输出集合。这个集合是全节点需要维护的高成本部分,把无用数据挡在集合之外,就是这一功能的全部理由。

Bitcoin Core 在2014年3月发布的0.9.0版本中,将单个此类输出设为标准,载荷上限为40字节。2015年,数据上限提高到80字节,计入操作码和推送前缀后,节点将其计为83字节的脚本。2025年10月发布的30.0版本取消了默认限制,也取消了每笔交易只能有一个此类输出的限制,此前围绕中继策略是否应当设法阻止数据存储,曾有一场漫长而火药味十足的争论。Bitcoin Knots 保留了更严格的默认设置,因此使用最广泛的两种节点实现如今是有意不一致的,节点运营者通过选择软件来选择立场。

这一变化是策略变化,而非共识变化。OP_RETURN 输出中的数据一直是有效的;争论始终只在于普通节点是否应当转发它。

在哪里会遇到它

在区块浏览器中查看任何一个区块,您都会发现空数据输出,其数值显示为零,脚本显示为 OP_RETURN 后接十六进制内容。

最早的重度使用者是 Omni Layer,即在比特币上发行第一版 Tether 的协议,它以这种方式编码指令。OpenTimestamps 等时间戳服务将文档的哈希提交到一个输出中,因此您日后可以证明该文档在该区块之前就已存在。Runes 是在2024年4月20日减半区块上线的代币协议,它把全部指令集放入单个空数据输出,因此该区块及其后的区块中充满了此类输出。

对购买比特币的人来说,实际影响是间接的,但确实存在。数据输出与您的付款争用同一区块空间,一波集中出现的数据输出会推高您确认交易所需支付的手续费率。这就是近几年大多数手续费飙升背后的机制。

空数据交易 vs OP_RETURN

OP_RETURN 是一个操作码;空数据交易则是恰好包含使用该操作码的输出的一整笔交易。阅读节点配置时,这一区别很重要,因为 Bitcoin Core 的设置是以交易类别而非操作码命名的:-datacarrier 决定此类交易是否被中继,-datacarriersize 设定载荷的大小上限。在文档中搜索 OP_RETURN 找不到这些选项。

空数据交易 vs 铭文

铭文把数据放在完全不同的地方。序数铭文将其载荷藏在 taproot 见证脚本中,该脚本享有 SegWit 的权重折扣,可达数兆字节;而空数据输出按完整权重计费,历史上上限为80字节。这种价格和大小上的差异,解释了为什么图像和收藏品以铭文而非 OP_RETURN 数据的形式出现,也解释了为什么两者引发的关于区块链膨胀的争论大相径庭。

请勿混淆

常见问题

向 OP_RETURN 输出发送比特币会损失资金吗?

会,而且无法找回。放入空数据输出的任何价值都会被销毁,因为任何人都永远无法满足该脚本。钱包通常会把金额设为零,因此只有在有人手动构造交易时才会发生这种情况。

比特币交易能以这种方式存储多少数据?

这取决于您所依赖的节点。从2015年起,Bitcoin Core 将载荷上限定为80字节,直到2025年10月发布的30.0版本取消了默认限制。Bitcoin Knots 保留了原有的上限,因此整个网络的中继已不再统一。

接着阅读

相关术语

交易与手续费中的更多术语

阅读本页英文版