web3 - 如何使用以太坊 API 获取用户已导入其 Metamask 的令牌?
问题描述
使用 Metamask,用户必须手动将代币导入他们的账户,这些代币才能显示在资产部分。这是一个简洁的安全功能,因为灰尘攻击和其他“垃圾邮件”令牌是用户看不见的。你的钱包通常也充满了垃圾邮件。
现在我想将这些用户意图(导入令牌)传递给自定义 dApp,并根据用户在 Metamask 上导入的内容过滤令牌。
即,您能否访问用户已导入他的 Metamask 的代币,从而使用 ehtereum 或其他 API 在用户 Metamask 上查看“列入白名单”的合约地址?
我或多或少地阅读了Metamask API 文档,但没有找到任何东西。
我发现的唯一提示是在这篇文章中说它无法完成。
不幸的是,我们无法获得钱包可以访问的所有代币,我们首先需要知道智能合约地址。
解决方案
据我所知,这无法完成,但您可以做的是访问用户钱包中的代币(不是导入到元掩码中的代币)
使用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的令牌是令牌不是垃圾邮件
推荐阅读
- c++ - c++ 二元算术运算符用于返回派生类型?
- html - CSS 动画根本不起作用(在线视频代码)
- gradle - 如何避免 AWS SAM 重建并重新上传代码未更改的 gradle 函数?
- python - Arviz 和 Bokeh:尝试使用后端 kwargs 更改情节的标题
- wireshark - 为什么 Wireshark 检测不到 Mozilla VPN 使用的 Wireguard 接口?
- dask - Dask:定期更新已发布的数据集并从其他客户端提取数据
- javascript - Waypoints.js 中的“偏移”无法正确更改背景图像
- c# - 如何使用 C# 在 Windows 10 的任务栏上创建工具栏工具
- flask - 将我的 herokuapp 域端点永久重定向到我在 Flask 中的自定义域
- c++ - 每当我运行它时,我的程序就会进入无限循环,但只有当我输入无效数字然后输入字符或字符串时