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