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" }
]
}'
PYUSD の転送(ユーザー間)
Token-2022 資産の転送は createTransferCheckedInstruction
を使用するのが基本です。この命令はトークンの小数点情報を含むため、桁数に関する脆弱性を防げます。
以下は PYUSD 転送用の汎用関数です。
import { Transaction } from '@solana/web3.js';
async function transferPyusd({
fromWallet, // 送信者の Keypair
toPubkey, // 受信者の PublicKey
uiAmount, // PYUSD 金額(例: 1.25)
}: {
fromWallet: Keypair
toPubkey: PublicKey
uiAmount: number
}) {
const decimals = 6;
const destinationAta = await getAssociatedTokenAddress(
PYUSD_MINT,
toPubkey,
false,
TOKEN_2022_PROGRAM_ID,
);
const transaction = new Transaction().add(
createTransferCheckedInstruction(
fromWallet.publicKey,
PYUSD_MINT,
destinationAta,
fromWallet.publicKey,
uiAmount * Math.pow(10, decimals),
decimals,
undefined,
undefined,
TOKEN_2022_PROGRAM_ID,
),
);
// 署名・送信は環境に合わせて実装してください
}
注記: Transfer Hook が将来的に有効化された場合でも、現在は null プログラムなので特別な処理は不要です。
BlockEden.xyz RPC エンドポイントの取得
BlockEden.xyz の RPC エンドポイントは、以下のように取得できます。
const endpoint = "https://<your-blockeden-endpoint>.blockeden.xyz";
高速かつ信頼性の高い BlockEden.xyz RPC の活用
本ガイドのコード例はすべて、BlockEden.xyz の高性能 RPC と組み合わせて動作するよう設計されています。実際のプロダクション環境では、以下の点に留意してください。
- エンドポイントのホワイトリスト化: BlockEden.xyz のダッシュボードで取得したエンドポイント URL を環境変数に設定。
- 接続の再試行ロジック: ネットワーク障害時に備えて、
Connection
の再接続ロジックを実装。 - モニタリング: RPC のレイテンシとエラーレートを CloudWatch などで監視し、必要に応じてバックアップエンドポイントにフェイルオーバー。
Transfer Hook に関する注意点
現在、PYUSD の Transfer Hook は null プログラムで初期化されています。将来的に有効化された場合は、以下を確認してください。
- プログラム ID の更新:
TOKEN_2022_PROGRAM_ID
のままで問題ありませんが、Hook が有効になると別のプログラム ID が必要になる可能性があります。 - 署名要件: Hook が有効になると、追加の署名や権限チェックが入ることがあります。
クロスチェーン統合
LayerZero を利用した公式ブリッジは、以下の手順で利用できます。
- LayerZero SDK のインストール(公式ドキュメント参照)。
- BlockEden.xyz の RPC エンドポイントを使用して、Ethereum と Solana の両方で同一の PYUSD アドレスを管理。
- バーン&ミントのフローを実装し、ユーザーがシームレスに資産を移動できるようにします。
参考情報
- 公式ドキュメント: LayerZero
- Token-2022 仕様: https://github.com/solana-labs/token-list/blob/main/src/tokens/solana.tokenlist.json
準備はできましたか?
高性能な BlockEden.xyz RPC エンドポイント を取得し、支払いの未来を今日から構築しましょう。