Solana トランザクションデコーダー

ウォレットが署名を求める base64 や、RPC が返す文字列を貼り付けてください。デコーダーは署名者、アカウント、命令を一覧表示し、一般的なプログラムを名前で示し、SOL とトークンの送金を要約します。

署名済みでも未署名でも構いません。デコードはブラウザ内で実行され、どこにも送信されないため、これから署名する未署名トランザクションでも安全です。
例:

ブラウザ内で JavaScript によりデコードされます。アドレスがアップロードまたは保存されることはありません。

シリアライズされた Solana トランザクションとは

シリアライズされた Solana トランザクションはコンパクトなバイト配列です。個数プレフィックス付きの 64 バイト ed25519 署名のリストの後にメッセージが続き、メッセージにはヘッダー(署名者数と読み取り専用アカウント数)、32 バイト鍵としてのアカウントアドレス、最近の blockhash、そしてプログラムとアカウントをインデックスで参照する命令が含まれます。ウォレットと RPC ノードはこれを base64 または base58 でやり取りし、最初の署名がトランザクション ID を兼ねます。

結果の読み方

Legacy メッセージと versioned(v0)メッセージ

項目Legacyv0(versioned)
メッセージのプレフィックスなし。ヘッダーから始まるヘッダーの前に 0x80 のバージョンバイト
アカウントすべてインラインで列挙、1232 バイト制限までインラインに加え、アドレスルックアップテーブルへのインデックス
オフラインで解決可能かはい。すべてのアカウントがメッセージ内にあるルックアップテーブルのエントリにはオンチェーンデータが必要
主な生成元シンプルなウォレット、古い SDKDEX アグリゲーターなど、多数のアカウントを扱うもの

具体例

SOL 送金のメッセージには 3 つのアカウントがあります: 送信者(署名者、書き込み可能)、受取先(書き込み可能)、System Program 11111111111111111111111111111111。唯一の命令はアカウントインデックス 2 を指し、データは 02000000(リトルエンディアン u32 の命令 2 = Transfer)に続けてリトルエンディアン u64 の金額なので、00e1f50500000000 は 100,000,000 lamports = 0.1 SOL です。USDC 送金は代わりに Token プログラムを対象とし、金額と decimals = 6 を持つ TransferChecked 命令になります。

ウォレットのプロンプトを確認する

dApp が署名を要求すると、ウォレットはシミュレーションを表示することがよくあります。本当のところを知りたければ、dApp からシリアライズされたメッセージをログ出力し(ほとんどのライブラリは transaction.serialize({ requireAllSignatures: false }) を公開しています)、ここに貼り付けてください。Compute Budget の設定や、シミュレーションの要約では隠れがちな SetAuthority や Approve を含め、すべての命令が表示されます。

関連: Solana アドレスバリデーター、lamports コンバーター、devnet 一括送金。

よくある質問

どの形式が使えますか?

encoding を base64 にした getTransaction、ウォレットの signTransaction、または Transaction.serialize() が返す base64。sendTransaction で使われる base58。生の hex。署名配列のないメッセージ単体も受け付けます。これは一部のウォレットが署名前に表示するものです。

v0 トランザクションとは何ですか?

Versioned トランザクション(v0)は、1232 バイト制限内により多くのアカウントを収めるため、アドレスルックアップテーブルに保存されたアカウントを参照できます。デコーダーはテーブルのアドレスとインデックスを表示しますが、その背後の実際のアカウントはオンチェーンにあり、オフラインでは解決できないため 'lookup-table account #n' と表示されます。

トランザクションの署名はハッシュと同じですか?

Solana では最初の署名がトランザクション ID として機能します。署名スロットがゼロでない場合に表示され、未署名のトランザクションにはまだ ID がありません。

どの命令がデコードされますか?

System Program の送金とアカウント作成、SPL Token と Token-2022 の送金、承認、ミント、バーン、クローズ(checked 版は小数桁付きで金額を表示)、Associated Token Account の作成、Compute Budget の上限と価格、Memo のテキスト。その他のプログラムは既知であれば名前(Jupiter、Raydium、Orca、Metaplex)と生のアカウント・データで表示されます。

1232 バイト制限とは何ですか?

Solana のトランザクションは 1 つのネットワークパケットに収まる必要があります。IPv6 の MTU 1280 バイトからヘッダーを引くと、シリアライズされたトランザクションに残るのは 1232 バイトです。アカウントごとに 32 バイト、署名ごとに 64 バイトを消費するため、大きなトランザクションはルックアップテーブルを使います。

SPL の Transfer で金額が生の単位なのはなぜですか?

通常の Transfer 命令には小数桁が含まれず、TransferChecked だけが含みます。mint の小数桁が分かったら、小数桁コンバーターで生の単位を変換してください。