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 發行說明。

無文字概念圖:左側輸出資料流在屏障前終止,右側輸入 witness 資料流進入區塊鏈
比較輸出端 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 計算什麼?

選擇答案即可查看解釋

期權術語表