PYUSD on Solana: 実践的統合ガイド(BlockEden.xyz RPC付き)
PayPal USD (PYUSD) が Solana に上場し、デジタル決済にとって重要なマイルストーンとなりました。このガイドは、エンジニアが Solana 上のウォレット、dApp、商取引プラットフォームに PYUSD を統合するための、実装志向のステップバイステップ walkthrough を提供します。
すべての例は最新の Token-2022 対応コードを使用し、BlockEden.xyz の低遅延 Solana RPC エンドポイントとシームレスに動作するよう設計されています。
TL;DR
- 概要: PayPal USD (PYUSD) は Solana 上のネイティブ Token-2022 SPL トークンとなり、世界的に認知されたステーブルコインの高速・低手数料決済を実現します。
- 主要パラメータ: Mint
2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
、小数点以下6
、トークンプログラムToken-2022
。 - 機能セット: Solana Token Extensions (Token-2022) を活用。Transfer Hook は初期化済みですが現在は null プログラムで非アクティブ。機密転送機能やその他拡張も備えています。
- クロスチェーン: 公式 LayerZero 統合により、Ethereum と Solana 間で安全なバーン&ミント方式で PYUSD を移動可能。従来のブリッジを回避します。
- アクション: 本ガイドをテン プレートとして使用し、BlockEden.xyz の信頼性の高い Solana RPC でアプリケーションに PYUSD サポートを追加してください。
なぜ Solana 上の PYUSD が重要か
PayPal のブランドと Solana のパフォーマンスが組み合わさり、デジタルドルの新たなレールが誕生します。
- 消費者信頼と暗号 UX の融合: PYUSD は規制された信託会社 Paxos により発行され、PayPal と Venmo に深く統合されています。ユーザーは慣れ親しんだ資産を保有でき、Ethereum または Solana の外部ウォレットへ引き出すことも可能です。チェーンの複雑さを抽象化します。
- 決済対応レール: Solana のアーキテクチャはサブ秒のトランザクション確定と数センチの手数料を実現。PYUSD はこの効率的な決済ネットワーク上に安定した単位を提供し、決済、商取引、送金に最適です。
- 機関向けコントロール: Token-2022 トークンとしてリリースすることで、機密転送、リッチメタデータ、永続デリゲートなどの組み込み拡張を利用可能。高度なコンプライアンスと機能を、監査が容易な形で実装できます。
必須項目(必ず確認)
コードを書き始める前に、以下のパラ メータを確実にロックしてください。信頼できるエクスプローラで Mint アドレスを必ず検証し、詐欺トークンとの取引を防ぎます。
- Mint(メインネット):
2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
- 小数点以下:
6
(1 PYUSD = 1,000,000 基本単位) - トークンプログラム:
Token-2022
(Program ID:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
) - 使用されているトークン拡張(Mint 時点):
- メタデータ & メタデータポインタ
- 永続デリゲート
- Transfer Hook(null プログラムで初期化)
- 機密転送設定
これらはすべて Solana Explorer で確認できます。エクスプローラは公式 Mint アドレスと有効化された拡張を明示します。
プロジェクトのセットアップ
環境を整えます。Token-2022 互換性を確保するため、最新の Solana web3 と SPL token ライブラリが必要です。
1. ライブラリ
npm から必要なパッケージをインストールします。
npm i @solana/web3.js @solana/spl-token
2. RPC 接続
アプリケーションを BlockEden.xyz の Solana メインネット RPC URL にポイントします。プロダクションでは環境変数の使用が必須です。
// package.json
// npm i @solana/web3.js @solana/spl-token
import { Connection, Keypair, PublicKey } from "@solana/web3.js";
import {
TOKEN_2022_PROGRAM_ID,
getMint,
getOrCreateAssociatedTokenAccount,
getAssociatedTokenAddress,
createTransferCheckedInstruction,
} from "@solana/spl-token";
// ダッシュボードで取得した BlockEden.xyz の Solana RPC URL を使用
const RPC_ENDPOINT =
process.env.SOLANA_RPC_URL ??
"https://your-blockeden-solana-mainnet-endpoint.com";
export const connection = new Connection(RPC_ENDPOINT, "confirmed");
// PYUSD(メインネット)
export const PYUSD_MINT = new PublicKey(
"2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
);
PYUSD Mint データの取得
まず、プログラム上で PYUSD Mint のプロパティを確認します。定数が正しいかを検証し、総供給量などの詳細を取得する重要なステップです。
// Token-2022 API を使用して PYUSD Mint 情報を取得
const mintInfo = await getMint(
connection,
PYUSD_MINT,
"confirmed",
TOKEN_2022_PROGRAM_ID, // プログラム ID を明示
);
console.log({
supply: mintInfo.supply.toString(),
decimals: mintInfo.decimals, // 6 が期待値
isInitialized: mintInfo.isInitialized,
});
TOKEN_2022_PROGRAM_ID
を明示的に渡すことが、Token Extensions を扱う際の最も一般的なエラー原因です。
関連トークンアカウント(ATA)の作成または取得
Token-2022 トークンの ATA は必ず Token-2022 プログラム ID を使用して導出します。レガシー TOKEN_PROGRAM_ID
を使用すると「incorrect program id」エラーが発生します。
// Payer と ATA の所有者。ウォレットロジックに置き換えてください。
const owner = Keypair.generate();
// 所有者の PYUSD ATA を作成または取得(Token-2022 対応)
const ownerAta = await getOrCreateAssociatedTokenAccount(
connection,
owner, // 作成時の Payer
PYUSD_MINT, // Mint
owner.publicKey, // ATA の所有者
false, // allowOwnerOffCurve
"confirmed",
undefined, // options
TOKEN_2022_PROGRAM_ID, // <-- 重要: Token-2022 Program ID を使用
);
console.log("Owner PYUSD ATA:", ownerAta.address.toBase58());
PYUSD 残高の確認
ユーザーの PYUSD 残高を確認するには、ATA を問い合わせ、正しいプログラム ID を指定することを忘れないでください。
@solana/spl-token
を使用
import { getAccount } from "@solana/spl-token";
const accountInfo = await getAccount(
connection,
ownerAta.address,
"confirmed",
TOKEN_2022_PROGRAM_ID,
);
const balance = Number(accountInfo.amount) / 10 ** mintInfo.decimals; // decimals = 6
console.log("PYUSD balance:", balance);
直接 JSON-RPC(curl
)
所有者のすべてのトークンアカウントを取得し、Token-2022 プログラム ID でフィルタリングできます。
curl -X POST "$SOLANA_RPC_URL" -H 'content-type: application/json' -d '{
"jsonrpc":"2.0",
"id":1,
"method":"getTokenAccountsByOwner",
"params":[
"<OWNER_PUBLIC_KEY>",
{ "programId":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" },
{ "encoding":"jsonParsed" }
]
}'