Script

OP_RETURN 是如何燒幣的?

  • September 20, 2021

究竟是什麼導致包含 OP_RETURN 的輸出不可使用?為什麼我必須使用 OP_RETURN 之後的字節來將數據保存在區塊鏈中,而我不能使用 OP_RETURN 之前的字節?

究竟是什麼導致包含 OP_RETURN 的輸出不可使用?

簡單的事實是,沒有任何輸入可能解鎖受這種包含 OP_RETURN 的腳本阻礙的硬幣。每當腳本解釋器遇到 OP_RETURN 指令時,它會立即中止並導致整個腳本失敗。

然而,OP_RETURN 不僅僅使腳本無法使用。它使它顯著可證明是不可花費的,並觸發了特殊的邏輯。例如,為您生成的密鑰創建一個支付到正常 P2WPKH 地址的輸出,然後丟棄該密鑰,也會使硬幣無法使用。但是,對於網路來說,它是不可花費的並不明顯,而且您無法向任何人證明這一點。

這與 OP_RETURN 不同:任何以 OP_RETURN 開頭的腳本顯然是不可使用的,至少比特幣核心軟體將此視為一種特殊情況,並將避免將此類輸出儲存在其數據庫中,因為已知它們無法使用。嘗試使用它會觸發“找不到硬幣”而不是“腳本驗證”錯誤,但結果是一樣的:交易將不被允許進行。

為什麼我必須使用 OP_RETURN 之後的字節來將數據保存在區塊鏈中,而我不能使用 OP_RETURN 之前的字節?

有兩個原因:

  • 通過將 OP_RETURN 放在前面,將觸發特殊的肯定不能花費所以可以被遺忘的邏輯,這在所有未來實現此邏輯的完整節點上更輕。
  • 大多數網路節點中實施的標準中繼策略只允許一定數量的輸出模板。其中包括向典型地址付款,以及以 OP_RETURN 開頭的特定大小的腳本。如果您嘗試創建一個將數據放在操作碼之前的輸出,它將被視為非標準輸出類型,並且不會被大多數節點中繼。

引用自:https://bitcoin.stackexchange.com/questions/109747