概要
- 如果一个 transaction 包含了一个 time-window,那么这个 transaction 只能在这个 time-window 里被提交
- Notary 具有控制发生的时间的权利,当在 time-window 之外的时候,notary 可以拒绝提交 transaction
- Time-window 可以有开始和结束时间,或者只有两者之中的一个
分布式系统中的时间 Time in a distributed system
Notary 也可以作为时间戳的验证者,在它确认一笔交易前,需要确保这笔交易是发生在指定的时间窗里。
为了让一个时间窗有意义,交易的提出者必须要明确指出交易必须要在某个时间窗内发生。交易的一方可以获得一个时间窗签名,来证明一些事件是在某个时间点前发生的,还是按时发生的,还是之后发生的。
在创建交易的一方和 notary 之间是无法实现时间的同步的。这并不仅仅是因为物理或者网络的延迟,还会因为在插入命令和获得 notary 签名之间可能会发生很多其他的步骤(比如发送交易到涉及到的其他节点,请求人工的审批等)。所以交易被发送到 notary 的时间和交易创建的时间可能会不同。
时间窗 Time-windows
因为这个原因,交易中涉及到的时间会被制定为一个时间窗,而不是一个绝对的时间。在一个分布式系统中是永远不会有“真实的时间”的,只有一个大概的时间。时间窗可以是开放的(比如在某个时间点后,或者某个时间点之前)或者是一个闭合的范围。
通过这种方式,我们表达了我们的想法,就是“当前的时间”永远都是未知的。甚至当在某个时间之前和之后都被包含的时候,交易也可能会在那个时间窗中的任何时间发生。
通过在一端创建一个关闭或者开放的范围,我们允许用以下的方式生成时间窗模型:
- 一笔交易在指定时间之后的某个时间发生(比如在一个终止事件之后)
- 一笔交易在指定时间之前的任何时间发生(比如破产事件之前)
- 一笔交易在指定时间前后的某个时间发生(比如在指定的某一天)
如果一个时间窗需要被转换成一个绝对的时间(比如为了显示的原因),这里会有一个 utility 的方法来计算一个中间点时间。