With web3js, how do you figure out that there was 40000 tokens transfer from the transaction's hash?
There's a very good blog post on Medium using the exact method you're interested in.
(Stealing from the post):
- Retrieve the
input
data fromweb3.eth.getTransaction()
This will return the hex data for the function and parameters sent in the transaction. It will look something like0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff
. - The first 32 bits (0xa9059cbb) is the sha3 encoded text of the function signature.
- Every 256 bit block after that is an argument passed in.
- After parsing out the block corresponding to the number of tokens in the parameter list, use
web3.utils
to convert to decimal.
web3.utils
to use you convert 000000000000000000000000000000000000000000000000d02ab486cedbffff
value into number? –
Awlwort I will try to show an example how you do this:
lets take this Tx:
0xa543a3a7b6498bc9aec6989d99228be07855cdd23cfbf491489e8d4088b4a94c
This is Tx to a contract that send some amount of token to address
The received data from web3.eth.getTransaction()
input:
0xa9059cbb00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d000000000000000000000000000000000000000000000059f37b9220158a8000
Now the first 34 bits represent text of the function signature (0xa9059cbb)
The next 256 bit block represent the address we want send the token to:
00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d
The second block represent the amount (in hex) of tokens that were sent to the address:
000000000000000000000000000000000000000000000059f37b9220158a8000
We will convert the hex to decimal with any conversion function or with this web site: https://www.rapidtables.com/convert/number/hex-to-decimal.html
we will see that after the conversion we get 1659305000000000000000 it the number of token that sent to the address.
I hope it help
to
node contains the token contract address
–
Pas Ethereum smart contract transaction input data decoder Uses ethereumjs-abi for decoding. https://github.com/miguelmota/ethereum-input-data-decoder
I had the same issue, and what helped me was including method data among other parameters. You can get yours in the ABI of the token you are interacting with (in your case you go to https://etherscan.io/ and find your method's description) and insert it into you transaction parameters as data, so it will look like this: yourTransferMethod() .send({ from: senderAddress, gasPrice, data: { "constant": false, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, });
Don't forget to add parameters in input! If you are not sure how to do it, try to test writing the contract on https://etherscan.io/ and extracting transaction data in hex from there, as shown in the image http://joxi.ru/xAepNGqCVWqdK2. To decode hex to the data you need use https://lab.miguelmota.com/ethereum-input-data-decoder/example/
I hope it works for you 👍
just use web3.eth.getTransaction(transaction_address)
let transaction= await web3.eth.getTransaction("0X....")
console.log(JSOM.stringlify(transaction))
just not forget to define your provider and your web3 object before.
© 2022 - 2024 — McMap. All rights reserved.