¿Por qué no se realiza mi transacción?

Escribí el siguiente script para enviar Ether. No puedo entender por qué el saldo sigue siendo el mismo después de enviar el Ether. Vuelvo a ejecutar este script varias veces, pero nada cambia con el saldo. Incluso cuando reviso la red blockchain en https://ropsten.etherscan.io/address/0xbf14644246ebb0209bdb03be0cd1a3b27fc009af

No veo ni los Ethers de prueba que extraje ni la transacción.

Actualmente estoy usando la red de pruebageth --testnet

¿Lo que está mal?

var Web3 = require('web3');
var web3 = new Web3();

web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));

var coinbase = web3.eth.coinbase;
console.log('coinbase address',coinbase);

var balance = web3.eth.getBalance(coinbase);
console.log('balacance', balance.toString(10));

var recipient_address =  web3.eth.accounts[1]
console.log('recipient address',recipient_address);

web3.personal.unlockAccount(coinbase, 'love2017');
console.log('coinbase address',coinbase);
web3.eth.sendTransaction({
    from: coinbase,
    to:recipient_address ,
    gas: 200000,
    value: web3.toWei(1, "ether"),

}, function (err, address) {
    if (!err) {
        console.log('success transaction address is', address); // "0x7f9fade1c0d57a7af66ab4ead7c2eb7b11a91385"
        var balance = web3.eth.getBalance(coinbase);
        console.log('balance', balance.toString(10));

    } else {
        console.log(err)
    }
});

Esto es lo que me sale en la consola:

coinbase address 0xbf14644246ebb0209bdb03be0cd1a3b27fc009af
balacance 8930000000000000000000
recipient address 0x15fd7829542d2e851a9787d76f027992b89b2398
coinbase address 0xbf14644246ebb0209bdb03be0cd1a3b27fc009af
success transaction address is 0x093b9306e7b0517e105168b9cd4f42344eddcb7cfa10e9f6d9a095cf9cd1e66c
balance 8930000000000000000000
¿Es geth --testnet o geth --testnetwork? prueba el primero

Respuestas (3)

Tal vez, el saldo sea el mismo, porque tx aún no se extrajo, cuando verificó el saldo por segunda vez. Intente agregar la función, que verificará, esa transacción extraída y verificará el saldo en la devolución de llamada. Algo como esto:

function getTxCallBack(txHash, cb) {
  web3.eth.getTransaction(txHash, function(err, txDetails) {
    if (err) console.log(err);

    if (!txDetails.blockNumber) {
      setTimeout(function() {
        getTxCallBack(txHash, cb);
      }, 2000)
    } else cb();
  });
};

web3.eth.sendTransaction({...}, function (err, address) {
    if (!err) {
        getTxCallBack(address, function() {
            var balance = web3.eth.getBalance(coinbase);
            console.log('balance', balance.toString(10));
        });
    } else console.log(err);
});

Verifique que geth esté completamente sincronizado con la red. Puedes comprobarlo en tu consola geth,

> eth.blockNumber

debe tener el último número de bloque.

  1. no necesita configurar un nodo ETH sincronizado completo.
  2. entra en infura y regístrate
  3. haga su transacción firmada (busque en Google cómo hacerlo)
  4. especialmente, debe establecer un nonceparámetro correcto al firmar la transacción
  5. tienes una cadena de transacción (tal vez 255 bytes de longitud)
  6. transmitirlo a través de la interfaz infura.

¡está hecho!