跳转到内容

Rabby Wallet — 签名前先告诉你"会变成什么样"的 EVM 钱包

是什么

Rabby 是 DeBank 团队 2021 年开源的浏览器扩展钱包,定位是 “MetaMask 替代品”,主打两件事:多链自动切换(dApp 一连就切到对应链)+ 签名前模拟(把交易丢到一个虚拟节点上跑一遍,告诉你”按这个签,你会丢什么、得什么”)。日常类比:像一个会替你试吃的助手——你点菜(签名),它先把菜端到自己嘴里尝一口(模拟),告诉你”这道菜含花生你过敏”,再让你决定吃不吃。

你访问一个 DeFi 网站想 swap 100 USDC,点签名时 MetaMask 给你看一串十六进制 calldata(看不懂),Rabby 则弹窗写:“-100 USDC, +0.0298 ETH, 滑点 0.5%, 授权给 Uniswap V3”——人话清单。

它源码 TypeScript 写,约 1.7k star,是社区里少数把”防钓鱼 / 防签名陷阱”当一等公民的钱包,用户群偏 DeFi 重度玩家。

名词三件套:Pre-sign Simulation(签名前在 fork 节点把交易跑一遍)、Approve(授权某合约花你的 token)、WatchOnly(只看不签的监控模式)。

为什么重要

不理解 Rabby 在做什么,下面这些事说不清楚:

  • 为什么”签了一笔交易钱包就被掏空”:恶意 calldata 能让你授权无限额度,签名前不模拟看不出来
  • 为什么 MetaMask 切链需要手动点而 Rabby 自动跟 dApp 走——背后是 EIP-3326(wallet_switchEthereumChain)的不同实现策略
  • 为什么 DeBank 这种”多链余额聚合”的厂能做出钱包:他们已有全套 RPC + indexer,做钱包是顺水推舟
  • 为什么 2023 年起 Rabby 成为社区里仅次于 metamask 的 EVM 钱包选择

核心要点

Rabby 能跑通的关键是 三层结构

  1. Provider 注入层(和 MetaMask 一样):往每个网页注入 window.ethereum,遵守 EIP-1193。dApp 调用 eth_sendTransaction 时,请求经 content script 转给后台。类比:装在每个网页的对讲机。

  2. Background + Keyring:后台 service worker 跑 keyring 模块,管私钥(HD 助记词 / 硬件钱包 / 纯地址 watch-only),加密存 Chrome storage。这部分和 MetaMask 共享思路,没造新轮子。

  3. 签名前模拟引擎(Rabby 的差异化):交易在弹窗给用户前,先用 fork 节点(基于 Alchemy / 自家 RPC)跑一遍 eth_call,把”这笔交易后我变什么样”算出来——token 流入流出、授权对象、合约方法名——以人话渲染。类比:超市试吃台,结账前先尝一口。

三层加起来,用户拿到的不是 calldata 黑盒,而是结构化的”风险清单”。

实践案例

案例 1:Uniswap 上 swap 看真实数字

最常见的体验场景。在 Uniswap 输入”换 100 USDC 为 ETH”,点签名时 Rabby 弹窗:

代币变化:
-100.000 USDC
+0.0298 ETH
授权对象:Uniswap V3 Router (0xE592...)
风险等级:低
gas 估算:0.001 ETH ($2.4)

逐部分-100.000 USDC 是模拟出的精确流出数;授权对象 让你确认是不是熟知合约;风险等级 来自 Rabby 内置的合约黑名单 + 启发式规则。比起 MetaMask 只显示一串 hex,这个清单让你能在签名前发现”为什么是 99 USDC?滑点比预期大”,避免静默被宰。

案例 2:Approve 一个新合约前看清额度

授权(approve)是 DeFi 的一等公民操作,也是钓鱼最爱的入口:

你将授权:USDT (0xdAC1...)
被授权方:未知合约 (0x9c8b...)
授权额度:无限(max uint256)
风险等级:高(被授权方未审计 + 无限额度)

逐部分无限额度 是合约最常用的偷懒写法(避免每次 approve 浪费 gas),但配上一个未知合约就是钓鱼信号——拒绝签名,去 Etherscan 查这个地址是什么。Rabby 会主动标红”高风险”,比 MetaMask 默认只显示 calldata 友好得多。一个简单原则:陌生合约只授权刚好够用的额度,宁可多签几次。

案例 3:用 WatchOnly 跟踪 KOL 钱包

Rabby 支持只导入地址、不导入私钥的模式(WatchOnly):

1. Rabby 弹窗 → "添加新地址"
2. 选择 "Watch-only Address"
3. 粘贴某 KOL 公开地址 0xVitalik...
4. 完成

用法:现在你能在 Rabby 主面板看这个钱包的多链余额、最近交易、持仓。比起去 DeBank 网页查,扩展一开就能看。注意 watch-only 不能签名,但作为情报收集很顺手——比如盯一个 alpha KOL 钱包,他买什么 token,你 5 秒内知道。踩坑提醒:watch-only 模式下连 dApp 时,dApp 不知道你不能签,可能正常发签名请求,最后 Rabby 才报错——浪费时间。

