ネットワークからの読み取り
このセクションでは、さまざまなアカウントを取得してSolanaアカウントの構造を理解するために、Solanaネットワークからデータを読み取る方法を探ります。
Solanaでは、すべてのデータは「アカウント」内に存在します。Solana上のデータは、各エントリが同じ基本的な アカウントタイプを持つアカウントである単一の「アカウント」テーブルを持つ公開データベースと考えることができます。
アカウント
Solana上のアカウントは「状態」または「実行可能な」プログラムを保存できます。各アカウントには、オンチェーンデータを特定するための一意のIDとして機能する「アドレス」(公開鍵)があります。
Solanaアカウントには以下のいずれかが含まれます:
- 状態:読み取りと永続化を目的としたデータ。例えば、トークンに関する情報、ユーザーデータ、またはプログラム内で定義されたその他のデータなど。
- 実行可能なプログラム:Solanaプログラムの実際のコードを含むアカウント。これらのアカウントは、ユーザーが呼び出すことができる命令を保存します。
プログラムコードとプログラム状態のこの分離は、Solanaのアカウントモデルの重要な特徴です。詳細については、 Solanaアカウントモデルページを参照してください。
ウォレットアカウントの取得
この例では、以下の方法を示します:
- 新しいkeypair(公開/秘密鍵ペア)を生成する。
- 新しいアドレスにSOLのエアドロップをリクエストする。
- 資金提供されたアドレスのアカウントデータを取得する。
Solanaでは、新しいアドレスにSOLを資金提供すると、自動的にシステムプログラムが所有するアカウントが作成されます。すべての「ウォレット」アカウントは、単にSOLを保持し、トランザクションに署名できるシステムプログラム所有のアカウントです。
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Token Programを取得する
この例ではToken Programを取得して、ウォレットアカウントとプログラムアカウントの違いを示します。
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
Mintアカウントの取得
この例では、Solanaのプログラムがどのようにしてステートを別々のアカウントに保存するかを示すために、USD Coin (USDC) Mintアカウントを取得します。
Mint アカウントは、Token Programが所有するアカウントです。特定のトークンに関するグローバルメタデータ(総供給量、小数点以下の桁数、トークンを発行または凍結する権限を持つアカウントなど)を保存します。Mintアカウントのアドレスは、Solanaネットワーク上のトークンを一意に識別します。
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
Mintアカウントのデシリアライズ
Solanaアカウントの data
フィールドには生のバイトデータが含まれています。このデータを意味のある形で解釈するには、アカウントを所有するプログラムによって定義された適切なデータ型にデシリアライズする必要があります。
ほとんどのSolanaプログラムは、デシリアライズ処理を抽象化するヘルパー関数を持つクライアントライブラリを提供しています。これらの関数は、生のアカウントバイトを構造化されたデータ型に変換し、アカウントデータの操作を容易にします。
例えば、*shell@solana/spl-token
*には、Mintアカウントの data
フィールドを
Mint
データ型にデシリアライズするのに役立つ
getMint()
関数が含まれています。
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
Is this page helpful?