给 AI Agent 钱包,不给它失控的权力。
AgentGuard 是为 Monad Blitz 武汉站准备的 AI × Web3 Demo:用户把少量 MON 存入合约,为 Agent 配置会话预算、单笔上限和商户白名单。Agent 遇到付费 API 的 HTTP 402 响应时,可以在策略允许范围内自动付款并重试;超额、陌生 商户或重复请求会被合约拒绝。
多数 AI Agent Demo 重点展示“它能做什么”,AgentGuard 展示的是“它不能做 什么”。当 Agent 开始自主购买数据、模型和算力时,支付权限不能只依赖提示 词。链上策略提供四个可验证边界:
- 会话总预算
- 单笔支付上限
- 商户白名单
- 请求 ID 防重放
Monad 的快速确认使支付护栏不会成为 Agent 体验中的明显阻塞点。
- 用户输入一个调研任务并启动 Research Agent。
- GitHub Radar 返回 HTTP 402;0.004 MON 符合策略,支付通过。
- Premium Alpha 索要 0.025 MON,超过单笔上限,合约拒绝。
- Agent 自动选择 0.007 MON 的 Community Pulse,完成任务。
- 页面展示完整执行轨迹、花费与被阻止的风险支出。
网页会重放一条已经在 Monad 测试网真实执行的证明链,因此现场网络不稳定时 仍能展示;交易链接可在区块浏览器独立核验。
- 合约:
0xd3b38a95...8a5f - 高价请求:HTTP 402,要求 0.025 MON
- 超额拦截:交易真实回滚
- 自动降级:再次收到 HTTP 402,要求 0.007 MON
- 降级支付:交易成功
- 携带链上证明重试:HTTP 200
本项目的 agentguard-exact-mon 是基于原生 MON 和 AgentGuardVault 的实验性
402 支付方案,遵循“402 挑战 → 支付 → 链上验证 → 重试”的核心流程,但不
冒充 Monad facilitator 使用的标准 USDC exact 方案。
npm install
npm run dev打开终端显示的本地地址。
npm test测试覆盖:
- 允许授权 Agent 向白名单商户付款
- 拒绝非白名单商户
- 拒绝超过单笔上限的付款
- 拒绝重复请求
- 真实 HTTP 服务器返回 402,链上付款后重试得到 200
- 固定 gas 广播超额付款并确认交易状态为 reverted
- 校验网页可由部署 Worker 正常渲染
测试账户凭据只保存在被 Git 忽略的 .agentguard/ 目录中:
npm run real:accounts
npm run real:deploy
npm run real:flow复制 .env.example,提供一个已有测试币的部署账户:
npm run contract:deploy脚本默认使用 Monad 测试网(chain ID 10143)。私钥只从环境变量读取,不会
写入项目文件。
User goal
↓
AI Agent ──→ Paid API (HTTP 402)
↓ ↑
AgentGuardVault │ retry after settlement
├─ budget │
├─ per-call cap │
├─ allowlist │
└─ replay guard ──┘
↓
Monad
项目方向来自以下公开仓库与官方资料:
- monad-developers/scaffold-monad-foundry: Monad 官方 DApp 脚手架采用 Next.js、Viem/Wagmi 与 Foundry。
- x402-foundation/x402: HTTP 402 的标准挑战、支付、验证、结算与重试流程。
- faremeter/faremeter: 展示 Monad 在 EVM Agent 支付基础设施中的可用性。
- efeecllk/agent-attack: Monad Blitz 获奖 Agent 项目;说明 Agent 竞技类题目已有强案例,因此本项目 转向更基础的支付安全层。
- Monad Developer Documentation: 网络参数、EVM 兼容性和部署资料。
比赛当天优先完成这三个增强:
- 接入真实 x402 测试服务与稳定币支付。
- 部署合约并把真实交易哈希接回执行轨迹。
- 增加 EIP-712 会话授权,避免 Agent 长期持有主钱包权限。