Wie überprüfe ich das Ethereum-Guthaben und die Anzahl der eindeutigen Transaktionen eines Smart Contracts über einen bestimmten Zeitraum?

Grundsätzlich möchte ich in der Lage sein, den Saldo von Smart Contracts und einzigartige Transaktionen über einen bestimmten Zeitraum zu verfolgen, z. B. die letzten 24 Stunden, die letzte Stunde und so weiter.

Was wäre der beste Ansatz, um dies zu tun? Wie soll ich die Daten speichern, die ich erhalte, um meine API, SQL/NoSQL-Datenbank zu erstellen?

Vielen Dank im Voraus!

Antworten (1)

Sie können das Ether-Guthaben eines Smart Contracts in jedem Block abrufen, indem Sie den Web3 JSON RPC verwenden, der durch Web3-Bibliotheken wie Web3.js verfügbar gemacht wird:

erhaltenBalance

web3.eth.getBalance(address [, defaultBlock] [, callback])

Wie Sie sehen können, unterstützt dieser Funktionsaufruf einen "Block"-Eingang, der verwendet werden kann, um den Ether-Saldo der angegebenen Adresse an einem bestimmten Block abzurufen.

Blöcke werden nicht in perfekten Intervallen erstellt, aber Sie sollten in der Lage sein, den benötigten Block anzunähern, indem Sie davon ausgehen, dass die durchschnittliche Blockzeit ~15 Sekunden beträgt.

Sie können dann bestätigen, dass Sie den richtigen Block haben, indem Sie den timestampWert aus dem Block ( web3.eth.getBlock()) abrufen und bei Bedarf anpassen.

Diese Art von Logik ist in diese JavaScript-Anwendung integriert: ETH Balance Graph ( Code )


Das Ermitteln der Transaktionsanzahl für den Vertrag ist komplizierter, da eingehende Transaktionen für einen Vertrag nicht vom Netzwerk indiziert werden.

Meine Vorschläge wären, die Transaktionen zu verfolgen, die ein Ereignis ausgeben .

Sie können alle vergangenen Ereignisse für einen Vertrag abrufen mit:

getPastEvents

myContract.getPastEvents(event[, options][, callback])

Daraus sollten Sie eine ziemlich gute Vorstellung von der Aktivität des Smart Contracts im Laufe der Zeit bekommen. Insbesondere, wenn es sich bei dem Vertrag um einen ERC20-Token handelt, der bei jeder Übertragung von Token ein TransferEreignis ausgeben muss und dasselbe Ereignis ausgeben sollte , wenn Token erstellt werden.

Um jedoch wirklich alle internen und externen Transaktionen zu erhalten, müssten Sie jeden Block seit der Vertragserstellung durchlaufen und nach diesen Transaktionen suchen (soweit ich weiß). Dies ist, was Etherscan tut, und ist keine triviale Aufgabe.

Wenn ich einen bestimmten Vertrag im Auge behalten möchte, kann ich etwas Ähnliches wie einen Cron-Job mit „subscribe“ verwenden? Wenn ein Smart Contract kein Ereignis ausgibt, besteht die einzige Lösung zur Verfolgung seiner Transaktionen darin, sie zu speichern?
Das Beste, was Sie tun können, ist, jeden Block zu verfolgen, sich jede Transaktion in diesem Block anzusehen und nach Transaktionen zu suchen, die den Vertrag aufrufen, an dem Sie interessiert sind. Dies kann beginnend mit Abonnement erfolgen, das Sie benachrichtigen kann, wenn neue Blöcke vorhanden sind erstellt.
Gibt es eine andere Möglichkeit, Ereignisse allgemeiner zu verfolgen? Zum Beispiel mein eigenes allgemeines Ereignis definieren und dieses für jeden Smart Contract verwenden, den ich verfolgen möchte?
Sie müssen der Vertragsentwickler sein, um ein Ereignis zu definieren, das Ihr Vertrag ausgibt. Es ist Bestandteil des Vertragscodes. Wenn Sie der Vertragsentwickler sind, können Sie praktisch jederzeit beliebige Ereignisse ausgeben.
Ich bin nur ein Dritter, der die Verträge anderer Personen verfolgen möchte :\