首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从事务哈希检索erc20和erc721传输信息

从事务哈希检索erc20和erc721传输信息
EN

Ethereum用户
提问于 2022-03-14 14:49:44
回答 2查看 1.3K关注 0票数 0

我想从事务哈希中检索以下信息:

  • 如果该交易是ERC-20转让:如果是,什么erc20被转移了,金额是多少,转移给谁?
  • 如果该交易是ERC-721传输:如果是,则erc721 nft被转移到谁?

示例:https://blockscout.com/xdai/mainnet/tx/0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8/token-transfers

我已经为这笔交易转了一些钱。现在我想从我的tx散列中检索上面的信息。

这就是我正在做的事情(使用ethers.js):

代码语言:javascript
复制
        let blockchain = await Blockchain.findBy('network', 'xdai')
        let defaultProvider = await Ethers.getDefaultProvider(blockchain)

        let tx = await defaultProvider.getTransaction("0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8")
        let txReceipt = await defaultProvider.getTransactionReceipt("0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8")

结果:

代码语言:javascript
复制
{
    "tx": {
        "hash": "0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8",
        "blockHash": "0x4023d17a5469c9dfb13bf50a63ce40d90b07a4b8e811fdba25b063ad535ba3f2",
        "blockNumber": 21105871,
        "transactionIndex": 4,
        "confirmations": 151,
        "from": "0x52eB606f94091A2BA4f985D98C62880a9BA591B6",
        "gasPrice": {
            "type": "BigNumber",
            "hex": "0x59682f07"
        },
        "gasLimit": {
            "type": "BigNumber",
            "hex": "0x01630f"
        },
        "to": "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",
        "value": {
            "type": "BigNumber",
            "hex": "0x00"
        },
        "nonce": 937,
        "data": "0xa9059cbb000000000000000000000000fce3c3d51c7f3cc8c0f380be844e7cbad14c1c1d00000000000000000000000000000000000000000000000000027ca57357c000",
        "r": "0xa3ff01c0dcc17cfccf595fefe23468b80727e58003f364f793f6c8ed38da63b4",
        "s": "0x4a709844959b5858607b555a8ec66f90c76c00f10de44386ff80990737d126dd",
        "v": 1,
        "creates": null,
        "chainId": 100
    },
    "txReceipt": {
        "to": "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",
        "from": "0x52eB606f94091A2BA4f985D98C62880a9BA591B6",
        "contractAddress": null,
        "transactionIndex": 4,
        "gasUsed": {
            "type": "BigNumber",
            "hex": "0xead8"
        },
        "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000008000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000008000000000000000000000000000000000008000000000000000000010000000000000000000000000000000000000000000000044000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "blockHash": "0x4023d17a5469c9dfb13bf50a63ce40d90b07a4b8e811fdba25b063ad535ba3f2",
        "transactionHash": "0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8",
        "logs": [
            {
                "transactionIndex": 4,
                "blockNumber": 21105871,
                "transactionHash": "0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8",
                "address": "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",
                "topics": [
                    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                    "0x00000000000000000000000052eb606f94091a2ba4f985d98c62880a9ba591b6",
                    "0x000000000000000000000000fce3c3d51c7f3cc8c0f380be844e7cbad14c1c1d"
                ],
                "data": "0x00000000000000000000000000000000000000000000000000027ca57357c000",
                "logIndex": 21,
                "blockHash": "0x4023d17a5469c9dfb13bf50a63ce40d90b07a4b8e811fdba25b063ad535ba3f2"
            }
        ],
        "blockNumber": 21105871,
        "confirmations": 151,
        "cumulativeGasUsed": {
            "type": "BigNumber",
            "hex": "0x168b7f"
        },
        "status": 1,
        "byzantium": true
    }
}

在交易收据中,我可以在这里看到以下数据:

代码语言:javascript
复制
 "logs": [
            {
                "transactionIndex": 4,
                "blockNumber": 21105871,
                "transactionHash": "0x5f1ac5db6c0c31025ac19f6de22eef665e57262f9953567438827b339828e1a8",
                "address": "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",
                "topics": [
                    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                    "0x00000000000000000000000052eb606f94091a2ba4f985d98c62880a9ba591b6",
                    "0x000000000000000000000000fce3c3d51c7f3cc8c0f380be844e7cbad14c1c1d"
                ],
                "data": "0x00000000000000000000000000000000000000000000000000027ca57357c000",
                "logIndex": 21,
                "blockHash": "0x4023d17a5469c9dfb13bf50a63ce40d90b07a4b8e811fdba25b063ad535ba3f2"
            }
        ],

但是如何找到我需要的信息(这些信息也显示在浏览器上)。

我想知道哪种货币被转移了多少钱。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2022-03-14 15:04:04

你可以从日志里读到。

在这里可以找到一篇解释如何使用事件的好文章,https://betterprogramming.pub/learn-solidity-events-2801d6a99a92

要知道“货币”或令牌,您可以阅读被调用的智能契约。交易的'to‘、'from’和'amount‘在日志中。活动的主题(请参考上面的文章),金额在数据中。

要检查已调用的函数,您可以从事务的数据中读取。它的前4个字节(a9059cbb)是函数的签名。例如,您可以检查签名是否是“transfer”的签名。

票数 1
EN

Ethereum用户

发布于 2022-03-14 15:11:09

您可以按主题过滤tx收据中的日志。有点像

代码语言:javascript
复制
const erc20TransferEventHash = keccak256("Transfer(address,uint256");

const erc20Transfers = [];

const logs = txReceipt.logs.filter((log) => {
  if (log.topics[0] === erc20TranferEventHash) {
    const trasferredFrom = log.topics[1];
    const transferredTo = log.topics[2];
    const amountTrasferred = log.data;
    const token = log.address;
    erc20Transfers.push({token, amount: amountTransferred, to: transferredTo, from: transferredFrom});
  }
})

然而,所有这些都要求您确切地知道事件签名是什么,什么是索引的,什么不是,等等,这样您就知道如何对它们进行解码,以及使用哪些主题来实现什么。

您也不能像前面的示例那样单独执行所有这些过滤操作,而是将etc_subscribe与相关筛选器一起使用,这样您就只能直接获得传输事件。查找更多关于日志和事件的信息。

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

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

复制
相关文章

相似问题

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