【问题标题】:How to get the tokens the user has imported to his Metamask using the ethereum API?如何使用以太坊 API 获取用户已导入其 Metamask 的令牌?
【发布时间】:2021-12-16 10:59:44
【问题描述】:

使用 Metamask,用户必须手动将代币导入他们的帐户,这些代币才能显示在资产部分。这是一个简洁的安全功能,因为灰尘攻击和其他“垃圾邮件”令牌是用户看不见的。您的钱包通常也充满垃圾邮件。

现在我想将这些用户意图(导入令牌)传递给自定义 dApp,并根据用户在 Metamask 上导入的内容过滤令牌。

即您能否访问用户已导入其 Metamask 的代币,从而使用 ehtereum 或其他 API 查看用户 Metamask 上的“白名单”合约地址?

我或多或少地阅读了Metamask API docs,但没有找到任何东西。

我发现的唯一提示是在 this 文章中说它无法完成。

不幸的是,我们无法获得钱包可以访问的所有代币,我们需要先知道智能合约地址。

【问题讨论】:

    标签: web3 metamask dapp


    【解决方案1】:

    据我所知,这是无法做到的,但您可以做的是访问用户钱包中的代币(不是导入到 metamask 中的代币)

    使用Moralis Web3 SDK,您可以检索当前用户或指定地址的所有代币余额:

    const balances = await Moralis.Web3API.account.getTokenBalances({address: "any_address"});
    

    你会得到一个包含令牌数量和令牌对象数组的对象 示例:

    [
      {
        "token_address": "0x2d30ca6f024dbc1307ac8a1a44ca27de6f797ec22ef20627a1307243b0ab7d09",
        "name": "Kylin Network",
        "symbol": "KYL",
        "logo": "https://cdn.moralis.io/eth/0x67b6d479c7bb412c54e03dca8e1bc6740ce6b99c.png",
        "thumbnail": "https://cdn.moralis.io/eth/0x67b6d479c7bb412c54e03dca8e1bc6740ce6b99c_thumb.png",
        "decimals": "18",
        "balance": "123456789"
      },
      {other tokens}
    ]
    

    要过滤掉垃圾邮件令牌,您可以遍历结果并查询每个令牌合约的用户限额。我们可以假设有allowance != 0 的token 是token 不是垃圾邮件

    【讨论】:

    • 您好,感谢 Moralis SDK 说明。我正在使用 covalenthq 和其他 API,但该 SDK 应该派上用场。您能否详细说明“查询用户限额”是什么意思。您的意思是要求用户手动输入钱包上的每个资产实际上是要求用户再次将每个资产列入白名单吗?
    猜你喜欢
    • 2021-11-15
    • 2019-03-29
    • 2022-08-16
    • 2022-01-19
    • 2021-11-15
    • 2020-03-31
    • 1970-01-01
    • 2015-11-25
    • 2021-07-20
    相关资源
    最近更新 更多