
- 區塊鏈教程
- 區塊鏈 - 首頁
- 區塊鏈基礎
- 區塊鏈 - 簡介
- 區塊鏈的歷史
- 區塊鏈 - 技術
- 區塊鏈與密碼學
- 區塊鏈超越加密貨幣
- 區塊鏈 - 高階概念
- 區塊鏈 - 去中心化
- 區塊鏈 - 去中心化應用 (DApp)
- 區塊鏈 - 去中心化金融 (DeFi)
- 區塊鏈 - 未來展望
- 區塊鏈中的智慧合約
- 區塊鏈 - 裡卡迪安合約
- 區塊鏈 - 預言機
- 區塊鏈 - 去中心化自治組織 (DAO)
- 比特幣
- 比特幣 - 無形的黃金
- 比特幣是如何運作的?
- 比特幣 - 網路
- 比特幣 - 錢包
- 比特幣 - 創新
- 以太坊
- 以太坊替代加密貨幣
- 以太坊生態系統
- 以太坊虛擬機器 (EVM)
- 高階以太坊
- 以太坊錢包
- 以太坊礦工節點
- 其他
- 區塊鏈 - 雙重支付
- 公鑰密碼學
- 區塊鏈 - 雜湊
- 比特幣 - 挖礦
- 區塊鏈 - 區塊鏈式連線
- 區塊鏈 - 工作量證明 (PoW)
- 區塊鏈 - 網路與挖礦
- 區塊鏈 - 礦工激勵機制
- 區塊鏈 - 梅克爾樹
- 區塊鏈 - 支付驗證
- 區塊鏈 - 解決衝突
- 區塊鏈 - 隱私
- 比特幣 - 緩解攻擊
- 區塊鏈 - 總結
- 區塊鏈資源
- 區塊鏈 - 快速指南
- 區塊鏈 - 資源
- 區塊鏈 - 討論
區塊鏈 - 以太坊生態系統
以太坊區塊鏈的生態系統包含多個不可或缺的組成部分。其基礎是以太坊區塊鏈,它執行在一個去中心化的點對點網路上。
此外,還存在一個以太坊客戶端,通常是Geth,它在節點上執行並建立與以太坊點對點網路的連線,方便下載和本地儲存區塊鏈。

此客戶端提供一系列功能,包括挖礦和賬戶管理。本地區塊鏈副本與網路持續同步。另一個重要的元素是web3.js庫,它允許透過遠端過程呼叫 (RPC)介面與Geth客戶端進行互動。
以太坊生態系統的組成部分
以太坊生態系統的組成部分如下:
- 金鑰和地址
- 賬戶
- 交易
- 訊息
- 以太幣/代幣
- EVM
本章將涵蓋前幾個主題,下一章將詳細介紹EVM(以太坊虛擬機器)。
金鑰和地址
在以太坊區塊鏈中,金鑰和地址用於表示所有權並促進以太幣的轉賬。這些金鑰由一對組成,包括一個私鑰和一個公鑰。
私鑰是隨機生成的,並保持機密,而公鑰則派生自私鑰。地址是20位元組的程式碼,由公鑰生成,用於識別賬戶。
如何生成金鑰和地址?
生成金鑰和派生地址的過程如下所示:
- 首先,根據橢圓曲線 secp256k1的規範,隨機選擇一個私鑰(一個256位的正整數)。
- 然後,透過使用橢圓曲線數字簽名演算法 (ECDSA)恢復函式從私鑰派生公鑰。
- 最後,從公鑰生成地址,具體來說是從公鑰的Keccak 雜湊的最後160位生成。
以太坊生態系統的賬戶
賬戶是以太坊區塊鏈的基本組成部分。它們由私鑰和公鑰對組成。使用者利用賬戶透過交易與區塊鏈進行互動。
在透過節點將交易提交到網路之前,它會由相應的賬戶進行數字簽名。作為交易驅動的狀態機,以太坊的狀態是透過賬戶之間的互動和交易的執行來建立或修改的。
以太坊生態系統狀態轉換
以太坊網路中的每個賬戶都擁有一個狀態,當這些狀態聚合在一起時,反映了網路的整體狀況。以太坊網路的狀態在新增每個新區塊時都會重新整理。
在這些賬戶之間和賬戶上執行的操作表示狀態轉換。此轉換由以太坊狀態轉換函式促成,其工作原理如下:
- 透過檢查語法、簽名真實性和nonce來確認交易的有效性。
- 確定交易費用,並透過簽名識別傳送方地址。
- 此外,驗證傳送方賬戶餘額並相應調整,同時遞增nonce。
- 必須提供足夠的ETH來支付交易成本,這些成本按位元組計算,並且隨著交易大小的增加而成比例增加。此步驟涉及價值的實際轉移,從傳送方賬戶轉移到接收方賬戶。
- 如果指定的接收方賬戶尚不存在,則會自動建立它。
- 在交易由於餘額不足或gas不足而失敗的情況下,所有狀態修改都會回滾,除了費用支付,費用支付會分配給礦工。
- 最終,任何剩餘的費用將作為找零返還給傳送方,費用將相應地分配給礦工。
- 在此階段,函式生成結果狀態,該狀態也會記錄在區塊鏈上。
賬戶型別
以太坊生態系統中有兩類賬戶:
- 外部擁有賬戶 (EOA)
- 合約賬戶 (CA)
外部擁有賬戶的功能類似於比特幣賬戶,由私鑰控制。相比之下,合約賬戶的特點是除了私鑰之外,還與可執行程式碼相關聯。
以下部分給出了兩種賬戶的關鍵特徵和屬性:
EOA
外部擁有賬戶的關鍵特徵如下:
- 它們擁有一個狀態。
- 它們與人類使用者相關聯,因此被稱為使用者賬戶。
- EOA 維護以太幣餘額。
- 它們能夠傳送交易。
- 它們不包含任何關聯程式碼。
- 透過私鑰進行控制。
- EOA 無法發起呼叫訊息。
- 賬戶具有鍵值儲存。
- EOA 能夠發起交易訊息。
CA
合約賬戶的關鍵特徵如下:
- 它們擁有一個狀態。
- 它們本身不與區塊鏈上的任何使用者或實體相關聯。
- CA 維護以太幣餘額。
- 它們包含儲存在記憶體或區塊鏈上的關聯程式碼。它們可以訪問儲存。
- 它們可以被觸發以響應其他合約的交易或訊息來執行程式碼。
- CA 可以保留其永久狀態,並且可以呼叫其他合約。
- CA 無法發起交易訊息。
- CA 可以發起呼叫訊息。
- CA 具有鍵值儲存。
- CA 的地址在部署時生成,此地址用於識別其在區塊鏈上的位置。
以太坊生態系統的交易
在以太坊生態系統中,交易被定義為一個數據包,它使用私鑰進行數字簽名,包含特定的指令,這些指令在執行時會導致訊息呼叫或合約的建立。

