我正在尝试在浏览器中获取令牌数量的ETH地址。我用 web3.getBalance()方法尝试了它,但它只获得了ETH数量。
我需要在ETH地址下获取令牌金额。例如,此地址有超过30种令牌类型,我必须获取特定数量的金额:https://etherscan.io/address/0xe853c56864a2ebe4576a807d26fdc4a0ada51919
我应该使用哪种方法,或者是否有可以获取该信息的API?
答案 0 :(得分:2)
令牌与ETH的不同之处在于,它们在智能合约中作为状态保留,而不是直接与地址关联。以太坊地址可以是合同或EOA(外部拥有的帐户)。这两种地址类型都可以保存ETH。使用web3.getBalance()
返回与地址关联的ETH(同样,该地址可以是合同或EOA)。
另一方面,代币是合同内部的一部分。通常,您会在合约中看到类似mapping(address => uint256) balance
的内容,它会存储特定代币的所有余额。
然后最终结果是,如果您想知道多个令牌类型中某个特定地址的令牌余额,您需要为您感兴趣的每个令牌的合同地址调用合约的balanceOf
方法。
答案 1 :(得分:0)
这个地址有超过30种令牌类型,我必须得到一个特定的数量
我会将此解释为您已经知道要跟踪哪个令牌。
你知道令牌的地址是什么吗?如果没有,有几个选项可供查找:
0xd26114cd6EE289AccF82350c8d8487fedB8A0C07
)thetoken.eth
下的令牌符号,通过ENS查找地址,例如omg.thetoken.eth
。最可靠的方法是跨多个来源进行交叉检查。
最有声望的团队将为其代币合约设置ENS名称,但不一定在thetoken.eth
下。
现在您拥有令牌合同的地址。我们进一步假设它是ERC-20 compatible。
既然你说:
我很想知道是否有其他语言的解决方案
我将使用ethtoken.py
*获取最快的示例,然后深入了解其工作原理:
>>> from ethtoken import token
# Use the ENS name that points to your token contract here:
>>> omg = token("omg.thetoken.eth")
>>> omg.token_balance("0xE853c56864A2ebe4576a807D26Fdc4A0adA51919")
Decimal('246224.517546226920613329')
* ethtoken.py
是我写的一个很小的开源软件包。
ethtoken
如何做到这一点?omg = w3.eth.contract(address, abi)
创建合同
ConciseContract
中以进行短合同调用omg.balanceOf(address)
omg.decimals()
正如亚当提到的,代币余额存储在合同的分类帐中,而不是存储在您帐户中的状态。每个令牌(通常)有一个合约,并且没有所有令牌合同的完美列表。
但是我们假设一些令牌列表已经足够好了,比如MyEtherWallet's Big List-o-Tokens。
您可以遍历该列表中的令牌地址列表并应用相同的方法,获取每个令牌的余额。