如何通过 Python 和 Web3.py 获取 ETH 智能合约的数量?

Posted

技术标签:

【中文标题】如何通过 Python 和 Web3.py 获取 ETH 智能合约的数量?【英文标题】:How to get the amount of ETH smart contract with Python and Web3.py? 【发布时间】:2021-11-30 10:24:01 【问题描述】:

我已经开始使用 Web3.py 进行 ETH 交易分析。 我已经爬了 10000 多个区块,我的大部分交易都是这样的:

'blockHash': HexBytes('0x439f47a300d021223aeee060c0daabc03bedb250600890faeea7b27c0d30e0e4'), 'blockNumber': 13395924, 'from': '0x18EEfb2E363B54d9F76d347c4aAACF79553c7dBf', 'gas': 106052, 'gasPrice': 89000000000, 'hash': HexBytes('0x173f992db0b9c96f57799afdec51c7a418b7fa36c5ba8b16acb5d45619f03f3f'), 'input': '0xa9059cbb000000000000000000000000a1d8d972560c2f8144af871db508f0b0b10a3fbf00000000000000000000000000000000000000000000010f0cf064dd59200000', 'nonce': 14, 'r': HexBytes('0x9aba92daac3b8b2858552d0e88a3a3cbf904759942830d1d615a8d98af972fd1'), 's': HexBytes('0x7f5228eba9607f0d2a6cb1c6dc97bc37056a7274fa5ee9283d5962de41a86955'), 'to': '0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F', 'transactionIndex': 145, 'type': '0x0', 'v': 38, 'value': 0

据我所知,如果'value' 为 0 并且'input' 看起来像这样'0xa9059cbb000000000000000000000000a1d8d972560c2f8144af871db508f0b0b10a3fbf00000000000000000000000000000000000000000000010f0cf064dd59200000',则意味着它的智能合约。

我的任务是,如何获得交易量(ERC-20)?

【问题讨论】:

【参考方案1】:

合约交互由ABI files 描述。在这种情况下,您需要an ABI file for IERC20, or ERC-20 interface。

然后,有了这个,你可以create Contract proxy instances。一个合约代理类有decode_function_input。

当然,您需要知道哪些合约是 ERC-20 代币,而如果没有外部注册表,您将无法轻易知道这一点。您最好的选择是尝试根据一些启发式猜测智能合约是否为 ERC-20。

【讨论】:

以上是关于如何通过 Python 和 Web3.py 获取 ETH 智能合约的数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取以太坊合约和账户信息(使用geth和web3.py)

bsc 通过钱包地址获取交易 Web3.py

使用 web3.py 通过块哈希获取 Avalanche 块数据

如何使用 Python 和 web3.py 调用智能合约函数

使用 web3.py 解码智能合约的返回值?

安装 web3.py 时出错。 “python setup.py egg_info”