Web3js
待處理的交易不完整
我編寫了一個簡單的 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 被開采了。