Transactions
區塊是否包含交易列表?還是只有默克爾樹?
我想知道一個塊如何編碼它的交易集。我知道生成了一個 Merkle 樹,並且它對交易的雜湊版本進行了編碼。但是,Merkle 樹是否包含在被發送到其他節點進行驗證的塊中?是否有它也發送的交易列表?
據我了解,當一個節點想要“挖礦”時,他們會:
- 生成一個新塊
- 創建一個 coinbase 交易
- 從其區塊鏈副本中收集其他不完整交易(尚未放入區塊的交易)的子集。
- 使用步驟 2 和 3 中的交易生成 Merkle 樹
- 重複增加一個 Nonce,直到以
<Previous Hash, Nonce, Transactions from 4>
一定數量的 0 開頭的 Hash。似乎要驗證每筆交易(以確保資金不會被重複使用),最好包含交易清單。但是要檢查工作量證明是否真的完成了,其他節點需要默克爾樹來快速散列。
很有可能還有一種方法可以從 merkle 樹中獲取交易列表,但我只是不明白該過程是什麼樣的。
PS 我正在建構我自己的區塊鏈貨幣的 Python 展示實現,因此存在更多理論/不太實際的問題。
謝謝。
您無法從 merkle 樹中獲取交易列表。
merkle 樹根是塊頭的一部分,正如您所說,它允許快速驗證工作量證明。
在區塊頭之後,每個區塊都包含一個序列化交易列表,按照它們在默克爾樹中出現的順序排列。一個完整的區塊是一個區塊頭+交易列表。
驗證區塊時,節點將檢查:
- 工作量證明(這可以只用塊頭來完成。但是,僅僅因為塊頭驗證,並不意味著塊是有效的)
- 默克爾樹 - 節點將獲取交易列表並重建默克爾樹以確保根與標頭中的內容匹配
- 每個單獨的交易 - 驗證單獨的輸入和輸出以確保它們符合網路規則,並且不存在雙重支出。