跳至內容
0%

Ethereum 交易如何傳播(廣播)?

Alchemy team headshot

作者 Alchemy

發布於 2022年9月7日閱讀時間 2 分鐘

交易是區塊鏈上資訊與價值交換的基礎,對開發者、交易者和業餘愛好者來說都是必須理解的核心概念。交易會透過多種網路協定(例如 RLPxWire Protocol)在 Ethereum 去中心化的點對點(P2P)網路中傳播,以確保區塊生產者和驗證者能在記憶體池(mempool)中找到待處理的交易。

本文將說明 Ethereum 交易類型,以及交易如何在 Ethereum 的節點網路中廣播。

什麼是 Ethereum 交易?

Ethereum 交易是一個地址向 Ethereum 網路上另一個地址發送代幣或資產的契約過程。一個簡單的 Ethereum 交易範例是:Alice 將 Ethereum 上的原生代幣 1 ETH 發送給她的朋友 Bob。

由於交易是建構區塊鏈應用程式的基礎,讓我們來探討 Ethereum 交易中包含哪些資訊。

Ethereum 交易包含哪些資訊?

在程式語言層級,發送方 Alice 對應到全域變數 msg.sender,接收方 Bob 對應到 address(this) 變數,而雙方之間轉移的代幣數量(1 ETH)則對應到 msg.value

除了上述資料之外,一筆典型的 Ethereum 交易通常都會包含以下細節:

  • Signature - 發送方核准啟動交易的簽章
  • gasLimit - 該交易可使用的最高 gas 數量
  • Nonce - 該筆特定交易的唯一識別碼
  • Data - 可選欄位,用於交易的描述或訊息

Ethereum 交易有哪些不同類型?

Ethereum 交易有多種類型,包括部署智能合約的交易、實體之間(例如人與人)的交易、智能合約之間的交易(內部交易),或是人與智能合約混合的交易,例如使用 DeFi 協定。

在這個部分,我們將聚焦於不同類型的「實體對實體」交易狀態,以及它們與 Ethereum 網路上交易傳播的關係。

1. 待處理(pending)交易池

待處理交易指的是記憶體池中尚未被打包的待處理交易(即單一節點本地儲存中的待處理交易)。

當兩個節點建立連線後,各節點本地交易池的內容會互相分享,讓每個節點都能取得完整的待處理交易清單。

隨著節點在 Ethereum P2P 網路上建立更多連線,發送到單一節點或多個節點的交易會更廣泛地在整個網路中傳播。

2. 已打包的交易

已打包的交易是指從全域待處理交易池(即記憶體池)中被選出,並已納入新區塊、加入區塊鏈的完成交易。

由於鏈重組(reorgs)的存在,一筆已打包的交易可能具有多種確認等級之一。在 The Merge 之前,交易區塊的確認等級只有 latest,每個區塊(約 12 秒)遞增一次;而在 The Merge 之後,交易還可以額外標記為 safe(也稱為 justified)或 finalized,這兩種等級每 32 個區塊(約 6 分鐘)遞增一次。

Safe 區塊是指不太可能被重組的區塊,而 finalized 區塊則是極不可能被重組的區塊。

3. 被丟棄與被替換的交易

被丟棄的交易是指已從全域記憶體池中移除的待處理交易。交易被丟棄的原因可能是發送方的 gas 費用過低,或交易的 nonce 出現錯誤。

被替換的交易是指與記憶體池中現有交易使用相同 nonce 的交易。使用者通常會透過替換交易來提高原始交易的 gas 價格,以便讓交易被納入下一個區塊。當替換交易被確認後,原始交易就會被丟棄。

4. 加強型(reinforced)交易

加強型交易是一種新的 Ethereum 交易類型,透過重新向 Ethereum 節點傳播交易,提高交易被驗證的機率,尤其是在網路活動頻繁、gas 價格波動劇烈的期間。

加強型交易是針對失敗與被丟棄交易的解決方案。

其他交易類型

除了待處理、已打包、被丟棄與被替換,以及加強型交易之外,還有其他交易狀態,包括:

  • Canceled Transactions(已取消的交易) - 一種取消原始交易的替換交易
  • Confirmed Transactions(已確認的交易) - 已被打包並納入區塊鏈的交易
  • EOA Transactions - 一筆或多筆外部帳戶(EOA,通常為個人)之間的交易
  • Failed Transactions(失敗的交易) - 已嘗試但未成功的交易
  • Internal Transactions(內部交易) - 兩個智能合約之間的交易
  • Private Transactions(私人交易) - 直接發送給礦工、繞過公開記憶體池的交易
  • Stuck Transactions(卡住的交易) - 無法被打包的交易
  • Type 0 Transactions - EIP-1559 採用之前的交易
  • Type 2 Transactions - 符合 EIP-1559 更新規範的交易

Ethereum 的 p2p 網路如何運作?

在點對點網路中,使用者同時是網路資源的消費者與提供者。但並非所有 P2P 架構都相同,因此資訊如何被分享、驗證和廣播的機制,是理解整個 Ethereum 網路的關鍵。

在 P2P 網路上,資訊透過節點來分享和儲存。截至本文撰寫時,Ethereum 擁有超過 300,000 個完整節點。以下概述新完整節點如何被加入、相關協定,以及每個節點在處理、驗證 Ethereum 鏈上新區塊時所執行的具體功能。

