1. 比特幣中的節點分類[1]
其中支付驗證其實只是用於小額支付的一種方式,所以相對交易驗證就沒有那麼複雜。
1.1 他們之間的區別:
交易驗證要檢驗這個交易是否合法,支付驗證就是驗證這筆交易是否已經存在
- 區塊鏈交易驗證的過程比較複雜,包括賬戶餘額驗證、雙重支付判斷等,通常由保存區塊鏈完整信息的區塊鏈驗證節點來完成。
- 而支付驗證的過程比較簡單,只是判斷該筆支付交易是否已經得到了區塊鏈節點共識驗證,並得到了多少的確認數即可。
1.2 區塊頭的數據結構
1.3 能實現驗證相應的保障:
前一區塊的哈希值,可以確保區塊鏈所記錄的交易次序。默克爾樹的根哈希值,則可以確保收錄到區塊中的所有交易的真實性。
1.4 步驟如下:
- 該筆支付交易是否已經得到了區塊鏈節點共識驗證(找到要驗證的這筆交易在哪個區塊)
- 計算待驗證支付的交易哈希值;
- 節點從區塊鏈網絡上獲取並存儲最長鏈的所有區塊頭至本地;
- 節點從區塊鏈獲取待驗證支付對應的默克爾樹哈希認證路徑;(這裏找到了該交易對應的哈希值)
- 根據哈希認證路徑,計算默克爾樹的根哈希值,將計算結果與本地區塊頭中的默克爾樹的根哈希值進行比較,定位到包含待驗證支付的區塊;(找到這個哈希值屬於哪個區塊)
- 根據該區塊頭所處的位置,驗證該區塊的區塊頭是否已經包含在已知最長鏈中,
- 確定該支付已經得到的確認數量,如果包含則證明支付真實有效。(證明本交易得到了6次確認)
1.4.1 最關鍵的默克爾樹
1. 如何從獲取到的最長鏈中尋找對應的區塊?
- 如果區塊鏈節點想要知道其錢包中某個比特幣地址即將到達的某筆支付,該節點會在節點間的通信鏈接上建立起布魯姆過濾器,限制只接受含有目標比特幣地址的交易。
- 找到節點符合過濾器要求將以默克爾區塊消息的形式發送該區塊消息。
- 發送的區塊消息區塊頭+一條連接目標交易與默克爾樹根的默克爾哈希認證路徑。
- 該認證路徑由默克爾樹所有路徑中節點的哈希值共同構成,自下而上進行哈希計算。
最終的結果:節點能夠使用該路徑找到與該交易相關的區塊,進而驗證對應區塊中該交易的有無。
2. 尋找默克爾認證路徑示例:
- 假設待驗證交易爲E,則交易E的默克爾樹哈希認證路徑爲圖3-2虛線框所示的M(F)、M(GH)和M(ABCD)。通過該哈希認證路徑,即可以通過哈希計算找到一條鏈接交易E與默克爾樹根的完整路徑。
3. 爲何要通過相鄰節點找到根hash以及根hash的作用?
- 答:因爲區塊頭部存的是根hash值,所以最終的目的是要找到根hash值就能映射到對應哪個區塊了
參考文章:
2.解讀區塊鏈全套六冊.第三章.第四節