根據交易的結果,可以將交易分為兩種不同的型別:
訊息呼叫交易
這些交易促進不同合約賬戶 (CA) 之間訊息的傳輸,而無需建立新賬戶。
合約建立交易
這些交易導致新的合約賬戶的形成。此類交易的成功執行會導致建立與特定程式碼關聯的賬戶。
交易中的關鍵術語
兩種交易都包含幾個標準欄位,詳細如下:
Nonce
Nonce 是一個順序號,傳送方發起每次交易時都會增加 1。它必須與傳送的交易總數相對應,並用作交易的唯一識別符號。
Gas 價格
Gas 價格欄位指示執行交易所需的Wei數量。此費用按每單位gas計費,適用於交易執行過程中產生的所有計算費用。
Gas 限額
Gas 限額欄位指定可用於執行交易的gas最大數量。
To
To 欄位表示交易接收方的地址,表示為 20 位元組的值。
Value
Value 欄位指示要轉賬給接收方的Wei總額。在合約賬戶 (CA) 的上下文中,這反映了合約將維持的餘額。
簽名
簽名包含三個組成部分:V、R 和 S。這些值表示數字簽名 (R、S) 和有助於恢復公鑰 (V) 的其他資訊。
Init
Init 欄位僅用於旨在建立合約的交易,特別是合約建立交易。它表示一個無限長度的位元組陣列,定義在賬戶初始化過程中要使用的EVM 程式碼。
Data
在訊息呼叫交易的情況下,Data 欄位替換 Init 幷包含訊息呼叫的輸入資料。此欄位也是無限大小的,並且結構為位元組陣列。

以太坊生態系統中的訊息
根據黃皮書,訊息是指兩個賬戶之間交換的資料和值。訊息本質上是一個數據包,既攜帶資訊也攜帶值,具體來說是涉及的以太幣金額。這些訊息可以透過充當自主實體的智慧合約傳輸,也可以由外部參與者(稱為外部擁有賬戶 (EOA))透過數字簽名的交易發起。
合約能夠向其他合約傳送訊息。需要注意的是,訊息僅存在於執行環境中,不會被儲存。雖然訊息與交易有相似之處,但關鍵的區別在於它們的來源:訊息由合約生成,而交易則源自以太坊生態系統中的外部實體 (EOA)。
訊息的組成部分
訊息由幾個關鍵元素組成:
- 傳送訊息的個人或實體
- 接收訊息的個人或實體
- 要連同訊息一起轉移到合約地址的 Wei 數量
- 一個可選的資料欄位,用作合約的輸入
- 可能使用的最大 gas 限額(**startgas**)
當 EVM 中執行的合約執行 **CALL 或 DELEGATECALL** 操作碼時,就會建立訊息。
以太坊代幣(ETH/ETC)
以太坊擁有自己的原生加密貨幣,稱為 **以太幣 (ETH)**。在本教程前面討論過的 **去中心化自治組織 (DAO)** 駭客事件之後,啟動了一個硬分叉來解決這種情況。
因此,現在有兩個不同的以太坊區塊鏈:一個被稱為 **以太坊經典**,由貨幣 ETC 表示,而硬分叉版本為 ETH,它繼續隨著持續的開發工作而發展。
**以太坊經典 (ETC)** 已經培養了自己的支持者社群,他們積極參與其開發,將其維持為以太坊原始的、未分叉的版本。
**以太幣** 由礦工作為獎勵生成,作為他們透過交易和區塊驗證來保障網路的計算工作的回報。在以太坊區塊鏈中,以太幣充當在 **以太坊虛擬機器 (EVM)** 上執行合約的媒介。
此外,以太幣還用於購買 gas,gas 充當在以太坊區塊鏈上進行計算的必要燃料。下表給出了不同單位的名稱及其值 -
