news 2026/10/9 2:20:28

Internet Court 的 NLA 托管履行指南:提交自然语言履行、等待 AI 仲裁、收集代币

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Internet Court 的 NLA 托管履行指南:提交自然语言履行、等待 AI 仲裁、收集代币

【免费下载链接】internet-court-skill

The trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all Agent Skill / Claude Code plugin.

项目地址:https://gitcode.com/gh_mirrors/in/internet-court-skill
点击查看免费下载

本指南围绕 Internet Court 技能仓库中 vendored/arkhai/nla-fulfill/SKILL.md 展开,讲解如何用nlaCLI 履行一个「自然语言协议(Natural Language Agreement,NLA)」链上托管:先读取托管需求,撰写满足需求的履行文本并提交上链,再等待 AI 仲裁结果,通过后收集被锁定的代币。读完你能够独立完成「履行 → 仲裁 → 收集」的完整闭环,并理解其背后的 commit-reveal 防抢跑机制与仲裁裁决流程。

1. 什么是 NLA 托管履行

在 Internet Court 技能栈 中,Arkhai 的nla-*系列技能属于第 3 层「Contracts & obligations」,负责用自然语言建立可仲裁的链上约定。整体路由关系如下(见 主技能 SKILL.md 的 Contracts & escrow 一节):

  • nla-create/SKILL.md —— 起草并创建托管(锁定 ERC20 代币 + 自然语言 demand);
  • nla-fulfill/SKILL.md(本文主体)—— 交付:提交履行文本,通过后收集代币;
  • nla-arbitrate/SKILL.md —— 裁决:以自动化 oracle 之外的方式手动仲裁。

NLA 托管(NLA escrow)的本质是:把 ERC20 代币锁定在链上,并附带一条用自然语言写成的demand(需求)。任何人都可以尝试提交一份fulfillment(履行文本)来满足该需求,由一个 AI oracle 对「履行是否满足需求」做出判断,通过则释放代币给履行方,拒绝则代币继续留在托管中。

nla-fulfill这个 Skill 覆盖的正是完整生命周期中的后半段:fulfill → arbitrate → collect。它被设计为在用户想要「为已存在的链上托管提交履行文本、检查仲裁结果、并在通过后收集资金」时触发(见该文件 frontmatter 的 description)。

2. 前置条件:CLI、钱包与网络

依据 nla-fulfill/SKILL.md 的 Prerequisites 一节,开始履行前需要满足:

前置项说明
nlaCLI全局安装:npm install -g nla
钱包私钥三种方式任选:nla wallet:set --private-key <key>、命令传--private-key <key>、或设置PRIVATE_KEY环境变量
账户中的 ETH用于支付多笔交易的 gas
Oracle 运行中自动化 oracle 需在线;测试可直接使用 Sepolia 上的公共演示 oracle

创建托管时可用的网络包括anvil(本地)、sepolia、base-sepolia、mainnet,切换用nla switch <network>;本地开发可用nla dev一键启动 Anvil、部署合约、铸造 mock token 并启动 oracle(见 nla-create/SKILL.md 的 Key details)。Sepolia 上的公共演示 oracle 地址为0xc5c132B69f57dAAAb75d9ebA86cab504b272Ccbc,nla-fulfill 示例中的 oracle0x70997970C51812dc3A010C7d01b50e0d17dc79C8即为本地/演示环境中的演示方。

3. 第一步:理解托管(escrow:status)

任何履行都始于读取托管本身。从用户处取得 escrow UID 后,查询其需求:

nla escrow:status --escrow-uid <uid>

该命令会返回以下关键信息(对应 nla-fulfill/SKILL.md 第 1 步):

  • demand(需求文本):托管要求履行方完成什么;
  • 仲裁模型与 provider:例如OpenAI(默认)、Anthropic、OpenRouter,以及具体的仲裁模型(如gpt-4o-mini、claude-3-5-sonnet-20241022、openai/gpt-4o);
  • Oracle 地址:由谁(哪个合约/账户)来裁决;
  • 已有的履行记录及其仲裁状态:是否已有人提交过履行、结果如何。

这些字段之所以可以精确对齐,是因为在创建托管时,demand、仲裁 provider、模型、仲裁 prompt 都已被编码进链上数据,且公开可见(见 nla-create/SKILL.md)。因此escrow:status读取到的就是托管创建时写入的参数。

4. 第二步:撰写履行文本

履行文本是 AI 仲裁器评判的对象——它不是一段说明文字,而是将被仲裁评估的原始依据。撰写要点(nla-fulfill/SKILL.md 第 2 步):

  • 仔细阅读 demand,逐条回应;
  • 具体、直接地回应需求所要求的内容;
  • 默认仲裁 prompt 的评估逻辑是:判断「fulfillment」是否满足「demand」,返回 true/false。

默认仲裁 prompt 模板(见 nla-create/SKILL.md Key details):

