FOR AI AGENTS & DEVELOPERS

把 CarryPilot 接进你的 Agent

CarryPilot 除了是一个人用的交易平台,同时也是一个可被其他 AI Agent 调用的研究服务:查 Hyperliquid 资金费率现状、查扣完成本后的市场中性套利机会。免费部分只读免鉴权;完整报告走 x402 按次付费。三种协议任选。

🔗 链上证据(Injective Testnet,点开即可自行核实)

下面每一项都是可独立验证的真实链上数据/交易,不是截图或编造——地址页/交易页都是 Blockscout 公开浏览器链接。

项目地址 / 哈希说明
USDC 合约(testnet)0x0C38…4C5d ↗Circle FiatTokenV2_2,支持 EIP-3009 免 gas 授权
x402 payer 付款方钱包0x55Fb…93Ac ↗模拟"外部 AI Agent 付款方",持 20 testnet USDC
x402 收款金库 / facilitator0xF352…86cE ↗402 报价里的 payTo / 结算方,持 1 testnet INJ 付 gas
INJ 充值交易(facilitator gas)0x6272…a76d ↗1 INJ → facilitator · 区块 134,670,989 · 2026-07-25 16:24:49 UTC · 成功
x402 结算交易(付费成交)0xbdf6…dd73 ↗0.01 USDC · payer→facilitator · EIP-3009 代付 gas · 已确认上链
x402 全链路已实测跑通并确认上链:402 报价握手 → EIP-3009 免 gas 签名 → facilitator 代付 gas 链上结算,0.01 USDC 由 payer 转入 facilitator(payer 20.00→19.99、facilitator 0→0.01,账实相符)。Injective testnet RPC/LCD 直连无地域封锁。

Agent Card(服务发现)

任何调用方第一步都应该先拉这个文件——它是机器可读的"名片":身份、技能、约束、以及下面三种协议各自的入口地址。

GET /.well-known/agent-card.json
{ "protocolVersion": "0.2", "name": "CarryPilot", "description": "AI 资金费率套利研究 Agent...", "url": "/api/a2a", "preferredTransport": "JSONRPC", "additionalInterfaces": [ { "url": "/api/a2a", "transport": "JSONRPC" }, { "url": "/mcp", "transport": "MCP" }, { "url": "/api/agent/query", "transport": "HTTP+JSON" } ], "skills": [ { "id": "funding_rates", "name": "资金费率查询", "examples": ["BTC 现在资金费率多少", "哪些币费率最高"] }, { "id": "arbitrage_opportunity", "name": "套利机会查询", "examples": ["现在有什么套利机会", "BTC 值得做套利吗"] } ], "constraints": { "venues": ["hyperliquid"], "strategy": "S1_SPOT_PERP", "readOnly": true }, "payments": { "protocol": "x402", "asset": "USDC", "network": "injective-testnet", "endpoint": "/api/agent/report" } }

两个技能背后都是同一套确定性引擎:扣完手续费+滑点+资金准备金之后的真实净 APR,不是毛费率。没机会的时候会诚实地说"没机会",不会为了有话说而编造。

HTTP(最简单,适合快速试探)

一句自然语言,一个 JSON 结果。没有协议开销,适合脚本、curl、或者你自己的 agent 内部再包一层。

GET /api/agent/query?q=<text>   或   POST /api/agent/query {"query":"..."}
curl "/api/agent/query?q=BTC资金费率多少"
{ "query": "BTC资金费率多少", "coin": "BTC", "generatedAt": "2026-07-25T03:32:48.582Z", "disclaimer": "...", "intent": "funding_rates", "found": true, "hourlyFundingPct": 0.00086329, "annualizedPct": 7.5624204, "hasSpot": true, "message": "BTC 当前资金费率 0.00086%/h(年化约 7.6%),多头付给空头(做空可收)。有现货可对冲,可构建站内套利组合。" }

套利机会查询同一个端点,换个问法即可:?q=现在有什么套利机会?q=BTC值得做吗

A2A(Agent2Agent 协议)

标准 A2A JSON-RPC 2.0,message/send 方法。适合已经在用 A2A 生态(agent card 发现 + 多 agent 编排)的 host。

POST /api/a2a
curl -X POST /api/a2a \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "message/send", "params": { "message": { "role": "user", "parts": [{ "kind": "text", "text": "现在有什么套利机会" }] } } }'

返回的 result 是一条 role: "agent" 的 message,两个 part 都给:text(人类可读一句话)+ data(结构化字段,给你的代码解析)。

{ "jsonrpc": "2.0", "id": 1, "result": { "kind": "message", "role": "agent", "messageId": "...", "parts": [ { "kind": "text", "text": "当前全市场无扣完成本后为正的套利机会——..." }, { "kind": "data", "data": { "intent": "arbitrage_opportunity", "accepted": [], "...": "..." } } ] } }

本 Agent 所有调用都同步完成,不维护长任务状态:tasks/get/tasks/cancel 会返回 -32001

MCP(Model Context Protocol)

Streamable HTTP,无状态。如果你的 agent host 本身是 Claude / Codex / 其他支持 MCP 的框架,这是最省事的接入方式——不用自己写 HTTP 客户端,配个 URL 就行。

{ "mcpServers": { "carrypilot": { "url": "/mcp" } } }

暴露的 tool

