Solidity

收據樹儲存在哪裡?

  • October 11, 2020

簡單的問題。

我知道狀態樹儲存在每個節點的驅動器中。但它們並未儲存在實際狀態中。

問題 1) 收據樹呢?它們是否也與節點驅動器中的鏈分開儲存?

問題 2)收據樹是否也儲存無效交易或僅儲存有效交易?

收據 trie 由節點本地儲存(例如作為乙太坊架構一部分的 4 個嘗試),並在塊頭中由其稱為receiptsRoot.

要回答您問題的第二部分,我們首先需要區分無效交易和失敗交易:

  • 無效:當收到一筆交易時,礦工首先在本地驗證它,檢查隨機數、簽名有效性和交易的格式正確的 RLP 編碼。無效交易不會被礦工廣播,不會被網路執行,也不會被記錄在區塊鏈上。
  • 失敗:另一方面,失敗的交易已經通過了內在有效性的基本測試,然後從協議的角度來看是有效的。無論出於何種原因,它們在執行期間都會失敗,但仍包含在塊中。實際上,礦工將收到交易的氣體,並且發送者帳戶隨機數將增加。

收據樹儲存該塊的每個交易的收據,包括失敗的交易。交易執行的收據結果,由乙太坊黃皮書(https://ethereum.github.io/yellowpaper/paper.pdf)正式定義如下:

交易收據 R 是四項的元組,包括:包含交易收據的區塊中使用的累積 gas,在交易發生後,Ru,通過執行交易創建的日誌集 Rl 和由這些日誌中的資訊 Rb 和事務狀態程式碼 Rz 組成的布隆過濾器:R ≡ (Ru, Rb, Rl, Rz)

狀態碼Rz被定義為“一個非負整數”,我相信它分別是成功和失敗的交易的 1 或 0。

引用自:https://ethereum.stackexchange.com/questions/88220