un.Block

Posted on Oct 09, 2021Read on Mirror.xyz

时间锁与多签名钱包

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

⚠️ 中心化风险

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

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

时间锁

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

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

我们以 Compound 的 TimeLock 作为分析例子

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

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

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

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

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

多签名钱包

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

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

多签名钱包有以下特点:

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

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

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

结语

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

相关阅读: