State-Trie
如何計算交易後狀態?
來自 rpc 的收據返回
root
我認為是黃皮書的“交易後狀態”。網際網路似乎說這stateRoot
與交易後的確切時刻完全一樣。然而。我通過選擇一個引發錯誤的交易來測試這些假設,並在
root
之前和之後查看收據。當事務拋出錯誤時,不應更新狀態,因此我希望root
s 相等。他們不是。錯誤交易後狀態會發生什麼變化?
我是否誤解了哪個值是哪個?
狀態樹包含每個帳戶的餘額。即使是拋出異常的交易也會通過 gas 成本導致發送者的餘額減少,這意味著結果狀態與初始狀態不同。
一個有趣的問題是看是否可以在不更改結果狀態根的情況下從塊中排除 gas 價格為 0 的交易。我相信會是這樣。
編輯:再想一想,狀態樹也包含賬戶隨機數,所以即使交易使用零 ETH 來支付汽油費,隨機數仍然會導致狀態根發生變化。