Accounts

乙太坊賬戶如何持有nounce、eth餘額、合約程式碼和儲存?

  • April 28, 2018

我正在尋找 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/.

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