rustok-wallet
您通过内部的 rustok-agent-mcp 服务(http://rustok-agent-mcp:3000)连接到一个隔离的 Ethereum Agent Wallet。这个钱包与用户的主钱包是分开的。所有的消费限制、地址黑名单和每日预算都在代码中强制执行——您无法协商这些限制。
何时使用
用户询问钱包余额、地址或持有量
用户想要发送 ETH 或检查交易状态
用户询问 DeFi 位置(Aave、金库)
用户想要在执行之前预览交易
快速开始
curl -fsS -X POST http://rustok-agent-mcp:3000/context \
-H "Authorization: Bearer ${MCP_API_KEY}" | jq
curl -fsS -X POST http://rustok-agent-mcp:3000/preview \
-H "Authorization: Bearer ${MCP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"to":"0x0000000000000000000000000000000000000001","amount_wei":"100000000000000000","chain_id":1}' | jq
- 执行交易(需要来自步骤 2 的 preview_id)
curl -fsS -X POST http://rustok-agent-mcp:3000/execute \
-H "Authorization: Bearer ${MCP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"to":"0x0000000000000000000000000000000000000001","amount_wei":"100000000000000000","chain_id":1,"preview_id":"PASTE_PREVIEW_ID_HERE"}' | jq
API 参考
POST /context — 钱包状态
返回:地址、跨链余额、策略限制、gas 估计。
curl -fsS -X POST http://rustok-agent-mcp:3000/context \
-H "Authorization: Bearer ${MCP_API_KEY}" | jq
POST /positions — DeFi 位置
获取 Aave v3 + ERC-4626 位置的地址。省略地址以使用代理钱包的地址。
curl -fsS -X POST http://rustok-agent-mcp:3000/positions \
-H "Authorization: Bearer ${MCP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"address":"0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"}' | jq
POST /preview — 模拟 + 风险分析
运行策略 + 预算检查和 txguard 风险分析。返回一个必须传递给 /execute 的 preview_id。
正文:PreviewRequest { "to": "0x0000000000000000000000000000000000000001", "amount_wei": "100000000000000000", "chain_id": 1 }
curl -fsS -X POST http://rustok-agent-mcp:3000/preview \
-H "Authorization: Bearer ${MCP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"to":"0x0000000000000000000000000000000000000001","amount_wei":"100000000000000000","chain_id":1}' | jq
响应:PreviewResponse { "preview_id": "550e8400-e29b-41d4-a716-446655440000", "verdict": { "action": "allow", "risk_score": 15, "findings": [], "description": "Send 0.1 ETH to 0x0000...0001", "simulation": { "eth_change": -100000000000000000, "token_changes": [], "approval_changes": [], "gas_used": 21000, "reverted": false } }, "route": { "chain_id": 1, "chain_name": "Ethereum", "estimated_gas": 21000, "max_fee_per_gas": "25000000000", "max_priority_fee_per_gas": "1500000000", "estimated_cost": "525000000000000", "available_balance": "1000000000000000000" }, "explanation": "Send 0.1 ETH on Ethereum. Estimated cost: 0.000525 ETH (21k gas @ 25 gwei)." }
POST /execute — 签名和广播
需要来自 /preview 调用的有效 preview_id。重新运行策略和预算检查作为防御。
正文:ExecuteRequest { "to": "0x0000000000000000000000000000000000000001", "amount_wei": "100000000000000000", "chain_id": 1, "preview_id": "550e8400-e29b-41d4-a716-446655440000" }
curl -fsS -X POST http://rustok-agent-mcp:3000/execute \
-H "Authorization: Bearer ${MCP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"to":"0x0000000000000000000000000000000000000001","amount_wei":"100000000000000000","chain_id":1,"preview_id":"PASTE_PREVIEW_ID_HERE"}' | jq
成功响应:SendResult { "tx_hash": "0xabc123...", "chain_id": 1, "chain_name": "Ethereum", "from": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B", "to": "0x0000000000000000000000000000000000000001", "amount_wei": "100000000000000000", "estimated_gas_cost": "525000000000000" }
策略阻塞响应(HTTP 403):policy blocked: exceeds max_single_tx_eth
预算超出响应(HTTP 403):daily budget exceeded: 0.450000 / 0.500000 ETH
预览过期响应(HTTP 400):preview expired
预览不匹配响应(HTTP 400):preview mismatch
安全保证
保证机制
消费限制
AgentPolicy — 每次交易前代码级检查
每日预算
SQLite 中的滚动 24 小时累加器
地址黑名单
精确匹配 + 校验和检查
无限批准被阻止
block_unlimited_approvals = true 拒绝 type(uint256).max
审计不可变性
代理审计日志表的追加只
钱包隔离
单独的 ~/.rustok/agent/ 目录
无提示注入绕过
限制不在系统提示中;它们在代码中
行为准则
始终在执行之前预览。
永远不要在没有新鲜 /preview 的情况下调用 /execute。