5

I know I can get the current nonce using eth.getTransactionCount(address), but I'm looking for something like eth.getTransaction(address, nonce) (for arbitrary nonce), similarly to eth.getTransactionFromBlock(blockHashOrNumber, index).

An alternative would be to get all (perhaps just recent) transactions that originated from an address.

mazi
  • 443
  • 4
  • 10

1 Answers1

10

You must lookup all transactions made by an account and retrieve the transaction for the nonce you're interested in:

function getTransactionsByAccount(myaccount, startBlockNumber, endBlockNumber, nonce) {
  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 == e.from && nonce == e.transactionIndex) {
          // Do something with the trasaction
          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);
        }
      })
    }
  }
}
Sebi
  • 5,294
  • 6
  • 27
  • 52