1. 節點互相發現

Ethereum 使用 bootnodes 來偵測並發現網路上的新節點。當新節點準備好連線時,會向 bootnode 發送稱為 PING 的初始化請求。bootnode 則會以 PONG 訊息回應以建立連結。

一旦建立連結,該節點會向 bootnode 查詢,要求提供附近其他節點的清單。由於 Ethereum 將節點組織成二元樹中的葉節點,「距離」的概念是指任兩個節點之 160 位元 ID 之間的數值鄰近程度。

一旦節點能與附近可用的節點連線,bootnode 的任務就完成了。接下來的同步任務則由 RLPx 協定負責。

2. 節點建立安全連線

RLPx 協定透過允許封包(即小塊資料)的傳送與接收,促成兩個節點之間的同步。封包會使用 RLP 編碼動態封裝,並經過加密與驗證。

節點使用 RLPx 建立安全連線並互相驗證。驗證要求雙方節點都要傳送一則驗證訊息,接著再傳送一則包含連接埠、雙方客戶端與節點 ID,以及協定與子協定資訊的訊息。

一旦節點完成互相驗證,就可以開始使用 Wire protocol 進行通訊。此時這兩個節點被視為對等節點(peers),而對等節點正是節點與整個 Ethereum 網路溝通的方式。

3. 節點同步狀態、區塊,並交換待處理交易池

在這個階段,Ethereum P2P 網路上的新完整節點會與整個協定的狀態達成一致,並開始交換資料。這裡需要區分節點與客戶端這兩個重要概念。雖然這兩個術語經常被交替使用,但客戶端指的是讓節點能夠讀取 Ethereum 區塊鏈上區塊和智能合約的軟體。

Ethereum 上所有完整節點依照Wire protocol都有三項基本任務:

  1. 同步
  2. 區塊傳播
  3. 待處理交易傳播

3A. 鏈與狀態同步

同步分為與鏈的同步,以及與狀態的同步。

在與鏈同步的過程中,對等節點會提出各自可用區塊的難度值與雜湊值。難度值最高的客戶端會下載區塊的標頭。而在狀態同步過程中,對等節點則會驗證資料的原始性,並下載區塊狀態。

3B. 區塊傳播

在區塊傳播過程中,Ethereum P2P 網路上的區塊會被處理並廣播。一旦出現新區塊,客戶端會將其傳送給對等節點,並核准區塊中的交易,藉此進行驗證。

在客戶端驗證並處理該區塊之後,節點必須將其廣播給網路中所有的完整節點或對等節點,讓它們有機會對其有效性提出異議。

3C. 交換待處理(池中)交易

礦工負責將新區塊加入鏈上;因此,所有參與驗證的節點都必須向礦工提供已處理的待處理交易。

要開始這項交換,每個對等節點都必須互相傳送自己所擁有之待處理交易的雜湊值。由於私人交易是直接傳送給礦工或區塊生產者,節點將無法發現並傳播這類交易。

當上述所有任務完成後,礦工便可將新區塊加入 Ethereum 鏈上,然後 Wire protocol 的流程再度開始。

Ethereum 交易如何被傳播?

當某個節點的待處理交易池中出現新交易時,該節點會發出訊號通知整個網路,而對等節點則會透過查詢來取得這些交易,藉此在整個網路中傳播 Ethereum 交易。

流程如下:

  1. 傳播節點透過發布 NewPooledTransactionHashes 訊息,通知網路有新交易。
  2. 或者,對等節點也可以透過發布 GetPooledTransactions 訊息來查詢這些交易

The Merge 之後交易如何被廣播?

自 The Merge 之後,Ethereum 節點擁有兩個獨立的節點客戶端——執行層客戶端與共識層客戶端——各自負責處理交易的不同職責。簡而言之,執行層客戶端負責執行交易並驗證狀態,共識層客戶端則負責接收與傳播新區塊。

以下是關於交易在合併後環境中如何運作的更多細節:

每個節點的共識層客戶端負責接收、預先驗證區塊、將區塊傳遞給執行層客戶端,並在 EL 客戶端完成任務後,將區塊加入區塊鏈頭部,再向網路廣播。

當執行層客戶端從節點的共識層客戶端收到經過預先驗證的區塊後,它負責執行交易、驗證區塊狀態,然後將驗證後的區塊傳回給共識層客戶端。

除了這些變化之外,自 The Merge 以來,Ethereum P2P 網路的其他運作方式都維持不變。

當 CL 客戶端同時也是區塊生產者時,交易如何被廣播?

在合併後的 Ethereum 中,將存在區塊生產者與區塊提議者,而當共識層客戶端同時也是區塊生產者時,交易和區塊在 The Merge 之後的傳播方式會略有不同。關於此細微差異的使用案例,請參閱Ethereum 基金會的網路層文件

Ethereum 交易傳播總結

Ethereum 的全球點對點網路需要節點互相尋找、驗證並安全通訊,以廣播待處理(池中)交易和新打包的區塊。透過一系列低階網路協定,例如 RLPx 和 Wire Protocol,這種節點互聯與資訊傳播的過程,使得跨越 Ethereum 全球運算網路的區塊鏈交易得以實現。

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。