Evaluate the fulfillment against the demand and decide whether the demand was validly fulfilled Demand: {{demand}} Fulfillment: {{obligation}}

创建托管时可以自定义仲裁 prompt(支持{{demand}}与{{obligation}}占位符),但无论默认还是自定义,履行方这边的核心原则一致:让履行文本可以被 LLM 对照需求客观地验证为「已满足」。同时注意,需求、provider、模型、prompt 全部编码上链并公开可见——履行文本同样会永久上链,因此绝不要在履行文本中包含任何机密信息(如私钥、API key、个人敏感数据)。

5. 第三步:提交履行(escrow:fulfill)与 commit-reveal 原理

履行文本准备好后,提交:

nla escrow:fulfill \ --escrow-uid <escrow_uid> \ --fulfillment "<fulfillment text>" \ --oracle <oracle_address>

三个参数分别是:目标托管 UID、履行文本、以及在托管创建时指定的 oracle 地址。oracle 地址必须与创建托管时指定的一致(可通过escrow:status的输出确认),否则后续仲裁与收集链路无法成立。

该命令并非单笔交易,而是一个多步骤的commit-reveal(承诺-揭示)流程(nla-fulfill/SKILL.md 第 3 步):

  1. 计算承诺哈希(commitment hash):对履行内容(payload + salt + schema)做哈希;
  2. 提交承诺并附保证金(bond):把承诺哈希上链,同时质押 ETH 作为 bond;
  3. 等待下一区块确认:确保承诺已不可变;
  4. 揭示履行义务并退还保证金:在至少 1 个区块后揭示真实内容,匹配的 bond 在揭示时被退回;
  5. 向 oracle 发起仲裁请求。

这一设计的目的是防抢跑(frontrunning protection):如果履行内容(例如一道题的答案、一段能证明知识的文本)是自包含的,先上链者可能被他人监控内存池抢先提交。commit-reveal 使履行内容在揭示前不可见,且违约不揭示会损失 bond。底层机制对应 Arkhai 生态的CommitRevealObligation——它在 alkahest-developer/SKILL.md 的 Commit-Reveal Pattern 中有 SDK 级实现:computeCommitment(escrowUid, claimerAddress, { payload, salt, schema })→commit(commitment, bondAmount, commitDeadline)→ 等 1+ 区块 →doObligation(...),并明确「matching bond is reclaimed on reveal(匹配的 bond 在揭示时被取回)」;同时 arbiters.md 也指出CommitRevealObligation实现了IArbiter接口,验证履行方在更早的区块中已对其数据做过承诺。

由于整个流程涉及多笔交易(承诺、揭示、仲裁请求等),需要为多笔交易准备 gas——这是该 Skill 在 Key details 中明确提醒的成本点。

命令执行成功后,输出一个fulfillment UID(履行 UID)。务必记录该 UID,它是后续收集代币的凭证。

6. 第四步:监控仲裁结果

提交履行后,仲裁由 oracle 完成。用同样的状态命令检查是否已出结果:

nla escrow:status --escrow-uid <escrow_uid>
  • 如果 oracle 在运行,通常几秒内就会响应(nla-fulfill/SKILL.md 第 4 步);
  • 在输出中查找APPROVED(通过)或REJECTED(拒绝)标记。

需要理解仲裁的两个层面:

  • 自动化 oracle 监听:默认情况下,一个 AI oracle 进程会监听仲裁请求、用托管中指定的 provider/model 自动评估并上链裁决;
  • 手动/半自动仲裁:如果自动化 oracle 未运行,或者用户希望亲自裁决,可以使用 nla-arbitrate/SKILL.md:nla escrow:arbitrate --escrow-uid <uid>(交互式 approve/reject/skip),或--escrow-uid all扫描所有待裁决请求,--auto则自动调用 LLM(需通过环境变量或--openai-api-key等标志提供 API key)。仲裁者钱包地址必须等于托管创建时指定的 oracle 地址,否则链上合约会拒绝该裁决——这与履行方必须传对--oracle是对称的约束。每一条裁决都会作为永久的链上 attestation 记录。

7. 第五步:收集代币(escrow:collect)

一旦 oracle 在链上记录了approval,履行方即可收集被托管的代币:

nla escrow:collect \ --escrow-uid <escrow_uid> \ --fulfillment-uid <fulfillment_uid>

该命令把托管锁定的代币转移给履行方(nla-fulfill/SKILL.md 第 5 步)。注意几个边界条件:

  • 收集只在 oracle 记录 approval 之后才会成功——裁决未出或被拒绝时调用无效;
  • 如果被拒绝(REJECTED),代币继续留在托管中,任何人都可以再次发起新的履行尝试(不存在「该履行方被永久拉黑」的状态机限制);
  • 收集同样是链上交易,需要履行方账户中留足 gas。

8. 完整示例流程

以下完整示例直接继承 nla-fulfill/SKILL.md 的 Example full flow,并串联了创建端参数以便对照:

