把一段文字永久寫進比特幣區塊鏈,如今已經不稀奇。從 OpenTimestamps 的時間戳、代幣協議的發行公告,到第二層方案把狀態承諾錨定到主鏈,背後都用到同一個核心工具:OP_RETURN。它的原始設計是讓腳本「必定失敗」,結果卻成了最正式、也最被節點接受的鏈上資料寫入通道。更關鍵的是,這個通道的標準中繼規則並非一成不變——過去教學常提到的「資料上限 80 位元組、每筆交易只能有一個 OP_RETURN」等規則,本質上是節點的轉發政策,而非絕對的共識鐵律。理解具體用途邊界、節點政策演變與背後的費用與合規風險,比單純背誦某個固定數字更為重要。
OP_RETURN 是什麼:一個注定失敗的操作碼
比特幣腳本在執行時碰到 OP_RETURN,會立刻終止並標記為無效。它是被刻意設計成「必定失敗」的指令,核心用途就是讓某個輸出永遠無法被花費。當它被放入輸出腳本(scriptPubKey)時,運作機制展現出巧妙之處:輸出腳本只在有人嘗試動用該筆款項(作為後續交易的輸入)時才會執行。一個以 OP_RETURN 開頭的輸出,因為沒有人能提供讓其通過的解鎖腳本,這段腳本在當下交易確認時根本不會被執行,整筆交易在共識層面完全合法有效,而該輸出則正式成為不可花費輸出(unspendable output)。
早期比特幣網路並未對資料寫入設立專屬標準。在 2014 年 Bitcoin Core 0.9.0 發布之前,想要在鏈上記錄資料的開發者,往往使用「無效公鑰」、裸多簽腳本,或是將資料嵌入 P2SH 腳本中。這些做法帶來的嚴重後果是:這類輸出無法被節點識別為不可花費,會永遠滯留在未花費交易輸出(UTXO)集合中,對全節點造成長期的記憶體與儲存負擔。
不可花費輸出與 UTXO 集的關係
UTXO 集是比特幣節點驗證新交易時最核心的高速資料結構,通常需要常駐記憶體或高速固態硬碟中。每一筆未花費輸出的累積都會直接推高節點硬體門檻。OP_RETURN 從機制上化解了此難題:Bitcoin Core 節點在維護 UTXO 集時,會自動識別這類可證明無法花費的輸出並直接將其剔除,gettxoutsetinfo 統計的集合大小不會因為它而膨脹。核心開發者當年開放標準通道的考量正在於此:與其讓資料以偽造地址的形式污染 UTXO 集,不如提供一個明確標記為「此輸出不可花費」的通道。

然而,這項友善設計不等於零成本。寫入的位元組仍然要佔用區塊重量、必須支付礦工費,且會永久記錄在完整節點的區塊歷史中。這三項事實構成了後續所有的費用定價與政策爭議。
主要用途:從時間戳到狀態錨定
由於 OP_RETURN 的容量有限,實務操作普遍遵循「存證雜湊而非存放本體」的原則。以下是目前最常見的落地方式:
存在證明與時間戳
將文件或資料的 SHA-256 雜湊值(32 位元組)寫入 OP_RETURN,即可獲得比特幣工作量證明保障的時間下界。任何持有原始檔案的人,皆可獨立重算雜湊並比對鏈上區塊時間戳,證明檔案在特定區塊產出前即已存在且未遭篡改。知名開源協議 OpenTimestamps 更將此技術工業化:透過鏈下 Merkle 樹聚合數以萬計的雜湊,僅將單一 Merkle Root 寫入比特幣交易,極大化攤薄了單次存證的鏈上手續費。

