求教大佬们一个问题: 我在狐狸上面创建了一个以太坊账户,我就有一个账户地址,我收藏了一些关于支持 erc20 协议的代币,但是我只有一个账户地址怎么能够区分出来这个地址有多少种代币呢,比如 eth 或者其他的,我用 web3.eth.getBalance("0x537ab5ce1370..")查询,也只能查询到有多少个 eth ,而不能查询到其他币种,如果我要发行币的话,怎么能查询到这个这个账户地址拥有的所发行币的数量呢
1
huoshanhui 2022-09-20 11:23:04 +08:00
1. 只有 Token 合约才知道某个钱包有多少这个 Token 余额。
2. 如果你想知道怎么查出来,目前比较全的有 zerio 和 debank 。 3. 原理上是要自行维护数据然后存下来,这样才能做到查某个地址得到各种 Token 余额。 |
2
Liuwilliam1 OP @huoshanhui 您的意思是,如果是以太坊钱包的话,需要不断更新 例如支持 erc20 协议的代币对吧;还有一个问题是,im 钱包和狐狸都知道我的这个账户下面的多个 erc20 代币的余额,意思是钱包只要知道代币的合约地址就能挨个查询到这个人所有的 erc20 代币对吧,即如果要转账的话就必须得知道该代币的合约地址,查询余额也是同理
|
3
huoshanhui 2022-09-20 13:49:33 +08:00
|
4
cxh116 2022-09-20 14:27:31 +08:00
调用合约的 balanceOf 方法应该是一种成本比较高的方法.
合约调用 transfer 方法时,会产生事件 Transfer, 监听日志里的 Transfer 事件感觉成本低一点.但对一般的人来说成本太高了,建一个全节点,估计一个月几百美刀,服务器配置要求高. https://ethereum.org/zh/developers/docs/standards/tokens/erc-20/ |
5
keepeye 2022-09-20 14:42:15 +08:00
每个币都是一个 ERC20 标准的合约,知道合约地址就可以调用合约方法查询你在这个合约内的余额
那么问题就是怎么知道你有多少种币(合约),小狐狸需要手动添加合约(导入代币)才能显示在列表里,所以它是不能自动发现历史有哪些币种的,但是可能通过交易事件发现新的币种。 imtoken ,猜测可能 app 官方有同步节点,遍历每个区块中的每一笔交易记录了,找出钱包地址和合约地址的映射关系,给 app 提供了查询接口吧。 |
6
Liuwilliam1 OP @huoshanhui 学习了,感谢大佬!
|
7
Liuwilliam1 OP @cxh116 这确实是很好的方法,谢谢大佬!
|
8
Liuwilliam1 OP @keepeye 很有可能是这样的,感谢大佬!学习了
|