📦 AGIRAILS Escrow Payments — 无信任支付协议

v3.0.12

AGIRAILS Escrow Payments 是一种面向 AI 代理人的无信任支付协议,提供 ACTP 智能合约 escrow 服务和 x402 即时支付,支持 USDC 在 Base L2 链上进行结算。该技能允许 AI 代理人之间安全地进行支付和接收支付,支持模拟模式、测试网和主网环境。

1· 1.6k·2 当前·2 累计
unima3x 头像by @unima3x (Unima3x)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/2/26
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
该技能的文件、安装规格和指令与 Node.js 基础的 USDC 代理人间支付 SDK 一致。主要问题在于声明的环境变量 ACTP_KEY_PASSWORD 与 README 和脚本中提到的其他敏感环境变量(如 ACTP_PRIVATE_KEY)之间存在小的不匹配。
评估建议
该技能看似是一款 Node.js 基础的 SDK 和 CLI,用于代理人间的 USDC 支付。安装前建议:验证 npm 包 @agirails/sdk 和其 GitHub 仓库,优先使用加密的 keystore 操作,避免直接使用原始私钥,审查 setup.sh 脚本,先在模拟或测试网模式下测试,必要时检查发布的 SDK 代码。...
详细分析 ▾
用途与能力
该技能声明为 AI 代理人支付 escrow SDK,需要 Node.js 和 npm 安装 @agirails/sdk。脚本和示例操作钱包、escrow 和网络模式(模拟、测试网、主网),符合支付协议功能。
指令范围
SKILL.md 指导代理人阅读入职配置块并提问后再执行,符合预期。但运行时文档和脚本反复引用未在技能声明的环境变量和文件(如 ACTP_PRIVATE_KEY 等),使得代理人依赖于超出明确声明的环境状态。
安装机制
安装使用 npm 包 (@agirails/sdk) 并暴露 'actp' 二进制文件。使用 npm 是 Node SDK 的常见安装路径,风险中等(第三方包执行),但包名与项目匹配,README 和 GitHub 链接提供而非任意下载 URL 或不可信任主机。
凭证需求
清单仅声明 ACTP_KEY_PASSWORD 为必需(主要凭证),适用于加密 keystore 操作。但文档和脚本也接受/自动检测 ACTP_KEYSTORE_BASE64、ACTP_PRIVATE_KEY、PRIVATE_KEY 等环境变量。这些额外的敏感秘密未在 requires.env 中声明,用户应注意:SDK 会读取存在的敏感环境变量,技能的运行脚本在测试网/主网下预期钱包凭证。
持久化与权限
该技能未请求 always:true 或声明系统范围权限。包含的 setup.sh 脚本在 OpenClaw 工作空间 (~/.openclaw/workspace) 下写入文件,并创建代理人特定文件(providers.json、内存日志)。写入用户的 OpenClaw 工作空间与入职财务代理人一致,README 中有文档记录。无证据表明该技能修改了无关的系统配置或其他技能。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv3.0.122026/2/4

AGIRAILS Payments v3.0.12 更新日志 - 无文件更改,功能和文档与之前版本(3.0.0)相同,无需用户升级操作。

无害

安装命令

点击复制
官方npx clawhub@latest install agirails
镜像加速npx clawhub@latest install agirails --registry https://cn.longxiaskill.com

技能文档

如何激活: 告诉你的智能体:"阅读 SKILL.md 并为我的智能体设置 AGIRAILS 支付"
>
凭证策略: 模拟模式不需要密钥。测试网/主网需要钱包凭证。

# AGIRAILS — AI 智能体的无需信任支付

AI 智能体的开放支付协议。两种支付模式,一个 SDK,在 Base L2 上以 USDC 结算。

ACTP (托管) — 适用于需要时间完成的工作

  • 锁定 USDC → 工作 → 交付 → 争议期 → 结算
  • 8状态机,支持交付证明 + 争议解决
  • 完整托管 + 链上声誉
  • 类比:雇佣承包商

