Mumbai测试网Aave闪电贷weth.balanceOf报Fallback not allowed
问题定位:Aave V2闪电贷脚本在Polygon Mumbai测试网运行报
Fallback not allowed错误 问题背景
- 运行目标:执行aave-flashloan-mix仓库下的
run_flash_loan_v2.py脚本,目标网络为Polygon Mumbai测试网(对应Brownie配置中的polygon-test网络) - 已完成配置:修改
brownie-config中polygon-test网络对应的合约地址,配置内容如下:
polygon-test: aave_lending_pool_v2: "0x178113104fEcbcD7fF8669a0150721e231F0FD4B" weth: "0xee9eE614Ad26963bEc1Bec0D2c92879ae1F209fA"
- 已完成操作:领取WMATIC测试币,通过命令
brownie run scripts/deployment_v2.py --network polygon-test完成合约部署 - 报错场景:执行
brownie run scripts/run_flash_loan_v2.py --network polygon-test运行闪电贷脚本时抛出异常,报错信息如下:
Getting Flashloan contract... File "brownie/_cli/run.py", line 51, in main return_value, frame = run( File "brownie/project/scripts.py", line 103, in run return_value = f_locals[method_name](*args, **kwargs) File "./scripts/run_flash_loan_v2.py", line 16, in main if weth.balanceOf(flashloan) < MINIMUM_FLASHLOAN_WETH_BALANCE: File "brownie/network/multicall.py", line 115, in _proxy_call result = ContractCall.__call__(*args, **kwargs) # type: ignore File "brownie/network/contract.py", line 1751, in __call__ return self.call(*args, block_identifier=block_identifier, override=override) File "brownie/network/contract.py", line 1542, in call raise VirtualMachineError(e) from None VirtualMachineError: revert: Fallback not allowed
- 已知信息:Mumbai网络中上述报错的
weth.balanceOf(flashloan)逻辑实际需要查询WMATIC余额,使用的钱包地址0x7cc6FA028dffa310445af40C3abEea61F8534d97持有足额测试资金,需要定位问题根因。
根因分析
报错Fallback not allowed的触发逻辑是:调用目标地址上不存在的合约方法时,EVM会尝试路由到该地址的fallback函数处理请求,若该地址没有配置允许调用的fallback逻辑,就会直接触发回滚。具体到该场景,核心问题是配置文件中填写的weth字段对应地址错误:
- 当前配置的
0xee9eE614Ad26963bEc1Bec0D2c92879ae1F209fA不是Mumbai测试网的标准WMATIC合约地址,该地址要么是无合约代码的普通EOA钱包地址,要么是未实现balanceOf标准ERC20方法的非标准合约,调用balanceOf方法时必然触发fallback回滚。 - Mumbai测试网的官方WMATIC合约地址为
0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889,和填写的地址不匹配,是报错的根本原因。 - 个人钱包持有足额测试资金和该报错无关:这行代码的逻辑是查询已部署的闪电贷合约地址的WETH/WMATIC余额,用于确认合约持有足够资产支付闪电贷手续费,和个人地址余额没有关联。
修复步骤
- 修改
brownie-config.yaml中polygon-test网络下的weth字段值为Mumbai测试网官方WMATIC地址0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889 - 重新执行部署命令
brownie run scripts/deployment_v2.py --network polygon-test,确保新部署的合约读取到正确的资产地址 - 部署完成后给新部署的闪电贷合约转入少量WMATIC(金额大于配置中
MINIMUM_FLASHLOAN_WETH_BALANCE要求的阈值即可,用于支付闪电贷手续费),再运行闪电贷脚本即可正常执行。
内容的提问来源于stack exchange,提问作者Siqueira
相关产品推荐
相关产品推荐

