分享 使用 Phalcon Explorer 教你看懂 Solana 交易

liberalism · 2024年07月07日 · 230 次阅读

原文:https://mp.weixin.qq.com/s/3X_S7bmoNVjIyWK7VU2MBQ

关于 Tokens

Solana 上的 Token 可以分为两类:Native Token 和其它 Token。

Native Token 其实就是 Solana Token (SOL)。我们在之前的文章里曾提到,Solana 中的每一个账户都拥有一个 Lamports 字段,Lamports 实际上是 SOL Token 的最小单位(1 SOL = 10 亿 Lamports),它记录了当前账户 Solana Token 的余额。

而对于其它 Token,Solana 使用了一个程序账户(Token Program)以及两种数据账户(Mint Account 和 Token Account),来实现 Token 需要的所有功能。

Token Program

Token Program 结构示意图 Token Program 是由 Solana Program Library(SPL)提供的一个程序账户,因此 AccountInfo 的 Executable 字段显示为 True。

正如我们在第一篇文章中介绍的那样,所有程序账户的拥有者都是 BPF Loader,Token Program 也不例外。此外,和 System Program 一样,Token Program 也被部署在 Solana 链上的一个固定地址。

作为一个程序账户,它实现了数个指令来提供不同的功能。比如,一些指令被用于创建 Mint Account 以初始化一种新的 Token,或是创建 Token Account 用于记录某一个地址持有的 Token 数量;而另一些指令则提供了使用 Token 需要的所有功能,比如增加 Token 数量的 MintTo 指令,或是用于在一对地址之间转移 Token 的 Transfer 指令。

需要注意,由于 Token Program 负责创建 Mint Account 和 Token Account,它还是这两种账户的拥有者。

Mint Account

Mint Account 的结构和关系如下所示:

Mint Account 是一种数据账户,这意味着其 AccountInfo 的 Executable 字段为 False。

在 Solana 上,每一种 Token 都和一个 Mint Account 对应。Mint Account 记录了该种 Token 的总供应量,拥有 Mint 该 Token 权限的账户地址等信息。

Token Account

Token Account 用于记录个体持有某种特定 Token 的数量。针对某一种 Token,每一个持有该 Token 的账户都拥有一个 Token Account。如果某用户拥有 5 种 Token,那么 TA 将拥有 5 个 Token Account。

Token Account 作为一种数据账户,其 AccountInfo 的 Data 部分由三个字段组成:

  • Mint: 该 Token Account 对应的 Mint Account 的地址;

  • Owner: 有权将 Token Account 中 Token 转出的账户,即该 Token 真正的“owner”;

  • Amount:当前 Token Account 持有的 Token 数量。

Token Account 结构图

需要强调的是,AccountInfo 中的 owner 字段和 Data 字段中的 owner 是完全不同的。前者是 Solana 中每一个账户都拥有的一个字段,它指明了哪一个地址拥有直接修改当前账户数据的权限;后者则指明了该 Token Account 所记录的 Token 实际上是属于谁的,该字段本身是 AccountInfo Data 字段的一部分。

将上述的内容串联起来,我们便能得到下面这张账户关系的示意图。不管是 System Program 还是 Token Program,它们在区块链上都部署在唯一的地址,以库的形式存在;一个钱包账户可能同时持有多个 Token Account,它是这些 Token Account 真正的“owner”;同一类 Token Account 的 Mint 字段指向了该种 Token 唯一的 Mint Account,而该账户则记录了 Token 的总供应量等信息。

在 Solscan 查看 Token 账户变化情况

我们可以使用 Solscan 来查看一笔交易中 Token 账户的变化情况:

https://solscan.io/tx/byRn8qtNAYSdvgaGCK4kmZV1m89b7uuFuy1cn96W6femp7WgwymLqJ2MP9hPbegqN9EPe7NvghWpqDFqoCDjKph#tokenBalanceChange

Address 一栏列出了该交易涉及到的所有 Token Account;

Owner 一栏则标注了该 Token 真正的“拥有者”,也就是 Token Account Data 字段中的 owner;

