web3 sendTransaction devuelve tx pero getTransaction vuelve indefinido cuando se reinicia Geth

codigo 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));

Y ejecutarlo con 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

La salida del script de Node.js es:

{ 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 ] } }

Pero a veces no hay tal transacción cuando reinicio Geth. ¿Cuánto tiempo deben colocarse las transacciones en un bloque y cómo verificar si se agrega/rechaza?

Respuestas (1)

antes de obtener Transacción, verifique txpool.status.pending, vea si está pendiente = 0. mayor que 0 significa que hay transacciones pendientes en su nodo.

o puede llamar a eth.getBlock("pendiente"), ver si su transacción está en el bloque pendiente.

--

solo después de que el nodo se extrajo con éxito y con la transacción en el bloque, el estado de la transacción cambiará de pendiente y se incluirá en la cadena. para asegurarse de que la transacción sea válida, es mejor que espere alrededor de 12 confirmaciones (bloqueos), eso es alrededor de 3 minutos.

He leído sobre el ataque a ethereum que agrega varios segundos a cada generación de bloques. ¿Es sensitivo? ¿Puedo calcular bloques de confirmación en lugar de eso?