區塊鏈 - 以太坊生態系統



以太坊區塊鏈的生態系統包含多個不可或缺的組成部分。其基礎是以太坊區塊鏈,它執行在一個去中心化的點對點網路上。

此外,還存在一個以太坊客戶端,通常是Geth,它在節點上執行並建立與以太坊點對點網路的連線,方便下載和本地儲存區塊鏈。

The Ethereum Ecosystem Working

此客戶端提供一系列功能,包括挖礦和賬戶管理。本地區塊鏈副本與網路持續同步。另一個重要的元素是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 的地址在部署時生成,此地址用於識別其在區塊鏈上的位置。

以太坊生態系統的交易

在以太坊生態系統中,交易被定義為一個數據包,它使用私鑰進行數字簽名,包含特定的指令,這些指令在執行時會導致訊息呼叫或合約的建立。

Ethereum Ecosystem Transactions

根據交易的結果,可以將交易分為兩種不同的型別:

訊息呼叫交易

這些交易促進不同合約賬戶 (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 幷包含訊息呼叫的輸入資料。此欄位也是無限大小的,並且結構為位元組陣列。

Key Terms in Transactions

以太坊生態系統中的訊息

根據黃皮書,訊息是指兩個賬戶之間交換的資料和值。訊息本質上是一個數據包,既攜帶資訊也攜帶值,具體來說是涉及的以太幣金額。這些訊息可以透過充當自主實體的智慧合約傳輸,也可以由外部參與者(稱為外部擁有賬戶 (EOA))透過數字簽名的交易發起。

合約能夠向其他合約傳送訊息。需要注意的是,訊息僅存在於執行環境中,不會被儲存。雖然訊息與交易有相似之處,但關鍵的區別在於它們的來源:訊息由合約生成,而交易則源自以太坊生態系統中的外部實體 (EOA)。

訊息的組成部分

訊息由幾個關鍵元素組成:

  • 傳送訊息的個人或實體

  • 接收訊息的個人或實體
  • 要連同訊息一起轉移到合約地址的 Wei 數量
  • 一個可選的資料欄位,用作合約的輸入
  • 可能使用的最大 gas 限額(**startgas**)

當 EVM 中執行的合約執行 **CALL 或 DELEGATECALL** 操作碼時,就會建立訊息。

以太坊代幣(ETH/ETC)

以太坊擁有自己的原生加密貨幣,稱為 **以太幣 (ETH)**。在本教程前面討論過的 **去中心化自治組織 (DAO)** 駭客事件之後,啟動了一個硬分叉來解決這種情況。

因此,現在有兩個不同的以太坊區塊鏈:一個被稱為 **以太坊經典**,由貨幣 ETC 表示,而硬分叉版本為 ETH,它繼續隨著持續的開發工作而發展。

**以太坊經典 (ETC)** 已經培養了自己的支持者社群,他們積極參與其開發,將其維持為以太坊原始的、未分叉的版本。

**以太幣** 由礦工作為獎勵生成,作為他們透過交易和區塊驗證來保障網路的計算工作的回報。在以太坊區塊鏈中,以太幣充當在 **以太坊虛擬機器 (EVM)** 上執行合約的媒介。

此外,以太幣還用於購買 gas,gas 充當在以太坊區塊鏈上進行計算的必要燃料。下表給出了不同單位的名稱及其值 -

Different Units and Their Values
廣告