使用 web3js,您如何确定从交易的哈希中转移了 40000 个令牌?
4 回答
我将尝试展示一个示例,您如何执行此操作:
让我们来看看这个 Tx:
0xa543a3a7b6498bc9aec6989d99228be07855cdd23cfbf491489e8d4088b4a94c
这是向合约发送一定数量的代币到地址的 Tx 从web3.eth.getTransaction()
输入接收到的数据:
0xa9059cbb00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d000000000000000000000000000000000000000000000059f37b9220158a8000
现在前 34 位代表函数签名的文本(0xa9059cbb)
下一个 256 位块代表我们要将令牌发送到的地址:
00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d
第二个块表示发送到该地址的代币数量(以十六进制表示):
000000000000000000000000000000000000000000000059f37b9220158a8000
我们将使用任何转换函数或通过此网站将十六进制转换为十进制: https ://www.rapidtables.com/convert/number/hex-to-decimal.html
我们将看到,转换后我们得到 1659305000000000000000 它是发送到该地址的令牌数。
我希望它有帮助
使用您感兴趣的确切方法在Medium上有一篇非常好的博客文章。
(从帖子中窃取):
- 从中检索
input
数据web3.eth.getTransaction()
这将返回事务中发送的函数和参数的十六进制数据。它看起来像0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff
. - 前 32 位 (0xa9059cbb) 是函数签名的 sha3 编码文本。
- 之后的每个 256 位块都是一个传入的参数。
- 解析出参数列表中token个数对应的block后,
web3.utils
用于转换成十进制。
以太坊智能合约交易输入数据解码器使用 ethereumjs-abi 进行解码。 https://github.com/miguelmota/ethereum-input-data-decoder
只需使用web3.eth.getTransaction(transaction_address)
let transaction= await web3.eth.getTransaction("0X....")
console.log(JSOM.stringlify(transaction))
只是不要忘记之前定义您的提供者和您的 web3 对象。