- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 853字
- 2022-07-28 20:18:11
4.3 賬戶
智能合約在以太坊網絡中表現為一種特殊賬戶:合約賬戶。
賬戶在以太坊中是非常重要的概念,開發過程中離不開它,以太坊中有兩類賬戶:
(1)外部用戶賬戶(EOAs)——該類賬戶被公鑰——私鑰對控制(由人控制)。
(2)合約賬戶——該類賬戶被存儲在賬戶中的代碼控制。
外部用戶賬戶和合約賬戶,都用同樣的地址形式表示,地址形式為:0xea674fdde714fd979de3edf0f56aa9716b898ec8,是一個20字節的16進制數。
本書中,賬戶(或賬號)和地址兩個概念沒有區別,有時地址也會指代賬戶。
外部用戶賬戶的地址是由私鑰推導出來的(在本書第10章會作進一步介紹),合約賬戶的地址則由創建者的地址和nonce計算得到,這里就不深入介紹,有興趣的讀者可以延伸閱讀《以太坊合約地址是怎么計算出來的?》 這篇文章。
外部用戶賬戶和合約賬戶都可以有余額;合約賬戶使用代碼管理所擁有的資金,外部用戶賬戶則是用私鑰簽名來花費資金;合約賬戶存儲了代碼,外部用戶賬戶則沒有。它們還有一個不能忽視的區別:只有外部用戶賬戶可以發起交易(主動行為),合約賬戶只能被動地響應動作。
賬戶狀態
賬戶狀態有4個基本組成部分,不論賬戶類型是什么,都存在這4個組成部分。
- nonce:如果賬戶是外部用戶賬戶,nonce代表從此賬戶地址發送的交易序號。如果賬戶是合約賬戶,nonce代表此賬戶創建的合約序號
提示:以太坊中有兩種nonce,一種是賬號nonce——表示一個賬號的交易數量;一種是工作量證明nonce——一個用于計算滿足工作量證明的隨機數。
- balance:此地址擁有以太幣余額數量。單位是Wei,1 ether=1018 wei,當向地址發送帶有以太幣的交易時,balance會隨之改變。
ether和wei是以太坊中以太幣的兩種面額單位,就像人民幣的元和分,除此之外,還有一個常用的面額單位Gwei,用來給gas定價,1 Gwei = 109 wei。
- storageRoot:Merkle Patricia樹的根節點哈希值。Merkle樹會將此賬戶存儲內容的哈希值進行編碼,默認是空值。
- codeHash:此賬戶代碼的哈希值。對于合約賬戶,就是合約代碼被哈希計算后的哈希值作為codeHash保存。對于外部用戶賬戶,codeHash是一個空字符串的哈希值。
以太坊的全局共享狀態是由所有賬戶狀態組成,它由賬戶地址和賬戶狀態組成的映射存儲在區塊的狀態樹中,如圖4-3所示。

圖4-3 以太坊全局狀態
推薦閱讀
- Redis使用手冊
- Hands-On Data Structures and Algorithms with Rust
- 劍破冰山:Oracle開發藝術
- App+軟件+游戲+網站界面設計教程
- 數據化網站運營深度剖析
- Learn Unity ML-Agents:Fundamentals of Unity Machine Learning
- 數據挖掘原理與SPSS Clementine應用寶典
- 達夢數據庫運維實戰
- Chef Essentials
- Web Services Testing with soapUI
- 數據庫原理及應用:SQL Server 2016
- Delphi High Performance
- Hands-On Big Data Analytics with PySpark
- 大數據SQL優化:原理與實踐
- R語言醫學多元統計分析