从ETH地址获取令牌金额

问题描述 投票:-1回答:2

我试图在浏览器中获取令牌数量的ETH地址。我用web3.getBalance()方法尝试了它,但它只获得了ETH数量。

我需要在ETH地址下获取令牌金额。例如,这个地址有超过30种令牌类型,我必须得到一个特定的数量:https://etherscan.io/address/0xe853c56864a2ebe4576a807d26fdc4a0ada51919

我应该使用哪种方法,或者是否有可以获取该信息的API?

javascript ethereum web3js web3 cryptocurrency
2个回答
2
投票

令牌与ETH的不同之处在于,它们在智能合约中被保持为状态,而不是直接与地址相关联。以太坊地址可以是合同或EOA(外部拥有的帐户)。这两种地址类型都可以保存ETH。使用web3.getBalance()返回与地址关联的ETH(同样,该地址可以是合同或EOA)。

另一方面,代币是合同内部的国家的一部分。通常,您会在合约中看到像mapping(address => uint256) balance这样的东西,它会存储特定代币的所有余额。

然后最终结果是,如果您想知道多个令牌类型中某个特定地址的令牌余额,您需要为您感兴趣的每个令牌的合同地址调用合约的balanceOf方法。


0
投票

Look up the balance of a specific token

Choose the token

这个地址有30多种令牌类型,我必须得到一个特定的数量

我将此解释为您已经知道要跟踪哪个令牌。

Get the token address

你知道令牌的地址吗?如果没有,有几个选项可供查找:

  1. 从创建团队中找出地址 - 观察诈骗/虚假推特帐号/等
  2. 单击Etherscan下拉列表中的令牌,并从“ERC20合同”字段中读取值。 (例如〜对于OmiseGo,合同在0xd26114cd6EE289AccF82350c8d8487fedB8A0C07
  3. 通过使用thetoken.eth下的令牌符号(如omg.thetoken.eth)通过ENS查找地址。
  4. 询问其他可信赖的第三方

最可靠的方法是跨多个来源进行交叉检查。

最有信誉的团队将为他们的令牌合同设置一个ENS名称,但不一定在thetoken.eth下。

Get the balance from the contract

所以现在你有了令牌合同的地址。让我们进一步假设它是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是我写的一个很小的开源软件包。

How does ethtoken do it?

  1. 从规范生成ERC20 ABI
  2. 使用omg = w3.eth.contract(address, abi)Web3.py v4-beta创建合约
  3. 将合约对象包裹在ConciseContract中以进行短期合约通知
  4. 使用omg.balanceOf(address)获取令牌余额
  5. 将天平的小数位向左移动多次:omg.decimals()

Listing "all" tokens

正如亚当提到的,令牌余额存储在合同中的分类帐中,而不是存储在您帐户中的状态。每个令牌(通常)有一个合约,并且没有所有令牌合同的完美列表。

但是让我们假设一些令牌列表已经足够好了,比如MyEtherWallet's Big List-o-Tokens

您可以遍历该列表中的令牌地址列表并应用相同的方法,获取每个令牌的余额。

© www.soinside.com 2019 - 2024. All rights reserved.