1

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

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

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

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

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

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

4

1 回答 1

1

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

使用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的令牌是令牌不是垃圾邮件

于 2021-11-01T20:28:04.737 回答