Transactions

區塊是否包含交易列表?還是只有默克爾樹?

  • March 7, 2021

我想知道一個塊如何編碼它的交易集。我知道生成了一個 Merkle 樹,並且它對交易的雜湊版本進行了編碼。但是,Merkle 樹是否包含在被發送到其他節點進行驗證的塊中?是否有它也發送的交易列表?

據我了解,當一個節點想要“挖礦”時,他們會:

  1. 生成一個新塊
  2. 創建一個 coinbase 交易
  3. 從其區塊鏈副本中收集其他不完整交易(尚未放入區塊的交易)的子集。
  4. 使用步驟 2 和 3 中的交易生成 Merkle 樹
  5. 重複增加一個 Nonce,直到以<Previous Hash, Nonce, Transactions from 4>一定數量的 0 開頭的 Hash。

似乎要驗證每筆交易(以確保資金不會被重複使用),最好包含交易清單。但是要檢查工作量證明是否真的完成了,其他節點需要默克爾樹來快速散列。

很有可能還有一種方法可以從 merkle 樹中獲取交易列表,但我只是不明白該過程是什麼樣的。

PS 我正在建構我自己的區塊鏈貨幣的 Python 展示實現,因此存在更多理論/不太實際的問題。

謝謝。

您無法從 merkle 樹中獲取交易列表。

merkle 樹根是塊頭的一部分,正如您所說,它允許快速驗證工作量證明。

在區塊頭之後,每個區塊都包含一個序列化交易列表,按照它們在默克爾樹中出現的順序排列。一個完整的區塊是一個區塊頭+交易列表。

驗證區塊時,節點將檢查:

  1. 工作量證明(這可以只用塊頭來完成。但是,僅僅因為塊頭驗證,並不意味著塊是有效的)
  2. 默克爾樹 - 節點將獲取交易列表並重建默克爾樹以確保根與標頭中的內容匹配
  3. 每個單獨的交易 - 驗證單獨的輸入和輸出以確保它們符合網路規則,並且不存在雙重支出。

引用自:https://bitcoin.stackexchange.com/questions/77474