solidity-debug 是一个面向 Solidity 链上失败交易的调试工作流技能,来自 0xlayerghost/solidity-agent-kit,其描述标明为自动调用(AUTO-INVOKE),必须在调试失败链上交易时调用。技能覆盖交易回执分析、gas 诊断、calldata 解码、revert 原因定位等能力。
用途 该技能用于定位和排查链上交易失败的原因。适用场景包括交易 status 为 0、需要判断失败类型、需要还原调用参数或需要确定 revert 原因时。技能还规定了语言规则:始终使用用户正在使用的语言回应;用户用中文提问就用中文回应,用英文提问就用英文回应。
主要能力与工具 核心工具是 Foundry cast CLI。技能支持查询交易回执(receipt),关注 status(0 失败、1 成功)、gasUsed、logs(空数组表示交易 revert 且无事件发出)、to(目标合约地址)等字段;支持查询交易详情(tx),关注 gas(发送方设置的 gas limit)、input(调用的 calldata,即函数选择器加参数编码)、from/to、value 等字段;支持使用 4byte 功能由 input 前 4 字节查询函数签名;支持使用 calldata-decode 功能根据函数签名和完整 input 解码参数;支持通过模拟调用、重放交易或在线分析平台获取 revert reason;支持查询合约 public 变量和 mapping,对 struct 返回值需按 ABI 顺序指定返回类型;支持使用 cast send 重试交易。
使用方式(调试流程) 第一步,获取交易回执,使用 cast CLI 传入 tx hash 和 RPC endpoint,判断成功或失败。 第二步,获取交易详情,传入 tx hash 和 RPC endpoint,拿到 gas limit 和 input。 第三步,判断失败类型:若 gasUsed 与 gas limit 接近 100%(如 999,472 / 1,000,000)则为 Out of Gas(OOG),方向是提高 gas limit 或估算 gas;若 gasUsed 远低于 gas limit(如 50,000 / 1,000,000)则为 Revert,需获取 revert reason;若 gasUsed 正常但 status=0 则为内部调用失败,检查余额、授权、内部 call 返回值;若交易根本没上链则为 Nonce/Gas Price 问题,检查 pending 队列。 第四步,解码函数选择器,用 4byte 功能传入 input 前 4 字节查询函数签名,例如输入 0xb51a038a 输出 unstake(uint256,address[],uint256[])。 第五步,解码完整 calldata,用 calldata-decode 功能传入函数签名和完整 input data,解码后的参数可用于分析入参是否有误,以及直接用于重试交易。 第六步,获取 Revert Reason(非 OOG 场景):可用 cast call 在失败区块号上模拟调用,指定 from 地址和 block number 还原 revert 信息;可用 cast run 重放交易(需要 archive 节点);也可使用第三方交易分析平台查看详细调用栈作为备用方案。 第七步,查询链上状态,用 cast call 查询合约 public 变量和 mapping,确认失败交易的状态变更已完全回滚。 第八步,对比成功与失败交易,从 gas 消耗、调用参数、目标地址、区块时间、合约状态等维度找差异。 第九步,重试交易:正常重试使用 cast send 不指定 gas limit,让节点自动估算;已知消耗范围时使用 cast send 指定较高 gas limit。重试时使用 Foundry Keystore 管理签名身份。
安全注意事项 技能要求使用 Foundry Keystore 管理签名身份,禁止在命令中明文传入私钥;真实发送前先用模拟调用确认不会 revert;批量重试时先发一笔验证,成功后再发剩余;发送后确认 status=1,再查询链上状态确认变更生效。
限制 资料未提供该技能的收费、价格、平台支持范围或性能效果等信息。该技能依赖 Foundry cast CLI 与 RPC endpoint,重放交易需要 archive 节点,在线分析平台仅作为备用方案。