Token 一栏则对应了当前 Token 的 Mint Account,我们可以点进第一行的$SON 进一步查看:

可以看到,Profile Summary 中的 Owner Program 指明了当前 Mint Account 的拥有者是 Token Program,至此三类账户我们都在 Solscan 中进行了对应。

不过,Solscan 这种展示方法可能会给人带来一些误解。比如,在上一张图中第一行增加的 Balance 到底属于地址 CHS9WajyFfuaAZRk2JC7hRJvPHXmG5fC94gtAPbnLjuY,还是 Raydium Authority V4?这种展示方式无疑增加了理解的成本。

除此之外,读者也许还会发现,Solscan 中的 Solana Token 和其它 Token 在两个板块分开展示。尽管这种分割方式在技术上是合理的,但如果能在展示时将它们统一视作 Token 放置在相同板块下则更加容易理解。

Phalcon Explorer 不仅解决了上述问题,还针对 Solscan 做了很多其它创新,接下来让我们再使用 Phalcon Explorer 来看看同一笔交易。

👀 建议打开链接,跟随我们的步骤一起分析,这样可以更好地了解交易细节,感受 Phalcon Explorer 的强大功能 💪

https://app.blocksec.com/explorer/tx/solana/byRn8qtNAYSdvgaGCK4kmZV1m89b7uuFuy1cn96W6femp7WgwymLqJ2MP9hPbegqN9EPe7NvghWpqDFqoCDjKph

使用 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 的地址转移了一定数量的某种 Token;

  • 接着 Raydium Authority V4 向签名者 59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2F 转账了约 6.747 的 Wrapped SOL Token;

  • 最后,签名者还向 Jito 提供了 0.000003 的 SOL Token 作为 Jito 验证者执行交易的小费。

下图为 Solscan 中的资金流向图。相较于 Solscan,每一个地址在 Phalcon Explorer 中的资金流向图唯一对应到一个节点,故而能更容易发现地址之间的资金流向关系,提高分析时的效率。

如果你想要对交易的资金流向进行更深入的分析还可以点击右上角的棕色标识进入 MetaSleush。

Balance Changes

Balance Changes 一栏为我们清晰展示了不同账户在当前交易结束后所有 Token 的变化情况。

比如,交易的签名者 59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2F 就有三种 Token 发生了变化,分别是原生的 SOL Token、名为 61Hh8Udg7zruvG3BhyNiHF4UmULnC8reB9RBFtwi8uKp 的 Token,以及 Wrapped SOL Token。

在 Balance Changes 中出现的每一个 Account Address 都拥有一个或多个 Token Account,通过点击相应的地址能够对其进行拷贝或跳转到 solscan 上。

我们可以看到,Phalcon Explorer 并没有对 SOL Token 和其它 Token 作区分,故而能直接反映出某一账户所有 Token 的变化情况,并且能更加直观地展示 Token Account 和其 Owner 之间的关系。

Invocation Flow

Invocation Flow 记录了交易的指令执行流程,其中的每一行都对应了 Solana 交易执行时的一条指令。

在这里,我们重点关注 2 和 4 这两条涉及到 Token 转移的指令。

第二条指令调用了 Raydium 的 AMM 的 swapBaseIn 来卖掉 Token。展开该指令可以看到它由两条 CPI(Cross Program Invocation)指令组成,这两条指令的作用是在 Raydium Authority V4 和交易签名者之间进行 Token 转移;第四条指令则是签名者向 Jito 支付小费的过程。

如下图所示,通过点击指令后的 Accounts 标签,我们可以查看指令涉及到的所有账户。相较于 Solscan,这种展示方式会更加简洁,让分析者将注意力放在交易中更关键的信息上。

结论

在本文中我们首先介绍了 Solana 中 Token 的实现原理,随后使用 Solscan 查看了一笔交易中 Token Account 的变化情况。最后,我们使用 Phalcon Explorer 对该交易作了进一步分析,并介绍了 Phalcon Explorer 功能上的创新和优化细节。

shooter 【先挖坑】solana 常见的区块浏览器 提及了此话题。 07月07日 15:46
需要 登录 后方可回复, 如果你还没有账号请 注册新账号