name: troubleshoot-errors description: 诊断和修复常见的Algorand错误,包括智能合约失败、交易拒绝和SDK异常。当遇到智能合约逻辑错误或断言失败、交易拒绝或确认超时、SDK异常(AlgodHTTPError、LogicError)、账户相关错误(余额不足、未选择加入)或ABI编码/解码错误时使用。强触发词包括错误消息中的“logic eval error”、“assert failed”、“overspend”、“transaction rejected”、“pc=X”、“opcode budget exceeded”、“account not found”、“asset not found”。
错误排查
诊断和解决常见的Algorand开发错误。
错误类别
| 类别 | 常见原因 | 参考文档 |
|---|---|---|
| 合约错误 | 断言失败、操作码预算、无效操作 | contract-errors.md |
| 交易错误 | 超支、无效参数、组问题 | transaction-errors.md |
快速诊断流程
- 从消息中识别错误类型
- 检查错误代码(如果存在,例如
pc=123) - 使用参考文档找到根本原因
- 应用常见解决方案中的修复方法
常见错误模式
逻辑评估错误(合约失败)
logic eval error: assert failed pc=123
原因: 智能合约中的 assert 语句评估为 false。
调试步骤:
pc=123表示发生失败的指令计数器位置- 使用源映射找到代码中的确切行
- 检查断言条件和输入值
交易被拒绝
TransactionPool.Remember: transaction TXID: overspend
原因: 发送方账户余额不足以支付金额 + 手续费。
修复: 为发送方账户注资或减少交易金额。
操作码预算超限
logic eval error: dynamic cost budget exceeded
原因: 合约超出了每次应用调用的700个操作码预算。
修复:
- 向组中添加更多应用调用以获得额外预算(共享)
- 优化合约逻辑以减少操作
- 将复杂操作拆分为多个调用
资产未选择加入
asset ASSET_ID missing from ACCOUNT_ADDRESS
原因: 接收账户尚未选择加入该资产。
修复: 在转账前让接收方选择加入:
algorand.send.asset_opt_in(AssetOptInParams(
sender=receiver_address,
asset_id=asset_id,
))
如何继续
- 在下面的类别参考中找到您的错误
- 从解释中理解原因
- 从代码示例中应用解决方案
参考资料
- 合约错误 - 智能合约和逻辑错误
- 交易错误 - 交易和账户错误
- 调试指南
- AlgoKit Utils中的错误处理