白皮书

概要

Vela 是一个面向以太坊及其他 EVM 网络的自托管智能合约钱包。每个钱包都是一个未经修改的 Safe v1.4.1 账户,通过 ERC-4337 运行,由最多七把通行密钥控制——这些 WebAuthn P-256 钥匙保存在你的设备、你的密码管理器或硬件安全密钥里。没有助记词。

Vela 这家公司从不持有你的钥匙,在你的 Safe 上也没有任何角色,所以它自己无法动用、冻结或没收 你的资金。但请你签名的软件是 Vela 编写并提供的——这正是下面的威胁模型重要的原因。各个 App、 负责提交交易的中继以及配套服务都是开源的,每一项你都能自己运行一份。简而言之,你需要信任的是:合约、保存你钥匙的认证器、你用来签名 的那个 App 的代码、你的通行密钥所属的域名,以及你让 App 连接的那些服务。

为什么要做 Vela

  • 助记词钱包把一个 12 到 24 个单词的秘密摆在每个用户面前:单点故障,也是永远的钓鱼目标。
  • 托管钱包去掉了助记词,代价是把资金交给别人保管。
  • 依赖某一家公司服务器和闭源代码的通行密钥钱包,去掉了助记词,但公司一旦离场,你就被困住。
  • 盲签——批准你看不懂的数据——仍然很常见,也是钱包被盗的途径之一。

Vela 想要的是通行密钥的便利,同时不带上述任何一种依赖:标准账户、开放代码、可替换的服务, 以及签名前就能读懂的交易。

设计原则

  1. 自托管,没有例外。钥匙由你的认证器生成和保管。Vela 的服务永远看不到它们;它们能看到 什么,列在“隐私”一节。
  2. 标准合约,不做修改。通往你资金的路径上,没有一个合约是 Vela 写的。
  3. 验证,而不是信任。App 和服务代码公开;服务可以自行部署。
  4. 先解码再签名。解不开的内容会带有明确的盲签警告。
  5. 少做一点。钱包负责收款、发送,以及为你选择的 dApp 签名。

架构

Vela App——网页版、浏览器扩展、桌面版(macOS/Windows/Linux)、iOS、Android
  一个共享的 Rust 核心(规则、密码学、ABI、清晰签名)+ 各平台原生外壳
  • 构造 UserOperation,并告诉你它做什么
  • 请你的钥匙生成 WebAuthn 断言
        │  签好名的 UserOperation(含手续费)
        ▼
中继(vela-relay,可自行部署)
  • 报价、先垫付 gas、提交 handleOps
  • 无法改动操作内容
        ▼
EVM 链
  EntryPoint v0.7 → 你的 Safe v1.4.1 → Safe 4337 模块
  Safe 通行密钥模块借助 EIP-7951 / RIP-7212 预编译验证 P-256 签名

配套服务全部开源:把新钱包登记到链上注册表并回答查询的公钥索引、链数据目录,以及 汇率源。见自托管指南。

账户

你的钱包是一个 Safe v1.4.1 代理合约(SafeL2 实现),启用 Safe 的 4337 模块 v0.3.0 作为模块和 fallback handler,通过 EntryPoint v0.7 运行。它的所有者是 Safe 通行密钥模块 v0.2.1 里的签名器:第一把钥匙由共享签名器验证,其余每把各由 Safe 工厂创建的签名器合约验证。 阈值为 1。

地址是确定的、反事实的:在部署任何东西之前,就用 CREATE2 从包含每一把初始钥匙的 Safe 初始化数据算出来,在每条网络上都相同。你马上就能往这个地址收款;你在每条网络上的第一笔交易会 部署钱包,部署费用包含在这笔交易的手续费里。

钥匙

