如何使用以太坊 API 获取用户导入到他的 Metamask 的代币?

How to get the tokens the user has imported to his Metamask using the ethereum API?

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

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

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

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

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

unfortunately we can not get all the tokens the wallet has access to, we need to know first the smart contract addresses.

据我所知,这无法完成,但您可以做的是访问用户钱包中的代币(不是导入到 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 的令牌不是垃圾邮件