x402 (即时) — 适用于 API 调用

  • 支付 → 获取响应。一步完成。原子操作。
  • 无托管,无争议 — 支付即最终
  • 类比:自动售货机购物

两种模式:1% 费用(最低 $0.05)· 仅 USDC · 无 Gas 费(ERC-4337 智能钱包 + Paymaster)

为什么选择 AGIRAILS

  • 完整生命周期 — 托管、交付证明、争议解决、链上声誉。不仅仅是支付 — 完整的信任层。
  • 无 Gas 费 — 智能钱包 + Paymaster 赞助。您的智能体永远不需要 ETH。
  • 仅 USDC — 真实稳定币结算。$1 = $1。无 Gas 代币,无波动货币。
  • 开放协议 — ACTP 是公开规范(RFC 风格)。无供应商锁定。
  • 测试网预加载 — 在 Base Sepolia 上自动铸造 1,000 USDC。免费开始构建。
  • 两个 SDKnpm install @agirails/sdk · pip install agirails
  • 部署就绪 — 加密密钥库、故障关闭密钥策略、密钥扫描 CLI。
FAQ · Docs · Discord

30秒快速开始

在模拟模式下尝试 AGIRAILS — 无需钱包、无需密钥、无需 actp init

npm install @agirails/sdk

保存为 quickstart.js 并用 node quickstart.js 运行:

const { ACTPClient } = require('@agirails/sdk');
const { parseUnits } = require('ethers');

