首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检索DAI传输

如何检索DAI传输
EN

Ethereum用户
提问于 2022-10-25 12:23:18
回答 1查看 76关注 0票数 0

我试图获取这个地址0x6b175474e89094c44da98b954eedeac495271d0f的最新DAI传输,并检索有关它们的信息,如地址等。我觉得我缺少对基本面的理解,以便正确地完成它。

步骤我已经采取了

我连接到元问题并添加了web3提供者,以便能够从上下文中检索库。

我不知道怎么才能找回戴块。我所做的是:

  • https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f#code检索此地址下smart合同的ABI
  • 与contractAddress、abi和ethers库创建合同
  • 检索的最新块号
  • 每次循环运行后使用迭代器和递减迭代器检索块

实际代码:

代码语言:javascript
复制
const contractAddress = '0x6b175474e89094c44da98b954eedeac495271d0f';
const contract = new ethers.Contract(contractAddress, ABI, library);
const recent = await contract.provider.getBlockNumber();
const next = await contract.provider.getBlock(recent);
const next2 = await contract.provider.getBlock(recent - 1);

我收到的一个例子:

代码语言:javascript
复制
{
    "hash": "0xf898356b6eb8f5ad645ba3a9b869a8d63bbc3f1fc02e6be41ba582520d0d5d68",
    "parentHash": "0xa3e23363bfb22b68a2d100d013e4819a4e1e2488a09de89b9e2a29bb07d44ca3",
    "number": 15824974,
    "timestamp": 1666699379,
    "nonce": "0x0000000000000000",
    "difficulty": 0,
    "gasLimit": {
        "type": "BigNumber",
        "hex": "0x01c9c380"
    },
    "gasUsed": {
        "type": "BigNumber",
        "hex": "0xb6b595"
    },
    "miner": "0x0000000000000000000000000000000000000001",
    "extraData": "0x",
    "transactions": [
        "0xc37d0e9bb0c86e5e891d078a3fb9a9f9a28dbc15682baf0873f970db1ca0fbd8",
        "0x56ff2f53eef9371a08a96ab1ed26f9d92c70bbd6ca11dbfad61bd716f9b47874",
        "0xdc5a1b7cb11d87de17ebf40dfaf6a0936a9d919ad0dce838d749ba37f3699078",
        "0x1682989ee993aa9d0a91e5e88dc36d0d01b7396210730bfb0d3121b1b6020ff9",
        "0xac563722220fa76fa6aa2ae9ec4c81e39c2ed7ab23015c161bda363cee698504",
        "0x22100e064a0dbba6fb058ee09cddd7d3566216f7cad6426c71577d1d1bd75da4",
        "0x8fe87a212109cc5d15e13813076fc063b7c6020b3974b860f11eb85136f5e2cc",
        "0x1a469786f20d9a92f83d9f108fbb1f77d9ae8839f15f8fcbfadc8f8fd617edab",
        "0x730452d559d46c869f9d52a85cb133d858b73adeaaeeb2c154f6bd9dbc9e6f65",
        "0x3a809e9baa35fd0c55e71c4937c84fe06a819ed5448e2b2e1b552ca983e48cb9",
        "0xfcb670ea41b107ffc72e166ee8c02eb0102b1cde12b7c5ce06002edfccb9c9b1"
    ],
    "baseFeePerGas": {
        "type": "BigNumber",
        "hex": "0x0335b6a98d"
    },
    "_difficulty": {
        "type": "BigNumber",
        "hex": "0x00"
    }
}

我的假设是,如果我从响应中复制哈希,我就可以在以太扫描中查看事务,但我错了。以下链接不返回匹配的https://etherscan.io/tx/0xf898356b6eb8f5ad645ba3a9b869a8d63bbc3f1fc02e6be41ba582520d0d5d68

我编写的代码是否只得到与DAI相关的块?还是我漏掉了什么?为什么tx不在以太扫描中出现?如何根据发件人过滤事务?换句话说,我如何模仿以太扫描视图来显示ERC-20令牌?我真的很感激任何一种启发!

EN

回答 1

Ethereum用户

发布于 2022-10-25 19:11:06

这是块号15824974的散列。你在丢弃块的内容。块是带有链中前一个块的散列的事务批次。这将块连接在一起(在一个链中),因为散列是从块数据中加密派生出来的。

您可以通过这个URL https://etherscan.io/block/15824974在以太扫描上看到这个块,但您也可以在这个链接https://etherscan.io/block/0xf898356b6eb8f5ad645ba3a9b869a8d63bbc3f1fc02e6be41ba582520d0d5d68上看到相同的东西(注意这个C3中的哈希和您的相同)。

获得事务历史并不是那么简单。它不是按区块链索引的,也不是由标准节点“开箱即用”编制的。截至今天,today区块链的大小约为950 GB。在许多情况下,您可能可以依赖于以太扫描。

为了获得事务,您必须在ethers中使用Etherscan作为提供程序,并调用getHistory方法。请注意,not所有提供程序都支持getHistory方法。

下面的代码片段将列出到您在过去10个块中指定的地址的事务。(当您查询它时,可能没有任何事务,所以只需调整数字)

代码语言:javascript
复制
const ethers = require("ethers");

let address = "0x6b175474e89094c44da98b954eedeac495271d0f";
let provider = new ethers.providers.EtherscanProvider();

async function main() {
  const currentBlock = await provider.getBlockNumber()
  
  const startBlock = currentBlock - 10;
  const endBlock = currentBlock;

  let history = await provider.getHistory(address, startBlock, endBlock);

  history.forEach((tx) => {
      console.log(tx);
  })
}

main();

有关更多信息,请访问有关EtherscanProvider - https://docs.ethers.io/v5/api/providers/api-providers/#EtherscanProvider的ether文档。

如果您想进一步过滤事务(例如,特定的令牌),那么您需要一个适当的提供者来完成该操作,或者在javascript中执行一些手动筛选。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/138130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档