一个钱包有一到七把钥匙,在创建时固定。任意一把都能单独签名(1-of-n)。钥匙可以是:

  • 你正在用的设备上的通行密钥——若你允许,会由 iCloud 钥匙串、Google 密码管理器或其他密码管理器同步;
  • 扫描二维码连接的另一部手机(WebAuthn 的 hybrid 传输方式);
  • 通过 USB 或 NFC 连接、哪里都不同步的硬件安全密钥。

每次签名都要经过认证器自身的用户验证——生物识别或设备密码,或安全密钥的 PIN 加触碰。没有会话密钥。钥匙之后不能增加、 删除或替换:在钱包尚未部署的每条链上,这个地址代表的仍是最初那组钥匙,若在某条链上更换所有者, 账户就会在不同链上不一致。

通行密钥属于某个依赖方——Vela 的钥匙是为 getvela.app 创建的。浏览器只会把它们提供给 getvela.app 及其子域名上的页面,这让它们能防钓鱼;同时这也是一个依赖,本文下面会再谈到。

签名流程

  1. 构造你 Safe 的 UserOperation——其中包括一笔付给中继的转账——并进行模拟。
  2. 解码成人能读懂的意图,展示给你。
  3. 签名:认证器验证你之后,对操作哈希生成 WebAuthn 断言。
  4. 编码成通行密钥模块所需的 Safe 签名格式。
  5. 提交:把签好名的操作交给中继,由它调用 EntryPoint。
  6. 链上验证:通行密钥模块先用 EIP-7951 / RIP-7212 预编译检查 P-256 签名,Safe 才执行任何操作。没有备用 验证器;不支持该预编译的网络无法添加。

手续费

  • 中继的报酬是带内支付的:操作声明的 EntryPoint 费用为零,其中包含一笔从你的 Safe 转给中继 地址的款项。金额和收款方都写在你签名的内容里,所以你付的正是确认页显示的金额。
  • 手续费是钱包为这笔操作预留的 gas 的三倍(模拟估算上浮一半,并设下限),按钱包自己读到的 gas 价格与中继对所选速度的报价中较高者计价,最低约 0.01 美元;Tempo 上倍数为二。由于预留量 和价格都留有余量,手续费高于这笔操作的实际链上成本,在某条网络上的第一笔交易更是如此;差额归 中继。确切金额在你签名前显示在确认页上。
  • 手续费付给钱包当前所设的中继:默认是 Vela 的,也可以是任何 vela-relay 部署,包括你自己运行的。
  • 手续费用网络原生币或中继接受的美元稳定币支付(Tempo 没有原生币,用 pathUSD)。没有 paymaster:没有人替你付 gas,也没有人能借赞助策略筛选交易。
  • 如果中继在某条网络上的 gas 金库空了,钱包会在你签名前说明。没有按用户收取的押金。

详见网络与手续费。

清晰签名

调用和 EIP-712 消息用 ERC-7730 描述文件解码——常见合约内置在 App 里,其余从链数据服务获取, 或按标准代币形态匹配——最后才查询公共函数选择器数据库,并标注为“尽力解析”。剩下解不开的,会 明确提示盲签。取来的描述文件永远不会被标为已验证—— 只有 App 内置的那份、或者与内置那份完全一致的取回结果,才配得上这个词。 达到“无限”级别(2^200 及以上)的链上授权会以红色显示,并提供上限选项;除非你设上限,否则按 dApp 构造的原样发出。金额很大但有限的授权会显示警示;签名式授权无法设上限,所以只能原样签或拒绝。详见清晰签名。

网络

Vela 内置 24 条网络——Ethereum、BNB Chain、Polygon、Arbitrum、Optimism、Base、Avalanche、 Gnosis、Unichain、Tempo、Monad、World Chain、Arc、X Layer、Stable、Soneium、MegaETH、 Robinhood Chain、Mantle、Kaia、Celo、Ink、Plume 和 XRPL EVM—— 并接受任何具备它所检查的 12 个合约和 EIP-7951 / RIP-7212 预编译的 EVM 网络。 这 12 个里有两个是 Safe 的通行密钥签名器工厂和它部署出来的签名器代码, 只有多把钥匙的钱包才需要;检查会把它们单独列出来报告。

