MTP(中位时间过去)——比特币的网络时钟
一句话定义: 比特币用最近 11 个区块时间戳的中位数作为「网络时间」——以及它如何阻止矿工操纵时间锁交易。
**MTP(Median Time Past,中位时间过去)**是之前 11 个区块头时间戳的中位数。它被用作比特币中基于时间的共识规则的「当前网络时间」参考,取代容易被操纵的单个区块时间戳。
MTP 解决的问题:矿工对区块时间戳有有限但真实的裁量权。协议允许区块时间戳偏离真实时间最多约两小时(边界由之前的区块决定)。单个矿工可以把时间戳往前推,操纵基于时间的逻辑——比如让时间锁输出比存款人 intended 更早可花费。
MTP 如何解决:取前 11 个区块时间戳的中位数,网络得到一个这样的值:
- 抗单个矿工操纵。 一个矿工设一个离谱的时间戳,对中位数影响甚微。
- 贴近真实时间。 11 个诚实矿工时间戳的中位数很好地近似真实时间,只有很小的偏差。
- 单调递增。 新区块到来时 MTP 只能向前走,提供了一个稳定的单调时钟。
MTP 用在哪里:
- BIP 113 时间锁。 基于时间的 nLockTime 和 CLTV 判定以 MTP 为参考,而非当前区块的时间戳。
- **BIP 68 相对时间锁**与 CSV。
- 其他各种对时间敏感的共识规则。
对大多数用户,MTP 是隐形的。对构建时间锁结构的协议设计者,它就是比特币内部实际使用的「时间」的精确定义。把区块时间戳当真实时间会得出错误答案;把 MTP 当真实时间则基本正确。
11 个区块的窗口是个甜蜜点:大到足以抗操纵,小到足以贴近真实时间。相对真实时间的平均滞后约 60 分钟(窗口的一半)。
相关词条: 绝对时间锁(Absolute Locktime) · BIP 113