使用 web3js 从交易哈希中获取令牌传输详细信息

问题描述 投票:0回答:5

使用 web3js,你如何从交易的哈希中得知有 40000 个代币传输?

ethereum web3js
5个回答
14
投票

Medium 上有一篇非常好的博客文章,使用了您感兴趣的确切方法。

(从帖子中窃取):

  1. input
    检索
    web3.eth.getTransaction()
    数据,这将返回交易中发送的函数和参数的十六进制数据。它看起来像
    0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff
  2. 前32位(0xa9059cbb)是函数签名的sha3编码文本。
  3. 之后的每个 256 位块都是传入的参数。
  4. 解析出参数列表中token个数对应的block后,使用
    web3.utils
    转换为十进制。

12
投票

我将尝试举例说明如何做到这一点:

让我们接受这个Tx:

0xa543a3a7b6498bc9aec6989d99228be07855cdd23cfbf491489e8d4088b4a94c

这是合约的交易,将一定数量的代币发送到地址 从

web3.eth.getTransaction()
输入接收到的数据:

0xa9059cbb00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d000000000000000000000000000000000000000000000059f37b9220158a8000

现在前 34 位代表函数签名的文本(0xa9059cbb)

下一个 256 位块代表我们要将代币发送到的地址:

00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d

第二个块代表发送到该地址的代币数量(以十六进制表示):

000000000000000000000000000000000000000000000059f37b9220158a8000

我们将使用任何转换函数或使用此网站将十六进制转换为十进制: https://www.rapidtables.com/convert/number/hex-to-decimal.html

我们会看到转换后我们得到1659305000000000000000 它是发送到该地址的令牌数量。

希望对你有帮助


0
投票

以太坊智能合约交易输入数据解码器 使用ethereumjs-abi进行解码。 https://github.com/miguelmota/ethereum-input-data-decoder


0
投票

我遇到了同样的问题,对我有帮助的是在其他参数中包含方法数据。 您可以在正在与之交互的代币的 ABI 中获取您的信息(在您的情况下,您可以访问 https://etherscan.io/ 并找到您的方法的描述)并将其作为数据插入您的交易参数中,这样它将看起来像这样: 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" }, });

不要忘记在输入中添加参数!如果您不确定如何操作,请尝试在 https://etherscan.io/ 上测试编写合约,并从那里提取十六进制交易数据,如图所示 http://joxi.ru/ xAepNGqCVWqdK2。要将十六进制解码为您需要的数据,请使用 https://lab.miguelmota.com/ethereum-input-data-decoder/example/

希望它对你有用👍


-3
投票

只需使用

web3.eth.getTransaction(transaction_address)

let transaction= await web3.eth.getTransaction("0X....")
console.log(JSOM.stringlify(transaction))         

只是不要忘记之前定义您的提供者和 web3 对象。

© www.soinside.com 2019 - 2024. All rights reserved.