安全模型

Vela 做不到的事

  • 自行动用、花费或冻结你的资金——只有你的钥匙能授权你的 Safe,Vela 在上面没有任何角色。(Vela 能做的,是发布请你签名的软件;见下面的威胁。)
  • 在你签名之后修改交易——任何改动都会让签名失效。
  • 读取你的私钥——它们留在你的认证器里。
  • 给你的钱包增加或删除钥匙。

“无法冻结”管不到的:代币本身。USDC、USDT 和大多数法币背书的代币,都允许发行方把任何地址 拉黑,包括你的。这是发行方的权力,无论你用哪个钱包都存在。自托管带给你的,是 Vela 不会成为第二个 有这种权力的一方。

你需要信任的

  • 合约:Safe、它的 4337 模块和通行密钥模块、EntryPoint v0.7,以及链上的 EIP-7951 / RIP-7212 预编译。
  • 域名:getvela.app 或其任何子域名上的页面,都可以请求你的钥匙签名。
  • 保存你钥匙的认证器,以及——对同步的通行密钥而言——其背后的 Apple、Google 或密码管理器账号。
  • 你用来签名的那个 App 的代码。是它构造交易并告诉你交易做什么。被篡改的 App 可以给你看一样 东西、让你签另一样,而认证器的弹窗分辨不出其中差别。
  • 你读取数据的 RPC 节点:说谎的节点可以显示错误的余额或错误的模拟预览。你可以设置自己的节点。
  • 链数据和汇率服务:它们提供代币列表、描述文件、可用于付手续费的代币列表,以及把法币金额换算成 代币金额所用的汇率。
  • 中继:它改不了你签名的内容,但可以延迟或拒绝、决定交易何时上链(因此可能在你的滑点范围内 抢跑一笔兑换),并设定你手续费所依据的 gas 价格,最高可达钱包自身读数的三倍。

考虑过的威胁

  • 设备丢失或被盗——小偷仍需通过认证器的验证;另一把钥匙可以恢复访问。但钥匙无法删除:如果 某把钥匙可能落入他人之手,请把资金转到新钱包,因为旧地址在每条网络上都仍可被那把钥匙动用。
  • 钓鱼——通行密钥无法被输进假网站,浏览器也只会把它提供给 getvela.app 及其子域名上的页面。
  • 恶意 dApp——由清晰签名、授权闸门,以及一条拒绝规则共同应对:从你的 Safe 调用它自己的请求—— enableModule、addOwnerWithThreshold、swapOwner、setFallbackHandler、setGuard 以及同一族的其余方法——都会被拦下,放在批量交易或 MultiSend 里也一样拦, 任何带 delegatecall 的分支和 SafeTx 类型化数据签名同样如此。 这里面任何一个,只要签一次,就会像 Bybit 那份载荷一样彻底交出账户, 所以钱包压根不会把它们拿出来让你签。
  • 后端服务被攻破(中继、索引、链数据、汇率)——没有签名能力,但有实际影响:拒绝服务、误导性 的描述文件或代币列表、改变法币金额实际转出多少的错误汇率,以及(对中继而言)上面提到的上链时机和 gas 价格。从链数据服务取来的说明,永远不会被称作已验证—— 只有 App 内置的那份、或者与内置那份完全一致的取回结果,才配得上这个词; 其余的会附上一行字,说明没有任何东西为它做过认证。每一项服务都可以替换。
  • App 分发被攻破——被篡改的网页部署、扩展更新或 App 构建,可能向你展示一笔恶意交易让你签名。 这就是 Bybit 那一类攻击。目前的缓解手段有限:App 自身的解码与授权闸门、 经过公证的 macOS 构建,以及你亲自从源码编译扩展或 App(发布包附有 SHA-256 校验值, 以及标明提交和工作流运行的 GitHub 构建溯源证明;Windows 安装包仍未做代码签名)。 可信签名器是一个不与 App 共享代码的独立签名页,可以在桌面版、 iPhone 和 Android App 里选作你的签名方式;桌面版的完整性检查遇到不匹配的页面只写进日志, 手机端还不做这项检查。
  • 域名上提供的任何内容——getvela.app 或其子域名上的任何页面,包括它加载的脚本,都可以请求 Vela 通行密钥签名,而弹窗只显示“getvela.app”。因此网站禁止自己的页面使用通行密钥,并且不在保存着密钥 的那个页面上加载统计脚本。如果域名易主,新主人还将控制哪些 App 可以使用这些通行密钥。扩展和自编译 App 自带代码,但默认情况下它们仍会从 getvela.app 下的服务获取描述文件、使用那里的服务。

