操作方法:正确构造 getPastLogs 对象并使用 topics 参数筛选事务

How-To Properly construct an object for the getPastLogs and filter transactions with the topics parameter

提问人:Kid Yume 提问时间:10/8/2023 更新时间:10/8/2023 访问量:23

问:

好吧,这有点长,所以请提前原谅我。我的目标是通过使用 RJSONRPCAPI 方法从代币页面重新创建 Dex 交易表enter image description here

现在我正在使用 Infura 节点,他们的文档有点不成功,我无法让服务器向我发送结果。然后我继续使用 web3 库并调用了 .web3.eth.getPastLogs

const params = {
        address  : "0x481Aeac57Ed8b16c528B60F490366730AdF8A491",
        topics   : ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],
        fromBlock: '0x0', //startBlock,//'0x0',
        toBlock  : latestBlockNumberDecimal//'latest'
    };
    console.log("starting")
    await web3.eth.getPastLogs(params).then(response => console.log(response));
  

现在这不会产生任何结果。我通过各种不同的十六进制值在主题数组中尝试,包括 ,我仍然没有收到任何结果。我最终决定发送一个带有空白主题的请求web3.utils.keccak256("swap(address executor,tuple desc,bytes permit,bytes data)") ethers.utils.id('swap(address executor,tuple desc,bytes permit,bytes data)')

const params = {
        address  : "0x481Aeac57Ed8b16c528B60F490366730AdF8A491",
        //topics   : ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],
        fromBlock: '0x0', //startBlock,//'0x0',
        toBlock  : latestBlockNumberDecimal//'latest'
    };
    console.log("starting")
    await web3.eth.getPastLogs(params).then(response => console.log(response));
  

这产生了各种各样的结果。它很漂亮。现在在这一点上我意识到了。我的问题是我的主题,在我进入我的问题之前,我想再展示一个发现;在这次成功调用的结果中;我在事务中发现了一个主题数组。从这个数组中,我注意到了 3 件事。

Response:
{
    address: '0x481aeac57ed8b16c528b60f490366730adf8a491',
    blockHash: '0x59eba7b1cec5d1fb498b1d0ecee87e2533d7026c8c097717a5f7a55e1d3995a2',
    blockNumber: 18270504n,
    data: '0xffffffffffffffffffffffffffffffffffffffffffdf1c70c449867bffffffff',
    logIndex: 228n,
    removed: false,
    topics: [
      '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',
      '0x00000000000000000000000087a939d26c6125817643b8329f6d55bee1e2ff3b',
      '0x000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564'
    ],
    transactionHash: '0xe3396e371f7ac2d9ac478f0512549895d28fe76a9d9c2eabd65204622f587da1',
    transactionIndex: 83n
  }

enter image description here

  1. 该元素 0 是实际使用的函数。
  2. 元素 1 似乎是“from”字段的十六进制值
  3. 元素 2 是“Interacted With: To”字段的十六进制值。

通过每笔交易,我发现即使它可能是另一笔使用“交换”功能的交易,第一个元素也会发生变化。我意识到,通过研究,开发人员应该遵循 ERC-20 标准,我有点觉得它是为了避免这种情况,因为如果我只使用该十六进制值,那么我只会看到遵循标准的事务或使用我放入数组中的十六进制值的特定事务, 并错过其他交易。我向社区提出的问题是,如何构建这个主题数组,以便我也可以获得与所需代币相关的所有 dex 交易?我是否有意义并朝着正确的方向寻找答案?

web3js 以太.js json-rpc uniswap etherscan

评论


答: 暂无答案