技術核心守則在於「寫雜湊,不寫原文」。原文保存在鏈下安全環境,鏈上只留指紋。這不僅能大幅節省區塊空間手續費,更能避免在公開帳本上洩漏商業機密或隱私。
協議標記與資產發行
早期的 Omni Layer 與 Counterparty 是利用 OP_RETURN 的代表協議。它們在輸出中編碼自訂前綴與指令,標示資產發行、轉移或燃燒。比特幣節點本身不會驗證這些位元組的業務邏輯,而是由鏈下的專用索引器(Indexer)解析交易流水,構建出一套獨立的二層帳本。此外,建立在 Ordinals 銘文之上的 BRC-20 等標準,其資料主要封裝於 Taproot 的見證欄位(Witness),與傳統直接在 OP_RETURN 放置結構化指令的模式在費用結構與架構上有著本質不同。
狀態錨定與二層承諾
眾多側鏈、Rollup 或獨立區塊鏈會定期將區塊頭或狀態根(State Root)寫入比特幣交易中,利用 OP_RETURN 建立錨定點(Anchor)。這種機制借助比特幣龐大的算力防止歷史狀態被惡意回滾。在此架構下,OP_RETURN 扮演「公證承諾」而非檔案儲存層的角色,通常僅需 32 至 64 位元組即可滿足密碼學承諾的空間需求。
限制剖析:節點中繼政策與標準性規則
交易在共識層面合法,並不等同於能在 P2P 網路中被節點順利廣播。這是實務操作中最常見的瓶頸:標準交易規則(IsStandard 檢查)屬於各節點軟體的本地中繼政策,而非強制性共識規則。
歷史演進與 83 位元組腳本限制
2014 年 Bitcoin Core 0.9.0 引入中繼標準時,最初限制資料量為 40 位元組,隨後逐步放寬至 80 位元組。2022 年底,相關中繼參數計法出現調整:檢查標的由單純的「資料載荷」轉換為「整個輸出腳本(scriptPubKey)長度」,在預設設定下對應約 83 位元組的上限(扣除 OP_RETURN 與長度推送碼後,資料約 80 位元組)。長久以來,標準中繼規則亦限制每筆交易僅能包含一個 OP_RETURN 輸出。
政策演進與社群討論
隨著軟體更新,Bitcoin Core 社群針對 -datacarrier 與相關參數(包括載荷大小與輸出數量限制)的預設行為展開了廣泛辯論。一方觀點認為,中繼政策不應過度干預合規交易的市場化手續費競爭,應交由礦工決定打包優先級;另一方則擔憂放寬限制會導致區塊空間被非金融資料佔據,進一步推高常規轉帳手續費。社群儲存庫中關於中繼政策的提案與反覆檢討,突顯出節點經營者在「自由市場交易」與「抑制區塊膨脹」之間的長期博弈。開發者在廣播特定交易前,務必查驗目標廣播節點的當前標準性設定。
容量、成本與空間競爭
OP_RETURN 輸出的計費遵循常規交易規則,以虛擬位元組(vB)為基準。一筆標準交易即使只攜帶 32 位元組的雜湊,整體交易大小(含輸入、找零及簽章)通常也落在 150 至 200 vB 之間。依據 mempool.space 等鏈上監控數據,在鏈上銘文與資料寫入需求激增的尖峰時段,費率曾顯著攀升,導致低費率存證交易長時間無法打包確認。
| 寫入方式 | 所在位置 | 費率權重計算 | 對 UTXO 集影響 | 節點過濾難易度 |
|---|---|---|---|---|
| OP_RETURN | 交易輸出腳本 | 按完整權重(4 權重單位/位元組)計費 | 完全不進入 | 容易(輸出標記明確) |
| 見證資料寫入(如銘文) | 隔離見證欄位 | 享受見證折扣(1 權重單位/位元組) | 完全不進入 | 困難(混合於簽章結構中) |
不可逆轉性與法律合規邊界
資料一旦進入比特幣主網,具備不可篡改與永久公開的特性。這一工程特性若未經審慎評估,極易轉化為法律合規風險:
- 不可修改與撤回:打錯的雜湊或無效指令無法在原交易中修正,只能發布新交易重新宣告,舊資料永遠留存。
- 個人隱私保護挑戰:公開帳本與全球個人資料保護法規存在張力。以香港為例,香港個人資料私隱專員公署(PCPD)在探討新興技術與區塊鏈應用時明確指出,既有《個人資料(私隱)條例》(PDPO)依舊完全適用。上鏈資料無法刪除的特性,直接衝擊條例中有關資料保留期限與刪除權的要求。即使是低熵雜湊(如未加鹽的手機號碼或身分識別碼),亦可被輕易暴力彩虹表還原,企業絕不可直接將未處理的個資上鏈。
- 金融與代幣化監管:若資料寫入涉及代幣發行或穩定幣資產錨定,機構需遵循相應監管框架。香港金融管理局(HKMA)針對穩定幣發行人監管的諮詢與指引中,對管治架構與反洗錢(AML)提出了明確要求。頻繁攜帶未經審核資料的鏈上地址,亦可能觸發第三方鏈上合規工具的風險標記。
實務操作建議
- 測試網先行驗證:在 Testnet 或 Signet 上建構包含 OP_RETURN 的交易,確認所用錢包軟體能正確過濾不可花費輸出,防止找零計算異常。
- 嚴格進行雜湊化:只將鏈下資料的 SHA-256 雜湊(32 位元組)寫入鏈上,原文留在鏈下儲存系統中。
- 精密計算 vB 成本:使用 PSBT(部分簽名比特幣交易)精確評估交易體積,避開網路手續費高峰區間。
- 評估節點中繼鏈路:了解自己連線節點或第三方廣播服務的資料承載參數設定,若有時效性需求,應確保交易路徑暢通。
常見問題(FAQ)
Q1:OP_RETURN 寫入的資料可以刪除或修改嗎?
完全不能。比特幣交易一旦獲得足夠區塊確認,任何人都無法刪除或修改其中的資料。若寫入內容出錯,只能透過鏈下應用重新定義邏輯,或發送一筆新交易進行覆蓋宣告,但原始歷史紀錄永遠留在鏈上。
Q2:為什麼大家都建議放雜湊(Hash)而不是放文字全文?
主要有兩大原因:手續費與隱私。首先,OP_RETURN 受節點中繼規則限制,容量極小,按位元組付費成本高昂,32 位元組的雜湊即可精準錨定任意大小的檔案;其次,比特幣帳本完全公開,直接放置文字極易洩露隱私或商業機密,甚至觸犯個人資料保護法規。
Q3:一筆比特幣交易可以包含多個 OP_RETURN 輸出嗎?
在共識層面上,比特幣協議並未硬性禁止多個不可花費輸出;但在過往長期的 Bitcoin Core 預設標準中繼政策中,一筆交易通常僅允許包含一個 OP_RETURN 輸出。雖然部分礦工可能自行調整策略打包特殊交易,但為了確保在常規 P2P 網絡中順暢傳播,實務上仍建議維持單一輸出架構。
Q4:OP_RETURN 會造成比特幣全節點膨脹嗎?
它會增加區塊鏈歷史儲存體積(全節點的硬碟負擔),但不會增加 UTXO 集合負擔。因為節點能識別該輸出不可花費,驗證後會直接將其排除在記憶體 UTXO 集合之外,因此相較於偽造地址存證,OP_RETURN 對節點記憶體的友善度高得多。



