demola13777/watchtower
GitHub: demola13777/watchtower
为 DeFi AI 交易代理提供链上代币威胁情报和交易前拦截能力的安全中间件。
Stars: 0 | Forks: 0
# WatchTower
为自主 AI 交易代理提供的威胁情报中间件。
WatchTower 让代理在交易前问一个问题:**这个 token 是否足够安全可以接触?** 它结合了 token 情报模块、面向代理的 API、MCP 工具、x402 风格的机器支付以及公共链上证明,以便交易代理可以在执行前拦截恶意合约。
该项目专为 OKX AI Hackathon 打造,采用了面向生产环境的架构:免费层级的数据提供者和自托管的支付验证隔离在服务边界之后,以便日后无需重写扫描引擎、SDK、MCP server 或路由逻辑即可替换它们。
## 为什么开发它
自主交易代理发现和执行机会的速度比人类审查的速度更快。这产生了一种新的失败模式:代理可能会在操作员注意到之前与蜜罐、流动性差的 token、集中供应或可疑市场进行交互。
WatchTower 被设计为代理优先的安全层:
- 代理通过 SDK、REST API 或 MCP 从其自身的 runtime 调用 WatchTower。
- WatchTower 返回机器可读的 `TRADE`、`CAUTION` 或 `ABORT` 建议。
- 深度扫描生成可作为凭证共享的公共报告。
- 扫描证明记录在 X Layer 上以供独立验证。
WatchTower 不是钱包仪表板,并且公共 Web 体验不需要连接钱包。
## WatchTower 的与众不同之处
WatchTower 是一个威胁情报 oracle,而不是一个执行计划验证器。它不尝试签名或强制执行完整的交易策略。相反,它在决策点为自主代理提供最新的 token 风险情报。
核心产品形态包括:
- 用于代理代码的 **SDK 中间件**。
- 用于桌面和本地 AI 代理的 **MCP 工具**。
- 用于直接集成的 **REST API**。
- 用于机器到机器访问的 **x402 风格支付挑战**。
- 用于透明度的 **公共扫描报告**和**链上证明**。
这使得 WatchTower 保持专注:它回答目标 token 在代理投入资金之前是否存在危险。
## 架构
```
flowchart LR
Agent["AI Trading Agent"] --> SDK["WatchTower SDK"]
Agent --> MCP["MCP Tool Call"]
SDK --> API["/api/scan or /api/scan/deep"]
MCP --> MCPRoute["/api/mcp"]
API --> Payment["PaymentService Boundary"]
MCPRoute --> Payment
Payment --> Engine["Threat Engine"]
Engine --> Modules["DexScreener / GoPlus / Ethplorer / Social Radar"]
Engine --> DB["SQLite or Turso"]
Engine --> Registry["WatchTowerRegistry on X Layer"]
DB --> Reports["/report/[scanHash]"]
Registry --> Verify["/verify"]
```
关键边界:
- `src/lib/payment.ts` 集中处理支付验证。
- `src/lib/scan-service.ts` 协调共享的扫描工作流。
- `src/lib/engine.ts` 包含威胁评分模块和确定性扫描 hash。
- `src/lib/chain-resolver.ts` 解析或验证扫描 `chainId`。
- `src/app/api/mcp` 将相同的扫描工作流公开为 MCP 工具。
- `packages/watchtower-sdk` 提供代理端集成。
- `contracts/src/WatchTowerRegistry.sol` 存储链感知的扫描证明。
## 核心功能
### 代理优先的扫描接口
- `POST /api/scan` 用于快速的 Tier 2 防火墙扫描。
- `POST /api/scan/deep` 用于 Tier 1 详细报告和证明。
- `POST /api/mcp` 用于兼容 MCP 的代理。
- `okx-watchtower-middleware` SDK 适用于 TypeScript/Node 代理。
### 威胁情报模块
| 模块 | 当前来源 | 用途 |
| --- | --- | --- |
| Liquidity Intelligence | DexScreener | 流动性深度、缺失交易对、死市场、交易对存在时间、交易量 |
| Contract DNA Scanner | GoPlus Security | 蜜罐、出售限制、可铸造性、所有者余额控制、税率 |
| Whale Intelligence | Ethplorer | 持有者集中度和最大持有者风险 |
| Social Threat Radar | 当前由 DexScreener 支持,架构已准备好支持 LunarCrush | 社交存在感、交易倾斜、波动性、类似机器人的活动指标 |
### 链感知扫描
Token 地址在 EVM 链之间并不是全局唯一的。WatchTower 在 REST、SDK 和 MCP 请求中接受 `chainId`。如果省略,它会尝试使用流动性、bytecode 和安全配置文件信号进行链解析。
默认回退:
- X Layer Mainnet: `196`
- X Layer Testnet 支持:`1952`
### x402 风格的支付边界
受保护的扫描路由返回 `402 Payment Required` 以及 `PAYMENT-REQUIRED` 挑战。
当前定价:
- Tier 1 深度扫描:`1 USDT`
- Tier 2 防火墙扫描:`0.5 USDT`
当前模式:
- **开发 / 自托管 Web3 验证**
- 代理将 ERC-20 USDT 转移到配置的 Treasury。
- 重试请求发送 `Authorization: L402 `。
- 验证器检查链 ID、交易成功状态、token 合约、Treasury 接收方、金额、确认深度和重放状态。
`PaymentService` 接口被特意集中化,以便生产级的 x402 facilitator 或 LSAT 风格的密码学验证器可以替换自托管验证器,而无需更改扫描引擎或路由逻辑。
### 公共报告和证明
深度扫描生成:
- 位于 `/report/[scanHash]` 的公共报告。
- 使用以下内容的确定性 hash:
```
sha256(chainId:tokenAddress:threatScore:confidence:timestamp)
```
- 来自 `WatchTowerRegistry` 的 X Layer 注册表事件。
- 通过 `/verify` 进行验证。
当前的 X Layer Testnet 注册表:
- 地址:`0x035FE9151000cd4346f4A07f5878474ea6fd21b7`
- Chain ID: `1952`
- 部署交易:`0xc2c598922d62814f74d6060c67038be96618a5583b44c53f992a124d9c2eef9e`
## 快速开始
### 要求
- Node.js 20+
- npm
- Foundry,仅在处理合约时需要
- 配置好的 `.env.local`
### 安装
```
npm install
cd packages/watchtower-sdk && npm install && npm run build
cd ../..
```
### 配置
```
cp .env.example .env.local
```
对于无需付费扫描的本地开发,应用程序可以以最小配置启动。要使付费扫描路由工作,请配置活动的支付网络:
```
NEXT_PUBLIC_NETWORK_ENV=testnet
TESTNET_RPC_URL=https://testrpc.xlayer.tech
TESTNET_TREASURY_ADDRESS=0x...
TESTNET_USDT_ADDRESS=0x...
TESTNET_PAYMENT_TOKEN_DECIMALS=6
```
用于注册表写入:
```
PRIVATE_KEY=0x...
NEXT_PUBLIC_REGISTRY_ADDRESS=0x035FE9151000cd4346f4A07f5878474ea6fd21b7
NEXT_PUBLIC_REGISTRY_CHAIN_ID=1952
NEXT_PUBLIC_REGISTRY_RPC_URL=https://testrpc.xlayer.tech
```
切勿提交真实的 private key。
### 本地运行
```
npm run dev
```
打开:
- 主页:`http://localhost:3000`
- 网络仪表板:`http://localhost:3000/network`
- 验证器:`http://localhost:3000/verify`
- MCP 端点:`http://localhost:3000/api/mcp`
## SDK 使用
SDK 位于 `packages/watchtower-sdk` 中,命名为 `okx-watchtower-middleware`。
```
import { WatchTowerClient, WatchTowerAbortError } from "okx-watchtower-middleware";
const wt = new WatchTowerClient({
apiUrl: "https://watchtower.xyz",
agentWallet: "0xYourAgentWallet",
chainId: 196,
threshold: 70,
paymentPrivateKey: process.env.AGENT_PAYMENT_KEY,
});
try {
const intel = await wt.guardTransaction("0xTokenAddress");
console.log(intel.recommendation, intel.threatScore);
// Continue only if your agent's own policy accepts the result.
} catch (error) {
if (error instanceof WatchTowerAbortError) {
console.log("Trade blocked", error.threatScore, error.reasoning);
}
}
```
如果配置了 `paymentPrivateKey`,SDK 会通过发送 ERC-20 支付交易并使用结算 hash 重试,自动处理 `402` 挑战。
深度扫描:
```
const report = await wt.deepScan("0xTokenAddress", { chainId: 196 });
console.log(report.verification.scanHash);
```
## MCP 集成
WatchTower 在以下位置公开了一个 Streamable HTTP MCP 端点:
```
http://localhost:3000/api/mcp
```
MCP 配置示例:
```
{
"mcpServers": {
"watchtower": {
"url": "http://localhost:3000/api/mcp"
}
}
}
```
可用工具:
- `scan_token`
- `deep_scan_token`
输入:
```
{
"tokenAddress": "0x...",
"chainId": "196",
"agentWallet": "0x..."
}
```
付费 MCP 工具调用使用与 REST 相同的支付边界。故意拒绝批量付费工具调用,以便一个支付挑战映射到一个付费扫描操作。
## REST API 概述
### `POST /api/scan`
Tier 2 防火墙扫描。价格:`0.5 USDT`。
请求:
```
{
"tokenAddress": "0x...",
"chainId": "196",
"agentWallet": "0x..."
}
```
响应:
```
{
"success": true,
"data": {
"tokenAddress": "0x...",
"chainId": "196",
"threatScore": 42,
"confidence": 0.75,
"recommendation": "CAUTION",
"reasoning": [],
"scanHash": "..."
}
}
```
### `POST /api/scan/deep`
Tier 1 深度扫描。价格:`1 USDT`。
返回包含模块分解、建议、公共报告 hash 以及链上提交成功时的注册表交易 hash 的完整报告。
### `GET /api/telemetry`
只读仪表板指标和最新扫描源。
查询参数:
- `page`
- `limit`,上限为 `100`
## 演示工作流
受保护的 SDK 代理:
```
node demo/protected-agent.js
```
深度扫描 API 演示:
```
node demo/deep-scan-agent.js
```
MCP 演示:
```
node demo/mcp-agent.js
```
支付挑战回归测试:
```
npm run test:payments
```
设置 `PAYMENT_TEST_TX_HASH` 以验证真实的结算交易和重放拒绝。
## 智能合约
注册表存储链感知的扫描证明。
```
event ScanRecorded(
uint256 indexed chainId,
address indexed tokenAddress,
string scanHash,
uint256 threatScore,
uint256 timestamp
);
```
部署:
```
cd contracts
forge script script/DeployWatchTowerRegistry.s.sol:DeployWatchTowerRegistry \
--rpc-url $TESTNET_RPC_URL \
--broadcast \
--slow
```
测试:
```
cd contracts
forge test
```
## 数据库
本地开发使用位于 `watchtower.db` 的 SQLite。
生产环境应使用 Turso/libSQL:
```
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=...
npm run db:push
```
应用程序自动选择数据库驱动程序:
- 设置了 `TURSO_DATABASE_URL`:Turso/libSQL
- 未设置:本地 SQLite
## 在 Vercel 上部署
公共部署所需:
- `NEXT_PUBLIC_SITE_URL`
- `TURSO_DATABASE_URL`
- `TURSO_AUTH_TOKEN`
- `PRIVATE_KEY`,仅在部署的服务器需要写入证明时需要
- 注册表变量:
- `NEXT_PUBLIC_REGISTRY_ADDRESS`
- `NEXT_PUBLIC_REGISTRY_CHAIN_ID`
- `NEXT_PUBLIC_REGISTRY_RPC_URL`
- 活动网络的支付变量:
- `NEXT_PUBLIC_NETWORK_ENV`
- `TESTNET_RPC_URL` 或 `MAINNET_RPC_URL`
- Treasury 地址
- 接受的 token 地址
- token 小数位数
推荐的生产设置:
- `PAYMENT_MIN_CONFIRMATIONS=1` 或更高
- `RECORD_FIREWALL_SCANS=false` 如果 gas 成本应限制在深度扫描中
- 所有生产链的付费 RPC 提供商
- Turso 数据库而不是本地 SQLite
该项目包括:
- Next 元数据
- `robots.ts`
- `sitemap.ts`
- 基本安全标头
- 报告加载/错误/未找到状态
## 验证命令
```
npm run lint
npm run build
cd packages/watchtower-sdk && npm run build
cd ../../contracts && forge test
cd .. && npm run test:payments
```
## 当前限制
这些是已知并特意记录的:
- 支付层是自托管的 Web3 验证,尚未完全集成生产级的 x402 facilitator。
- 通过交易 hash 的公共/手动支付仍然是一条便利路径;SDK 代理可以使用 `paymentPrivateKey` 自动结算。
- 速率限制在内存中进行,并在 serverless 实例间重置。对于生产规模,请使用 Redis、Upstash 或基于数据库的限制器。
- 免费层级的情报 API 可能会进行速率限制或返回不完整的数据。当模块不可用时,引擎会降低置信度。
- Social Threat Radar 已准备好支持 LunarCrush,但当前免费层级的实现由 DexScreener 支持。
- 本地 SQLite 仅用于开发。Vercel/公共部署应使用 Turso。
- 服务器端的注册表写入器使用 `PRIVATE_KEY`;对于生产环境,请将签名移至托管托管、relayer 或基于 KMS 的密钥管理。
## 路线图
- 生产级 x402 facilitator 或兼容 LSAT 的签名支付信封。
- 基于 Redis/Upstash 的速率限制和幂等性控制。
- 用于 DexScreener 替代方案、GoPlus、Ethplorer 和 LunarCrush 的付费提供商适配器。
- 针对手动 Web 流程的更强请求绑定支付证明。
- 专用的 SDK 包发布工作流。
- 为所有权转移和事件索引扩展 Foundry 测试。
- 用于 lint、build、SDK 构建、支付挑战测试和 Foundry 测试的 CI pipeline。
## 项目结构
```
watchtower/
src/app/ Next.js routes, pages, and API handlers
src/app/api/scan Tier 2 firewall endpoint
src/app/api/scan/deep Tier 1 deep scan endpoint
src/app/api/mcp MCP Streamable HTTP endpoint
src/lib/engine.ts Threat intelligence engine
src/lib/payment.ts PaymentService boundary
src/lib/scan-service.ts Shared scan orchestration
src/lib/chain-resolver.ts Chain detection and fallback logic
src/lib/db Drizzle schema and database connection
packages/watchtower-sdk Agent SDK
contracts/ WatchTowerRegistry and Foundry tests
demo/ Agent and API demos
scripts/ Regression scripts
```
## 许可证
ISC
标签:API中间件, DeFi, MITM代理, OKX, 人工智能代理, 区块链安全, 威胁情报, 开发者工具