清晰签名

很多钱包遇到不认识的合约,仍然只显示原始数据;「盲签」——批准你其实读不懂的调用——是钱包 被掏空的途径之一。Vela 的答案是清晰签名:在你签名之前,尽可能把这笔交易解码成你看得懂的东西。

你会看到什么

不是原始 calldata,而是:

  • 意图 —— 这笔交易在做什么:转账、授权、兑换 等等。
  • 实质内容 —— 涉及的金额和地址;代币金额按真实单位显示,收款方只要有名字 就解析成名字。
  • 细节 —— nonce、截止时间和原始 calldata,需要时随时展开,而不是劈头盖脸糊你 一脸。
  • 风险提示,用颜色标识,让危险操作一眼就能看出来。

它是怎么做到的(ERC-7730)

Vela 用 ERC-7730 描述符来解码合约调用和 EIP-712 结构化数据——描述符是一份份小而可共享的定义, 说明某个合约的函数到底是什么意思。

Vela 按这个顺序寻找描述符:

  1. App 内置——常用合约的描述符:Uniswap、PancakeSwap、SushiSwap 的路由合约,WETH, Aave v3 资金池,1inch,Lido 和 wstETH,以及 Seaport。
  2. 从 Vela 的链数据服务获取,它转载公开的 ERC-7730 注册表。
  3. 标准形态——ERC-20 代币、ERC-721 和 ERC-1155 NFT、ERC-4626 金库、ERC-2612 permit—— 所以日常操作大多仍然解得开。

已验证只留给第一种来源。只有当这段说明出自你正在运行的这个 App 内置的描述符, 或者出自链数据服务、且与内置的那一份完全一致(这就证明它在传输途中没有被动过), 交易才会被标为已验证。服务器给出的其他内容照样解码、照样显示, 只是会附上一行字,说明它来自描述符服务、没有任何东西为它做过认证。 那项服务不带签名,可信程度取决于运行它的人—— 这也是你可以自己运行一份的原因之一。

代币金额按该代币链上真实的小数位来格式化。如果 Vela 无法确认某个代币的小数位, 会先按 18 位显示金额并标注为未验证,不让一个可能错误的数字看起来像是核实过的。

风险等级

每一笔解码后的交易都会得到一个风险等级,好让危险的模式跳出来:

  • 注意 —— 授权和 permit:你正在交出花钱的权限。
  • 危险 —— 真正有风险的那些,比如无限额度的代币授权。
  • 质押、存入这类日常操作,风险等级更低。

当 Vela 解不开一个调用

当没有 ERC-7730 描述符、但这个函数出现在公开的选择器 数据库里时,Vela 会做一次通用解码,并在一条「注意」横幅下标注为尽力而为—— 解出来了,但没有被验证。如果连这一步都失败,或者 Vela 只能解开交易的一部分,它 不会假装自己看懂了。

为什么这件事重要

自托管意味着没有人能替你撤回一笔糟糕的交易。防线不是客服——而是在批准之前 就搞懂你批准的是什么。清晰签名就是 Vela 为此所做的努力,它也有局限:它的可信程度取决于展示它的 那个 App,这就是独立核对重要的原因。它在 Vela 安全模型里的位置, 见白皮书。