比特币 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 发布说明。

中继政策与共识规则回答不同问题
节点可自行关闭数据载体中继或调低本地大小限制;其他节点或软件版本可能使用不同设置。因此,一个节点拒绝把交易放入 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 铭文不同
使用数据载体前检查设置、金额与隐私
先确认所依据的 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 道题检查一下
问题 01
Bitcoin Core 31.1 的默认 -datacarriersize 测量什么?
选择答案即可查看解释