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 計算甚麼?

選擇答案即可查看解釋

期權術語表