Ich möchte die Anzahl der Transaktionen eines Kontrakts in einem bestimmten Zeitraum ermitteln. Meine Frage ist, dass in der Transaktionsquittung, wenn wir sagen wollen, dass Vertrag A x Transaktionen hat, dies nur die Transaktionen sind, die von diesem Vertrag gesendet werden, oder sie werden auch die an ihn gesendeten sein, dh die Summe der Transaktionsnummern mit diese Vertragsadresse in die Felder „An“ und „Von“ des Transaktionsbelegs eintragen.
Wenn der Vertrag Protokolle für jede empfangene Transaktion ausgibt, müssen Sie nur nach den vom Vertrag ausgegebenen Protokollen suchen.
Sie können dies mit etherescan tun: https://etherscan.io/apis#logs
Zum Beispiel: https://api.etherscan.io/api?module=logs&action=getLogs &fromBlock=379224 &toBlock=latest &address=0x33990122638b9132ca29c723bdf037f1a891a70c &apikey=YourApiKeyToken
gibt eine Liste aller vom Vertrag generierten Protokolle zurück (vorausgesetzt, ein einzelnes Ereignis pro Transaktion)
Beachten Sie, dass Sie entscheiden können, ab welchem Intervall (in Blöcken) gesucht werden soll.
Die einzigen möglichen Vorbehalte sind:
Dies hängt davon ab, was Sie unter „Transaktion“ und was unter „Vertragsabschluss“ verstehen.
Für Transaktion könnte es mindestens zwei Bedeutungen geben:
Mögliche Bedeutungen für „Abschluss eines Vertrages“ sind:
Sie müssen verschiedene Ansätze verwenden, um verschiedene Arten von Transaktionen im Zusammenhang mit dem Vertrag auf unterschiedliche Weise zu erkennen und zu zählen. In einigen Fällen reicht die Web3-API aus, aber in den anderen Fällen müssen Sie Transaktionen nachverfolgen, die alle die etherescan.io-API verwenden.
Wenn Sie einen Geth-Knoten ausführen; Sie können dieses Skript verwenden, um die Anzahl der Transaktionen eines Vertrags in einem bestimmten Blockbereich zu berechnen.
function countNumberOfContractTxs(contractAddress, blockStart, blockEnd) {
var incominngCount = 0;
var outgoingCount = 0;
contractAddress = contractAddress.toLowerCase()
if(!blockEnd) blockEnd = eth.getBlock('latest').number
for(var blockNum=blockStart; blockNum<blockEnd; blockNum++) {
var txs = eth.getBlock(blockNum).transactions;
if(!txs.length) continue;
for(var j=0; j<txs.length; j++) {
var tx = txs[j]
var txDetail = eth.getTransactionReceipt(tx)
if(txDetail.status == '0x0') continue;
if(txDetail.from.toLowerCase() == contractAddress) outgoingCount++
if(txDetail.to.toLowerCase() == contractAddress) incominngCount++
}
}
console.log(incominngCount, outgoingCount)
}
Fügen Sie diese Funktion einfach in die Geth-Konsole ein und rufen Sie sie wie eine normale Vertragsfunktion auf. Der letzte Parameter ist optional und das Skript prüft nur auf erfolgreiche Übertragungen.countNumberOfContractTxs(<contractAddress>, startBlock, endBlock)
BENUTZERBILD
mzaidi
BENUTZERBILD
mzaidi
Jaime
BENUTZERBILD
mzaidi
mzaidi
Jaime