Go-Ethereum

web3 sendTransaction 返回 tx 但 getTransaction 在 Geth 重新啟動時返回 undefined

  • June 25, 2021

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 分鐘。

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