以太坊交易池處理邏輯

2021-09-13 00:14:34 字數 1315 閱讀 9721

以太坊網路中,我們傳送一筆交易時,可能傳送成功,也可能傳送失敗,那麼交易是如何判斷能否傳送成功的呢。當我們傳送交易後,交易會被廣播到礦工,礦工會監聽交易的廣播,然後把交易放到本地的交易池中等待處理,但是交易能否放到交易池中,以及在交易池中的交易如何處理的,具體如下:

當交易進入交易池(tx_pool)時,礦工節點會做以下驗證:

通過交易hash判斷交易在交易池中是否存在,如果存在就使用新的交易替換以前的交易

驗證交易的合法性,如長度、value、是否溢位當前區塊的gaslimit、nonce值等、gas是否足夠,如果驗證不通過就會返回對應的錯誤**

驗證是否孤兒交易,如果是就本地儲存,不**,防止ddos攻擊

如果交易池滿了,就會驗證交易gas是否比當前交易池中的最低gas低,如果低於交易池的最低gas會返回errunderpriced,如果高於最低值,就剔除最低gas的交易。發生這種情況後,在etherscan中會發現在這筆交易pending中消失了(也有很大機率依然能夠查到這筆交易在pending列表中,因為etherscan連線了很多節點,每個節點的交易池的狀態都是不一樣的,那條被踢出的交易可能在別的節點中仍然處於pending狀態)

如果交易已經在交易池中,會判斷gas是否高於上一條相同nonce的交易gas某乙個閾值(預設10%),如果gas高於,就剔除前一筆交易,就使用新的交易替換前一筆交易,如果沒有高於當前的交易就會返回失敗

按順序放入到交易池中,等待打包

等待新的交易加入到交易池,會重複上述步驟。

在明白上述邏輯之前我們需要了解幾個細節

礦工不能在乙個區塊中打包任意多的tx(只能盡可能多的打包),因為乙個區塊有gaslimit限制和區塊大小限制。

礦工執行以太坊例項時,是可以根據需要修改最低的gasprice值,這樣可以過濾很多低gas的交易。

交易池容納的交易數預設是有上限的。以太坊的txpool中的pending集合(miner是從pending中拿交易組裝block的)中容納的交易數量預設設定為最大4096。但是在geth v1.6.2中支援外部重置交易池預設配置。具體是–txpool.globalslots value。在parity v1.6.8中也支援外部設定,具體是--tx-queue-size limit。parity預設是1024。乙個賬戶預設只能放16條交易到pending中,滿了以後,第17條乃至以後更多的交易會有一套規則來替換先前位於pending中的16條交易。

歡迎訂閱「k叔區塊鏈」 - 專注於區塊鏈技術學習

segmentfault主頁:

以太坊交易教程

最近很多人都在問我挖出來的以太坊如何交易,我在這裡系統的給大家進行介紹。目前以太坊等虛擬貨幣有兩種交易方式,我具體的講述一下。場外交易就是個人與個人之間的交易,有一些 提供了這樣的交易方式,就跟 很類似,有一些人在 上掛出一些買的訂單或者賣的訂單,如果你對他的訂單滿意,你就可以跟他進行交易,值得注意...

以太坊交易簽名

以太坊的transcation結構如下 以下為交易本身資料資訊 let accountnonce uint64 let price bigint let gaslimit bigint let recipient address let amount biguint var payload data...

以太坊是什麼?以太坊交易可靠嗎?

以太坊 ethereum 是乙個開源的有智慧型合約功能的公共區塊鏈平台,為眾多加密資產和去中心化應用提供底層支援,被稱為位元幣區塊鏈之後的 第二代區塊鏈 其網路原生加密貨幣為以太幣 ether,簡稱eth 也有以 以太坊 代指以太幣的說法。以太坊 以太幣 作為早期的加密貨幣之一,因其平台在金融生態發...