Skip to content
全部期权指南
比特币交易输出11 min read

比特币 OP_RETURN 详解:数据载体、nulldata 与不可花费输出

了解 OP_RETURN 如何在比特币输出中记录公开数据、为什么无法花费、Bitcoin Core 31.1 中继政策与共识的区别,以及它与 witness 铭文的不同。

本指南内容OP_RETURN 输出把数据放在锁定脚本里

简短摘要

OP_RETURN 是把公开数据附加到比特币交易输出脚本的一种方式。Bitcoin Core 将以 OP_RETURN 开头的输出视为可证明不可花费,并从 UTXO 集中排除。当前中继大小限制属于节点政策,并不是所有节点都必须遵守的共识 payload 上限。

OP_RETURN 输出把数据放在锁定脚本里

比特币交易输出由金额和锁定脚本 scriptPubKey 组成。通常称为 nulldata 的 OP_RETURN 输出以 OP_RETURN 操作码开头,后面可以推送一段字节。交易进入区块后,这些字节就作为输出的一部分公开记录。OP_RETURN 后的数据推送只是结构示意,并非一种独立的数据层、代币余额或私密消息。

为什么输出无法再次花费

OP_RETURN 是一种执行到它就会失败的操作码。若有人尝试花费以 OP_RETURN 开头的锁定脚本,脚本无法通过。Bitcoin Core 因而把这种输出标记为不可花费,并可立即不把它写入 UTXO 集,而无需保留一枚永远无法使用的币。可参阅 Bitcoin Core 31.1 的脚本实现。 Bitcoin Core script implementation.

脚本大小不等于 payload 长度

数据载体若受大小限制,计量的通常不是应用数据本身。原始输出脚本还包括 OP_RETURN 操作码、数据推送指令及长度编码。80 字节 payload 可能需要 83 字节脚本:1 字节操作码、2 字节 OP_PUSHDATA1 头部、再加 80 字节数据。旧钱包指南中的“80 字节”常指 payload,而新设置可能按完整脚本计数。

Bitcoin Core 31.1 的数据载体默认政策

Core 31.1 默认启用 -datacarrier,-datacarriersize 默认值为 100,000 字节,并按同一笔交易中所有数据载体输出的原始 scriptPubKey 总大小计量。多个 NULL_DATA 输出共用这个额度,且包括操作码和推送编码。Core 30.0 将旧的 83 字节脚本额度改为 100,000 字节聚合额度并允许多个数据输出;31.1 保留了该默认值。详见 Core 31.1 节点选项、策略实现 与 30.0 发布说明。

无文字概念图:左侧输出数据流在屏障处终止,右侧输入见证数据流进入区块链
对比输出端的 OP_RETURN 数据与输入端的 witness 数据;两者位于不同交易字段并采用不同规则

中继政策与共识规则回答不同问题

节点可自行关闭数据载体中继或调低本地大小限制;其他节点或软件版本可能使用不同设置。因此,一个节点拒绝把交易放入 mempool,通常只表示它不愿按本地政策中继,并不自动表示交易违反共识。Bitcoin Core 在标准性检查中应用数据载体额度;区块验证则检查交易和区块是否符合共识。 Core consensus transaction checks. See Bitcoin Core 31.1 mempool standardness implementation.

不可花费输出金额会损失,手续费另行计算

给 OP_RETURN 输出指定金额后,该金额无法取回,通常会被视为销毁;钱包常把它设为零。它不会自动变成矿工手续费。手续费仍是输入金额总和减去所有输出金额总和。数据脚本的字节会占用交易重量,并可能提高按 sat/vB 计算的手续费。参阅比特币交易手续费指南。

多个数据输出不能重复使用额度

Core 31.1 可接受多个标准 NULL_DATA 输出,但它们的脚本大小会累计到单笔交易的同一额度。把 payload 拆成多个输出不会扩大额度,额外输出还会增加交易数据与区块重量。最终是否中继仍取决于节点的交易重量、手续费及其他标准性政策;一个钱包或浏览器接受了交易,不代表整个网络都会转发。

OP_RETURN 与 Taproot witness 铭文不同

OP_RETURN 数据位于交易创建时的输出 scriptPubKey 中。SegWit witness 则按输入单独序列化;BIP 141 将 witness 字段描述为输入堆栈数据。Taproot 脚本路径花费可在输入 witness 中揭示脚本与控制块。Ordinals 软件可以按应用约定解释该脚本中的铭文格式,这与 nulldata 输出不同。参见 BIP 141 和 BIP 341,以及[比特币 Ordinals 指南](/learn/bitcoin-ordinals-inscriptions-satoshi-numbering-witness-data-explained)。

使用数据载体前检查设置、金额与隐私

先确认所依据的 Bitcoin Core 版本和本地选项,再核算完整输出脚本长度、交易总重量、不可花费输出的金额及矿工手续费。共识不会赋予任意 payload 业务含义;协议或接收方是否识别数据格式也要另外确认。写入链上的内容是公开的,不应存放密码、个人信息或需要保密的文件。了解输出和找零的价值结构,可看比特币 UTXO 与 coin control 指南。

常见问题

Q1比特币共识是否把 OP_RETURN 限制为 80 字节数据?

不是。80 字节是旧标准性政策示例中的 payload 数值,并非普遍的共识上限。Bitcoin Core 31.1 默认按数据载体原始脚本总大小使用 100,000 字节额度,各节点也可修改政策。

Q2更大的 OP_RETURN 会提高交易手续费吗?

可能会。脚本字节会增加交易重量,因此在相同 sat/vB 下手续费可能更高。输出中额外指定的 sat 会另外损失,不是矿工手续费。

Q3OP_RETURN 与 Ordinals 铭文是同一种数据吗?

不是。OP_RETURN 在输出脚本中并使该输出不可花费。常见 Taproot 铭文把内容放在输入 witness 的脚本路径数据里,由 Ordinals 软件依自身约定解析。

资料来源与延伸阅读

报告问题

我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈

快速检查

读完指南后,用 3 道题检查一下

问题 1 / 3

问题 01

Bitcoin Core 31.1 的默认 -datacarriersize 测量什么?

选择答案即可查看解释

期权术语表