Tool参数说明
get_funding_ratescoin?: string某标的(或全市场费率绝对值最高的几个)当前资金费率/年化/是否可对冲
find_arbitragecoin?: string扣完成本后的市场中性套利候选:净APR、成本覆盖率、拒绝原因

用官方 SDK 直连测试:

// npm i @modelcontextprotocol/sdk import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const client = new Client({ name: "my-agent", version: "1.0.0" }); await client.connect(new StreamableHTTPClientTransport(new URL("/mcp"))); const { tools } = await client.listTools(); const result = await client.callTool({ name: "find_arbitrage", arguments: {} });

x402:按次付费拿完整报告

免费三个入口只回答"你问的那一句"。完整报告(全市场候选 + 全费率表,不是摘要)走 x402 协议收 USDC——HTTP 402 起手,链上 EIP-3009 免 gas 签名支付,全程无需人工介入,AI agent 可以自己付钱自己拿数据。

GET /api/agent/report
当前状态:Injective testnet(eip155:1439),x402 全链路已实测跑通并确认上链——402 报价 → EIP-3009 免 gas 签名 → facilitator 代付 gas 链上结算,0.01 USDC 由 payer 转入 facilitator(见 scripts/x402-a2a-test.ts,结算 tx 0xbdf6030e…459dd73)。

第 1 步:不带支付直接请求 → 收到 402 报价

curl /api/agent/report
HTTP/1.1 402 Payment Required PAYMENT-REQUIRED: <base64 同下面 JSON> { "x402Version": 2, "resource": { "url": ".../api/agent/report", "description": "CarryPilot 完整套利报告" }, "accepts": [{ "scheme": "exact", "network": "eip155:1439", "amount": "10000", "asset": "0x0C382e685bbeeFE5d3d9C29e29E341fEE8E84C5d", "payTo": "0x402e6cB590137156eA549D4b7eDa9231C70A2c98", "maxTimeoutSeconds": 120, "extra": { "name": "USDC", "version": "2", "assetTransferMethod": "eip3009" } }] }

amount: "10000" = 0.01 USDC(6位小数)。network: eip155:1439 是 Injective EVM Testnet。

第 2 步:按报价签一个 EIP-3009 transferWithAuthorization,带着重放

手写签名比较繁琐(EIP-712 typed data),推荐直接用官方 client(本项目也是这么测的):

// npm i @injectivelabs/x402 viem import { createInjectiveClient } from "@injectivelabs/x402/client"; const client = createInjectiveClient({ privateKey: YOUR_PAYER_PRIVATE_KEY }); const res = await client.fetch("/api/agent/report"); // res.status === 200,body 就是完整报告 const receipt = JSON.parse(atob(res.headers.get("payment-response"))); // receipt.transaction 是链上结算的 tx hash

Client 内部做的事:解析 402 里的 accepts → 构造 EIP-712 typed data → 用你的私钥签名(链下,不花 gas)→ 把签名放进 PAYMENT-SIGNATURE header 重新请求 → 服务端 facilitator 校验签名/余额/nonce → 提交链上交易结算 → 你收到 200 + 完整数据 + 结算回执。

没有 SDK?自己手撸

报头名是 PAYMENT-SIGNATURE(新)或 X-PAYMENT(兼容旧版),内容是 base64 编码的 PaymentPayload(scheme/network/payload.authorization + payload.signature)。EIP-712 domain 是 USDC 合约自己的(name "USDC", version "2"),签名对象是标准 EIP-3009 TransferWithAuthorization(from/to/value/validAfter/validBefore/nonce)。

测试网参数

Chain ID1439eip155:1439
RPChttps://k8s.testnet.json-rpc.injective.network
USDC 合约0x0C382e685bbeeFE5d3d9C29e29E341fEE8E84C5d(Circle FiatTokenV2_2,支持 EIP-3009)
测试网 USDC 水龙头faucet.circle.com(选 Injective Testnet)
测试网 INJ 水龙头(付 gas 用,仅 facilitator 自建时需要)testnet.faucet.injective.network

源码参考:scripts/x402-spike.ts(协议可行性验证)、scripts/x402-settle-demo.ts(真实付款结算 demo,含链上 tx hash)。

错误码

A2A(JSON-RPC 2.0 标准错误码)

code含义触发场景
-32700Parse error请求体不是合法 JSON
-32600Invalid Requestjsonrpc 字段不是 "2.0"
-32601Method not found方法不是 message/send
-32602Invalid paramsmessage.parts 里没有 text part
-32001Task not found调用了 tasks/get/tasks/cancel——本 Agent 同步完成,不留任务状态

x402

HTTP含义
402 + insufficient_fundspayer 钱包 USDC 余额不够
402 + Payment network not accepted签名的 network/asset 跟报价对不上
501本部署没配置 x402(金库/facilitator key 缺失)

限制与免责

⚠ 所有输出是研究结论,不构成投资建议或收益承诺。资金费率随市场快速变化;免费端点数据有 60 秒缓存。
  • 只覆盖 Hyperliquid 站内策略(现货多 + 永续空,市场中性),不做跨所套利
  • 只读查询:本文档所有端点都不下单、不动资金;下单需要钱包签名会话,是给人用的 App 里的能力,没有对外开放给 agent
  • 请合理控制请求频率;生产集成建议本地缓存问答结果,异常流量会被限制访问