跟大家一起學習區塊鏈技術系列之一 比特幣之非標準交易

如果交易的輸出不採用標準的公鑰腳本,節點和礦工們(他們的比特幣核心使用缺省的設置)將不會接受、廣播、打包你的交易。你向這些節點或礦工廣播這樣的交易時將會收到錯誤。

如果你使用了贖回腳本,進行哈希,在P2SH中使用這個哈希,網絡只會看到這個哈希,所以網絡會認為這是一個有效的交易,不關心這個贖回腳本到底做了什麼。這就允許支付給非標準的腳本,截止到比特幣核心0.11版本,幾乎所有的有效的贖回腳本都可以被花費。例外情況是,腳本使用了未分配的NOP操作碼,這些操作碼是為了將來軟分叉的時候保留的,只會被沒有使用標準內存池策略的節點或礦工傳播和打包。

注意:標準交易是保護和幫助網絡設計的,並不是防止用戶出錯。創建標準交易是很簡單的,而且能確保發送的比特幣是能被花掉的。

截止到比特幣核心0.9.3,標準交易必須滿足下列條件:

  • 交易必須是可以完成的:或者鎖定時間必須是過去的時間(小於或等於現在的區塊高度),或者所有的序列號必須是0xffffffff。

  • 交易的大小不能超過100000字節。這個數字是一個典型的單輸入單輸出的P2PKH交易大小的200倍左右。

  • 每一個交易的簽名腳本必須小於1650字節。最大可以允許15-of-15的P2SH多籤交易,P2SH交易裡需要使用壓縮的公鑰。

  • 非P2SH多籤交易如果包含超過三個公鑰,這種交易目前不是標準交易。

  • 交易的簽名腳本只能把數據推入計算棧。一般不能推入新的操作碼,當然也有例外,就是如果這個操作碼僅僅是往棧裡推數據,那就可以推入。

  • 交易不能包含這樣的輸出,就是輸出的比特幣的數量不能少於要花費的交易費的三分之一。對於P2PKH交易來說,這個數現在是546聰,P2SH是540,當然這是傳播手續費缺省設置的情況下計算的。這裡有個例外,就是Null Data交易的輸出的比特幣數量必須是0。


分享到:


相關文章: