Gibt es eine Möglichkeit, die aktuelle Transaktion eines Kontos zu finden?

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?

Antworten (5)

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 .

Was ist, wenn es Ihnen gelingt, bei einer vorherigen Transaktion eine Nonce größer als Ihre Transaktionsanzahl festzulegen? Wie bekommt man dann die Nonce?
@0xcaff Ich verstehe deine Frage nicht, kannst du das bitte klarstellen? Wenn der Client synchronisiert ist, liefert er immer die richtige Nonce ...
Ich empfehle die Verwendung 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")
Guter Punkt, Joeytwiddle und vielleicht das, was @0xcaff gefragt hat.
web3.py die Funktion ist jetzt web3_eth.get_transaction_count(account, block_identifier=web3.eth.default_block)

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
}
Was ist, wenn ich meinen letzten Transaktions-Hash nicht kenne? Kann ich die Nummer von verwenden eth.getTransactionCount?
Ich würde mehr sagen mit eth.getTransactionFromBlock(block hash #) no ?
Aber wenn ich den Block meiner letzten Transaktion auch nicht kenne, dann muss ich alle Blöcke durchsehen, was nicht ideal ist.
Das gelbe Papier besagt, dass die Transaktions-Nonce gleich der Anzahl der Transaktionen ist, die von der Adresse gesendet werden.
Sie sollten die richtige Antwort auf die eine umkehren, die @eth getan hat;)

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 getPendingTransactionMethode

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 getTransactionCountauf folgende Weise verwenden können

web3.eth.getTransactionCount(
   wallet_address,
   "pending"
);

Das ist eigentlich nicht dokumentiert, funktioniert aber bei lokaler gethInstallation 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.

Warnung: Diese Funktion mit der Option "Ausstehend" kann Ihr Konto blockieren, genauso wie meins hängen geblieben ist. Ich konnte nicht bereitstellen und prägen. Es wird empfohlen, die Funktion ohne diese Option zu verwenden. Erklärung: github.com/ethers-io/ethers.js/issues/…

Ethers ist es ziemlich ähnlich zu web3 in Bezug auf getTransactionCount.

Bezug

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 pendingblockTag 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 verwenden latestintern, wenn pendingverwendet 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.