2.4 KiB
order
| order |
|---|
| 2 |
Block Time
Tendermint provides a deterministic, Byzantine fault-tolerant, source of time, with bounded relation with the real time.
Time in Tendermint is defined by the Time field present in the header of
committed blocks, which satisfies the following properties:
-
Monotonicity:
Timeis monotonically increasing. That is, given a headerH1of a block at heighth1and a headerH2of a block at heighth2 > h1, it is guaranteed thatH1.Time < H2.Time. -
Time-validity: the
Timeof a block was considered valid, according with the timely predicate, by at least one correct validator. This means that correct validators have attested that the blockTimeis compatible with the real time at which the block was produced.
The evaluation of the timely predicates involves comparing the Time
assigned to the block by its proposer with the local time at which a validator
receives the proposed block.
If the block Time and the block receive time are within the same time window,
the validator accepts the proposed block; otherwise, the block is rejected.
The time window boundaries are defined by two consensus parameters:
-
Precision: the acceptable upper-bound of clock drift among all the validators on a Tendermint network. More precisely, the maximum acceptable difference on the time values simultaneous read by any two correct validators from their local clocks. -
MessageDelay: the maximum acceptable end-to-end delay for delivering aProposalmessage to all correct validators. This is a fixed-size message broadcast by the proposer of block that includes the proposed block uniqueBlockIDandTime.
Validators are therefore assumed to be equipped with synchronized clocks.
The Precision parameter defines the worst-case precision achieved by the
adopted clock synchronization mechanism.
For the sake of time validity, this parameter essentially restricts how much
"in the future" a block Time can be, while the MessageDelay parameter mainly
restricts how much "in the past" a block Time can be.
For additional information on how block Times are produced and validated, refer to the Proposer-Based TimeStamps (PBTS) spec.