Ich muss meine Transaktions-Nonce kennen, weil ich schicke Sachen mit Vertragsadressen mache (die der Keccak-Hash meiner Adresse + meiner Transaktions-Nonce sind). Gibt es eine Möglichkeit, dies über die JavaScript-Konsole zu finden?
Ihr Kommentar ist richtig: verwenden Sie web3.eth.getTransactionCount(accountAddress)
Beachten Sie, dass der Client (Geth) mit der Blockchain synchronisiert sein sollte.
Wenn Sie keinen Knoten haben und einem Dienst vertrauen möchten, können Sie Infura miteth_getTransactionCount
ausprobieren .
in geth kannst du:
eth.getTransaction('0x0b95eaccd6273fa35bd9e6102c8a7216ee62274940ff52348c8967c13e1c12de')
{
blockHash: "0x24b5d26d4fca736ca095e4c85e0e8230c2e0b1056a5050824a4bccf7dd84e1f2",
blockNumber: 1251275,
from: "0x2a65aca4d5fc5b5c859090a6c34d164135398226",
gas: 90000,
gasPrice: 20000000000,
hash: "0x0b95eaccd6273fa35bd9e6102c8a7216ee62274940ff52348c8967c13e1c12de",
input: "0x",
nonce: 377073,
to: "0xeadefe2cfa52c759e274d6592a938be0217f5877",
transactionIndex: 15,
value: 1011030740000000000
}
eth.getTransactionCount
?Normalerweise erhalte ich die Transaktionsanzahl mit
web3.eth.getTransactionCount(
wallet_address
);
Dies reicht nicht aus, wenn nur wenige Transaktionen gesendet werden, während die alten noch nicht abgebaut sind. Daher verwenden einige Leute die getPendingTransaction
Methode
Wenn, wie ich, mit Infura RPC arbeite, ist diese letzte Methode überhaupt NICHT verfügbar, noch nicht implementiert; absurd, aber das ist.
Ich habe beim Googeln entdeckt, dass wir es getTransactionCount
auf folgende Weise verwenden können
web3.eth.getTransactionCount(
wallet_address,
"pending"
);
Das ist eigentlich nicht dokumentiert, funktioniert aber bei lokaler geth
Installation und mit Infura.
Mit diesem System kann ich in kurzer Zeit eine Reihe signierter Transaktionen nacheinander senden, die alle ausstehen und dann in wenigen Minuten abgebaut werden.
Ethers ist es ziemlich ähnlich zu web3 in Bezug auf getTransactionCount
.
await provider.getTransactionCount('ricmoo.eth');
// 26
Mit dem "pending"-Schalter können Sie die Anzahl der nicht abgebauten TX für diese Adresse erhalten
await provider.getTransactionCount('ricmoo.eth', 'pending');
// 2
Aber Vorsicht: Es ist ziemlich unzuverlässig.
Das
pending
blockTag ist nicht sehr zuverlässig und ich werde es nicht empfehlen. Die Implementierung für Parity und Geth ist ganz anders, wo man den gesamten Transaktionspool untersucht und man die Transaktionen untersucht, die voraussichtlich in den nächsten Block gehen (ich vergesse, welche welche sind), und viele Backends ignorieren sie einfach und verwendenlatest
intern, wennpending
verwendet wird.Im Grunde genommen werde ich mich nicht darauf verlassen, es sei denn, Sie betreiben Ihre eigene Infrastruktur, die das tut, was Sie wollen. :)
https://github.com/ethers-io/ethers.js/issues/435#issuecomment-583808056
Sein Node-JS-Code, um Nonce von jedem Konto zu erhalten: -
const Web3 = require("web3");
const web3 = new Web3(<RPC-Provider-Link>)
var account = "0x60E7B364092B1f8D96C5C92Dxxxxxxxxxxxx"
web3.eth.getTransactionCount(account, (err, nonce) => {
console.log(nonce,err)
})
installiere web3 von npm i web3
. Ändern Sie auch das Konto und den RPC-Provider-Link, bevor Sie die obigen Codes ausführen.
0xcaff
eth
joeytwiddle
web3.eth.getTransactionCount(accountAddress, 'pending')
, um Nonce-Kollisionen zu vermeiden, wenn mehrere Transaktionen parallel ausgeführt werden. (Wenn Sie dies nicht tun, erhalten Sie möglicherweise diese verwirrende Fehlermeldung: "Zurückgegebener Fehler: bekannte Transaktion")eth
jkr