Web3js
如何繞過 Web3 1.0 的 bug 來檢查交易確認?
以下包括一個空的 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); } });