我正在尝试在浏览器中获取 ETH 地址的令牌数量。我已经用web3.getBalance()方法尝试过,但它只获得 ETH 数量。
我需要在 ETH 地址下获取代币金额。比如这个地址有30多种token类型,我要获取具体一种的数量:https ://etherscan.io/address/0xe853c56864a2ebe4576a807d26fdc4a0ada51919
我应该使用哪种方法,或者是否有可以获取该信息的 API?
我正在尝试在浏览器中获取 ETH 地址的令牌数量。我已经用web3.getBalance()方法尝试过,但它只获得 ETH 数量。
我需要在 ETH 地址下获取代币金额。比如这个地址有30多种token类型,我要获取具体一种的数量:https ://etherscan.io/address/0xe853c56864a2ebe4576a807d26fdc4a0ada51919
我应该使用哪种方法,或者是否有可以获取该信息的 API?
这个地址有30多种token类型,我要获取具体的数量
我将此解释为您已经知道要跟踪哪个令牌。
你知道令牌在哪个地址吗?如果没有,有几种方法可以找出答案:
0xd26114cd6EE289AccF82350c8d8487fedB8A0C07
)thetoken.eth
,例如omg.thetoken.eth
。最可靠的方法是跨多个来源进行交叉检查。
最有声望的团队将为他们的代币合约设置一个 ENS 名称,尽管不一定在thetoken.eth
.
所以现在你有了代币合约的地址。让我们进一步假设它与ERC-20 兼容。
既然你说:
我很想听听是否有其他语言的解决方案
我将使用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)
使用from Web3.py v4-beta创建合约ConciseContract
简短的合约调用中omg.balanceOf(address)
omg.decimals()
正如亚当所提到的,代币余额存储在合同的分类账中,而不是作为您帐户的状态。每个代币(通常)有一个合约,并且没有所有代币合约的完美列表。
但是让我们假设一些令牌列表已经足够好了,比如MyEtherWallet 的 Big List-o-Tokens。
您可以遍历该列表中的令牌地址列表并应用相同的方法,获得每个地址的余额。
代币与 ETH 的不同之处在于它们作为状态保存在智能合约中,而不是直接与地址相关联。以太坊地址可以是合约或 EOA(外部拥有的账户)。这两种地址类型都可以持有 ETH。使用web3.getBalance()
返回与地址关联的 ETH(同样,该地址可以是合约或 EOA)。
另一方面,代币作为合约内部状态的一部分被持有。通常,您会在合约本身中看到类似mapping(address => uint256) balance
的内容,它将存储特定代币的所有余额。
那么最终的结果是,如果你想知道一个特定地址在多种代币类型中的代币余额,你需要为balanceOf
你感兴趣的每个代币的合约地址调用合约的方法。