时间锁:在特定时刻之前无法转移的币

·阅读 4 分钟·作者:SSP Editorial Team
SSP Academy 封面:区块链上的时间锁

时间锁:在特定时刻之前无法转移的币

加密货币的大部分安全机制关注的是谁可以花费:哪些密钥、需要多少个签名。时间锁加入了第二个维度:何时。带有时间锁的币在设定的日期或区块高度之前无法花费,无论密钥掌握在谁手中。

这听起来像是一个小众功能,但时间锁在幕后支撑着加密世界的许多部分:支付通道、代币解锁计划、遗产规划以及治理延迟。理解时间锁,也能解释你在大多数钱包中都会遇到的一项设计选择。

两种时间

区块链用两种方式衡量时间,时间锁两种都会用到:

  • 绝对时间。“不早于 2030 年 1 月 1 日”或“不早于第 1,000,000 个区块”。在那一刻之前币被锁定,之后便恢复正常。
  • 相对时间。“在收到这枚币之后的 1,000 个区块内不可花费。”计时从币被创建时开始,因此每笔存入都有各自的倒计时。

绝对锁适合固定日期,例如解锁计划中的初始锁定期。相对锁适合诸如“如果 30 天内没有其他人采取行动,那么另一把密钥就可以花费”这样的规则,这种模式常见于恢复和继承方案中。

比特币的做法

比特币在两个层面上提供时间锁:

  • **交易层面。**每笔交易都有一个 nLockTime 字段。如果它被设为未来的某个时间或区块,网络在那之前不会接受这笔交易。它锁定的是交易,而不是币本身:持有密钥的人仍然可以另外签署一笔不带锁的交易。
  • **脚本层面。**两个操作码 OP_CHECKLOCKTIMEVERIFY(绝对)和 OP_CHECKSEQUENCEVERIFY(相对)可以让地址自身的花费规则要求必须经过一段时间。它们锁定的是币本身:无论由谁签名,任何交易都无法提前花费它。

真正强大的是脚本层面的版本。借助它们,可以构建拥有多条花费路径的地址,比如“任何时候由这 3 把密钥中的 2 把签名,或者一年后由这把单独的备用密钥签名”。

智能合约链的做法

在以太坊及类似的链上,时间锁只是合约逻辑:合约将当前区块时间与存储的截止时间进行比较,在截止时间之前拒绝执行操作。这让时间锁非常灵活:按月释放代币的解锁合约;在投票通过与执行之间强制设置等待期的治理系统;以及提前数天公布变更、让用户有时间作出反应的可升级合约。

最后这种用法对安全很重要。在“某个管理员密钥做出了决定”与“它真正生效”之间留出延迟,能让所有人有时间发现恶意变更;对于任何合约的升级权限,这都是值得追问的问题之一。

时间锁的用途

  • **遗产继承与紧急访问。**一条只有在长期无活动之后才会开启的备用路径,可以让继承人取回资金,而在你仍然活跃时他们无法动用这些资金。遗产规划往往就归结为这类规则。
  • **恢复密钥。**一把可以单独行动、但只能在延迟之后行动的恢复密钥,即使被盗,危险也小得多:所有者有时间抢先转移资金。
  • 支付通道。Lightning Network 依靠相对时间锁,为每一方留出对作弊企图提出异议的时间窗口。
  • **代币解锁与承诺。**将代币锁定到某个日期,使承诺由链来强制执行,而不是依靠信任。

需要权衡之处

时间锁并非毫无代价:

  • **它们也会把你锁在门外。**锁无法区分攻击者和紧急情况。如果你在日期到来之前需要用钱,这笔钱依然处于锁定状态。
  • **复杂性是有成本的。**带有多条路径的脚本更难构建、审计和恢复。时间锁脚本中的一个错误可能让资金永远无法花费,而且可能要到多年以后锁到期时才会暴露出来。
  • 相对锁需要维护。“无活动满一年后”这类方案通常要求所有者定期刷新自己的币,以重新开始计时。
  • **钱包支持参差不齐。**只有当你日后用来恢复的软件能够识别带时间锁的地址时,它才真正有用。

时间锁与 SSP

目前 SSP 的金库是纯粹的多重签名:一组 M-of-N 密钥,没有任何基于时间的花费条件。只要两把密钥都同意,你的 2-of-2 金库随时都可以花费,否则永远无法花费。这是一个刻意的权衡:简单的脚本易于验证,易于用标准工具恢复,也不存在会在多年后让你措手不及的时钟。

SSP 中的恢复依靠你的密钥及其备份来完成,而不是依靠带时间延迟的路径。不同多重签名配置的比较介绍了对大多数人重要的选择;对于团队而言,SSP Enterprise 金库允许你选择需要多少位签名者批准。

坦诚的总结

时间锁让区块链能够强制规定币何时可以转移,而不仅仅是谁可以转移。它们让遗产规划、恢复密钥和支付通道成为可能,而无需信任任何人会耐心等待。

它们也增加了复杂性,而且可能像阻挡攻击者一样牢牢地把所有者挡在门外。谨慎使用时,时间锁是加密世界中最有用的工具之一,而最简单的脚本往往依然是最安全的。

分享本文

相关文章