當前位置:
首頁 > 最新 > 隔離見證交易的結構、規則、驗證過程

隔離見證交易的結構、規則、驗證過程

上文講到了隔離見證升級方案的曲折之路,今天主要講一下原理。

首先聊一下隔離見證的交易結構。

我們需要清楚的是,對於那些沒有升級為支持隔離見證的節點來說,他們在獲取到隔離見證交易時是完全感知不到的,因為對於舊節點來說,交易結構並沒有改變。

對於升級為支持隔離見證的節點來說,他們不僅能看到屬於交易結構中的內容,並且還能看到這筆交易結構外部包含的一小塊信息,這裡的信息才是隔離見證的信息。信息里,包括了marker、flag、witness三個部分。

marker和flag都是標記,marker要求必須是1個位元組的0,即0x00,flag要求必須是1位元組的非0值,目前是0x01。

witness就是隔離見證(SegWit)中的見證(Wit)。即,對交易簽名。

我們在比特幣交易上鎖的幾大鎖定規則文章中提到過,目前比特幣的交易類型。文章提到的有:P2PKH、P2SH等等。不同的交易類型,對應著不同的隔離見證的方案。

我們先看P2PKH交易類型的交易,如果用了隔離見證,是什麼樣子的:

witness:

scriptSig: (empty)

scriptPubKey: 0

我們可以看到,witness部分,存放的是之前解鎖工具里的東西。scriptSig是指原交易結構中的解鎖工具,隔離見證的交易里,此處置空。scriptPubKey是指那把鎖,也就是鎖定腳本,包含兩個部分,一個是0,另一個是20個位元組的加密數據。

0的意思,是指隔離見證交易的版本號是0。未來可能會支持其它版本的交易。

很明顯,我們能看出來,原交易結構中的解鎖腳本置空,將本來存放於解鎖腳本里的內容放入了witness中存儲。

這樣的話,當未升級的節點在進行驗證時,發現解鎖腳本中竟然是空的,並且鎖定腳本也沒有什麼CHECK相關的操作,那麼舊節點會認為這個地址里的幣誰都可以花,但並不符合標準的交易類型,於是對於這種交易來說,他會拒絕, 對於包含這種交易的區塊來說,會驗證通過。(複雜的比特幣升級分析(4)里講過為什麼對交易拒絕,對區塊接受)

對於升級了的節點,首先要驗證鎖定腳本里開頭是不是0,如果是0,判斷後面的是不是20個位元組。如果是,再去用witness里的公鑰經過HASH160加密後與鎖定腳本中的20位元組數據對比是否一致。如果一致,再用witness中的私鑰簽名與公鑰通過CHECKSIG操作進行驗證,是否會返回TRUE。

我們把採用P2PKH交易類型的隔離見證交易稱為P2WPKH,即pay-to-witness-public-key-hash。

我們把採用P2SH交易類型的隔離見證交易稱為P2WSH,即pay-to-witness-script-hash。

對於P2WSH交易類型的交易,是什麼樣子的:

witness: 0

2 CHECKMULTISIG>

scriptSig: (empty)

scriptPubKey: 0

我們可以看到,witness部分就是原先解鎖腳本的內容。scriptSig就是原交易結構中的需要存儲解鎖腳本的地方,此處置空。scriptPubKey是上筆收幣地址的鎖,也就是鎖定腳本。

鎖定腳本中的0,與P2WPKH類型里鎖定腳本的0的意思是一樣的,是指隔離見證交易的版本號是0。未來可能會支持其它版本的交易。

舊節點驗證過程同P2WPKH。

對於新節點,在驗證P2WSH交易類型的交易時,需要用witness里的多個公鑰,進行SHA256加密,得到的結果與鎖定腳本中的32個位元組數據比對是否一致。然後再用witness里的簽名與公鑰,通過CHECKMULTISIG操作碼去驗證簽名是否正確,如果返回TRUE,則代表沒錯。

這裡需要提到的是,如果鎖定腳本中,隔離見證版本號不是0,那麼代表這個隔離見證交易的版本不是目前定義過的,於是會拒絕這樣的交易。(unknown)

在比特幣交易上鎖的幾大鎖定規則(補充)文章末尾,我們提到的還剩幾個隔離見證交易類型,今天已全部講解完畢。

關注【通俗易懂區塊鏈】,學懂區塊鏈


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 通俗易懂區塊鏈 的精彩文章:

TAG:通俗易懂區塊鏈 |