agentic-payments について
Stellar上でエージェントやマシン間の決済を実装する開発者向けのスキルです。x402とMPPの選択、リクエスト単位・セッション単位の決済、APIの発見、テストネット準備を扱います。
主な機能
- 01x402とMPPの方式比較
- 02リクエスト単位・セッション決済の設定
- 03有料APIの発見ドキュメント公開
- 04テストネット口座とUSDCの準備
- 05USDC資産とSACアドレスの区別
活用シーン
- 01エージェントから有料APIを利用
- 02x402決済によるAPI販売
- 03MPPセッションで頻繁なリクエストを精算
- 04テストネットで支払側・受取側口座を準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ stellar/ stellar-dev-skill --skill agentic-paymentsインストール後、Claude Code で/agentic-paymentsを入力して読み込まれたか確認します。
同梱ファイルmpp.mdx402.md
詳細
エージェント決済:x402 + MPP
Stellar上でAIエージェントやマシン間の決済を行うための、相互に補完する2つのプロトコルです。誰が誰に依存するか、エージェントがどのくらいの頻度で決済するかに応じて選んでください。
すぐに決める
| x402 | MPP Charge | MPP Session | |
|---|---|---|---|
| リクエストごとにオンチェーン取引が必要ですか? | はい(ファシリテーター経由) | はい(SAC) | いいえ(オフチェーンでコミット) |
| ファシリテーターが必要ですか? | はい — ホスト型または自前(選択肢) | いいえ | いいえ |
| クライアントにXLMが必要ですか? | いいえ(手数料は肩代わりされます) | 任意(feePayer) | はい |
| セットアップの複雑さ | 低 | 低 | 中(最初にコントラクトをデプロイ) |
| 最適な用途 | 最速のセットアップ、手数料不要のクライアント | サードパーティへの依存なし | 高頻度で決済するエージェント |
- APIを販売し、XLMを一切持たないクライアントを実現したい → x402.mdのx402 Seller
- エージェントからx402 APIを呼び出したい → x402.mdのx402 Buyer
- ファシリテーターに依存せずAPIを販売したい → mpp.mdのChargeモード
- 1つのセッションでエージェントが多数のリクエストを行う → mpp.mdのSessionモード
- APIを販売しており、エージェントに見つけてもらいたい → mpp.mdのDiscovery
- 迷った場合 → x402(最も手軽に始められます)
すべてのプロトコルはデフォルトでUSDC(SEP-41 SAC)を使用します。ネットワークIDはstellar:testnet / stellar:pubnetのCAIP-2形式です。
タスクに合ったファイルを読む
このファイルには、選択用の表、共通のテストネットアカウント設定、USDCアドレスの参照情報が記載されています。プロトコルごとの手順は、同じ場所にある次のファイルを参照してください。
| タスク | ファイル |
|---|---|
| ファシリテーター経由で有料APIを販売する(XLM不要のクライアント)、x402購入エージェントを構築する | x402.md |
| ファシリテーター不要のリクエストごとの決済(Charge)、またはチャネルを利用したセッション(Session) | mpp.md |
| エージェントが有料APIを見つけられるよう、OpenAPIディスカバリー文書を公開する | Discovery |
| テストネットアカウントの作成・資金調達、USDCのトラストライン追加、テストネットUSDCの入手 | テストネットのセットアップ(以下) |
| どのUSDCアドレスを使うか(クラシック発行元とSAC) | 2つのUSDCアドレス(以下) |
関連スキル
- プロトコルが呼び出すSAC →
../smart-contracts/SKILL.md - USDCやその他のクラシックアセット →
../assets/SKILL.md - 購入クライアントのウォレットと署名 →
../dapp/SKILL.md - RPCシミュレーション/送信パターン →
../data/SKILL.md - SEP-41(トークンインターフェース)と関連標準 →
../standards/SKILL.md
テストネットのセットアップ(共通)
どちらのプロトコルでも、同じ基本セットアップが必要です。USDC残高から署名して支払うクライアント/支払者アカウントと、サーバー/受取人アカウントを用意します。どちらにもUSDCトラストラインが必要です。
この共通セットアップのうち、Web上でしか行えない手順が1つあります(Captcha)。CircleのUSDCフォーセットはスクリプト化できません。それ以外は自動化できます。x402.mdには、手順1~3を実行してスターター用の.envを書き出すsetup.jsが用意されています。(このセットアップ以外では、x402.mdで設定するOZ Channelsファシリテーターにも、Web上でしか実行できない独自のキー生成機能があります。各ファシリテーターはそれぞれ認証要件を設定しています。x402.orgでは認証は不要で、MPPはサードパーティを一切必要としません。)
-
2つのキーペアを生成する
node -e "const { Keypair } = require('@stellar/stellar-sdk'); for (const n of ['RECIPIENT','PAYER']) { const k = Keypair.random(); console.log(n, k.publicKey(), k.secret()); }" -
friendbotで両方にテストネットXLMを入金する
curl "https://friendbot.stellar.org?addr=RECIPIENT_G..." curl "https://friendbot.stellar.org?addr=PAYER_G..." -
両方のアカウントにUSDCトラストラインを追加する — Stellar Labを開き、それぞれの
G...にUSDCトラストラインを追加するか、各キーペアについてSDK経由で実行します。import * as StellarSdk from "@stellar/stellar-sdk"; const horizon = new StellarSdk.Horizon.Server("https://horizon-testnet.stellar.org"); // Circle's classic USDC issuer on Stellar testnet const USDC_ISSUER = "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; async function addTrustline(secret) { const kp = StellarSdk.Keypair.fromSecret(secret); const acc = await horizon.loadAccount(kp.publicKey()); const tx = new StellarSdk.TransactionBuilder(acc, { fee: StellarSdk.BASE_FEE, networkPassphrase: StellarSdk.Networks.TESTNET, }) .addOperation(StellarSdk.Operation.changeTrust({ asset: new StellarSdk.Asset("USDC", USDC_ISSUER), })) .setTimeout(60) .build(); tx.sign(kp); return horizon.submitTransaction(tx); } // Repeat for both the recipient secret and the payer secret. await addTrustline(process.env.RECIPIENT_SECRET); await addTrustline(process.env.PAYER_SECRET);受取人にトラストラインがないと、SACの
transferは何もないところに決済しようとして、リクエストがop_no_trustで失敗します。 -
支払者にテストネットUSDCを入金する — Circleのテストネットフォーセットを開き、Stellar testnetを選択して、支払者の
G...を貼り付けます。Web Captchaが必要です。APIはありません。
2 つの USDC アドレス(混同しないようにしてください)
Stellar 上の USDC には、用途の異なる 2 つのアドレスがあります。取り違えやすいので注意してください。
| アドレス | 形式 | 用途 |
|---|---|---|
| クラシックアセットの発行者 | G...(32 バイトの ed25519 公開鍵) | クラシック USDC アセットの issuer。トラストラインの追加時に使用します(new Asset("USDC", G...)) |
| SAC(Stellar Asset Contract) | C...(32 バイトのコントラクトアドレス) | プロトコルが transfer を呼び出すコントラクト。支払い要件で使用します |
可能な場合は、ハードコーディングせずにエクスポートされた定数を使用してください。
import { USDC_TESTNET_ADDRESS, USDC_PUBNET_ADDRESS } from "@x402/stellar";
// USDC_TESTNET_ADDRESS = "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA"
// USDC_PUBNET_ADDRESS = "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"
x402 の payTo ルート設定と MPP の recipient は、常にクラシックアカウント(G...)です。SAC アドレスが登場するのは、設定で決済アセットを指定する箇所(x402 のカスタム asset 価格設定、MPP の currency)のみです。