mcpField
A
agentic-payments

agentic-payments

github.com/stellar开发55332 次安装1 周前更新
代码仓库

关于 agentic-payments

面向在 Stellar 上构建 Agent 支付流程的开发者,介绍 x402 与 MPP 两种协议的选择和实施路径。内容覆盖按请求支付、会话支付、API 发现及测试网准备。

主要功能

  1. 01比较 x402 与 MPP 模式
  2. 02配置按请求或会话支付
  3. 03发布付费 API 的发现文档
  4. 04准备测试网账户与 USDC
  5. 05区分 USDC 资产与 SAC 地址

适用场景

  1. 01为 Agent 接入付费 API
  2. 02以 x402 出售 API 并由客户端付款
  3. 03使用 MPP 为高频请求结算
  4. 04在测试网上搭建付款与收款账户

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/stellar/stellar-dev-skill --skill agentic-payments

安装后在 Claude Code 中输入/agentic-payments确认已加载。

附带文件mpp.mdx402.md

详细介绍

Agentic Payments:x402 + MPP

Stellar 上面向 AI Agent 和机器间支付的两种互补协议。根据双方的依赖关系以及 Agent 付款的频率进行选择。

快速决策

x402MPP ChargeMPP Session
每次请求都进行链上交易?是(通过 facilitator)是(SAC)否(链下提交)
需要 facilitator?是——托管的或自建的(选项)否否
客户端需要 XLM?否(费用由他人赞助)可选(feePayer)是
设置复杂度低低中(需先部署合约)
最适合最快上手、客户端免手续费无第三方依赖高频 Agent
  • 销售 API,希望客户端不需要 XLM → x402.md 中的 x402 卖方
  • 通过 Agent 调用 x402 API → x402.md 中的 x402 买方
  • 销售 API,不依赖 facilitator → mpp.md 中的 Charge 模式
  • Agent 在每个会话中发出许多请求 → mpp.md 中的 Session 模式
  • 已销售 API,现在希望 Agent 能找到它 → mpp.md 中的 发现
  • 不确定 → x402(上手门槛最低)

默认情况下,所有协议都使用 USDC(SEP-41 SAC);CAIP-2 网络 ID 为 stellar:testnet / stellar:pubnet。

阅读与任务匹配的文件

本文包含决策表、共享的测试网账户设置,以及 USDC 地址参考。协议指南位于同目录下:

任务文件
通过 facilitator 销售付费 API(客户端无需 XLM),构建 x402 买方 Agentx402.md
无 facilitator 的逐请求支付(Charge),或基于通道的会话(Session)mpp.md
发布 OpenAPI 发现文档,让 Agent 找到你的付费 API发现
创建/充值测试网账户、添加 USDC 信任线、获取测试网 USDC测试网设置(下文)
不同位置应使用哪个 USDC 地址(经典发行方与 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 信任线。

这项共享设置中的一个步骤只能在网页上完成(需要验证码),无法通过脚本执行:Circle USDC 水龙头。其余步骤均可自动完成——x402.md 提供了一个 setup.js,可执行步骤 1–3 并写入初始 .env。(除这项设置外,x402.md 配置的 OZ Channels facilitator 还有自己的网页专用密钥生成器。每个 facilitator 都会设置自己的身份验证要求——x402.org 不需要身份验证——而 MPP 完全不需要第三方。)

  1. 生成两个密钥对

    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()); }"
    
  2. 使用测试网 XLM 为两个账户充值(friendbot)

    curl "https://friendbot.stellar.org?addr=RECIPIENT_G..."
    curl "https://friendbot.stellar.org?addr=PAYER_G..."
    
  3. 为两个账户都添加 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 而失败。

  4. 为付款方充值测试网 USDC——打开 Circle 测试网水龙头,选择 Stellar 测试网,粘贴付款方的 G...。需要网页验证码;没有 API。

两个 USDC 地址(不要混淆)

Stellar 上的 USDC 有两个地址,用于不同场景。把它们混淆是常见的问题。

地址格式用途
经典资产发行方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)。

评论

支持 Markdown