引言
欢迎来到“Solana 简化”系列。在 第一篇文章 中,我们深入探讨了 Solana 的运行机制、账户模型和交易结构。在 第二篇文章 中,我们探索了如何使用 Rust 编写 Solana 程序来发布和显示文章,以及如何使用 TypeScript 编写的脚本进行测试。
作为本系列的第三篇也是最后一篇文章,本文将引导您使用 Phalcon Explorer 来分析简单的 Solana 交易。在此之前,让我们先来了解一下 Solana 上代币的实现方式。
关于代币
Solana 上的代币可以分为两类:原生代币和非原生代币。
原生代币指的是 Solana 代币(SOL)。如第一篇文章所述,Solana 中的每个账户都有一个 Lamports 字段,该字段记录了账户中 SOL 的余额。Lamports 是 SOL 的最小单位(1 SOL = 10 亿 Lamports)。
对于非原生代币,Solana 利用一个程序账户(Token Program)和两种数据账户(Mint Account 和 Token Account)来实现代币所需的全部功能。
Token Program

Token Program 是 Solana Program Library (SPL) 提供的一个程序账户,因此,其 AccountInfo 的 Executable 字段为 True。
如第一篇文章所述,所有程序账户的所有者都是 BPF Loader,Token Program 也不例外。此外,与 System Program 类似,Token Program 在 Solana 上部署在固定地址。
作为一个程序账户,它实现了许多指令来提供各种功能。例如,一些指令用于创建 Mint Account 以初始化新代币,或创建 Token Account 来记录特定地址持有的代币数量。其他指令提供了使用代币所需的所有功能,例如用于增加代币供应量的 MintTo 指令,或用于在两个地址之间转移代币的 Transfer 指令。
需要注意的是,由于 Token Program 负责创建 Mint Account 和 Token Account,因此它也是这些账户的所有者。
Mint Account
Mint Account 的结构如下:

Mint Account 是一个数据账户,因此其 AccountInfo 的 Executable 字段为 False。 在 Solana 上,每个代币都对应一个 Mint Account。Mint Account 存储了代币的总供应量以及拥有铸造代币权限的账户的地址等信息。
Token Account
Token Account 记录了个人持有的特定代币的数量。对于每种类型的代币,持有该代币的每个账户都有一个对应的 Token Account。如果用户持有五种不同的代币,他将拥有五个 Token Account。
Token Account 是一个数据账户,其 AccountInfo 的 Data 字段包含三个子字段:
- Mint:此 Token Account 对应的 Mint Account 的地址;
- Owner:拥有从 Token Account 转让代币的权限的账户,即代币的真正“所有者”;
- Amount:Token Account 中当前持有的代币数量。
需要强调的是,AccountInfo 中的 owner 字段和 Data 字段中的 owner 是完全不同的。前者是 Solana 中每个账户都存在的字段,表示哪个地址有权直接修改当前账户的数据。后者指定了 Token Account 中记录的代币的实际所有者,并且是 AccountInfo Data 字段的一部分。
将上述概念联系起来,我们可以得出以下账户关系图。System Program 和 Token Program 都部署在区块链上的唯一地址,并作为库存在。一个钱包账户可能持有多个 Token Account,并且是这些 Token Account 的真正“所有者”。同一类型的 Token Account 中的 Mint 字段指向该代币唯一的 Mint Account,该 Mint Account 记录了代币的总供应量等信息。
在 Solscan 中查看 Token Accounts
我们可以使用 Solscan 查看 此交易 中 Token Accounts 的变化:

Address 列列出了交易中涉及的所有 Token Account;Owner 列表示代币的真正“所有者”,即 Token Account Data 字段中的 owner;Token 列对应当前代币的 Mint Account。我们可以点击第一行右侧的“$SON”以获取更多详细信息:

