Wie setze ich Nonce richtig in einem Web3-Vertragsaufruf?

Ich habe diesen Code, der funktioniert:

MyToken.airdrop(wallets,amounts,{
  gas: 1267051,
  gasPrice: 2000000000,
},function(err,tx){
  console.log('err is %s',err)
  console.log('tx is %s',tx)
  callback(err,tx)
})

Nehmen wir nun an, ich möchte noncemich selbst steuern ( Grund hier ), also tue ich:

MyToken.airdrop(wallets,amounts,{
  gas: 1267051,
  gasPrice: 2000000000,
  nonce: 432 // = web3.eth.getTransactionCount() + 1
},function(err,tx){
  console.log('err is %s',err)
  console.log('tx is %s',tx)
  callback(err,tx)
})

Ich bekomme einen tx-Hash als Ausgabe, keinen Fehler , aber die Transaktion kann nicht auf dem entsprechenden Etherscan gefunden werden, sie scheint nie an das Netzwerk gesendet zu werden. Versucht bei Rinkeby, Ropsten und Kovan.

Was könnte das Problem sein, noncemich selbst zu spezifizieren oder wie ich es mache?

Hinweis: Ich verwende infuraals "Knoten".

Antworten (1)

Anscheinend gibt es eine Nuance mit der Nonce ... mein Fehler war, dass ich die Nonce auf web3.eth.getTransactionCount() + 1 gesetzt habe, was eine Lücke zwischen der Nonce der vorherigen Transaktion und der Nonce der nächsten Transaktion hinterlassen hat ( Nonces sind 0 indiziert, Transaktionen sind indiziert von 1 , das ist die Wurzel des Fehlers). Es scheint also, dass Sie die Nonce nicht um 2 erhöhen und eine Lücke lassen dürfen. Muss sequentiell sein.

Sie dürfen einen Tx mit einer zu hohen Nonce senden, aber er wird nicht abgebaut, bevor die Lücke gefüllt ist. Und Sie müssen darauf vertrauen, dass die Miner die High-Nonce-Tx in ihrem Tx-Pool behalten, während Sie die Lücke füllen.
Guter Fang! wusste nichts von der Diskrepanz bei der Indizierung.
wäre toll, den funktionierenden Code in Ihrer Antwort zu sehen.