はじめに
「Solana Simplified」シリーズへようこそ。最初の記事では、Solanaの動作メカニズム、アカウントモデル、トランザクション構造について詳しく説明しました。2番目の記事では、記事の公開と表示のためのRustによるSolanaプログラムの書き方、およびTypeScriptで書かれたスクリプトを使用したテスト方法を探りました。
このシリーズの第3弾にして最終回となるこの記事では、Phalcon Explorerを使用して簡単なSolanaトランザクションを分析する方法をご案内します。その前に、まずSolanaでのトークンの実装方法について見ていきましょう。
トークンについて
Solanaのトークンは、ネイティブトークンとその他のトークンの2つのカテゴリに分類できます。
ネイティブトークンとは、Solanaトークン(SOL)を指します。最初の記事で述べたように、SolanaのすべてのアカウントにはLamportsフィールドがあり、アカウントのSOL残高を記録します。LamportsはSOLの最小単位です(1 SOL = 10億Lamports)。
その他のトークンについては、Solanaはプログラムアカウント(トークンプログラム)と2種類(ミントアカウントとトークンアカウント)のデータアカウントを利用して、トークンに必要なすべての機能を実装しています。
トークンプログラム

トークンプログラムはSolana Program Library(SPL)によって提供されるプログラムアカウントであり、そのためAccountInfoのExecutableフィールドはTrueです。
最初の記事で述べたように、すべてのプログラムアカウントの所有者はBPF Loaderであり、トークンプログラムも例外ではありません。さらに、システムプログラムと同様に、トークンプログラムはSolanaの固定アドレスにデプロイされています。
プログラムアカウントとして、さまざまな機能を提供するために多くの命令を実装しています。たとえば、ミントアカウントを作成して新しいトークンを初期化するため、または特定の署名者が保有するトークン数を記録するためにトークンアカウントを作成するための命令があります。その他の命令は、トークン供給を増やすためのMintTo命令や、2つの署名者間でトークンを転送するためのTransfer命令など、トークン使用に必要なすべての機能を提供します。
トークンプログラムがミントアカウントとトークンアカウントの作成を担当しているため、これらのアカウントの所有者でもあることに注意することが重要です。
ミントアカウント
ミントアカウントの構造は以下のとおりです。

ミントアカウントはデータアカウントであるため、AccountInfoのExecutableフィールドはFalseです。 Solanaでは、各トークンはミントアカウントに対応します。ミントアカウントは、トークンの総供給量やトークンをミントする権限を持つアカウントのアドレスなどの情報を保存します。
トークンアカウント
トークンアカウントは、個人が保有する特定のトークンの量を記録します。各種類のトークンについて、そのトークンを保有するすべてのアカウントには対応するトークンアカウントがあります。ユーザーが5種類の異なるトークンを保有している場合、5つのトークンアカウントを持ちます。
トークンアカウントはデータアカウントであり、AccountInfoのDataフィールドは3つのサブフィールドで構成されています。
- Mint: このトークンアカウントに対応するミントアカウントのアドレス。
- Owner: トークンアカウントからトークンを転送する権限を持つアカウント、つまりトークンの真の「所有者」。
- Amount: トークンアカウントに現在保有されているトークンの数。
AccountInfoのOwnerフィールドとDataフィールドのOwnerはまったく異なることに注意する必要があります。前者はSolanaのすべてのアカウントに存在するフィールドであり、現在のアカウントのデータを直接変更する権限を持つ署名者を示します。後者は、トークンアカウントに記録されているトークンを実際に所有しているユーザーを指定し、AccountInfo Dataフィールドの一部です。
前述の概念を関連付けると、次のようなアカウント関係図を導き出すことができます。システムプログラムとトークンプログラムはどちらもブロックチェーン上のユニークなアドレスにデプロイされ、ライブラリとして存在します。ウォレットアカウントは複数のトークンアカウントを保持する可能性があり、これらのトークンアカウントの真の「所有者」です。同じ種類のトークンアカウントのMintフィールドは、トークンの総供給量などの情報を記録するそのトークンのユニークなミントアカウントを指します。
Solscanでのトークンアカウントの表示
Solscanを使用して、このトランザクション内のトークンアカウントの変更を表示できます。

Address列にはトランザクションに関与するすべてのトークンアカウントがリストされています。Owner列はトークンの真の「所有者」、つまりトークンアカウントデータのOwnerを示しています。Token列は現在のトークンのミントアカウントに対応します。右側の最初の行にある「$SON」をクリックすると、詳細を確認できます。

