為什麼不鼓勵 OP_RETURN 交易?使用版本或鎖定時間有什麼不同嗎?
為什麼不鼓勵 OP_RETURN 交易?與其他交易相比,他們支付的費用是否更少?
當數據為 1 或 2 時,如果使用版本或鎖定時間完成相同的操作,會有什麼不同嗎?
例子:
ON_RETURN
createrawtransaction '[]' '{"data":"32"}'
鎖定時間
createrawtransaction '[]' 2
版本
更改原始碼並使其可配置,儘管它已經是 2 所以不需要為此範例進行更改:https ://github.com/bitcoin/bitcoin/blob/7fcf53f7b4524572d1d0c9a5fdc388e87eb02416/src/primitives/transaction.h#L263
nSequence
使用沒有+一致含義的部分nLockTime
(例如Lightning 所做的) ,您無法實現相同的目標。只是沒有足夠的空間:48 個“空閒”位。更改版本是一個壞主意,因為它可以用來選擇加入未來尚未定義規則的軟分叉。具有版本
< 2
的事務也(因此)不是標準。
是否不鼓勵 OP_RETURN 事務是一個見仁見智的問題。
就個人而言,我認為交易不應該儲存任何世界不需要的數據來驗證它們,根據定義,儲存在 OP_RETURNs 中的數據就是這種情況。要麼你用它來使用區塊鏈作為數據儲存(這是一種非常低效的技術,而且在足夠的費用壓力下,非常昂貴),或者你用它來與接收者進行通信,這可能而是在帶外完成。
所以這不是對 OP_RETURN 本身的批評——而是對你試圖用它做什麼的批評。它同樣適用於嘗試使用鎖定時間或版本或序列號來實現相同目的:在我看來,這只是建構技術上較差的解決方案,應該完全使用其他方法(不使用區塊鏈)。
沒有價格差異;OP_RETURN 中的字節數與任何其他(非隔離見證)字節數一樣多。那為什麼會引起關注呢?問題是每筆交易,即使是那些沒有進入 UTXO 集的輸出,都會給網路帶來成本。每個完整節點都必須下載並處理它。交易需要付費,但這筆費用屬於礦工,而不是全節點運營商。執行節點有多種原因,但所有這些都以某種方式與它相關,從而能夠參與比特幣經濟。他們不這樣做是為了處理您的個人和/私人數據。
從長遠來看,我認為這不是一個問題——費用壓力將推動(並且在很大程度上已經推動)將區塊鏈的無意義使用推向其他系統。然而,比特幣生態系統仍然相對年輕,為了不扼殺牠的發展,我認為不鼓勵人們使用無助於生態系統的交易數據給節點帶來負擔是明智的。
也就是說,如果出於某種原因您要創建基於區塊鏈的數據儲存解決方案,無論如何,請使用 OP_RETURN。至少這樣你會加重區塊鏈的負擔,而不是 UTXO 集。