evefrontier/evevault
GitHub: evefrontier/evevault
基于零知识证明(zkLogin)的 Sui 区块链 Chrome 浏览器扩展钱包,通过 OAuth 认证派生链上地址并实现 dApp 无缝集成。
Stars: 21 | Forks: 6
# EVE Vault Wallet
EVE Vault Wallet 是一个使用 WXT 和 React 构建的 Chrome MV3 扩展和 Web 应用。它实现了 Sui Wallet Standard,允许 dApps 发现并连接到用户钱包。用户认证支持通过 Chrome 的 `identity` API 进行 **EVE Frontier FusionAuth**。登录后,将派生出一个 [Sui zkLogin](https://docs.sui.io/concepts/cryptography/zklogin) 地址,并通过 wallet standard 暴露给 dApps。
## 功能
- EVE Frontier OAuth (FusionAuth)
- zkLogin 地址派生 (Enoki)
- 用于 dApp 发现的 Wallet Standard 实现
- 使用 zkLogin 和私钥进行交易签名(仅限 localnet)
- 多网络支持(Devnet、Testnet、Localnet)
- 多租户 FusionAuth 配置
- 使用 Zustand 管理客户端状态
- Chrome 存储持久化(扩展)
## 工作原理
EVE Vault 使用 **zkLogin** 从您的 OAuth 凭证 (FusionAuth) 创建一个 Sui 钱包地址。您的钱包地址是通过零知识证明从您经过身份验证的身份中通过密码学方式派生出来的。
在 Sui Localnet 上,签名使用本地 Ed25519 密钥对(在应用中导入),这使开发/测试流程保持简单。
有关详细的技术信息,请参阅[架构文档](https://github.com/evefrontier/architecture-decision-log/blob/main/adr/0008-zklogin-implementation-auth-flow.md)和 [Sui zkLogin 文档](https://docs.sui.io/concepts/cryptography/zklogin)。
## 下载
**最新扩展程序 (Chrome):**
[https://github.com/evefrontier/evevault/releases](https://github.com/evefrontier/evevault/releases)
**最新扩展程序 ZIP** (CI,稳定文件名):
[releases/latest/download/eve-vault-chrome.zip](https://github.com/evefrontier/evevault/releases/latest/download/eve-vault-chrome.zip) — 请参阅 [docs/RELEASE_EXTENSION.md](./docs/RELEASE_EXTENSION.md)。
**Web 应用:**
[https://evevault.evefrontier.com/](https://evevault.evefrontier.com/)
## 环境要求
- Node.js 22+
- [Bun](https://bun.sh/)(本仓库使用的包管理器)
- 启用了 PKCE 的 FusionAuth 公共 OAuth 应用程序
- Enoki API key(zkLogin 地址派生)
## 快速开始
### 1. 安装依赖
```
bun install
```
### 2. 环境配置
在**仓库根目录**创建一个 `.env` 文件(WXT 会从 monorepo 根目录加载环境变量)。OAuth client ID 和租户 URL 在 `packages/shared/src/utils/constants.ts` 中配置。
```
# FusionAuth
VITE_FUSIONAUTH_REDIRECT_URI=
# Enoki
VITE_ENOKI_API_KEY=
# Extension(当您的 build / OAuth redirect 需要时)
EXTENSION_ID=
```
### 3. OAuth 提供程序设置 (FusionAuth)
1. FusionAuth 管理后台 → Applications → 你的应用 → OAuth
2. 添加重定向 URI:`https://.chromiumapp.org/`(扩展流程)
3. 使用 authorization code + PKCE 将应用程序配置为公共 OAuth 客户端
4. 启用 scopes:`openid`、`profile`、`email`
### 4. 开始开发
```
# 仅 Extension
bun run dev:ext
# Extension 和 web apps
bun run dev
```
### 5. 在 Chrome 中加载扩展程序
1. 打开 `chrome://extensions`
2. 启用**开发者模式**
3. **加载已解压的扩展程序** → 选择 `apps/extension/.output/chrome-mv3`(在 `dev` 或 `build` 生成输出之后)
### 6. 冒烟测试弹窗
1. 打开扩展弹窗
2. 使用您配置的租户登录
3. 成功后,您应该会看到您的 zkLogin 地址和余额(当网络和 API 可用时)
4. 在支持的地方使用应用内的网络选择器切换网络
## 构建
```
# Extension (Turborepo)
bun run build:ext
# Web app
bun run build:web
# 两个 apps
bun run build
```
扩展产物目录:`apps/extension/.output/chrome-mv3/`
## 代码质量
### Linting 和格式化
使用 [Biome](https://biomejs.dev/) 进行格式化和 lint。
```
bun run lint
bun run lint:fix
bun run typecheck
```
为某个 workspace 运行任务,例如:
```
bunx turbo run lint --filter=@evevault/web
```
### Pre-commit (Husky + lint-staged)
暂存的 `*.{ts,tsx,js,jsx,json,css}` 文件会在提交前通过 `biome check --write` 运行(参见根目录 `package.json` 中的 `lint-staged`)。
配置:`biome.json`、`.biomeignore`、`.husky/pre-commit`。
### 测试
```
bun run test
bun run test:run
bunx turbo run test --filter=@evevault/shared
```
## 项目结构
Monorepo:Bun workspaces + [Turborepo](https://turbo.build/)。
```
evevault/
├── packages/
│ └── shared/ # Shared types, auth, wallet, UI used by web + extension
└── apps/
├── extension/ # WXT Chrome MV3 extension
└── web/ # Vite + React web app
```
## 文档
- [发布扩展程序 (CI)](./docs/RELEASE_EXTENSION.md) — GitHub Actions ZIP
- [ADR:混合 monorepo 结构](./docs/adr/001-hybrid-monorepo-structure.md)
- [故障排除](./docs/TROUBLESHOOTING.md)
- [架构 (zkLogin / 认证)](https://github.com/evefrontier/architecture-decision-log/blob/main/adr/0008-zklogin-implementation-auth-flow.md) — 外部 ADR
## 用法
### 对于 dApp 开发者
EVE Vault 通过 [Sui Wallet Standard](https://docs.sui.io/standards/wallet-standard) 注册为 **Eve Vault**。使用任何列出 Wallet Standard 钱包的技术栈(例如 `@mysten/dapp-kit`);连接或筛选名为 **Eve Vault** 的钱包。扩展程序会在允许其运行的页面中注入 provider。
### 对于扩展用户
1. 从工具栏图标打开弹窗
2. 完成您租户的登录
3. 认证通过后,钱包将对获得许可的站点可用
4. 在提供该功能时,从网络选择器切换 Sui 网络
## 已知限制
- zkLogin 的 **maxEpoch** 过期可能需要在 epoch 边界之后再次解锁/签名
## 贡献
1. 使用上方的**快速开始**和**构建**来获得一个可用的代码树
2. 阅读 [ADR:混合 monorepo 结构](./docs/adr/001-hybrid-monorepo-structure.md) 了解布局决策
3. 查看[故障排除](./docs/TROUBLESHOOTING.md) 了解常见的扩展和环境问题
## 致谢
- [WXT](https://wxt.dev/) 和 React
- Sui Wallet Standard: [@mysten/wallet-standard](https://sdk.mystenlabs.com/dapp-kit/wallet-standard)
- zkLogin: [@mysten/sui](https://docs.sui.io/concepts/cryptography/zklogin)
- [Zustand](https://zustand-demo.pmnd.rs/)
- [oidc-client-ts](https://github.com/authts/oidc-client-ts) + FusionAuth
- [Enoki](https://docs.enoki.mystenlabs.com/) (Mysten Labs)
标签:React, Sui, Syscalls, Web3, 内核驱动漏洞利用, 区块链钱包, 浏览器扩展, 自动化攻击, 零知识证明