決済フローを構築する前に、Solanaに接続し、ネットワークデータのクエリ方法を理解する必要があります。このガイドでは、@solana/kit TypeScript SDKとSolana CLIを使用した接続の確立と決済に必要なRPCメソッドの使用という基本事項を説明します。さらに、Solana Explorerを使用して決済を手動で検証し、アカウントを検査し、問題をデバッグする基本についても説明します。
Solanaへの接続
SolanaのRPC APIは、ネットワークとプログラム的に対話するための主要な方法です。RPC URLは、事実上ネットワークへのAPIキーです。
本番環境では公開RPCを使用しないでください
公開エンドポイント(api.mainnet-beta.solana.com、api.devnet.solana.com)はレート制限があり、SLAがなく、本番環境の決済フローには適していません。本番環境のデプロイには、RPCプロバイダーを使用してプライベートRPCエンドポイントを確保してください。
開発とテストには、レート制限付きの公開エンドポイントを使用できます。
ネットワークと対話するためのRPCクライアントを作成します。
import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");const rpcSubscriptions = createSolanaRpcSubscriptions("wss://api.mainnet-beta.solana.com");
開発には、devnet(https://api.devnet.solana.com)またはSurfpoolのようなローカルvalidatorを使用してください。
一般的なRPCメソッド
SolanaのJSON-RPC APIは、ネットワークをクエリするためのメソッドを公開しています。決済フローで最もよく使用するメソッドは次のとおりです。
アカウント情報の取得
Solana上のすべてのアカウントは、公開鍵によってアドレス指定可能です。getAccountInfo
RPCメソッドを使用して、任意のアカウントに関する情報を取得します。getAccountInfoメソッドはAccountInfoオブジェクトを返し、これにはアカウントの公開鍵、SOL残高、データ、およびその他のメタデータが含まれます。
dataフィールドは、アカウントのデータをbase64エンコードした文字列です。@solana/kitパッケージのgetBase64Codecメソッドを使用してバイトにエンコードし、アカウントのデータに期待されるコーデック(既知の場合)を使用して読み取り可能なオブジェクトにデコードできます(例: トークンアカウントの場合はgetTokenCodec)。
const accountInfo = await rpc.getAccountInfo(address("7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV"), {encoding: "base64"}).send();const dataBytes = getBase64Codec().encode(accountInfo.value.data);const parsedTokenData = getTokenCodec().decode(dataBytes);console.log(parsedTokenData);
トークン残高の取得
getTokenAccountBalance
RPCメソッドを使用して、トークンアカウントの残高を確認します:
const balance = await rpc.getTokenAccountBalance(tokenAccountAddress).send();console.log(balance.value.uiAmount); // Human-readable (e.g., 100.50)console.log(balance.value.amount); // Base units (e.g., "100500000")
トランザクションの構築
すべてのトランザクションは、有効であること(古くないこと)を保証するために、最新のブロックハッシュが必要です。getLatestBlockhash
RPCメソッドを使用して、支払いトランザクションを作成する前に取得してください:
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
ブロックハッシュは約60秒後に期限切れになります。署名と送信の直前に新しいものを取得してください。
トランザクションステータスの確認
getSignatureStatuses
RPCメソッドを使用して、トランザクションが確定したことを確認します:
const status = await rpc.getSignatureStatuses([signature]).send();const result = status.value[0];// result.confirmationStatus: "processed" | "confirmed" | "finalized"
トランザクション詳細の取得
getTransaction
RPCメソッドを使用して、確認済みトランザクションの完全な詳細を取得します:
const transaction = await rpc.getTransaction(signature, { maxSupportedTransactionVersion: 0 }).send();
トランザクション履歴
getSignaturesForAddress
RPCメソッドを使用して、アドレスの最近のトランザクションを取得します:
const signatures = await rpc.getSignaturesForAddress(walletAddress, { limit: 10 }).send();
包括的な支払い監視については、webhookとリアルタイムトランザクション検出をカバーする支払いの受け入れを参照してください。
公開データの探索
Solanaの公開台帳は、すべてのトランザクション、トークンアカウント、ミントが完全に監査可能であることを意味します。ブロックエクスプローラーを使用すると、コードを書かずに手動で支払いを検証し、アカウントを検査し、問題をデバッグできます。
検索できる内容:
- 支払いが決済されたことを確認
- トークンアカウントの残高を検査
- 失敗したトランザクションをデバッグ
- ミントの詳細(供給量、小数点以下桁数、権限)を検索
一般的なエクスプローラー: Solana Explorer、SolanaFM、Solscan、Orb
リンク例:
- USDCトークンミント — USDCの供給量、市場、保有者、トランザクション
- USDCトークン転送 — USDC支払いトランザクションの詳細
- USDGトークンアカウント — ユーザーのUSDG残高とトランザクション履歴
Is this page helpful?