# 0.(可选)创建端视角:一个用自然语言需求创建的托管 # nla escrow:create \ # --demand "Explain why the sky is blue" \ # --amount <amount> --token <token_address> \ # --oracle <oracle_address> # 1. 检查托管要求什么 nla escrow:status --escrow-uid 0xabc123... # 2. 提交履行(多步 commit-reveal 流程) nla escrow:fulfill \ --escrow-uid 0xabc123... \ --fulfillment "The sky appears blue due to Rayleigh scattering" \ --oracle 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 # 3. 检查仲裁结果(等待 oracle 给出 APPROVED / REJECTED) nla escrow:status --escrow-uid 0xabc123... # 4. 通过后收集代币(--fulfillment-uid 是第 2 步的输出) nla escrow:collect \ --escrow-uid 0xabc123... \ --fulfillment-uid 0xdef456...

示例中的 oracle 地址0x70997970C51812dc3A010C7d01b50e0d17dc79C8是典型的演示环境地址;在 Sepolia 上可使用公共演示 oracle0xc5c132B69f57dAAAb75d9ebA86cab504b272Ccbc(见 nla-create/SKILL.md)。

9. 关键细节与常见陷阱

综合 nla-fulfill/SKILL.md 的 Key details 一节及本 Skill 在前置/底层协议中的上下文,实践中有六点需要特别留意:

  1. 履行文本永久上链:一旦揭示,内容不可篡改。写错、包含机密或表述不当都会成为永久公开记录;
  2. commit-reveal 需要多笔交易 gas:承诺、揭示、仲裁请求各自消耗 gas,成本明显高于单笔交易;同时 bond 在揭示时退回,未揭示的承诺存在被 slash(罚没 bond)的风险;
  3. oracle 地址必须匹配:--oracle必须与创建托管时指定的地址一致(status 输出可见),否则仲裁请求无法被正确路由;仲裁方同样受此约束(见 nla-arbitrate/SKILL.md);
  4. 收集依赖 approval:只有 oracle 在链上记录 approval 后escrow:collect才能成功——「查询状态显示通过」和「链上已有裁决」是一致的,不要把本地猜测当结论;
  5. 拒绝后可重试:被拒后代币留在托管,任何人均可再次履行,因此托管的需求与仲裁模型的质量直接影响资金安全性;
  6. 环境对齐:本地开发用nla dev(Anvil + 合约 + mock token + oracle),测试网用 Sepolia 公共 oracle,主网则需自建或可信 oracle;切换网络用nla switch <network>。

10. 在仓库中继续深入

  • 本技能原文:vendored/arkhai/nla-fulfill/SKILL.md
  • 托管创建端(demand 撰写、参数、网络、默认 prompt):vendored/arkhai/nla-create/SKILL.md
  • 仲裁端(手动/自动裁决、oracle 身份校验):vendored/arkhai/nla-arbitrate/SKILL.md
  • 底层协议:NLA 基于 Arkhai 的 EAS 条件托管体系,用户侧 CLI 与完整工作流见 vendored/arkhai/alkahest-user/SKILL.md,其中TrustedOracleArbiter(oracle 上链裁决)、CommitRevealObligation(承诺-揭示防抢跑)与各 arbiter 类型见 vendored/arkhai/alkahest-user/references/arbiters.md
  • 开发者侧(commit-reveal 的 SDK 调用链、收集函数签名):vendored/arkhai/alkahest-developer/SKILL.md
  • 在 Internet Court 技能栈中的路由位置:SKILL.md(Contracts & escrow / 第 3 层)、README.md

【免费下载链接】internet-court-skill

The trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all Agent Skill / Claude Code plugin.

项目地址:https://gitcode.com/gh_mirrors/in/internet-court-skill
点击查看免费下载
上一篇:魔兽争霸3完美运行终极指南:WarcraftHelper完整教程
下一篇:3步解锁WeMod专业版:Wand-Enhancer终极破解指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 2:16:57

JWT认证与授权实战:从登录到权限控制的全流程指南

1. 认证与授权&#xff1a;先弄懂两个容易混的概念1.1 API保护的两个维度&#xff1a;你是谁、你能干什么很多新手接手项目时&#xff0c;第一反应是"我要给我的API加个登录验证"&#xff0c;然后就开始搜JWT。这个方向没有错&#xff0c;但如果你没分清"认证&q…

作者头像 李华
网站建设 2026/10/9 2:15:37

Claude Code九成不好用?多半是用错了方式

十个说Claude Code不好用的人里&#xff0c;有九个是把它用错了地方。我第一次接触Claude Code时&#xff0c;心里想的就是"这不就是个跑在终端里的ChatGPT吗"——问它怎么改代码&#xff0c;让它写个函数&#xff0c;再把结果复制回编辑器&#xff0c;试用两天后我得…

作者头像 李华
网站建设 2026/10/9 2:12:35

RAG 入门与实践指南:用 TaoToken 统一 Key 打通检索增强生成全链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华