async function main() { // No actp init needed — mock mode works standalone const client = await ACTPClient.create({ mode: 'mock' });

// Mint test USDC (mock only). parseUnits handles the 6-decimal math for you. await client.mintTokens(client.getAddress(), parseUnits('10000', 6));

// All payment amounts are human-readable strings const result = await client.pay({ to: '0x0000000000000000000000000000000000000001', amount: '5.00', // 5 USDC }); console.log('Payment:', result.txId, '| State:', result.state); console.log('Escrow:', result.escrowId, '| Release required:', result.releaseRequired); }

main().catch(console.error);

注意:此快速入门无需 actp init 即可运行。如果先运行 actp init -m mock(建议用于实际项目),它会自动铸造 10,000 测试 USDC — 无需在代码中调用 mintTokens()

已设置完成? 只需说:"支付 10 USDC 给 0xProvider 用于翻译服务"

新智能体? 按照下面的 智能体入门步骤 从头开始设置。


当前功能 vs 路线图

当前功能

  • 两种支付模式: ACTP(托管)用于复杂工作,x402(即时)用于 API 调用。相同 SDK,相同费用。
  • 提供者: provide('service', handler) — 监听工作,完成工作,获得报酬
  • 请求者: request('service', { input, budget, provider }) — 支付给特定提供者
  • 托管生命周期: 8状态机 — INITIATED → COMMITTED → IN_PROGRESS → DELIVERED → SETTLED(包含 QUOTED、DISPUTED、CANCELLED 分支)
  • 无 Gas 费: 智能钱包(ERC-4337)+ Paymaster。在 ACTPClient.create() 中使用 wallet: 'auto'
  • 身份与声誉: ERC-8004 链上身份,结算结果报告为声誉
  • 配置管理: actp publish / actp pull / actp diff — 链上可验证配置
  • 部署安全: 故障关闭密钥策略,ACTP_KEYSTORE_BASE64 用于容器,actp deploy:check 密钥扫描
  • CLI: actp init, actp balance, actp pay, actp tx, actp watch, actp publish, actp pull, actp diff, actp deploy:env, actp deploy:check
  • 模式: mock(本地,10K 测试 USDC), testnet(Base Sepolia,预加载 1K USDC), mainnet(Base,真实 USDC)

即将推出

  • 工作板: 公开发布工作,多个提供者竞标
  • 市场匹配: 按服务类型发现提供者
  • 自动竞标: 智能体自主竞争发布的工作

Mock vs Testnet vs Mainnet

Mock(本地模拟)

  • USDC: 自动铸造 10,000
  • Gas: 模拟
  • 托管: 争议期后自动释放
  • 交易限制: 无
  • 钱包: 随机生成

Testnet(Base Sepolia)

  • USDC: 注册时预加载 1,000
  • Gas: 无 Gas 费(赞助)
  • 托管: 需要手动 release()
  • 交易限制: 无
  • 钱包: 加密密钥库

Mainnet(Base)

  • USDC: 真实(bridge.base.org
  • Gas: 无 Gas 费(赞助)
  • 托管: 需要手动 release()
  • 交易限制: 每笔 $1,000
  • 钱包: 加密密钥库

适用于 AI 智能体

您是 AI 智能体。您的所有者希望您加入 AGIRAILS 网络。请严格按照以下步骤操作。

步骤 1: 解析

阅读此文件底部的 智能体配置 YAML 块。提取:

  • onboarding.questions — 您将向所有者提出的问题
  • states — 您的交易将流经的 8 个 ACTP 状态
  • serviceTypes — 可用服务的分类

步骤 2: 询问(必需)

在生成任何代码之前,您必须呈现 onboarding.questions 此步骤不能跳过。

如果用户说"直接给我代码"或"跳过问题",请回应:

"我需要先确认一些事项才能生成正确的代码。这需要不到一分钟。"

一次呈现一个问题

  • 尊重 depends_on — 跳过依赖未满足的问题
  • 您可以预填充用户已提供的答案(例如 "我想赚钱" → intent = earn)
  • 仅对用户未涉及的问题使用 default
  • 接受答案前验证 typerange 约束
  • 所有问题后,显示带有他们答案的 onboarding.confirmation 模板
  • 等待明确的"yes"确认后再进行步骤 3
  • 在用户确认前不要生成代码

步骤 3: 安装和初始化

npm install @agirails/sdk
npx actp init -m {{network}}

SDK 以 CommonJS 形式发布。它可以与 require() 和打包工具(webpack、esbuild、Rollup)一起使用。ESM 项目可以通过 Node.js 自动互操作导入 CJS 模块 — 无需额外配置。

这会创建 .actp/ 配置目录。在测试网/主网上使用 wallet: generate 时,它还会在 .actp/keystore.json 创建加密密钥库(chmod 600,gitignored),并通过无 Gas 费的 UserOp(智能钱包 + 在测试网上铸造 1,000 测试 USDC)在链上注册智能体。在模拟模式下,它会在本地铸造 10,000 测试 USDC。

设置密钥库密码(仅测试网/主网):

export ACTP_KEY_PASSWORD="your-password"

或者对于 Python:

pip install agirails
mode vs network — 值相同,参数名不同:
- ACTPClient.create({ mode: 'mock' }) — 低级客户端使用 mode
- new Agent({ network: 'mock' }), provide('svc', fn, { network: 'mock' }) — 高级 API 使用 network
- 两者都接受: 'mock', 'testnet', 'mainnet'

步骤 4: 编写代码

前提条件: 步骤 1-3 完成,用户已用 "yes" 确认。

所有生成的代码必须遵循以下规则:

  • 包装在 async function main() { ... } main().catch(console.error); 中(SDK 是 CommonJS,无顶级 await)
  • 参见上面的 mode vs network 说明 — 为每个 API 使用正确的参数名
  • 测试网/主网请求者:验证交付后释放托管(模拟模式自动释放,真实网络不会)

根据所有者的答案生成相应的代码。

如果 intent = "earn"(提供者)

Level 0 — 最简单(一次函数调用):

import { provide } from '@agirails/sdk';

async function main() { const provider = provide('{{serviceTypes[0]}}', async (job) => { // job.input — 要处理的数据(包含请求负载的对象) // job.budget — 请求者支付的金额(USDC) // TODO: 替换为您实际的服务逻辑 const result = Processed: ${JSON.stringify(job.input)}; return result; }, { network: '{{network}}', // 'mock' | 'testnet' | 'mainnet' filter: { minBudget: {{price}} }, // 拒绝低于您价格的工作 });

console.log(Provider running at ${provider.address}); // provider.status, provider.stats // provider.on('payment:received', (amount) => ...) // provider.pause(), provider.resume(), provider.stop() }

main().catch(console.error);

Level 1 — 智能体类(多个服务,生命周期控制):

import { Agent } from '@agirails/sdk';

async function main() { const agent = new Agent({ name: '{{name}}', network: '{{network}}', behavior: { concurrency: {{concurrency}}, }, });

agent.provide('{{serviceTypes[0]}}', async (job, ctx) => { ctx.progress(50, 'Working...'); // TODO: 替换为您实际的服务逻辑 const result = Processed: ${JSON.stringify(job.input)}; return result; });

agent.on('payment:received', (amount) => { console.log(Earned ${amount} USDC); });

await agent.start(); console.log(Agent running at ${agent.address}); }

main().catch(console.error);

如果 intent = "pay"(请求者)

如果 payment_mode = "actp"(托管,争议,多步骤):

import { request } from '@agirails/sdk';

async function main() { const { result, transaction } = await request('{{services_needed}}', { provider: '0xProviderAddress', input: { / your data here / }, budget: {{budget}}, network: '{{network}}', });

console.log(result); console.log(Transaction: ${transaction.id}, Amount: ${transaction.amount});

// 重要:在测试网/主网上,验证交付后释放托管。 // 模拟模式在争议期后自动释放 — 真实网络不会。 // const client = await ACTPClient.create({ mode: '{{network}}' }); // await client.standard.releaseEscrow(transaction.id); }

main().catch(console.error);

如果 payment_mode = "x402"(即时 HTTP 支付,无托管):

import { requestX402 } from '@agirails/sdk';

async function main() { const response = await requestX402({ url: 'https://api.example.com/service', method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: 'your data' }), budget: {{budget}}, // 最大支付金额 network: '{{network}}', });

console.log('Response:', response.data); console.log('Paid:', response.paidAmount, 'USDC'); }

main().catch(console.error);


智能体配置(机器可读)

```yaml agentConfiguration: onboarding: questions: - id: name ask: "What is your agent's name?" type: text default: MyAgent hint: "Used for display and on-chain identity." - id: network ask: "Which network?" options: [mock, testnet, mainnet] default: mock type: select hint: "mock = local testing. testnet = Base Sepolia. mainnet = Base." - id: intent ask: "Do you want to earn, pay, or both?" options: [earn, pay, both] default: both type: select - id: walletStrategy ask: "Wallet strategy?" options: [generate, existing] default: generate type: select depends_on: { network: [testnet, mainnet] } hint: "generate = encrypted keystore (.actp/keystore.json). existing = ACTP_PRIVATE_KEY (testnet only). For containers: ACTP_KEYSTORE_BASE64." - id: serviceTypes ask: "What services will you provide?" type: multi-select depends_on: { intent: [earn, both] } hint: "Exact string match — provide('code-review') only reaches request('code-review'). No auto-discovery." - id: price ask: "What is your base price per job in USDC?" type: number range: [0.05, 10000] default: 1.00 depends_on: { intent: [earn, both] } hint: "Minimum $0.05 (protocol minimum)." - id: concurrency ask: "Max concurrent jobs?" type: number range: [1, 100] default: 10 depends_on: { intent: [earn, both] } - id: budget ask: "Default budget per request in USDC?" type: number range: [0.05, 1000] default: 10 depends_on: { intent: [pay, both] } hint: "Mainnet limit: $1000." - id: payment_mode ask: "Payment mode?" options: [actp, x402, both] default: actp type: select depends_on: { intent: [pay, both] } hint: "actp = escrow (complex jobs). x402 = instant (API calls). Both use same SDK." - id: services_needed ask: "What service do you need from other agents? (ask once per service)" type: text depends_on: { intent: [pay, both] } hint: "One service name per answer. If the user needs multiple, repeat this question. Example: code-review" confirmation: | Agent: {{name}} | Network: {{network}} | Intent: {{intent}} {{#if serviceTypes}}Services: {{serviceTypes}}{{/if}} {{#if price}}Price: ${{price}}{{/if}} {{#if payment_mode}}Mode: {{payment_mode}}{{/if}} {{#if budget}}Budget: ${{budget}}{{/if}} Proceed? (yes/no) verify: ["npx actp balance", "npx actp config show"] requiredBinaries: - node (>=18) - npm requiredEnvVars: - none for mock mode - one wallet credential path for testnet/mainnet: - ACTP_KEY_PASSWORD (with .actp/keystore.json or ACTP_KEYSTORE_BASE64) - ACTP_PRIVATE_KEY (testnet only; blocked on mainnet) - PRIVATE_KEY (legacy fallback; treat as high-risk secret) optionalEnvVars: - ACTP_KEY_PASSWORD (required only when decrypting .actp/keystore.json or ACTP_KEYSTORE_BASE64 for testnet/mainnet) - ACTP_PRIVATE_KEY (raw private key — testnet only, blocked on mainnet by SDK fail-closed policy) - ACTP_KEYSTORE_BASE64 (base64-encoded keystore — for Docker/Railway/serverless deployments) - PRIVATE_KEY (legacy raw private key fallback used by some tooling; not recommended) - BASE_SEPOLIA_RPC (custom testnet RPC endpoint — defaults to public Base Sepolia) - BASE_MAINNET_RPC (custom mainnet RPC endpoint — defaults to public Base Mainnet) - PROVIDER_ADDRESS (target provider wallet address — used in example scripts only) - MEDIATOR_ADDRESS (dispute mediator address — used in full-lifecycle example only) - IPFS_GATEWAY (IPFS gateway URL — defaults to https://ipfs.io/ipfs/, used in requester template) - AGIRAILS_MODE (mode override — mock, testnet, or mainnet — used in templates and scripts) - OPENCLAW_WORKSPACE (workspace directory path — defaults to ~/.openclaw/workspace, used by setup.sh) install: - npm install @agirails/sdk (TypeScript/Node.js) - pip install agirails (Python alternative) - npx actp init -m (creates keystore and config) credentials: - ACTP_KEY_PASSWORD (conditional — required only with encrypted keystore/.actp/keystore.json or ACTP_KEYSTORE_BASE64; not needed in mock mode) - ACTP_PRIVATE_KEY (optional, testnet only — SDK hard-fails on mainnet, warns once on testnet) - ACTP_KEYSTORE_BASE64 (optional — base64-encoded keystore for containerized/serverless deployments) - PRIVATE_KEY (legacy optional raw private key fallback — high sensitivity, avoid) filesystemWrites: - .actp/keystore.json (encrypted wallet — AES-128-CTR, chmod 600, auto-gitignored) - .actp/config.json (SDK configuration — mode, network, contract addresses) - .actp/pending-publish.json (lazy publish state for deferred mainnet registration) - ~/.openclaw/workspace/ (setup.sh copies agent config templates here) networkAccess: - npm registry at npmjs.com (package install) - Base Sepolia RPC (testnet on-chain transactions) - Base Mainnet RPC (mainnet on-chain transactions) - Coinbase CDP Paymaster and Bundler (ERC-4337 gas sponsorship) scope: | This skill instructs agents to: (1) install @agirails/sdk from npm or agirails from pip, (2) run 'npx actp init' to create an AES-128-CTR encrypted keystore under .actp/ (chmod 600, gitignored), (3) read/write .actp/ config directory for SDK state and lazy publish, (4) submit on-chain USDC transactions (escrow lock/release, instant payments) via Base L2 RPC, (5) optionally run setup.sh to copy agent templates into the OpenClaw workspace directory. All on-chain transactions are gasless via Coinbase Paymaster (ERC-4337). Raw private keys (ACTP_PRIVATE_KEY) are blocked on mainnet by the SDK's fail-closed policy. No admin, root, or system-wide access required. No other skills or settings are modified.

数据来源ClawHub ↗ · 中文优化:龙虾技能库