Accounts
乙太坊賬戶如何持有nounce、eth餘額、合約程式碼和儲存?
我正在尋找 go-ethereum 程式碼,有點難以理解,一個帳戶實際上是如何保存其資訊的。
基於乙太坊白皮書,
一個乙太坊賬戶包含四個欄位:
- 隨機數
- 賬戶目前的乙太幣餘額
- 賬戶的合約程式碼(如果存在)
- 帳戶的儲存空間(預設為空)
當我查看 go-ethereum 中的帳戶類型(/accounts/accounts.go)時,它只有地址和網址。我查看了地址類型,但沒有太多我要查找的資訊,但我發現 StateDB 還有一些與白皮書解釋相關的功能。
您能否解釋一下 Account 和 StateDB 的關係或帳戶如何保存該資訊的機制?
帳戶數據儲存在世界狀態樹中,樹中的每個葉子代表一個帳戶。
請參閱:儲存和狀態嘗試是什麼?
賬戶資料結構是 RLP 編碼的,包含:
- 隨機數;
- 餘額;
- 儲存根,它是帳戶儲存樹根的雜湊值;
- 程式碼雜湊,即與賬戶關聯的程式碼(即合約程式碼)的雜湊。
(參見rlp標籤。)
這表示
state_object.go
為:// Account is the Ethereum consensus representation of accounts. // These objects are stored in the main account trie. type Account struct { Nonce uint64 Balance *big.Int Root common.Hash // merkle root of the storage trie CodeHash []byte }
相關的處理和功能主要在文件中
go-ethereum/core/state/
而不是go-ethereum/accounts/
.