Codementor Events

Ethereum Transaction Details for Humans

Published Sep 30, 2018
Ethereum Transaction Details for Humans

When working on one of my projects, it was asked “How do we ensure that transaction was indeed recorded on the blockchain”

While we can (and did) store the transaction hash returned by the function call in the database, txn_hash alone does no good.

e.g. “Official” method to get the details of the transaction (from thetxn_hash) returns something like the following:

web3.eth.getTransaction('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b§234')
.then(console.log); 
> { 
   "hash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b",  
   "nonce":2,
   "blockHash":"0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", 
   "blockNumber": 3,
   "transactionIndex": 0, 
   "from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", 
   "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f", 
   "value": '123450000000000000', 
   "gas": 314159, 
   "gasPrice": '2000000000000', 
   "input": "0x57cb2fc4"
}

It doesn’t really mean much - even to the developers. Sure from and toaddresses provide some useful data, but we don’t know what “operation” was performed and with what data. (The data is in the input field shown above, but does not make sense “as-is”)

What if you could see something like the following, instead ?

{ name: 'mintToken', 
  types: ['address', 'uint256'], 
  inputs: ['5bb4b21e60d0033a1b86b83e4a1f8307ab2d01f9', <BN: 64>] 
}

You get the function name , not an address, and the parameters passed to the function - which can be “somewhat” useful, depending on the the types of parameters.

e.g. in the above sample, the first input param is the address and the second one - a number.

It may be easy to guess (from the function name) that we are minting 0x64 i.e. 100 tokens for a given address.

Isn’t that much better ?

Getting such “human readable” output is made possible byethereum-input-data-decoder library - which does the heavy lifting

I added some wrapper functionality to make it as generic as possible without having to make code changes.

You can pass the txn_hash and the path to the JSON file created by truffle compile as arguments to the script.

Thus it works for any contract.

You can see the source code here

If you have any queries (about the code) feel free to file a github issue (or ask here in comments)

Discover and read more posts from Mandar Vaze
get started