Web3js

待處理的交易不完整

  • November 5, 2021

我編寫了一個簡單的 web.js 程序來監控 BSC 鏈上的待處理事務並在控制台上輸出 tx 雜湊。我想監控一個特定的令牌,但現在我正在輸出每個待處理的交易。

然後,我訪問 bscscan 網頁並查看感興趣令牌中的所有交易。在那裡,我可以實時看到交易(該令牌中沒有太多交易)。我看到那裡出現了新的交易,已經確認。我的理解是,在某些時候,交易一直處於待處理狀態,所以我一定在控制台中看到了它,但它們沒有出現。我嘗試過許多不同的 WebSocket 提供程序,但我看到所有這些提供程序的行為相同。

我的程式碼:

const Web3 = require('web3')

const web3 = new Web3(new Web3.providers.WebsocketProvider('HERE I HAVE TRIED WITH DIFFERENT WSS PROVIDERS'));


const subscription = web3.eth.subscribe('pendingTransactions', (err, res) => {
   if (err) console.error(err)
});

subscription.on('data', (txHash) => {
   setTimeout(async () => {

       try{
           console.log(txHash)
       }
       catch (err) {
               console.error(err);
       }
   }, 1000)
});

知道為什麼我看不到所有待處理的交易嗎?

我正在使用與您類似的程式碼,從我的角度來看,我看到了所有交易,只是有延遲,我認為是因為超時。嘗試等待更多時間讓 txHash 記錄或console.log(txHash)在 setTimeout 之前添加以“查看”所有事務。我的程式碼找到了我正在等待的交易,嘗試了很多次並且看起來可以正常工作。

正如其他人指出的那樣,您可能無法查看所有交易的原因有很多。

但是,一個可能的原因是,您在未決訂閱中看到的交易是替代交易(具有相同隨機數但汽油價格高於另一筆交易的交易),而從您的角度來看,被開采的交易是替代交易.

範例:假設發送者發送了帶有 nonce 1 和 5 Gwei 的 gas 價格的交易 A,然後發送了帶有 nonce 1 和 6 Gwei 的 gas 價格的交易 B。您首先收到交易 B(因為網路中的延遲),然後是交易 A。只有交易 B 會出現在您的提要中,因為從您的節點的角度來看 A 是無效的。但是,驗證者可能首先收到了 A,而在區塊被密封時可能還沒有收到 B,因此交易 A 被包含在區塊中。你看到了 B,但 A 被開采了。

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