恢复

创建钱包时,它的公钥和地址会发布到 Gnosis 上的一个公开注册表合约(可以复制到以太坊)。在新 设备上,你用任意一把钥匙登录;App 通过索引找到钱包,找不到时直接读取注册表,并核对这组钥匙 能否算出记录的地址。只有一把钥匙的钱包,还可以完全不依赖注册表,凭两次签名重建。

详见恢复与登录。

如果 Vela 消失了

你的资金留在链上你自己的 Safe 里。合约不依赖 Vela,Vela 运行的每一项服务都是开源的,别人也能 运行。唯一无法迁移的 是通行密钥的依赖方 getvela.app:把网页钱包放到别的域名上,得到的是另一个钱包。对于已有的钱包, Vela 浏览器扩展(经授权可以使用 getvela.app 的通行密钥)和你自己编译的 App(配合手机或安全 密钥)不依赖 getvela.app 也能继续使用。自托管指南 逐一说明了每条路及其限制。在某条链上独立访问钱包,还要求那条链支持 EIP-7951 / RIP-7212。

隐私

不需要账户、邮箱或 KYC。创建钱包时写进注册表的内容会公开:每把钥匙的公钥和凭证 ID、认证器型号、 你的钱包名称和钥匙名称、地址,以及签名后的注册数据。Vela 的索引在提交这条记录之前能看到它, 也能看到你查询名字的那些地址;Vela 的中继能看到你的地址、你提交的操作,以及你的 App 使用的 RPC 节点(包括其网址里的任何 API 密钥),并会把操作保存一段时间用于重试和排查问题。每一项服务都能看到 你的 IP 地址。网站使用不设 cookie 的统计工具。完整清单以隐私政策为准。

开源

全部采用 MIT 许可:钱包(所有 App 和核心)、中继、公钥索引、汇率服务和链数据目录。代码见 github.com/mondaylabsltd。

没有代币

Vela 没有代币,也没有发币计划。没有什么可以买、可以挖、可以炒。手续费用各网络的原生币或稳定币支付。

审计状态与局限

Safe 的合约、它的 4337 模块和通行密钥模块,以及 EntryPoint v0.7,都经过独立审计并被广泛使用。 Vela 自己的代码——各个 App、后端服务和注册表合约——没有经过独立的第三方审计,目前也没有 排期;专业审计是项目有能力出资时的目标,而不是一个有日期的承诺。在此之前,审查是非正式的:代码 公开,有能力的社区成员会阅读,也借助 AI 工具审查。这有帮助,但不等同于专业审计。请把 Vela 当作 alpha 阶段的软件来对待。详见审计与已知问题。

参考

  • ERC-4337——通过 EntryPoint 实现账户抽象
  • EIP-1271——合约签名验证
  • ERC-7730——清晰签名描述文件
  • EIP-5792——钱包批量调用(wallet_sendCalls)
  • EIP-7951 / RIP-7212——P-256 签名验证预编译
  • WebAuthn / FIDO2——通行密钥
  • Safe 智能账户 v1.4.1