Profile SummaryのOwner Programは、現在のミントアカウントの所有者がトークンプログラムであることを示しています。これで、Solscanで3種類すべてのアカウントを照合しました。
しかし、Solscanでのこの表示方法はやや誤解を招く可能性があります。たとえば、前の画像では、最初の行の残高増加がCHS9WajyFfuaAZRk2JC7hRJvPHXmG5fC94gtAPbnLjuY署名者によるものか、Raydium Authority V4によるものか不明瞭です。このような曖昧さは、ユーザーがトランザクションを理解するのを困難にします。
さらに、読者はSolscanでSOLトークンと他のトークンが別々のセクションに表示されていることに気づくかもしれません。この分離は技術的には合理的ですが、統一されたトークンセクションの下にまとめて表示されると、より理解しやすくなります。
Phalcon Explorerは、これらの問題に対処するだけでなく、多くの他の革新を導入しています。それでは、Phalcon Explorerを使用して同じトランザクションを調べてみましょう。
リンクを開き、手順を追って一緒に分析することをお勧めします。これにより、トランザクションの詳細をよりよく理解し、Phalcon Explorerの強力な機能を高く評価できます 💪
Phalcon Explorerでのトランザクションの表示と分析

ページ左上隅で、現在のトランザクションがJITO MEVトランザクションとして識別されていることがわかります。
トランザクション署名の横にあるSolanaアイコンをクリックして、直接Solscanにジャンプすることもできます。 このトランザクションの情報は、基本情報、資金の流れ、残高の変更、および呼び出しフローの4つのセクションに分かれています。右上隅のアイコンをクリックして、それぞれのセクションに切り替えることができます。
基本情報

基本情報セクションでは、現在のトランザクションに関するいくつかの重要な詳細情報が提供されます。ブロック番号と署名者のアドレスをクリックして、Solscanにジャンプできます。
資金の流れ

資金の流れセクションでは、トランザクション実行中の資金の移動とタイミングに関する情報が提供されます。
- トランザクションの発信者および署名者である59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2Fは、まず一定量のトークンをRaydium Authority V4というラベルの署名者に転送しました。
- 次に、Raydium Authority V4は、約6.747 Wrapped SOLトークンを署名者である59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2Fに返しました。
- 最後に、署名者は、トランザクション実行の対価としてJitoバリデーターにチップとして0.000003 SOLを提供しました。
以下はSolscanからの資金の流れ図です。Solscanと比較して、Phalcon Explorerの資金の流れ図では、各署名者がユニークなノードに対応しており、署名者間の関係を特定しやすくなり、分析効率が向上します。

トランザクションの資金の流れをより深く分析したい場合は、右上隅の茶色のアイコンをクリックしてMetaSleuthに入ることができます。
残高の変更

残高の変更セクションでは、トランザクション終了後の各アカウントのトークン変更が明確に表示されます。
たとえば、トランザクションの署名者である59vLEsmV5VCCGTxjHCoRiXkNgHDVcq7dGx98v9HCn2Fは、ネイティブトークンSOL、61Hh8Udg7zruvG3BhyNiHF4UmULnC8reB9RBFtwi8uKpという名前のトークン、およびWrapped SOLトークンの3種類のトークンで変更がありました。
残高の変更に表示される各アカウントアドレスは、1つ以上のトークンアカウントを持っています。対応するアドレスをクリックすると、コピーしたり、Solscanにジャンプしたりできます。
Phalcon Explorerは、SOLトークンと他のトークンを区別せず、特定のアカウントのすべてのトークンの変更を直接反映します。これにより、トークンアカウントとその所有者との関係を視覚化しやすくなります。
呼び出しフロー

呼び出しフローは、トランザクション命令の実行プロセスを記録しており、各行はトランザクション中に実行された命令に対応します。
ここでは、トークン転送に関与する命令2と4に焦点を当てます。
2番目の命令は、トークンを販売するためにRaydium AMMのswapBaseInを呼び出します。この命令を展開すると、Raydium Authority V4とトランザクション署名者間のトークン転送を容易にする2つのCPI(Cross Program Invocation)命令で構成されていることがわかります。4番目の命令は、署名者がJitoにチップを支払うプロセスです。
以下の図に示すように、各命令の後に表示されるAccountsタブをクリックすると、その命令に関与するすべてのアカウントを表示できます。Solscanと比較して、この表示方法はより簡潔であり、アナリストはトランザクションのより重要な情報に集中できます。

結論
この記事では、まずSolanaトークンの実装原理を紹介しました。次に、Solscanを使用して特定のトランザクションのトークンアカウントの変更を調べました。最後に、Phalcon Explorerを使用してトランザクションをさらに分析し、Phalcon Explorerの革新的な機能を紹介しました。
これで「Solana Simplified」シリーズは終了です。お役に立ちましたか?セキュリティインシデント、エコシステム紹介、BlockSec製品など、他に学習したいトピックがあれば、お気軽にコメントを残してください!🫡



