SepoliaテストネットワークでJPYCトークンの残高表示とEIP-3009決済デモを提供するWeb3アプリケーションです。wagmi、RainbowKit、JPYC SDKを使用してウォレット接続、トークン情報の取得、ガスレス決済を実現します。
- ウォレット接続: RainbowKitによる直感的なウォレット接続UI
- JPYC残高表示: 接続されたウォレットのJPYC残高をリアルタイム表示
- EIP-3009決済デモ: バックエンドリレイヤーによるガスレス決済(ユーザーは署名のみ)
- トークン情報: JPYCの総供給量、コントラクトアドレス、ネットワーク情報
- JPYC SDK統合: 公式JPYC Core SDK(バックエンド)とReact SDK(フロントエンド)
- レスポンシブデザイン: モバイル・デスクトップ対応のモダンUI
- Sepolia Testnet のみ: テスト用JPYCトークンの表示・決済に特化
- Next.js 15: React フレームワーク(App Router)
- wagmi v2: Ethereum React hooks
- RainbowKit: ウォレット接続UI
- JPYC React SDK: 公式JPYC hooks(ローカルビルド版)
- TanStack Query: 非同期状態管理
- viem: 低レベルEthereumユーティリティ
- TypeScript: 型安全性
- Biome: Linter/Formatter
- Tailwind CSS v4: スタイリング
- Next.js API Routes: サーバーレスAPI
- JPYC Core SDK: transferWithAuthorization実装
- viem: トランザクション送信
- soltypes: Solidity型サポート
このアプリケーションは、EIP-3009のtransferWithAuthorizationパターンを実装しています:
- 署名生成(フロントエンド): ユーザーがEIP-712署名を生成(ガス代不要)
- トランザクション実行(バックエンド): リレイヤーが署名を使ってトランザクションを送信
- ガス代負担: バックエンドウォレットがガス代を支払う
- トランザクション完了待機: フロントエンドでトランザクション完了を監視
- Node.js 20.x 以上
- pnpm 8.x 以上
- SepoliaテストネットワークでJPYCトークンを保有するウォレット
- バックエンドウォレット: Sepolia ETH(ガス代用)を保有する秘密鍵
git clone --recurse-submodules https://github.com/br-to/jpyc-viewer.git
cd jpyc-viewer既にクローン済みの場合:
git submodule update --init --recursivepnpm installJPYC SDKはgit submoduleとして管理されています:
# submoduleの初期化(クローン時に--recurse-submodulesを使わなかった場合)
git submodule update --init --recursive
# JPYC SDKのビルドと依存関係のインストール
pnpm --filter @jpyc/sdk-react compile && pnpm installsubmoduleの更新:
git submodule update --remote.env.local ファイルを作成し、以下を設定:
# WalletConnect プロジェクトID (任意)
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=your_project_id_here
# 決済機能用(必須)
# バックエンドウォレットの秘密鍵(Sepolia ETHを保有している必要があります)
BACKEND_PRIVATE_KEY=0x...
# マーチャントウォレットアドレス(JPYCの送金先)
MERCHANT_WALLET_ADDRESS=0x...BACKEND_PRIVATE_KEYは絶対にGitにコミットしないでください- 本番環境では環境変数管理サービス(Vercel Secrets等)を使用してください
- テスト用ウォレットのみを使用してください
pnpm devhttp://localhost:3000 でアプリケーションが起動します.
- ウォレット接続: 「Connect Wallet」ボタンからウォレットを接続
- ネットワーク確認: Sepoliaテストネットに接続されていることを確認
- 残高確認: JPYCトークンの残高と詳細情報が自動で表示されます
- 支払いページ: トップページから「お支払いへ進む」をクリック
- 支払い方法選択: JPYC決済を選択
- 署名: MetaMaskで署名を承認(ガス代不要)
- トランザクション処理: バックエンドがトランザクションを送信
- 完了待機: トランザクション完了を自動監視
- 成功画面: トランザクション完了後、自動で成功画面に遷移
pnpm dev # 開発サーバー起動
pnpm build # プロダクションビルド
pnpm start # プロダクションサーバー起動
pnpm lint # Biome Lint実行
pnpm format # Biome Format実行git submodule update --init --recursivegit submodule foreach git pull origin develop- ウォレットがSepoliaネットワークに接続されているか確認
- 正しいJPYCコントラクトアドレスが設定されているか確認
- JPYCトークンがウォレットに実際に存在するか確認
BACKEND_PRIVATE_KEYが設定されているか確認- バックエンドウォレットにSepolia ETHがあるか確認
- ユーザーウォレットにJPYC残高があるか確認
- 署名のvalidAfter/validBeforeが正しいか確認
- Sepoliaネットワークの混雑状況を確認
- ブロックエクスプローラーでトランザクションステータスを確認
- ウォレットアプリが最新版か確認
- ブラウザの拡張機能が有効か確認