Web3js

如何繞過 Web3 1.0 的 bug 來檢查交易確認?

  • January 5, 2020

以下包括一個空的 Tx id:

web3.eth.getTransaction('0x2fc36f9c6593bc1232b3466832c6ee38b5b2b3b4a54be3f6c68fb06e8d82e452', function(error, result){ 
 if (!error) {
   console.log(result.blockNumber)
 }
})

您可能希望這會記錄 null 或 undefined,但它會在 Web3.js 1.2.1 中引發。這使得無法通過輪詢使用 getTransaction 來查看交易是否被確認。

checkTx()
function checkTx() {
   web3.eth.getTransaction('0x2fc36f9c6593bc1232b3466832c6ee38b5b2b3b4a54be3f6c68fb06e8d82e452')
       .then((result) => {
           if (result.blockNumber != null) {
               console.log(result.value)
           } else {
               console.log('Not confirmed.')
               setTimeout(() => { checkTx() }, 1000)
           }
       })
} 

在這兩種情況下,當 Tx blockNumber 為空時都會出現此錯誤:TypeError: Cannot read property 'blockNumber' of null

如果我無法評估 的屬性,如何通過輪詢來檢查交易 ID 是否得到確認blockNumber

在您的第一個範例中,您嘗試在result.blockNumber未首先驗證對result像是否有效的情況下進行列印。

在您的第二個範例中,您指的是回調函式的第一個輸入參數,就好像它是對像一樣result,而實際上它是error對象。

簡而言之,試試這個:

web3.eth.getTransaction('0x2fc3...', function(error, result) { 
   if (result && result.blockNumber) {
       console.log(result.value);
   }
   else {
       console.log('Not confirmed');
       setTimeout(() => {checkTx()}, 1000);
   }
});

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