# 时间锁与多签名钱包

By [un.Block](https://paragraph.com/@un-block) · 2021-10-09

---

> 我们在合约中的资产真的安全吗？

### **⚠️ 中心化风险**

很多时候，我们都能看到由中心化风险的智能合约，这类智能合约通常存在一个管理员 owner ，管理员有权执行一些关键性的操作，例如调整资金费率，但他也可以执行危险的操作，例如从合约中抽取资金。这样的一个管理员就像双刃剑，他可以更好的管理合约内资产，但他也能够窃取我们在合约中的资产，一旦不被限制的管理员作恶，或是密钥被盗，后果将不堪设想。

因此，我们应该采取一些手段来限制管理员的关键操作，保护我们珍贵的代币。

### **时间锁**

![](https://storage.googleapis.com/papyrus_images/642e9ca20114c53bb39523946f4cf5e5c9020d5fd2b138e6ebc56f1628be8f2b.jpg)

时间锁是在合约代码层面上限制管理员的关键操作，给用户足够的反应时间来应对突发的危机，如 rug 和代币盗窃。

假如没有 TimeLock 机制，管理员的各种操作会被马上执行，TimeLock 机制但出现，将一项操作分成了两个阶段：等待和执行。

我们以 [_Compound_](https://link.zhihu.com/?target=https%3A//github.com/compound-finance/compound-protocol/blob/master/contracts/Timelock.sol) 的 TimeLock 作为分析例子

当管理员想执行一项新的操作时（有新的 transaction），操作会被加入到等待队列中

![](https://storage.googleapis.com/papyrus_images/f0e759d11afb5968a4089b0ebdc77d2e750e0ace5473e24f03af2502eb0dcebb.jpg)

在这个函数中 eta 代表了预期执行的区块时间， eta 必须大于当前时间 + 时间锁的延迟时间，换句话说，操作要等到 eta 后才能执行。

时间锁结束后，管理员就可以执行相应的操作。

![](https://storage.googleapis.com/papyrus_images/c12cf2a0c6c78c86fc4dfc172ca25a9404e2371c248c8a030d9af007c7eda9ce.jpg)

在执行操作前，函数会对操作的哈希值进行检查，确保即将执行的操作是已经存在于队列中的，以防暗渡陈仓；同时会检查当前时间是否已经过了解锁时间，然后再执行操作。

假如这一项操作是 rug，或者跑路，由于时间锁的存在，这些危险操作无法立即被执行。时间锁给用户争取了宝贵的资金撤离时间。

**多签名钱包**
---------

通常，我们使用的钱包都是单签名钱包，执行操作前只需要我们本人进行签名批准。但对于管理员来说，单签名钱包是危险的，万一密钥泄漏，黑客可以使用管理员钱包进行各种可怕的操作，对项目造成重大损失。

多签名钱包可以防止灾难的发生，即使黑客盗取了其中一个管理员的钱包密钥，但他也难以开展盗窃行动。

多签名钱包有以下特点：

*   所有管理员都能看到钱包资金和全部交易记录
    
*   执行操作需要至少一个或多个管理员的签名许可，这是多签名机制的核心
    
*   每个管理员都有独特的助记词，一个管理员的助记词丢失，可能造成签名不足的情况，操作无法执行
    

多签名钱包的机制有许多种，比较下面我们和大家分享比较简单的两种：

1.  **3-3 钱包**：由 3 个（或多个）管理员共同管理，每一项操作都需要 3 个管理员（全部管理员）共同签名。这种机制是最安全的，但使用较为麻烦，要求每个管理员都保管好密钥
    
2.  **2-3 钱包**：由 3 个（或多个）管理员共同管理，每一项操作都需要 2 个以上的管理员（过半数管理员）共同签名。这类机制更为灵活，不需要全部管理员的签名也能执行操作，但安全性不如第一种
    

**结语**
------

在进行 DeFi 投资前，我们鼓励大家去浏览一下合约代码，检查是否存在中心化风险，是否存在时间锁的机制来防止危险操作，以及项目方的管理员钱包是否安全，是不是多签名钱包。简单的安全检查可能会耗费你的时间和精力，但别忘了，这关乎着你的巨额资产。

### **相关阅读：**

*   [_Compound 的 TimeLock 代码_](https://link.zhihu.com/?target=https%3A//github.com/compound-finance/compound-protocol/blob/master/contracts/Timelock.sol)
    
*   [_What is a Multisignature (Multisig) or Shared Wallet?_](https://link.zhihu.com/?target=https%3A//support.bitpay.com/hc/en-us/articles/360032618692-What-is-a-Multisignature-Multisig-or-Shared-Wallet-)

---

*Originally published on [un.Block](https://paragraph.com/@un-block/PY1fJtLcDc0cA3b6zK8O)*
