如何修复AttributeError: 'Web3'对象无'toChecksumAddress'属性?
解决1inch_wrapper调用get_rate_to_ETH时的AttributeError问题
错误原因
你使用的Web3.py版本为v5及以上,该版本将旧版的toChecksumAddress(驼峰命名)方法改为to_checksum_address(蛇形命名),但1inch_wrapper库的代码仍在使用旧版方法名,导致触发属性不存在的错误。
解决方案
方案1:降级Web3.py到兼容版本
执行以下命令安装适配旧版方法名的Web3版本:
pip install web3==4.9.2
该版本的Web3仍保留toChecksumAddress方法,可直接与当前1inch_wrapper代码兼容。
方案2:修改1inch_wrapper库的代码
找到虚拟环境中oneinch_py的main.py文件(路径示例:D:\projects\1inchArb\venv\lib\site-packages\oneinch_py\main.py),定位到第376行,将:
rate = self.oracle_contract.functions.getRateToEth(self.w3.toChecksumAddress(src_token), wrap).call()
修改为:
rate = self.oracle_contract.functions.getRateToEth(self.w3.to_checksum_address(src_token), wrap).call()
保存修改后重新运行代码即可。
方案3:提前转换地址为校验和格式(不推荐)
在调用方法前手动将地址转换为校验和格式:
from web3 import Web3 from oneinch_py import OneInchOracle public_key = "my_wallet_addr" rpc_url = "https://cloudflare-eth.com" oracle = OneInchOracle(rpc_url, chain='ethereum') # 手动转换地址 src_token = Web3.to_checksum_address("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") price_usdc = oracle.get_rate_to_ETH(src_token, src_token_decimal=6)
注意:若库内代码仍会再次调用旧方法处理地址,此方案可能无效,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

