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 能跑通的关键是 三层结构:
-
Provider 注入层(和 MetaMask 一样):往每个网页注入
window.ethereum,遵守 EIP-1193。dApp 调用eth_sendTransaction时,请求经 content script 转给后台。类比:装在每个网页的对讲机。 -
Background + Keyring:后台 service worker 跑 keyring 模块,管私钥(HD 助记词 / 硬件钱包 / 纯地址 watch-only),加密存 Chrome storage。这部分和 MetaMask 共享思路,没造新轮子。
-
签名前模拟引擎(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 才报错——浪费时间。
踩过的坑
- 助记词导入后以为”钱包安全了”:Chrome 扩展环境本身可能被恶意扩展污染(其他扩展也能读 storage),大额仓位仍要走硬件钱包(Rabby 支持 Ledger / Trezor),不要把”主仓”全放扩展里。
- Pre-sign Simulation 不等于”防一切”:模拟基于当前 fork 状态,状态变化(比如 sandwich 攻击改了池子价格)和恶意 hook(合约里藏的 fallback 逻辑)它看不到,提示”风险低”仍可能被宰——所以模拟是”减少 90% 钓鱼”,不是”100% 保险”。
- 自动切链是好事但也是坑:dApp 偷偷调
wallet_switchEthereumChain把你切到诈骗链上签 approve,弹窗顶部的链名要看清楚——Rabby 用的色块是”BSC 黄、ETH 蓝、Polygon 紫”,色卡不对就是警报。 - 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 全开源是它能被广泛接受的前提
延伸阅读
- 官方站:Rabby Wallet 官网(下载 + 多链列表)
- GitHub:RabbyHub/Rabby(源码 + Issue 区有大量风险讨论)
- DeBank:DeBank 多链看板(理解 Rabby 团队的基建底子)
- 视频:Bankless — Rabby vs MetaMask(DeFi 用户视角对比)
- 安全报告:Trail of Bits — Browser Wallet Security(理解扩展钱包通用攻击面)
- EIP-1193 标准:EIP-1193 Ethereum Provider JavaScript API
- metamask —— 装机量最大的 EVM 钱包,Rabby 的对标
- remix-ide —— 浏览器 IDE,部署合约时也能选 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 与钱包之间的加密对讲机