Gas

礦工如何選擇交易?

  • March 29, 2020

事務執行的部署受block gas limit動態變化的約束。如果一個區塊只適合一個交易,那麼理論上每筆交易的氣體限制與區塊氣體限制相同。截至 2020 年,這一限制約為 1000 萬。每筆交易的最低基本成本為 21,000 gas。


在此處輸入圖像描述


從這個問題的答案中,交易如何儲存在一個塊中?@理查德·霍羅克斯:

但是,礦工可以隨意訂購交易,只要訂單等同於一組有效的狀態轉換。

**$$ Q $$**因此,交易順序是由礦工決定的,但要包含在區塊中的交易是如何決定的呢?

據我所知,礦工根據gasPrice * gasLimit. 使用非常高的氣體限制會以某種方式讓您的交易執行得更慢嗎?@iamdefinitelyahuman:

推理:礦工尋求在每個區塊內最大化他們的利潤。呼叫的eth_estimateGas計算量可能很大,因此礦工通常不會確定每筆交易將消耗的實際氣體。相反,他們計算gasPrice * gasLimit每個給定的交易,並據此確定要開采的最具成本效益的交易集。


**=>**例如,我送出了一個非常高的交易,gasPrice它有 10,000,000 gasLimit。它被選中並添加到一個塊中。由於它消耗了gasLimit一個塊的所有內容,因此不包括其他交易。

之後,在執行過程中,我的交易只消耗了 21,000 的 gas,剩餘的部分退還給我。該區塊仍有 9,979,000 的 gas 需要消耗。選定交易執行完成後,礦工能否動態添加更多交易?

或者所有交易都是靜態決定的,執行完成後無法更新。如果是這種情況,礦工往往會優先考慮大量較小的 tx,而不是較大的 tx,並且永遠不會部署較大的 tx。

**=>**礦工是否有共同的算法來決定要包含在區塊中的交易?比方說,是否會生成所有待處理交易的組合,以便使用蠻力或貪婪算法選擇最有利可圖的交易?由於時間對於首先解決難題非常重要,因此決定將交易包含到塊中可能會消耗額外的時間。

如何決定要包含在區塊中的交易?

簡短的回答

他們想要的任何方式。

它不是確定性的,也不受協議約束。

一筆交易,gasPrice 非常高,gasLimit 為 10,000,000。

由於您給出的範例,僅從 gasLimit 工作將是一個非常低效的礦工。執行時,交易只使用了非常少量的gas,因此只支付了非常少的費用。

從礦工的角度來看,“實際”成本和估計成本沒有區別。這是因為礦工確實在確定規範的交易順序。如果這有點神秘:

  1. 由於未知的先驗條件(開採時)和條件邏輯(例如循環更多次 == 更多氣體),交易可能會有一些不可預測的成本。因此,發件人通常會用足夠的 gas 填充 gasLimit 以應對最壞的情況,因為他們知道無論如何他們都會收到退款。
  2. 礦工正在按照確定的順序將待處理的交易打包到一個提議的區塊中,這樣他們就可以排練交易並準確找出在這種情況下的成本 - 所以燃燒的氣體是更好的數字,他們可能應該使用它。

選定交易執行完成後礦工能否動態添加更多交易

是的。他們就是這樣做的。他們正在玩帶有待處理交易的俄羅斯方塊,並試圖優化打包成塊的 gas * 價格。他們所做的一切都是假設性的。他們可以排練交易(實際的 gas 成本)並打包區塊,但在他們找到難以捉摸的 nonce 並廣播他們的區塊之前,什麼都沒有最終確定。隨著新交易的到來和新機會的出現,重新安排配置沒有任何限制。

直覺地

要真正了解優化和算法,請考慮深入研究流行礦工的原始碼。我不確定他們是如何做到的,因為“他們想要的任何方式”涵蓋了我的很多擔憂。話說回來 …

如果我正在解決這個問題,我想我會遵循一種算法,比如包裝一個集裝箱,我希望在有限空間內獲得最大可能的質量。

一種可能幼稚但簡單的方法是按密度/gasPrice 對盒子/交易進行排序,然後按該順序(降序)填充它們。那會留下一些空洞。

塊是一維空間,因此我們不必擔心額外空間的形狀。因此,只需將最高的 gasPrice(任何大小/任何燃氣消耗)填充到所有可用空間中,然後繼續前進,直到沒有剩餘的 gasLimit 可供使用。

將有機會在接近尾聲時進行小型、低 gasPrice 交易,因為算法將尋找任何足夠小的東西來填充最後剩餘的空間。這將有利於實際適合的最高 gasPrice 的交易。

我認為它的實際情況更加微妙,因為礦工還必須優化對隨機數的搜尋,並且可能不應該在新交易到來時花費太多時間進行重組。我經常對自己想知道他們重新評估的頻率。總體而言,主要關注區塊獎勵的搜尋而不是停下來完全優化交易費用可能確實更有效。此外,礦工使用不同方法的可能性具有平衡網路整體執行方式的效果。例如,如果一些礦工忽略了大筆或小筆交易,那麼這種偏差會被其他算法用其他方法來平衡。

作為 dApp 開發人員或使用者,通常只需了解交易的優先級大致由 gasPrice 確定,大型交易可能需要一些時間,因為他們需要大量的區塊,並且允許礦工在協議限制內做任何他們想做的事情,主要是阻塞gasLimit。

希望能幫助到你。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/80361