Go-Ethereum
web3 sendTransaction 返回 tx 但 getTransaction 在 Geth 重新啟動時返回 undefined
js程式碼:
const Web3 = require('web3'); const web3 = new Web3(); const {eth, personal} = web3; web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); personal.unlockAccount(eth.coinbase, '1234567890'); const tx = eth.sendTransaction({ from: eth.coinbase, data: web3.toHex('Hello World'), }); console.log(eth.getTransaction(tx));
並用 bash 執行它:
geth --dev \ --rpc --rpcaddr "0.0.0.0" --rpcapi "admin,miner,txpool,personal,eth,net,web3" \ --mine & GETH_PID=$! sleep 3 node web3.js sleep 1 kill -s 9 $GETH_PID
Node.js 腳本輸出為:
{ blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000', blockNumber: null, from: '0xdfb1b9b8693366eb9044ffd8c00058abc904558b', gas: 90000, gasPrice: { [String: '20000000000'] s: 1, e: 10, c: [ 20000000000 ] }, hash: '0x0b4f742149fc3018a168950b56786846da99675913dbc043971cbe25ac7792ac', input: '0x48656c6c6f20576f726c64', nonce: 2, to: null, transactionIndex: null, value: { [String: '0'] s: 1, e: 0, c: [ 0 ] } }
但有時我重新啟動 Geth 時沒有這樣的事務。需要將多長時間的交易放入一個區塊以及如何檢查它是否被添加/拒絕?
在你getTransaction之前,檢查txpool.status.pending,看看pending = 0。大於0意味著你的節點中有待處理的交易。
或者您可以呼叫 eth.getBlock(“pending”),查看您的交易是否在待處理塊中。
–
只有當節點挖出成功且交易進入區塊後,交易狀態才會從待處理狀態變為上鍊狀態。為確保交易有效,您最好等待大約 12 個確認(區塊),也就是大約 3 分鐘。