一句话版本
以太坊上最常见的地址叫 EOA(外部账户),它由一把私钥直接控制:谁有私钥,谁就能做任何事,没有任何规则能拦住。所以在 EOA 上,所有风控都只能"提醒",用户或者偷到私钥的人可以绕开任何界面直接转账。 智能合约钱包(如 Safe 多签)把"谁能动钱、动多少、多久之后生效"写成链上代码。规则在链上执行,丢一把钥匙也转不走钱。这是从"劝阻"走向"强制"的唯一途径。
全文分三层:
- 通俗理解:一把钥匙的保险箱和带规矩的保险库
- 实际用处:Safe、ERC-4337、EIP-7702,以及它们的局限
- 原理与工程要点:多签、Guard 与模块、时间锁、社交恢复
第一层:通俗理解
1.1 一把钥匙的保险箱
EOA 就像一个只有一把钥匙的保险箱:
- 钥匙在你手里,你想取多少就取多少;
- 钥匙被偷了,小偷也想取多少就取多少;
- 银行柜台(钱包界面)可以提醒你"这笔有风险",但小偷根本不会去柜台,他直接拿钥匙开箱。
所以在 EOA 上做的任何风控,本质上都是劝阻。
1.2 带规矩的保险库
智能合约钱包是一个由代码管理的保险库:
- "需要 3 个人中的 2 个同意才能开门"(多签);
- "每天最多取 1 万"(限额);
- "只能转给名单上的地址"(白名单);
- "大额取款登记后 24 小时才能取,期间可以撤销"(时间锁)。
这些规矩写在链上,任何人都绕不过去,包括偷到一把钥匙的小偷。
第二层:实际用处
| 方案 | 说明 |
|---|---|
| Safe(原 Gnosis Safe,2018 年起) | 最主流的多签智能合约钱包,管理着大量 DAO 金库、项目方和机构的资产。支持 M-of-N 多签、Guard(交易前后检查)和模块(扩展功能) |
| ERC-4337(2023 年部署) | 账户抽象标准:不改以太坊共识,就能让智能合约钱包像普通账户一样发起交易,支持手续费代付、批量交易、用 passkey 签名等 |
| EIP-7702(2025 年随 Pectra 升级上线) | 允许普通 EOA 给自己"挂上"一段合约代码,获得智能钱包的能力,而不用换地址 |
| 社交恢复钱包 | 丢了主钥匙,可以由事先指定的几位"守护人"联合恢复,类似Shamir秘密分享的门限思想 |
但智能合约钱包不是万能的:
- Bybit(2025)用的就是 Safe 多签。多签规则本身没被绕过,但每个签名人都在被篡改的页面上签了同一笔恶意交易(见《Bybit事件与前端完整性》)。多签防的是"一把钥匙丢失",防不了"所有签名人一起被骗";
- 合约本身可能有漏洞,或者被诱导执行
delegatecall替换掉核心逻辑; - 同一个合约地址在另一条链上可能不存在,或者是别人部署的,往那条链上的这个地址转账,钱可能永远取不回来。
第三层:原理与工程要点
3.1 多签(M-of-N)
合约里存着 个所有者地址和阈值 。一笔交易要执行,必须收集到至少 个所有者对它的签名。
常见的个人配置是 2-of-3:
| 钥匙 | 放在哪 | 作用 |
|---|---|---|
| 钥匙 1 | 日常设备(浏览器或手机) | 日常签名 |
| 钥匙 2 | 一个按策略自动签名的服务器,或第二台设备 | 执行限额、白名单等策略 |
| 钥匙 3 | 离线保存(硬件钱包,放在保险柜) | 恢复用,平时不动 |
任何一把钥匙丢失或被盗,都不足以单独转走资产。
3.2 Guard 与模块
- Guard:每笔交易执行前后都会调用的检查合约,可以实现"收款地址必须在白名单""单笔不超过限额""禁止
delegatecall"等规则,不满足就让交易 revert; - 模块:拥有绕过多签直接执行交易的能力,用来实现自动化(比如定期支付)。模块的权限极大,加模块本身就是一项高风险操作。
3.3 时间锁
把大额或敏感操作分成两步:先登记,等待一段时间后才能执行,等待期间所有者可以取消。它在链上实现了冷静期:即使攻击者拿到了足够的签名,也要等过时间锁,而这段时间足够本人发现和撤销。
3.4 delegatecall 的危险
delegatecall 让当前合约以自己的身份、在自己的存储上运行另一个合约的代码。被诱导 delegatecall 一个恶意合约,等于让它随意改写钱包的存储,包括所有者列表和合约实现地址。这正是 Bybit 被盗的最后一步。安全的多签界面和 Guard 都应当对 operation = delegatecall 的交易特别警告或直接禁止。
3.5 选择
| EOA | 智能合约钱包 | |
|---|---|---|
| 风控效力 | 只能提醒 | 可以强制 |
| 单把钥匙丢失 | 全部损失 | 通常无损 |
| 恢复 | 只能靠助记词 | 可以设计社交恢复、时间锁恢复 |
| 成本与复杂度 | 低 | 部署和每笔交易都更贵;跨链要逐条部署 |
| 新的风险 | 少 | 合约漏洞、模块、delegatecall、跨链地址不一致 |
总结
| 层次 | 要点 |
|---|---|
| 直觉 | EOA 是一把钥匙的保险箱;合约钱包是带规矩的保险库 |
| 差别 | EOA 上的风控只能劝阻,合约钱包可以在链上强制 |
| 工具 | 多签、Guard、时间锁、社交恢复;ERC-4337、EIP-7702 |
| 局限 | 防不了所有签名人一起被骗(Bybit);警惕 delegatecall 和跨链地址 |