Mavryk_raw_protocol_001_PtAtLas.Round_repr
A round represents an iteration of the single-shot consensus algorithm.
Rounds can be seen as an infinite, 0-indexed, list of durations. The durations are generated by an arithmetic progression depending on Constants_repr
.minimal_block_delay (its initial value, a.k.a the one for round 0) and Constants_repr
.delay_increment_per_round (its common difference) .
Round identifiers are non-negative 32 bit integers. This interface ensures that no negative round can be created.
type t = round
val zero : t
Round zero
val pred : t -> t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
Predecessor of the given round. Returns an error if applied to zero
, as negative round are prohibited.
val of_int32 :
int32 ->
t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
Building a round from an int32. Returns an error if applied to a negative number.
val to_int32 : t -> int32
val of_int :
int ->
t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
Building a round from an int. Returns an error if applied to a negative number or a number greater than Int32.max_int.
val to_int :
t ->
int Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
Building an int from a round. Returns an error if the value does not fit in max_int. (current 32bit encodings always fit in int on 64bit architecture though).
val to_slot :
t ->
committee_size:int ->
Slot_repr.t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
Returns the slot corresponding to the given round r
, that is r
mod committee_size
.
val encoding : t Mavryk_protocol_environment_001_PtAtLas.Data_encoding.t
Round encoding. Be aware that decoding a negative 32 bit integer would lead to an exception.
val pp : Mavryk_protocol_environment_001_PtAtLas.Format.formatter -> t -> unit
include Mavryk_protocol_environment_001_PtAtLas.Compare.S with type t := t
module Map : Mavryk_protocol_environment_001_PtAtLas.Map.S with type key = t
module Durations : sig ... end
val level_offset_of_round :
Durations.t ->
round:t ->
Period_repr.t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
level_offset_of_round round_durations ~round:r
represents the offset of the starting time of round r
with respect to the start of the level. round = 0 1 2 3 r
|-----|-----|-----|-----|-----|--- ... ... --|------|------- | <-------------------------------------------> level_offset
val timestamp_of_round :
Durations.t ->
predecessor_timestamp:Time_repr.t ->
predecessor_round:t ->
round:t ->
Time_repr.t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
timestamp_of_round round_durations ~predecessor_timestamp:pred_ts
~predecessor_round:pred_round ~round
returns the starting time of round round
given that the timestamp and the round of the block at the previous level is pred_ts
and pred_round
, respectively.
pred_round = 0 pred_round
|-----|.. ... --|--------|-- ... --|------- | | | | pred_ts | | start_of_cur_level | | |-----|------|-- ... --|-------|- cur_round = 0 1 | round | res_ts
Precisely, the resulting timestamp is: pred_ts + round_duration(pred_round) + level_offset_of_round(round)
.
val timestamp_of_another_round_same_level :
Durations.t ->
current_timestamp:Time_repr.t ->
current_round:t ->
considered_round:t ->
Time_repr.t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
timestamp_of_another_round_same_level
round_durations
~current_timestamp
~current_round
~considered_round
returns the starting time of round considered_round
.
start of current level current ts result | | | | | | |-----|----...--|-- ... ------|- | | | | cur_round = 0 1 current considered round round
It also works when considered_round
is lower than current_round
.
Precisely, the resulting timestamp is: current_timestamp - level_offset_of_round(current_round)
+ level_offset_of_round(considered_round)
.
val round_of_timestamp :
Durations.t ->
predecessor_timestamp:Time_repr.t ->
predecessor_round:t ->
timestamp:Time_repr.t ->
t Mavryk_protocol_environment_001_PtAtLas.Error_monad.tzresult
round_of_timestamp round_durations ~predecessor_timestamp ~predecessor_round
~timestamp:ts
returns the round to which the timestamp ts
belongs to, given that the timestamp and the round of the block at the previous level is pred_ts
and pred_round
, respectively.
Precisely, the resulting round is: round_and_offset round_durations ~level_offset:diff
where diff = ts - (predecessor_timestamp + round_duration(predecessor_round)
.
Returns an error when the timestamp is before the level start. Also returns an error when the timestamp is so high that it would lead to an integer overflow when computing the round.
module Internals_for_test : sig ... end