Agentic Payments 是一套面向 AI 代理与机器对机器(M2M)支付的 Stellar 方案,包含两种互补协议,可按“谁依赖谁”以及代理付款频率来选择。
【用途与协议选择】 文档给出对比决策表,区分 x402、MPP Charge 与 MPP Session:
- 是否每请求发送链上交易:x402 为是(经由 facilitator);MPP Charge 为是(SAC);MPP Session 为否(链下提交)。
- 是否需要 facilitator:x402 需要(托管或自建,多选);Charge 不需要;Session 不需要。
- 客户端是否需要 XLM:x402 不需要(手续费被赞助);Charge 可选(feePayer);Session 需要。
- 设置复杂度:x402 低;Charge 低;Session 中(需先部署合约)。
- 最适合场景:x402 为最快设置、客户端免手续费;Charge 为不依赖第三方;Session 为高频代理。
【典型任务对应文件】
- 通过 facilitator 销售付费 API(零 XLM 客户端)、构建 x402 买方代理:x402.md。
- 无 facilitator 的逐请求支付(Charge)或基于通道的会话(Session):mpp.md。
- 发布 OpenAPI 发现文档,让代理找到付费 API:Discovery。
- 创建/资助测试网账户、添加 USDC 信任线、获取测试网 USDC:测试网设置(见下)。
- 区分 USDC 地址用途(经典发行方 vs SAC):两个 USDC 地址(见下)。
【相关技能】
- 协议调用的 SAC:../smart-contracts/SKILL.md
- USDC 与其他经典资产:../assets/SKILL.md
- 买方客户端的钱包与签名:../dapp/SKILL.md
- RPC 模拟/提交模式:../data/SKILL.md
- SEP-41(代币接口)及相关标准:../standards/SKILL.md
【共享的测试网设置】 两种协议都需要相同的基础设置:一个客户端/付款账户(从 USDC 余额签名并付款)和一个服务端/收款账户,两者都需要 USDC 信任线。 其中一步仅限网页(Captcha),无法脚本化:Circle USDC 水龙头。其余步骤可自动化——x402.md 提供一个 setup.js 完成步骤 1–3 并写出初始 .env。(在此设置之外,x402.md 配置的 OZ Channels facilitator 有自己的仅限网页的密钥生成器。每个 facilitator 设定自己的认证要求——x402.org 的无需认证——而 MPP 完全不需要第三方。)
设置步骤:
-
生成两个密钥对: 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()); }"
-
用测试网 XLM 资助两个账户(friendbot): curl "https://friendbot.stellar.org?addr=RECIPIENT_G..." curl "https://friendbot.stellar.org?addr=PAYER_G..."
-
为两个账户添加 USDC 信任线——打开 Stellar Lab 为每个 G... 添加,或对每个密钥对运行 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 转账将结算为空,请求会以 op_no_trust 失败。
- 为 PAYER 资助测试网 USDC——打开 Circle 测试网水龙头,选择 Stellar 测试网,粘贴付款方的 G...。需要网页 Captcha;无 API。
【两个 USDC 地址(勿混淆)】 Stellar 上的 USDC 有两个地址,用于不同位置,混淆是常见问题:
- 经典资产发行方:G...(32 字节 ed25519 公钥)。用途:经典 USDC 资产的发行方;在添加信任线时使用(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 的自定义资产价格配置、MPP 的 currency)。
【限制与说明】 默认使用 USDC(SEP-41 SAC),网络标识为 stellar:testnet / stellar:pubnet。Circle USDC 水龙头与 OZ Channels facilitator 的密钥生成器为仅限网页、需 Captcha,无法脚本化。文档未提供具体价格或收费信息。