Um eine Liste der Transaktionen nach Kontoadresse zu erhalten, habe ich das folgende Code-Snippet verwendet -
function getTransactionsByAccount(myaccount, startBlockNumber, endBlockNumber) {
if (endBlockNumber == null) {
endBlockNumber = eth.blockNumber;
console.log("Using endBlockNumber: " + endBlockNumber);
}
if (startBlockNumber == null) {
startBlockNumber = endBlockNumber - 1000;
console.log("Using startBlockNumber: " + startBlockNumber);
}
console.log("Searching for transactions to/from account \"" + myaccount + "\" within blocks " + startBlockNumber + " and " + endBlockNumber);
for (var i = startBlockNumber; i <= endBlockNumber; i++) {
if (i % 1000 == 0) {
console.log("Searching block " + i);
}
var block = eth.getBlock(i, true);
if (block != null && block.transactions != null) {
block.transactions.forEach( function(e) {
if (myaccount == "*" || myaccount == e.from || myaccount == e.to) {
console.log(" tx hash : " + e.hash + "\n"
+ " nonce : " + e.nonce + "\n"
+ " blockHash : " + e.blockHash + "\n"
+ " blockNumber : " + e.blockNumber + "\n"
+ " transactionIndex: " + e.transactionIndex + "\n"
+ " from : " + e.from + "\n"
+ " to : " + e.to + "\n"
+ " value : " + e.value + "\n"
+ " time : " + block.timestamp + " " + new Date(block.timestamp * 1000).toGMTString() + "\n"
+ " gasPrice : " + e.gasPrice + "\n"
+ " gas : " + e.gas + "\n"
+ " input : " + e.input);
}
})
}
}
}
Beim Ausführen des Skripts erhalte ich jedoch die folgende Fehlermeldung.
Error: invalid argument 0: hex string without 0x prefix
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at getTransactionsByAccount (/root/files/js/getTransactionsByAccount.js:16:18)
at <anonymous>:1:43
Bei weiterer Fehlerbehebung wurde festgestellt, dass Blöcke weniger als 1000 waren
eth.blockNumber
> 41
Als Ergebnis startBlockNumber
ist negativ (seit 41-1000). Als Ergebnis eth.getBlock(i, true);
wird nach einem kraftschlüssigen Block gesucht.
Es wäre besser gewesen, wenn der Fehler hinweisend gewesen wäre.
Lösung -
...
if (startBlockNumber == null) {
startBlockNumber = endBlockNumber - 1000;
if(startBlockNumber<0)
startBlockNumber=0;
console.log("Using startBlockNumber: " + startBlockNumber);
}
...