Profile Summary 中的 Owner Program 表明当前 Mint Account 的所有者是 Token Program。至此,我们已在 Solscan 中匹配了所有三种类型的账户。
然而,Solscan 中的这种显示方式可能有些误导。例如,在上图所示的情况下,无法明确第一行的余额增加属于地址 CHS9WajyFfuaAZRk2JC7hRJvPHXmG5fC94gtAPbnLjuY 还是 Raydium Authority V4。这种模糊性增加了用户理解交易的难度。
此外,读者可能会注意到 Solscan 将 SOL Token 和其他代币显示在不同的部分。虽然这种分离在技术上是合理的,但如果它们在统一的代币部分中显示在一起,会更容易理解。
Phalcon Explorer 不仅解决了上述问题,还引入了许多其他创新。现在让我们使用 Phalcon Explorer 来检查相同的交易。
我们建议打开 此链接,并按照我们的步骤进行分析。这样,您将能更好地理解交易细节,并欣赏 Phalcon Explorer 的强大功能 💪
在 Phalcon Explorer 中查看和分析交易

在页面左上角,您可以看到当前交易已被识别为 JITO MEV 交易。
您也可以点击交易签名旁边的 Solana 图标直接跳转到 Solscan。 此交易的信息分为四个部分:Basic Info、Fund Flow、Balance Changes 和 Invocation Flow。您可以通过点击右上角的图标切换到相应的部分。
Basic Info

Basic Info 部分提供了关于当前交易的一些关键细节。您可以点击区块号和签名者地址跳转到 Solscan。
Fund Flow

Fund Flow 部分提供了交易执行期间资金流动和时间的信息:
- 交易发起者和签名者 59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2F,首先将一定数量的代币转移到标记为 Raydium Authority V4 的地址;
- 接下来,Raydium Authority V4 将约 6.747 Wrapped SOL Tokens 转回给签名者 59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2F;
- 最后,签名者向 Jito 提供了 0.000003 SOL 作为小费,以感谢 Jito 验证者执行了此交易。
下方是来自 Solscan 的资金流向图。与 Solscan 相比,Phalcon Explorer 的资金流向图中的每个地址都唯一对应一个节点,更容易识别地址之间的关系,从而提高了分析效率。

如果您想对交易的资金流向进行更深入的分析,可以点击右上角的棕色图标进入 MetaSleuth。
Balance Changes

Balance Changes 部分清楚地显示了交易结束后不同账户的代币变化。
例如,交易的签名者 59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2F,其 native token SOL、名为 61Hh8Udg7zruvG3BhyNiHF4UmULnC8reB9RBFtwi8uKp 的代币以及 Wrapped SOL Token 这三种代币发生了变化。
Balance Changes 中出现的每个 Account Address 都拥有一个或多个 Token Account。通过点击相应的地址,您可以复制它或跳转到 Solscan。
Phalcon Explorer 不区分 SOL Token 和其他代币,直接反映了给定账户所有代币的变化。这也有助于更直观地展示 Token Account 与其 Owner 之间的关系。
Invocation Flow

Invocation Flow 记录了交易指令的执行过程,每一行对应交易中执行的一条指令。
在此,我们重点关注涉及代币转账的第二条和第四条指令。
第二条指令调用了 Raydium AMM 的 swapBaseIn 来卖出代币。展开此指令,我们可以看到它包含两个 CPI(Cross Program Invocation)指令,这些指令促进了 Raydium Authority V4 和交易签名者之间的代币转账。第四条指令是签名者向 Jito 支付小费的过程。
如下图所示,通过点击每条指令后的 Accounts 标签,我们可以查看该指令涉及的所有账户。与 Solscan 相比,这种显示方式更加简洁,使分析师能够专注于交易中更关键的信息。

结论
在本文中,我们首先介绍了 Solana 代币的实现原理。然后,我们使用 Solscan 检查了特定交易中 Token Account 的变化。最后,我们使用 Phalcon Explorer 对该交易进行了进一步分析,并介绍了 Phalcon Explorer 的创新功能。
“Solana 简化”系列至此结束。您觉得有帮助吗?如果您还有其他想了解的主题,例如安全事件、生态系统介绍或 BlockSec 产品,请随时留言!🫡



