Medium 上有一篇非常好的博客文章,使用了您感兴趣的确切方法。
(从帖子中窃取):
input
检索 web3.eth.getTransaction()
数据,这将返回交易中发送的函数和参数的十六进制数据。它看起来像 0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff
。web3.utils
转换为十进制。我将尝试举例说明如何做到这一点:
让我们接受这个Tx:
0xa543a3a7b6498bc9aec6989d99228be07855cdd23cfbf491489e8d4088b4a94c
这是合约的交易,将一定数量的代币发送到地址 从
web3.eth.getTransaction()
输入接收到的数据:
0xa9059cbb00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d000000000000000000000000000000000000000000000059f37b9220158a8000
现在前 34 位代表函数签名的文本(0xa9059cbb)
下一个 256 位块代表我们要将代币发送到的地址:
00000000000000000000000092e707288dc221d864cf4a8c710c143e97225d7d
第二个块代表发送到该地址的代币数量(以十六进制表示):
000000000000000000000000000000000000000000000059f37b9220158a8000
我们将使用任何转换函数或使用此网站将十六进制转换为十进制: https://www.rapidtables.com/convert/number/hex-to-decimal.html
我们会看到转换后我们得到1659305000000000000000 它是发送到该地址的令牌数量。
希望对你有帮助
以太坊智能合约交易输入数据解码器 使用ethereumjs-abi进行解码。 https://github.com/miguelmota/ethereum-input-data-decoder
我遇到了同样的问题,对我有帮助的是在其他参数中包含方法数据。 您可以在正在与之交互的代币的 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/
希望它对你有用👍
只需使用
web3.eth.getTransaction(transaction_address)
let transaction= await web3.eth.getTransaction("0X....")
console.log(JSOM.stringlify(transaction))
只是不要忘记之前定义您的提供者和 web3 对象。