返回项目展示
截图 1
截图 2

项目描述

在 Monad 上用 ERC-8004 + x402 盯 Polymarket。付 $0.01 USDC 订阅一个事件,订阅后立刻扫一轮,之后每 5 分钟对照新闻、社交和盘口资金,用邮件或 Telegram 告诉你为什么涨或跌。# Pulse — Monad 上的预测市场盯盘 Agent Pulse 是跑在 [Monad](https://www.monad.xyz) 上的 ERC-8004 Agent:选一个 [Polymarket](https://polymarket.com) 事件,付 **$0.01 USDC**([x402](https://docs.monad.xyz/guides/x402)),之后由 Agent 盯 YES 概率。波动来了,它会对照新闻、社交和盘口资金,用邮件或 Telegram 写清楚「为什么涨 / 为什么跌」。 个人扫盘报告免费。每个事件只算一次,再按订阅者扇出通知——适合 Monad 的 ~0.3s 出块、单槽最终性和极低 gas:小额 USDC 按次结算不会堵,也不会被手续费吃掉。 ``` 钱包付 $0.01 盯盘 │ ▼ ERC-8004 身份(可发现、可评价) │ ▼ Worker 每 5 分钟扫 YES │ ├── 新闻 / 社交 / 成交资金 ├── LLM 写原因(无 Key 时用规则引擎) └── 邮件 · Telegram · 结果页 ``` ## 它做什么 - **免费扫盘**:对任意 Polymarket 事件出一份短报告(隐含概率、量、流动性、风险)。 - **一分钱盯盘**:`POST /subscribe` 经 x402 收 $0.01 USDC。同一钱包对同一事件只能订一次。 - **立刻扫一轮,之后按窗口对比**:订阅成功马上扫;之后默认每 5 分钟看过去 5 分钟的 YES 变动,并对照 1 小时 / 6 小时 / 1 天 / 7 天 / 30 天(有历史才写)。 - **带证据的通知**:Google News、Reddit、X、Polymarket 成交净流入。原因写进邮件 / Telegram / 结果页。 - **链上身份与声誉**:Identity Registry 铸 ERC-721;结果页「有用 / 不准」调 Reputation Registry。 前端三屏:首页介绍、选盘结算、个人中心(订阅、付款、通知、反馈)。中英切换,明暗主题。 ## 仓库结构 pnpm workspace。Node ≥ 20。 ``` apps/web Next.js 15 前端(wagmi / viem / x402 客户端) apps/api Express Agent HTTP:扫盘、订阅、8004 card、x402、Worker tick apps/worker 按间隔 POST /internal/tick packages/shared Monad 网络、USDC、Registry、ABI、类型 packages/agent-card ERC-8004 registration file ``` | 进程 | 默认地址 | | --- | --- | | Web | http://localhost:3000 | | API | http://localhost:4000 | | Agent Card | http://localhost:4000/.well-known/agent-card.json | 数据落 MySQL(订阅、通知、扫盘报告、价格点)。首次启动会把旧的 `apps/.data/events/*.json` 迁进去。刷新和重启都还在。 ## 盯盘怎么跑 1. 用户在 `/scan` 搜 Polymarket(关键词或事件链接),填邮箱和/或 Telegram `chatId`,连钱包付 $0.01。 2. API 写入 `subscriptions`,立刻对该事件跑一次 `scanEvent`(首次一定通知)。 3. Worker 轮询 `/internal/tick`。每个事件在间隔内只检测一次;同一盘的所有订阅者共用这一次计算。 4. 对照本地 `event_quotes` + Polymarket 历史价。主窗口是 5 分钟;更长窗口只作对照。形态:匀速升/降、突然跳变、近期加速、来回震荡。 5. 取证 + LLM(或规则引擎)写成原因,按**这条订阅里填的地址**发邮件 / Telegram,并写入 `alerts`。 `WATCH_INTERVAL_MINUTES` 改完下一轮生效,不用重启 Worker。 ## 本地启动 需要:Node 20+、pnpm 9、本机 MySQL。 1. 读官方两篇:[ERC-8004](https://docs.monad.xyz/guides/erc-8004) · [x402](https://docs.monad.xyz/guides/x402) 2. 钱包(开发用)+ [Monad faucet](https://faucet.monad.xyz) 的 MON + [Circle faucet](https://faucet.circle.com) 的 Monad Testnet USDC 3. 可选:OpenAI 兼容 LLM Key、Telegram Bot Token(`@BotFather`)、[Resend](https://resend.com) 发信 Key ```bash cd monad_2026_08_15 cp .env.example .env # 填 PAY_TO_ADDRESS;开发阶段保持 SKIP_X402=true # 确认 DATABASE_URL 能连上 MySQL(默认 mysql://root@127.0.0.1:3306/pulse,库不存在会自动建) pnpm install pnpm dev ``` 单独起进程:`pnpm dev:api` / `pnpm dev:web` / `pnpm dev:worker`。类型检查:`pnpm typecheck`。 开发时 `SKIP_X402=true`,`/subscribe` 不扣款。打开支付后再走钱包签 EIP-3009(gas 由 facilitator 出)。 ## 注册 Agent(ERC-8004) Agent Card 由 API 现场生成(名字、能力、HTTP endpoint、收款地址)。本地 HTTP 的 URI 上不了 8004scan:把 `PUBLIC_API_URL` / `AGENT_URI` 指到已部署的 HTTPS,或用 `--onchain` 把 JSON 打成 `data:` URI。 ```bash # .env 里填 PRIVATE_KEY、PAY_TO_ADDRESS、AGENT_URI pnpm register # 元数据完全上链: pnpm --filter @pulse/api exec tsx src/register.ts --onchain ``` 把打印出的 `agentId` 写回 `.env` 的 `AGENT_ID` 和 `NEXT_PUBLIC_AGENT_ID`。到 [8004scan](https://www.8004scan.io) 搜 Pulse / 该 ID。 | 网络 | Identity Registry | Reputation Registry | | --- | --- | --- | | Testnet(`eip155:10143`) | `0x8004A818BFB912233c491871b3d84c89A494BD9e` | `0x8004B663056A597Dffe9eCcC1965A193B7388713` | | Mainnet(`eip155:143`) | `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` | `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63` | 切主网:`MONAD_NETWORK=mainnet`。 ## 打开 x402 收费 ``` SKIP_X402=false PAY_TO_ADDRESS=0x你的收款地址 FACILITATOR_URL=https://x402-facilitator.molandak.org ``` 前端连钱包 → 签 EIP-3009 → 自动带支付头重试 `/subscribe`。`/scan` 个人报告不收费。个人中心里可以对未上链的订阅补付 $0.01。 | 网络 | CAIP-2 | USDC | EIP-712 name | | --- | --- | --- | --- | | Testnet | `eip155:10143` | `0x534b2f3A21130d7a60830c2Df862319e593943A3` | `USDC` / `2` | | Mainnet | `eip155:143` | `0x754704Bc059F8C67012fEd69BC8A327a5aafb603` | `USD Coin` / `2` | ## API 收费路由只有 `POST /subscribe`。其余只读或内部接口免费。 | 方法 | 路径 | 说明 | | --- | --- | --- | | GET | `/health` | 存活、网络、是否跳过 x402 | | GET | `/.well-known/agent-card.json` | ERC-8004 Agent Card | | GET | `/config` | 前端用的网络、收款、Registry、反馈 ABI | | GET | `/events?q=` | 热门或搜索 Polymarket;可贴事件链接 | | POST | `/scan` | 免费个人报告。body:`{ eventId }` | | POST | `/subscribe` | 盯盘。body:`wallet`、`eventId`、可选 `email` / `chatId`。未付款 402 | | GET | `/subscriptions?wallet=` | 该钱包的订阅 | | GET | `/payments?wallet=` | 付款记录 | | POST | `/payments/confirm` | 把链上 tx 挂到已有订阅 | | GET | `/alerts?wallet=` | 通知 + 扫盘历史 | | POST | `/internal/tick` | Worker 调用。`?force=1` 忽略间隔 | 试扫(支付门关闭时): ```bash curl -s http://localhost:4000/events | jq '.events[0].id' curl -s -X POST http://localhost:4000/scan \ -H 'content-type: application/json' \ -d '{"eventId":"demo-btc-150k"}' | jq '.report.headline' ``` Gamma API 不可用时会回落到内置 demo 事件(`demo-btc-150k` 等)。 ## 前端 1. `/` Agent 介绍 + Identity Registry / 收款地址 / 8004scan 2. `/scan` 搜盘、看订阅池人数、填通知渠道、付 $0.01 3. `/alerts` 正在盯的盘、付款记录、通知历史(原因 + 新闻/社交/资金)、Useful / Inaccurate 没填 `AGENT_ID` 时反馈停在 UI 提示,不发链上交易。 ## 环境变量 见 `.env.example`。最少填 `PAY_TO_ADDRESS`。打开收费后再填 `PRIVATE_KEY`(仅注册脚本需要)并关掉 `SKIP_X402`。 | 变量 | 作用 | | --- | --- | | `MONAD_NETWORK` | `testnet`(默认)或 `mainnet` | | `DATABASE_URL` | MySQL,默认 `mysql://root@127.0.0.1:3306/pulse` | | `OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_MODEL` | 兼容接口;未配置则规则引擎 | | `TELEGRAM_BOT_TOKEN` | 缺了只记日志,不发消息 | | `RESEND_API_KEY` / `EMAIL_FROM` | 缺了只记日志。演示阶段 Resend 测试发件人通常只能发到注册邮箱 | | `WATCH_INTERVAL_MINUTES` | 每个事件检测间隔,默认 5 | | `NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID` | 可选,钱包连接 | ## 部署 - **API + Worker**:Railway / Render / VPS。切 `MONAD_NETWORK` 与 `PUBLIC_API_URL`(必须 HTTPS,8004scan 才打得开 card) - **Web**:Vercel,`NEXT_PUBLIC_API_URL` 指到 API - Demo 60–90s:注册 → 免费出报告 → 付 $0.01 盯盘/推送 →(可选)反馈 ## 为何是 Monad x402 要的是「每调用一笔、立刻最终、费用可忽略」。Monad 并行执行 + 单槽最终性让 agent 对 agent 的小额 USDC 能当 HTTP 状态码用,而不是当一笔要等确认的转账。ERC-8004 的 Identity / Reputation 已在测试网和主网同地址族部署,发现和付款在同一条链上完成。

团队成员

yy solo

YYy
队长

元数据

创建者Yy
创建时间2026年8月15日
状态已归档
项目 ID#369