Das Senden der signierten Transaktion gibt ausstehend und event:undefined zurück

Ich versuche, eine signierte Transaktion mit web3 1.0 und Infura.io über den Browser zu senden. Wenn ich es ausführe, bekomme ich keine Fehler, aber die Transaktion trifft nie auf die Blockchain, also bin ich verwirrt darüber, was passiert.

*Siehe das Protokoll unten, um die Details anzuzeigen

<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js"></script>
<script src="https://cdn.rawgit.com/ethereumjs/browser-builds/2fb69a714afe092b06645286f14b94f41e5c062c/dist/ethereumjs-tx.js"></script>

Hier ist das Skript -

var web3 = new Web3();

if(web3.setProvider(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/API KEY'))){
web3.eth.net.isListening();
}

// Get Contract ABI
var abi = JSON.parse('MY ABI')

// Define Variable for Contract ABI
var AK = new web3.eth.Contract(abi);

// Set Contract Address
AK.options.address = "CONTRACT ADDRESS";

// Set amount 
var amountToSend = 100;
var weiAmount = amountToSend * 1e18;

// create transaction - to address, amount
var data = AK.methods.transfer("SEND TO ADDRESS", weiAmount).encodeABI();

// object to hold the transaction data From Address
web3.eth.getTransactionCount("SEND FROM ADDRESS").then(count => {  

// Set transaction params

let privateKey = new EthJS.Buffer.Buffer("FROM ADDRESS PRIVATE KEY", "hex")

web3.eth.getGasPrice().then(gasPrice => {

let txParams = {

nonce: web3.utils.toHex(count),

gasLimit: web3.utils.toHex(250000),

value: web3.utils.toHex(0),

gas: web3.utils.toHex(1000000), 

gasPrice: web3.utils.toHex(web3.eth.gasPrice),

to: "TO ADDRESS",

from: "FROM ADDRESS",

data: data

}

// Sign Transaction 
let tx = new EthJS.Tx(txParams)

tx.sign(privateKey)

let serializedTx = tx.serialize().toString('hex')

var receipt = web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'));

console.log('serializedTx:', serializedTx)
console.log('Receipt:', receipt)

});
});

Wenn ich das Skript ausführe, protokolliert es -

Promise {<pending>, _events: undefined, emit: ƒ, on: ƒ, once: ƒ, off: ƒ, …}
addListener: ƒ (t,e,r)
emit: ƒ (t,e,r,i,o,a)
listeners: ƒ (t,e)
off: ƒ (t,e,r,i)
on: ƒ (t,e,r)
once: ƒ (t,e,r)
removeAllListeners: ƒ (t)
removeListener: ƒ (t,e,r,i)
_events: undefined
__proto__: Promise
[[PromiseStatus]]: "pending"
[[PromiseValue]]: undefined

Antworten (3)

Das sendSignedTransaction(...)gibt ein Promise zurück (dasselbe wie getTransactionCount(...)oben). Eine Möglichkeit, das Ergebnis zu erhalten, besteht darin, Folgendes zu tun:

web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
  .then( receipt => {
    console.log('Receipt:', receipt);
  })
  .catch(e => {
    console.error('Error broadcasting the transaction: ', e);
  });

Die Transaktion wird nicht sofort abgebaut. Es dauert zwischen einigen Sekunden und mehr als einer Stunde (abhängig von Ihrem gas_price und der Netzwerküberlastung), bis es abgebaut und das Ergebnis auf der Konsole ausgegeben wird.

Sie können den Transaktions-Hash abrufen , bevor Sie ihn senden mit:

const tx_hash = tx.hash().toString('hex')

Und suchen Sie einige Sekunden/Minuten nach der Übertragung nach dem Transaktionsstatus auf Etherscan. Wenn die tx gültig ist, sollte sie als ausstehend/bestätigt angezeigt werden.

Danke für die Info, ich habe aber immer noch das gleiche Problem. Ich bekomme einen TX-Hash, aber er trifft nie auf die Blockchain. Ich denke, es könnte etwas mit den Gaspreisen zu tun haben. Ich erhalte keine Quittung oder eine Fehlermeldung.
Wartet das Skript darauf, dass die Versprechen beendet werden, oder wird es sofort beendet? Wird die .catch()Methode ausgelöst? Haben Sie versucht, auf Etherscan nach dem tx_hash zu suchen?
Ja, es wartet etwa 10 Minuten oder so, bevor der Fehler ausgegeben wird, ja, ich suche nach dem TX, aber es existiert nicht
und was ist der Fehler, den Sie bekommen?
Ich erhalte einen Fehler beim Senden der Transaktion: Fehler: Überprüfung auf Transaktionsempfang fehlgeschlagen: {}

Ok, also habe ich es endlich verstanden. Ich musste 2 Probleme beheben, ich musste die Vertragsadresse hinzufügen

"to: "TO ADDRESS", 

Auch hinzugefügt

chainId: web3.utils.toHex('4'), 

zu den txParams und jetzt funktioniert alles wie es soll.

Ich hatte hier das gleiche Problem und fand ein vorübergehendes Problem:

Das Problem war mit dem web3-Pach, ich habe die Version "1.0.0-beta.52" verwendet. Also kehrte ich zu "1.0.0-beta.37" zurück und alles funktionierte.

Ich weiß nicht, warum es mit der neuen Version nicht funktioniert hat ... übrigens