关于 Rustok Wallet
Rustok Wallet 是面向个人和 AI Agent 的自托管 Ethereum 钱包,提供移动应用、CLI 和交易安全分析。它通过 txguard 在签名前解析并模拟交易,并支持多个链的统一余额与转账。
主要功能
- 01跨五条主网统一余额与转账
- 02BIP39 助记词创建与恢复
- 03签名前进行 txguard 安全分析
- 04PIN 与生物识别锁定
- 05交易记录与待处理状态追踪
适用场景
- 01在多个 Ethereum 网络间管理资产
- 02签署前检查交易风险
- 03通过 CLI 分析 EVM 交易
- 04为 AI Agent 配置分级交易权限
MCP 相关
项目提供面向 AI Agent 的 MCP 工具,并通过 fail-closed 能力门控区分读取、预览和执行权限。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Rustok
支持链抽象和交易安全引擎的 Ethereum 钱包。
状态: 已投入生产 — 第 7 阶段已完成 — 已在 Sepolia 上验证 Android;支持 iOS。React Native 应用支持真实链上交易、完整的引导流程和实时 txguard 分析。
网站: rustokwallet.com | X: @rustokwallet | Agent 版本: github.com/rustok-org
这是什么?
Rustok 是一款自托管 Ethereum 钱包,围绕两个理念构建:
- 你的密钥,你的链 — 一个助记词可控制 Ethereum、Arbitrum、Base、Optimism 和 zkSync 上的地址。余额和路由统一管理;你选择链,其余交给钱包处理。
- 信任,但要验证 — 每笔交易在签名前都会经过
txguard分析。它会解码 calldata、运行安全规则、通过revm模拟执行,并结合威胁情报丰富分析结果。
移动应用(Android + iOS)是主要界面。另提供公共 HTTP API 和 CLI,用于无头 txguard 分析。
2026 年演进: 同一套自托管核心现已推出 面向 AI Agent 的钱包 — MCP 工具采用故障关闭式能力门控(读取 / 预览 / 执行)和三级信任阶梯(自主 Agent → 控制台批准 → 手机签名)。请参阅 rustokwallet.com 和 rustok-org 仓库(mcp、console、mobile、paraswap-mcp、uniswap)。
功能
- 多链钱包 — 支持 5 条主网链 + Sepolia 测试网的统一余额、发送和接收
- BIP39 助记词 — 兼容 MetaMask 的路径(
m/44'/60'/0'/0/0),支持跨设备恢复 - txguard 分析 — 签名前安全扫描,提供风险徽标和逐项发现详情
- PIN + 生物识别锁 — 使用 Argon2id 哈希的 PIN、Face ID / 指纹解锁、后台自动锁定
- 引导流程 — 创建钱包(4 步向导 + 助记词测验)、从助记词导入,或从锁定 / 生物识别信息变更中恢复
- 活动历史 — 显示真实交易记录,跟踪待处理状态并提供区块浏览器链接
- 主题 — 浅色 / 深色 / 跟随系统,整个 UI 保持设计令牌一致性
架构
┌─────────────────────────────────────────────────────────────┐
│ Mobile App (Android / iOS) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────────────┐ │
│ │ Wallet │ │ Activity│ │ TxGuard │ │ Settings │ │
│ │ Tab │ │ Tab │ │ Tab │ │ (Appearance, │ │
│ │ │ │ │ │ │ │ Biometric, │ │
│ │ • Hero │ │ • TX │ │ • Risk │ │ Auto-lock, │ │
│ │ card │ │ list │ │ badge │ │ Network) │ │
│ │ • Send │ │ • Pull │ │ • Per- │ │ │ │
│ │ • QR │ │ refresh│ │ finding│ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ └────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ React Navigation v7 • Zustand 5 • NativeWind v4 ││
│ │ Reanimated 4 • MMKV • Keychain • Argon2id ││
│ └─────────────────────────────────────────────────────────┘│
└───────────────────────────┬─────────────────────────────────┘
│ JS ↔ Rust Bridge
┌───────────────────────────▼─────────────────────────────────┐
│ react-native-rustok-bridge │
│ (uniffi-bindgen-react-native 0.31) │
└───────────────────────────┬─────────────────────────────────┘
│ FFI
┌───────────────────────────▼─────────────────────────────────┐
│ Rust Workspace │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ rustok-core │ │ txguard │ │ rustok-api │ │
│ │ │ │ │ │ │ │
│ │ • keyring │ │ • parser │ │ Axum HTTP server │ │
│ │ • provider │ │ • rules │ │ /health │ │
│ │ • router │ │ • simulator │ │ /check-address │ │
│ │ • send │ │ • enrichment│ │ /decode │ │
│ │ • explorer │ │ │ │ │ │
│ │ • explainer │ │ 8 security │ │ Self-hosted │ │
│ │ • convert │ │ rules │ │ (see deploy/) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ rustok-cli │ │ rustok-types│ │rustok-mobile-bindings│ │
│ │ │ │ │ │ │ │
│ │ CLI binary │ │ Shared DTOs │ │ uniffi FFI exports │ │
│ │ (decode, │ │ (no crypto │ │ for iOS / Android │ │
│ │ analyze, │ │ deps) │ │ │ │
│ │ wallet, │ │ │ │ │ │
│ │ send) │ │ │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
技术栈
| 层 | 技术 |
|---|---|
| 移动端 | React Native 0.85.2、React 19.2.3、TypeScript 5.8 |
| 导航 | React Navigation v7(bottom-tabs、native-stack) |
| 样式 | NativeWind v4、TailwindCSS 3.4、设计令牌系统 |
| 状态 | Zustand 5、MMKV(持久化)、React Native Keychain(机密信息) |
| 动画 | Reanimated 4.3、React Native Worklets、Gesture Handler |
| 桥接 | uniffi-bindgen-react-native 0.31.0-2 |
| 语言 | Rust(edition 2024) |
| EVM | revm v36、alloy-evm v0.30 |
| Ethereum | alloy-rs v1.8(provider、signer、primitives、consensus) |
| 加密 | BIP39(m/44'/60'/0'/0/0)、AES-256-GCM、Argon2id、secp256k1 |
| HTTP | Axum 0.8、Tower HTTP(CORS、trace) |
| 异步 | Tokio、Futures |
| 序列化 | Serde、Serde JSON |
| CLI | clap v4 |
| 日志 | tracing、tracing-subscriber |
快速开始
移动应用
前置条件: Node.js ≥ 22.11、Android SDK(用于 Android)或 Xcode + CocoaPods(用于 iOS)。
# Install dependencies
cd mobile && npm install
# Start Metro bundler
npx react-native start --port 8081
# Android (separate terminal)
cd android && ./gradlew app:installDebug -PreactNativeDevServerPort=8081
# Windows: .\gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
# iOS (macOS only, separate terminal)
cd ios && pod install && cd .. && npx react-native run-ios
用于 Android 实体设备:
adb reverse tcp:8081 tcp:8081
移动端详细文档: 请参阅
mobile/README.md,了解引导流程、桥接接口、DEV 逃生方式以及 Android/Windows 特定说明。
Rust 工作区
# Run all tests
cargo test --workspace
# Build CLI
cargo build -p rustok --release
# Run API server locally
cargo run -p rustok-api
CLI 示例
交易安全分析
# Decode ERC-20 approve calldata
rustok decode \
--to 0xdAC17F958D2ee523a2206206994597C13D831ec7 \
--data 0x095ea7b3000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000f4240
# Full security analysis (parse + rules + verdict)
# Exit codes: 0=allow, 1=warn, 2=block
rustok analyze \
--to 0xdAC17F958D2ee523a2206206994597C13D831ec7 \
--data 0x095ea7b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
钱包操作
# Generate a new encrypted wallet
rustok wallet new --password "your-secure-password"
# Check unified balance across Ethereum, Arbitrum, Base, Optimism, zkSync
rustok wallet balance 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
# Show wallet info from keystore file
rustok wallet info --keystore 0xabc...def.json --password "your-password"
# Send ETH (txguard security check mandatory, testnet by default)
rustok wallet send --keystore wallet.json --password "pwd" --to 0xd8dA...6045 --amount 0.1
安全规则(txguard)
| 规则 | 严重程度 | 触发条件 |
|---|---|---|
unlimited_approval | 警告 | approve(spender, type(uint256).max) |
set_approval_for_all | 警告 | setApprovalForAll(operator, true) |
permit_to_unknown | 危险 | 向未知 spender 发起 EIP-2612 permit |
permit_unlimited | 警告 | value == U256::MAX 的 Permit |
known_scam | 禁止 | 地址位于诈骗数据库中 |
unknown_function | 警告 | 无法识别的函数选择器 |
value_with_calldata | 警告 | 合约调用时发送 ETH |
send_to_contract | 信息 | 向合约地址转账 |
支持的链
| 链 | ID | 状态 |
|---|---|---|
| Ethereum | 1 | 活跃 |
| Arbitrum One | 42161 | 活跃 |
| Base | 8453 | 活跃 |
| Optimism | 10 | 活跃 |
| zkSync Era | 324 | 活跃 |
| Sepolia | 11155111 | 测试网 |
txguard API
用于交易安全分析的公共 API(rustok-api、Axum)。可自托管——参见 deploy/。
| 端点 | 方法 | 描述 |
|---|---|---|
/health | GET | 健康检查 |
/check-address | POST | 通过 GoPlus 检查地址安全性(恶意标记、风险等级、风险项) |
/decode | POST | 解码并分析原始 EVM 交易(操作、风险评分、发现项) |
# Check address
curl -X POST https://your-rustok-api-host/check-address \
-H "Content-Type: application/json" \
-d '{"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7"}'
# Decode transaction
curl -X POST https://your-rustok-api-host/decode \
-H "Content-Type: application/json" \
-d '{"to": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "data": "0x095ea7b3000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000f4240"}'
通过 Docker + Caddy 部署在 185.197.195.191(deploy/)。
测试
517 tests, 0 failures
- Rust workspace: 231 tests (txguard, core, types, mobile-bindings)
- Mobile (Jest): 286 tests (components, stores, hooks, screens)
提交前检查:
# Rust
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
# Mobile
cd mobile && npm run typecheck && npm run lint && npm run test
项目布局
rustok/
├── mobile/ # React Native app (primary UI)
│ ├── src/
│ │ ├── screens/ # Wallet, Activity, TxGuard, Settings, Onboarding
│ │ ├── components/ # Design system primitives
│ │ ├── navigation/ # AppShell, navigators
│ │ ├── stores/ # Zustand + MMKV state
│ │ ├── hooks/ # Selectors and logic
│ │ ├── lib/ # Bridge, formatting, explorers
│ │ └── theme/ # Design tokens
│ ├── android/ # Gradle project
│ └── ios/ # Xcode project
│
├── packages/
│ └── react-native-rustok-bridge/ # uniffi JS ↔ Rust bridge package
│
├── crates/ # Rust workspace
│ ├── txguard/ # Transaction security engine
│ ├── core/ # Wallet logic (keyring, provider, router, send)
│ ├── types/ # Shared DTOs
│ ├── api/ # Axum HTTP server
│ ├── cli/ # CLI binary
│ └── rustok-mobile-bindings/ # uniffi FFI exports
│
├── deploy/ # Docker + Caddy deployment
└── docs/ # Architecture, phase handoffs, incident reports
许可证
Rustok 采用双重许可:
- AGPL-3.0-or-later — 开源。只要遵守 AGPL 条款,即可免费用于任何用途,包括向用户提供衍生作品和可通过网络访问的服务的源代码。
- 商业许可证 — 对于无法遵守 AGPL-3.0 的用途(例如,以闭源方式在 Apple App Store 或 Google Play 分发,或捆绑到专有产品中),可向版权持有人获取。
有关许可、商标和贡献条款的概要,请参见 NOTICE.md。
商标
“Rustok”和“txguard”是 Temrjan Khasenov 的商标。源代码采用 AGPL-3.0 许可,但这些标识不受该许可约束——参见 TRADEMARK.md。
视觉素材
徽标、图标和品牌图片不受 AGPL-3.0 许可约束。参见 ASSETS-LICENSE.md。
贡献
贡献按照开发者原创证书(DCO)接受。参见 CONTRIBUTING.md。
版权所有 (c) 2025-2026 Temrjan Khasenov。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。