Transactions

為什麼通過 web3.py 和 Infura.io 同時發起多筆交易時確認主網上總是有 1 個區塊相隔

  • November 22, 2021

1.我需要在最快的時間內向同一個合約地址發起多筆交易並獲得網路確認。意味著多個交易記錄在同一個塊中。

2.通過使用Web3.py和Infura.io。在kovan網路上測試通過了。但是在Mainnet上,同時發起的每筆交易都在相隔1個區塊的區塊上得到確認。

3.gas上限為100萬,gas價格為即時最高價。

4.Nonce是沒有問題的。我通過getTransactionCount()獲取第一筆交易nonce,然後自己設置第二筆交易(nonce+1),保證nonce的正確性,在kovan網路上測試通過。

在此處輸入圖像描述

在此處輸入圖像描述

當然,主網上的交易擁塞比測試網上的要多得多,礦工的記憶體池已經滿了。雖然在測試網上,區塊並不總是滿的(== 達到氣體限制),但在主網上,必須仔細選擇交易以盡可能接近所選的區塊氣體限制。

也可能是(礦工)客戶端的配置方式使所有發送者之間更加平等,並且每個塊中每個發送者只接受一個交易(如果沒有給出某些條件,也許 - 擁有多個交易並非完全不可能每個塊每個發件人,但這種情況非常非常罕見。)

您可以通過提高 gas 價格來增加您的機會,但無法保證多個交易將包含在同一個區塊中。(除了成為礦工,你自己)

如果你想在第一筆交易和第二筆交易之間爭先恐後地做某事,請注意礦工可以“搶先”你。他們可以故意延遲您的第二筆交易並在兩者之間執行自己的交易。如果他們這樣做有經濟動機,他們可能會這樣做。

如果您必須在同一個塊中發生兩個函式呼叫,那麼您可以通過使用順序呼叫這兩個函式的智能合約來組合它們。因此,如果事務 1 正在呼叫 contract A, function foo(),而事務 2 正在呼叫 contract B, function bar(),那麼您可以進行合約呼叫:

contract C {
 function grouped() {
   A.foo();
   B.bar();
 }
}

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