package tezos-protocol-007-PsDELPH1
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=43723d096307603703a1a89ed1b2eb202b365f5e7824b96b0cbf813b343a6cf7
sha512=b2a637f2e965000d3d49ad85277ca24d6cb07a1a7cf2bc69d296d8b03ad78c3eaa8e21e94b9162e62c2e11649cd03bc845b2a3dafe623b91065df69d47dc8e4f
doc/tezos-protocol-007-PsDELPH1.raw/Tezos_raw_protocol_007_PsDELPH1/Baking/index.html
Module Tezos_raw_protocol_007_PsDELPH1.BakingSource
type Tezos_protocol_environment_007_PsDELPH1.Error_monad.error += | Timestamp_too_early of Alpha_context.Timestamp.t * Alpha_context.Timestamp.t
val minimal_time :
Alpha_context.context ->
int ->
Tezos_protocol_environment_007_PsDELPH1.Time.t ->
Tezos_protocol_environment_007_PsDELPH1.Time.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultminimal_time ctxt priority pred_block_time returns the minimal time, given the predecessor block timestamp pred_block_time, after which a baker with priority priority is allowed to bake. Fail with Invalid_time_between_blocks_constant if the minimal time cannot be computed.
val check_baking_rights :
Alpha_context.context ->
Alpha_context.Block_header.contents ->
Tezos_protocol_environment_007_PsDELPH1.Time.t ->
(Alpha_context.public_key * Alpha_context.Period.t)
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tcheck_baking_rights ctxt block pred_timestamp verifies that: * the contract that owned the roll at cycle start has the block signer as delegate. * the timestamp is coherent with the announced slot.
val endorsement_rights :
Alpha_context.context ->
Alpha_context.Level.t ->
(Alpha_context.public_key * int list * bool)
Tezos_protocol_environment_007_PsDELPH1.Signature.Public_key_hash.Map.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tFor a given level computes who has the right to include an endorsement in the next block. The result can be stored in Alpha_context.allowed_endorsements
val check_endorsement_rights :
Alpha_context.context ->
Tezos_protocol_environment_007_PsDELPH1.Chain_id.t ->
Alpha_context.Kind.endorsement Alpha_context.Operation.t ->
(Alpha_context.public_key_hash * int list * bool)
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tCheck that the operation was signed by a delegate allowed to endorse at the level specified by the endorsement.
val baking_reward :
Alpha_context.context ->
block_priority:int ->
included_endorsements:int ->
Alpha_context.Tez.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultReturns the baking reward calculated w.r.t a given priority p and a number e of included endorsements
val endorsing_reward :
Alpha_context.context ->
block_priority:int ->
int ->
Alpha_context.Tez.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultReturns the endorsing reward calculated w.r.t a given priority.
val baking_priorities :
Alpha_context.context ->
Alpha_context.Level.t ->
Alpha_context.public_key Misc.lazy_listbaking_priorities ctxt level is the lazy list of contract's public key hashes that are allowed to bake for level.
val first_baking_priorities :
Alpha_context.context ->
?max_priority:int ->
Alpha_context.public_key_hash ->
Alpha_context.Level.t ->
int list Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tfirst_baking_priorities ctxt ?max_priority contract_hash level is a list of priorities of max ?max_priority elements, where the delegate of contract_hash is allowed to bake for level. If ?max_priority is None, a sensible number of priorities is returned.
val check_signature :
Alpha_context.Block_header.t ->
Tezos_protocol_environment_007_PsDELPH1.Chain_id.t ->
Alpha_context.public_key ->
unit Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tcheck_signature ctxt chain_id block id check if the block is signed with the given key, and belongs to the given chain_id
val check_header_proof_of_work_stamp :
Alpha_context.Block_header.shell_header ->
Alpha_context.Block_header.contents ->
int64 ->
boolChecks if the header that would be built from the given components is valid for the given difficulty. The signature is not passed as it is does not impact the proof-of-work stamp. The stamp is checked on the hash of a block header whose signature has been zeroed-out.
val check_proof_of_work_stamp :
Alpha_context.context ->
Alpha_context.Block_header.t ->
unit Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tverify if the proof of work stamp is valid
val check_fitness_gap :
Alpha_context.context ->
Alpha_context.Block_header.t ->
unit Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultcheck if the gap between the fitness of the current context and the given block is within the protocol parameters
val dawn_of_a_new_cycle :
Alpha_context.context ->
Alpha_context.Cycle.t option
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresult
Tezos_protocol_environment_007_PsDELPH1.Lwt.tval earlier_predecessor_timestamp :
Alpha_context.context ->
Alpha_context.Level.t ->
Alpha_context.Timestamp.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultSince Emmy+
A block is valid only if its timestamp has a minimal delay with respect to the previous block's timestamp, and this minimal delay depends not only on the block's priority but also on the number of endorsement operations included in the block.
In Emmy+, blocks' fitness increases by one unit with each level.
In this way, Emmy+ simplifies the optimal baking strategy: The bakers used to have to choose whether to wait for more endorsements to include in their block, or to publish the block immediately, without waiting. The incentive for including more endorsements was to increase the fitness and win against unknown blocks. However, when a block was produced too late in the priority period, there was the risk that the block did not reach endorsers before the block of next priority. In Emmy+, the baker does not need to take such a decision, because the baker cannot publish a block too early.
val minimum_allowed_endorsements :
Alpha_context.context ->
block_delay:Alpha_context.Period.t ->
intGiven a delay of a block's timestamp with respect to the minimum time to bake at the block's priority (as returned by `minimum_time`), it returns the minimum number of endorsements that the block has to contain
val minimal_valid_time :
Alpha_context.context ->
priority:int ->
endorsing_power:int ->
Tezos_protocol_environment_007_PsDELPH1.Time.t
Tezos_protocol_environment_007_PsDELPH1.Error_monad.tzresultThis is the somehow the dual of the previous function. Given a block priority and a number of endorsement slots (given by the `endorsing_power` argument), it returns the minimum time at which the next block can be baked.