踩过的坑

  1. 助记词导入后以为”钱包安全了”:Chrome 扩展环境本身可能被恶意扩展污染(其他扩展也能读 storage),大额仓位仍要走硬件钱包(Rabby 支持 Ledger / Trezor),不要把”主仓”全放扩展里。
  2. Pre-sign Simulation 不等于”防一切”:模拟基于当前 fork 状态,状态变化(比如 sandwich 攻击改了池子价格)和恶意 hook(合约里藏的 fallback 逻辑)它看不到,提示”风险低”仍可能被宰——所以模拟是”减少 90% 钓鱼”,不是”100% 保险”。
  3. 自动切链是好事但也是坑:dApp 偷偷调 wallet_switchEthereumChain 把你切到诈骗链上签 approve,弹窗顶部的链名要看清楚——Rabby 用的色块是”BSC 黄、ETH 蓝、Polygon 紫”,色卡不对就是警报。
  4. WatchOnly 用错场景:你已经看到上面说的,连 dApp 后才发现签不了交易,浪费 gas 估算和注意力。WatchOnly 只用来观察,不要尝试用它”实操”。

适用 vs 不适用场景

适用

  • DeFi 重度用户(频繁 swap / approve / 跨链)——Pre-sign 模拟价值最大化
  • 多链玩家(Arbitrum / Optimism / Base / BSC 反复切)——自动切链省心
  • alpha 跟单玩家——watch-only 跟 KOL 钱包,免装第三方监控
  • 已用 metamask 但想升级体验的用户——Rabby 可双开(先迁少量资产试用)

不适用

  • 极致安全场景(千万级资产)→ 必须用纯硬件钱包配套(Ledger Live / Frame),扩展钱包始终有浏览器面攻击
  • 非 EVM 链(Solana / Bitcoin / Cosmos)→ 原生不支持,配 bitcoin-core 这类节点也不通,要换钱包
  • 服务器端签名 / 自动化交易 → Rabby 是浏览器交互工具,没 headless 模式,写脚本要走 hardhat / foundry 的 SDK
  • 完全 0 经验的新人 → Rabby 信息密度比 MetaMask 高,没看懂”approve”概念时反而更眼花

历史小故事(可跳过)

  • 2018 年:DeBank 创立,主业是多链资产看板(“我在 12 条链上各有多少钱”),积累了大量 RPC / indexer 基建。
  • 2020-2021 年(DeFi Summer):Uniswap / Compound 等爆发,普通用户被钓鱼合约 drain(钱包被掏空)的事件大量出现,社区呼吁”更安全的 MetaMask”。
  • 2021 年 7 月:DeBank 发布 Rabby 0.1,主打”签名前看清楚”的 Pre-sign Simulation。
  • 2022 年:开源到 GitHub(RabbyHub/Rabby),社区开始 PR 多链 RPC、新硬件钱包适配。
  • 2023 年:Rabby 成为 DeFi Twitter 圈推荐”标配”,DeBank 团队又出 Rabby Mobile 和 Rabby Desktop,覆盖更多场景。
  • 2024 年:Rabby 跟进 EIP-6963(多钱包发现协议),不再和其他扩展抢 window.ethereum 全局变量,对开发者更友好。
  • 2025 年:Pre-sign Simulation 引擎升级,加入”merkle proof 验证”——即便模拟节点被劫持,主链状态也能交叉验证。

学到什么

  • 签名前模拟是”用户体验级”安全——不是密码学层的革新,而是把已有信息(calldata)翻译成人话,门槛降低就是安全提升
  • 钱包差异不在”管私钥”而在”展示什么”——MetaMask 和 Rabby 的 keyring 都差不多,差别在弹窗里给用户看什么
  • 生态护城河来自基建复用——DeBank 已有多链 RPC 才能做 Rabby,凭空做钱包要先建基建,成本极高
  • 钓鱼防御是”减损”不是”消灭”——再好的模拟也防不住状态变化攻击,最终用户教育和硬件钱包仍不可替代
  • 开源是钱包的信任底座——闭源钱包没人能审 keyring 加密逻辑,社区没法复核就没法信任,Rabby 全开源是它能被广泛接受的前提

延伸阅读

关联

  • metamask —— 同类钱包,Rabby 主打”差异化体验”超越它
  • hardhat —— 本地链开发,Rabby 也能加自定义 RPC 连 8545
  • foundry —— anvil 本地链同样适用,Rabby 添加自定义网络即可
  • remix-ide —— 部署合约时弹出 Rabby 签名,模拟提示尤其有用
  • bitcoin-core —— Rabby 不支持比特币原生链
  • teku —— ETH 共识客户端,与 Rabby 不在一层但生态相邻
  • ape-framework —— Python 合约框架,开发链场景可与 Rabby 共用账户

反向链接

  • ape-framework —— Ape Framework — Python 智能合约开发一条龙
  • argent-x —— Argent X — 让账户本身就是一个合约的 Starknet 钱包
  • bitcoin-core —— Bitcoin Core — 比特币参考实现
  • foundry —— Foundry — Paradigm 出品的 Rust 合约工具链
  • hardhat —— Hardhat — Nomic Foundation 的 JS 合约框架
  • ledger-app-sdk —— Ledger App SDK — 在硬件钱包里写应用的 C 框架
  • metamask —— MetaMask — 装在浏览器里的以太坊钱包
  • optimism —— Optimism — 以太坊 L2 旗舰栈,把交易搬到便宜车道再回主网结算
  • remix-ide —— Remix IDE — 浏览器内 Solidity IDE
  • teku —— Teku — 用 Java 写的以太坊共识层客户端
  • walletconnect —— WalletConnect — dApp 与钱包之间的加密对讲机