TroublesshootingErrors
错误排查
错误代码
为了减少gas使用和代码大小,Aave合约返回数字错误代码。如果您调用协议时收到数字错误,可以使用下方的参考来了解错误的含义。或者,您也可以查看Errors.sol
来了解这些数字代表的内容。
参考指南
ValidationLogic
和 LendingPoolCollateralManager
返回一些与抵押品相关的错误。返回类型为 uint
。
错误代码 (uint) | 错误描述 |
---|---|
0 | 无错误 |
1 | 无可用抵押品 |
2 | 抵押品无法被清算 |
3 | 未借入货币 |
4 | 健康因子高于阈值 |
5 | 资金不足 |
6 | 健康因子低于清算阈值 |
7 | 交换的资产相等无效 |
8 | 资金池被冻结 |
其他返回为字符串的错误代码:
错误代码 (string) | 来源 | 错误描述 |
---|---|---|
1 | ValidationLogic | 金额必须大于0 |
2 | ValidationLogic | 操作需要一个活跃的资金池 |
3 | ValidationLogic | 操作无法执行,因为资金池已被冻结 |
4 | ValidationLogic | 当前流动性不足 |
5 | ValidationLogic | 用户无法提取超过可用余额的金额 |
6 | ValidationLogic | 转账不被允许 |
7 | ValidationLogic | 借贷功能未启用 |
8 | ValidationLogic | 选择了无效的利率模式 |
9 | ValidationLogic | 抵押品余额为0 |
10 | ValidationLogic | 健康因子低于清算阈值 |
11 | ValidationLogic | 没有足够的抵押品来支持新的借贷 |
12 | ValidationLogic | 稳定借贷未启用 |
13 | ValidationLogic | 抵押品与所借货币相同 |
14 | ValidationLogic | 请求的金额超过了稳定利率模式下的最大贷款金额 |
15 | ValidationLogic | 没有选择的债务类型 |
16 | ValidationLogic | 代表用户偿还时需要明确偿还金额 |
17 | ValidationLogic | 用户在该资金池中没有稳定利率贷款 |
18 | ValidationLogic | 用户在该资金池中没有可变利率贷款 |
19 | ValidationLogic | 基础余额必须大于0 |
20 | ValidationLogic | 用户的存款已被用作抵押品 |
21 | LendingPool | 稳定利率借贷余额不足 |
22 | LendingPool | 利率再平衡条件不满足 |
23 | LendingPool | 清算调用失败 |
24 | LendingPool | 流动性不足以借款 |
25 | LendingPool | 请求的金额对于闪电贷而言过小 |
26 | LendingPool | 协议的实际余额不一致 |
27 | LendingPool | 函数的调用者不是资金池配置器 |
28 | LendingPool | 闪电贷参数不一致 |
29 | aToken/debtToken | 调用者必须是资金池 |
30 | aToken/debtToken | 用户不能给自己授权 |
31 | aToken/debtToken | 转账金额必须大于0 |
32 | ReserveLogic | 资金池已经初始化 |
33 | 调用者不是资金池管理员 | |
34 | LendingPoolConfigurator | 资金池流动性必须为0 |
35 | LendingPoolConfigurator | 无效的aToken资金池地址 |
36 | LendingPoolConfigurator | 无效的稳定债务代币资金池地址 |
37 | LendingPoolConfigurator | 无效的可变债务代币资金池地址 |
38 | LendingPoolConfigurator | 稳定债务代币的基础资产地址无效 |
39 | LendingPoolConfigurator | 可变债务代币的基础资产地址无效 |
40 | LendingPoolConfigurator | 无效的地址提供者ID |
41 | LendingPoolAddressesProviderRegistry | 提供者未注册 |
42 | LendingPoolCollateralManager | 健康因子不低于阈值 |
43 | LendingPoolCollateralManager | 抵押品无法被清算 |
44 | LendingPoolCollateralManager | 用户未借入指定的货币 |
45 | LendingPoolCollateralManager | 流动性不足以进行清算 |
46 | LendingPoolCollateralManager | 无错误 |
47 | LiquidityProvider | 无效的闪电贷模式 |
48 | Math | 乘法溢出 |
49 | Math | 加法溢出 |
50 | Math | 除以0 |
51 | ReserveLogic | 流动性指数溢出 |
52 | ReserveLogic | 可变借贷指数溢出 |
53 | ReserveLogic | 流动性利率溢出 |
54 | ReserveLogic | 可变借贷利率溢出 |
55 | ReserveLogic | 稳定借贷利率溢出 |
56 | aToken/debtToken | 铸造金额无效 |
57 | LendingPool | 使用抵押品偿还失败 |
58 | aToken/debtToken | 销毁金额无效 |
59 | 借贷授权不足 | |
60 | LendingPool | 抵押品交换失败 |
61 | LendingPool | 无效的相同资产交换 |
62 | LendingPool | 不允许重入 |
63 | LendingPool | 调用者必须是aToken |
64 | LendingPool | 资金池已暂停 |
65 | LendingPool | 不允许再有新的资金池 |
66 | LendingPool | 闪电贷执行者返回的金额无效 |
67 | ReserveConfiguration | 锁定总价值无效 |
68 | ReserveConfiguration | 流动性阈值无效 |
69 | ReserveConfiguration | 流动性奖励无效 |
70 | ReserveConfiguration | 小数位数无效 |
71 | ReserveConfiguration | 资金池因子无效 |
72 | LendingPoolAddressesProviderRegistry | 地址提供者ID无效 |
73 | ValidationLogic | 闪电贷参数不一致 |
74 | LendingPool | 参数长度不一致 |
75 | LendingPoolConfigurator | 无效的配置 |
76 | LendingPoolConfigurator | 调用者不是紧急管理员 |
77 | UserConfiguration | 索引无效 |
78 | LendingPool | 不是合约 |
79 | 稳定债务代币 | 稳定债务溢出 |
80 | 稳定债务代币 | 销毁超过余额 |
在主网或Kovan上调试交易
如果您的合约已成功部署到公共网络上,您可以使用Tenderly服务进行调试。
Tenderly允许您像在本地实例中一样调试交易,使用其强大的工具。如果您的交易失败,可以尝试使用其调试器找到交易失败的代码行。
在Truffle中调试交易
如果您运行了Truffle实例(例如console
或develop
),则可以通过在Truffle实例中输入 debug YOUR_TX_HASH
来调试特定交易。有关更多信息,请参见ez-flashloan starter template README.MD。
EVM复原错误 SafeERC20:低级调用失败
此错误表示对SafeERC20实现的函数调用失败。在生产环境中,您应继续使用这些SafeERC20实现。
但在测试中,您可能希望通过去除SafeERC20实现来获得更精确的EVM错误消息。可以通过将SafeERC20调用替换为标准ERC20调用来实现。例如,在ez-flashloan starter template中,将以下代码:
IERC20(_reserve).safeTransfer(_destination, _amount);
替换为:
IERC20(_reserve).transfer(_destination, _amount);
如果此行代码回退,您将收到标准EVM错误消息,这有时对调试更有帮助。
Web3错误:nonce过低
此错误通常是由于您的Web3钱包在创建交易时使用的nonce不正确,意味着所使用的nonce不是正确的,因为与钱包通信的以太坊节点表明存在更高nonce的最近交易。这里有一个关于以太坊交易中nonce的好概述。
一些可能的解决方案:
- 如果使用的是MetaMask等Web3钱包:进入MetaMask设置 —> 高级 —> 重置账户。这将重置本地浏览器缓存中的交易历史,包括nonce计数。您发送的下一笔交易将使用与钱包连接的以太坊节点的最新nonce。
- 如果错误不是来自您的Web3钱包,则可能是由于其连接的以太坊节点的原因。对于如Infura等服务,其网络由许多服务器组成,其中某个先前提交的交易可能在您当前连接的服务器上不可见。在这种情况下,等待几分钟后重试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Q1ngying!