Warum funktioniert meine Transaktion nicht?

Ich habe das folgende Skript geschrieben, um Ether zu senden. Ich kann nicht herausfinden, warum das Gleichgewicht immer noch dasselbe ist, nachdem ich den Ether verschickt habe. Ich führe dieses Skript mehrmals aus, aber am Gleichgewicht ändert sich nichts. Auch wenn ich das Blockchain-Netzwerk unter https://ropsten.etherscan.io/address/0xbf14644246ebb0209bdb03be0cd1a3b27fc009af überprüfe

Ich sehe weder die Test-Ether, die ich geschürft habe, noch die Transaktion.

Ich nutze derzeit das Testnetzgeth --testnet

Was ist falsch?

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

Das bekomme ich in der Konsole:

coinbase address 0xbf14644246ebb0209bdb03be0cd1a3b27fc009af
balacance 8930000000000000000000
recipient address 0x15fd7829542d2e851a9787d76f027992b89b2398
coinbase address 0xbf14644246ebb0209bdb03be0cd1a3b27fc009af
success transaction address is 0x093b9306e7b0517e105168b9cd4f42344eddcb7cfa10e9f6d9a095cf9cd1e66c
balance 8930000000000000000000
ist es geth --testnet oder geth --testnetwork? versuche es mit dem ersten

Antworten (3)

Vielleicht ist das Guthaben das gleiche, weil tx noch nicht abgebaut wurde, wenn Sie das Guthaben zum zweiten Mal überprüfen. Versuchen Sie, eine Funktion hinzuzufügen, die überprüft, ob die Transaktion abgebaut wurde, und überprüfen Sie den Kontostand im Rückruf. Etwas wie das:

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

Überprüfen Sie, ob Geth vollständig mit dem Netzwerk synchronisiert ist. Sie können es auf Ihrer Geth-Konsole überprüfen,

> eth.blockNumber

Sie sollten die letzte Blocknummer haben.

  1. Sie müssen keinen vollständig synchronisierten ETH-Knoten einrichten.
  2. gehe zu infura und registriere dich
  3. Führen Sie Ihre signierte Transaktion durch (googlen Sie, wie es geht)
  4. nonceInsbesondere müssen Sie beim Signieren der Transaktion einen korrekten Parameter festlegen
  5. Sie haben eine Transaktionszeichenfolge (vielleicht 255 Byte lang)
  6. übertragen Sie es über die infura-Schnittstelle.

es ist fertig!