5

I am trying to retrieve blockchain transaction data on my node using JSON RPC API, but I get no result.

For example this request :

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' 

Give me this result :

{"jsonrpc":"2.0","id":1,"result":null} 

What am I missing to get something like ? :

"id":1, "jsonrpc":"2.0", "result": { "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "nonce":"0x", "blockHash": "0xbeab0aa2411b7ab17f30a99d3cb9c6ef2fc5426d6ad6fd9e2a26a6aed1d1055b", "blockNumber": "0x15df", // 5599 "transactionIndex": "0x1", // 1 "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1", "value":"0x7f110" // 520464 "gas": "0x7f110" // 520464 "gasPrice":"0x09184e72a000", "input":"0x603880600c6000396000f300603880600c6000396000f3603880600c6000396000f360", } 

PS : my node is still syncing (block #1504330 / #2074754)

Any ideas ? Thanks

1 Answer 1

1

Use geth IPC directly since it's much easier to use. Modify the following code:

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); } }) } } } 

you would get something like:

function getTxFromBlock(blockIndex, txIndex) { block = eth.getBlock(blockIndex, true); return block.transactions[txIndex]; } 

Obviously you should do some checking over the indexes so that they are in a valid range.

1
  • Thanks for your answer, in fact JSON RPC API works well, but I was querying early blocks without tx data :) Commented Aug 17, 2016 at 14:41

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.