Solscan嵌套指令怎么看:从主指令追到CPI调用
查看嵌套指令的核心是看 Sol scan 交易详情页里的 "Inner Instructions"。它会完整展开一笔交易从顶层指令(Top-level Instruction)到跨程序调用(CPI)的完整调用树,每一步调了谁、传了什么、转了多少币都列得清清楚楚。
1. 先理解 Solana 的指令结构:这不是一笔转账,是一棵树
Solana 的一笔交易可以包含多个顶层指令(Instruction)。每个顶层指令在执行时,又可以调用另一个程序(CPI),那个程序还能再调用下一个程序。
Solscan 的 Inner Instructions 就是把你这棵树"展平"了给你看。它把顶层指令和它触发的所有 CPI 调用,按执行顺序排列,用缩进(或表格分层)的方式展示谁调了谁。
前置条件:你手里有一笔 Solana 交易的哈希(TxHash)。打开 Solscan,把哈希贴进去。
2. 实操:从主指令一路追到 CPI
步骤1:定位到交易的"Instructions"区域
做什么:在 Solscan 交易详情页找到"Instructions"(指令)面板。这是 2025 年 11 月升级后的新布局,指令详情默认可能是折叠的,需要手动点开。
怎么做:往下翻,找到"Instruction"或"Instructions"标题栏。如果看到一堆折叠的灰色条,点"Expand All"或者逐个点开。
做到什么程度算完成:你看到了顶层指令列表,比如"System Program"、"Token Program"、"Unknown Program"等。
步骤2:查看顶层指令的"Inner Instructions"调用
做什么:点击你想看的那条顶层指令,展开它的内部调用详情。
怎么做:展开后,会看到两个关键部分:Instruction Details(这条指令本身的参数,比如转给谁、转多少)和 Inner Instructions(这条指令执行过程中调用了哪些其他程序)。
做到什么程度算完成:你看到了顶层指令下面的子调用列表,这就是 CPI 的第一层。
步骤3:层层展开,追到最底层
做什么:如果一条 Inner Instruction 又调用了别的程序,继续点开它。
怎么做:在 Inner Instructions 列表中,如果某一条的 Program 字段显示的不是系统级程序(如 Token Program、System Program),而是一个应用合约地址(比如 Raydium、Jupiter 的程序 ID),并且它有"更多详情"或"+ Inner"按钮,说明它可能还有下一层调用。点击展开。
做到什么程度算完成:你一路点到了最底层,确认了最终是谁执行了这笔操作(例如:一个 Swap 指令,顶层是 Jupiter 程序,CPI 调用了 Raydium 的 Token Swap 程序,最终由 Token Program 完成转账)。
步骤4:确认完整的资金流向和失败原因
做什么:利用 Inner Instructions 里的信息,确认这笔交易"到底干了什么"以及"在哪一步失败的"。
怎么做:
追资金:看 Inner Instructions 里的 Balance Changes(余额变化)。Solscan 已把 SOL 和 Token 的余额变化合并到一个视图,能清楚看到每个账户在每一步前后余额的变化。
查失败:如果交易失败了,Solana 交易通常是在某一个具体的指令索引(Instruction Index)处失败的。看 Inner Instructions 里的 Program Logs(程序日志),日志会告诉你具体是哪个程序、因为什么(比如 Error Code: 0x1、Insufficient funds)失败的。
做到什么程度算完成:你通过展开的调用树和日志,定位到了具体的失败点(比如 Instruction #2 → Inner #3 → Program X → Revert)。
3. 常见误区与硬核技巧
误区:"顶层指令就是全部"
交易的主体往往藏在 CPI 里。一个 Swap 可能只有 2 条顶层指令(先校验,后执行),但执行指令里的 CPI 会调用 5-6 个程序完成拆单、中间兑换、合并等操作。
技巧:如果 Solscan 网页看层级麻烦,可以复制签名,用 solana-cpi-lens 看树形图
Solscan 的 Inner Instructions 是列表视图(平铺的)。如果调用层级太深(比如 5-6 层),容易晕。
风险提醒:Inner Instructions 是执行结果的记录,不是"意图"。如果一笔交易失败,它可能会部分回滚,你看到的部分 Inner Instructions 可能已经被撤销,但依然会显示在日志里。判定交易最终有没有成功,永远以页面顶部的 Status(Success / Failed) 为准。
做完以上步骤,怎么确认自己追到底了?
当你点开一笔交易的"Inner Instructions",一路展开后,看到最后一层的 Program 是基础的 System Program 或 Token Program,并且不再有可展开的子项(即栈深度 Stack Height 不再增加),说明你已经追到了 CPI 调用的末端。如果交易是失败的,并且你从 Inner Instructions 里找到了第一条出现 Error 或 Revert 的日志,说明你定位到了失败根因。
