package octez-protocol-018-Proxford-libs
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=ddfb5076eeb0b32ac21c1eed44e8fc86a6743ef18ab23fff02d36e365bb73d61
sha512=d22a827df5146e0aa274df48bc2150b098177ff7e5eab52c6109e867eb0a1f0ec63e6bfbb0e3645a6c2112de3877c91a17df32ccbff301891ce4ba630c997a65
doc/octez-protocol-018-Proxford-libs.baking/Tezos_baking_018_Proxford/Baking_state/index.html
Module Tezos_baking_018_Proxford.Baking_state
Source
type consensus_key = {
alias : string option;
public_key : Tezos_base.TzPervasives.Signature.public_key;
public_key_hash : Tezos_base.TzPervasives.Signature.public_key_hash;
secret_key_uri : Tezos_client_base.Client_keys.sk_uri;
}
type consensus_key_and_delegate =
consensus_key * Tezos_base.TzPervasives.Signature.Public_key_hash.t
val consensus_key_and_delegate_encoding :
consensus_key_and_delegate Tezos_base.TzPervasives.Data_encoding.t
type prequorum = {
level : int32;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
block_payload_hash : Tezos_protocol_018_Proxford.Protocol.Block_payload_hash.t;
preattestations : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.preattestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list;
}
type block_info = {
hash : Tezos_base.TzPervasives.Block_hash.t;
shell : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Block_header.shell_header;
payload_hash : Tezos_protocol_018_Proxford.Protocol.Block_payload_hash.t;
payload_round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
prequorum : prequorum option;
quorum : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.attestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list;
dal_attestations : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.dal_attestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list;
payload : Operation_pool.payload;
}
type cache = {
known_timestamps : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Timestamp.time Baking_cache.Timestamp_of_round_cache.t;
round_timestamps : (Tezos_protocol_018_Proxford.Protocol.Alpha_context.Timestamp.time * Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t * consensus_key_and_delegate) Baking_cache.Round_timestamp_interval_cache.t;
}
type block_kind =
| Fresh of Operation_pool.pool
| Reproposal of {
consensus_operations : Tezos_protocol_018_Proxford.Protocol.Alpha_context.packed_operation list;
payload_hash : Tezos_protocol_018_Proxford.Protocol.Block_payload_hash.t;
payload_round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
payload : Operation_pool.payload;
}
type block_to_bake = {
predecessor : block_info;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
delegate : consensus_key_and_delegate;
kind : block_kind;
force_apply : bool;
(*if true, while baking the block, try and apply the block and its operations instead of only validating them. this can be permanently set using the
*)--force-apply
flag (seeforce_apply_switch_arg
inbaking_commands.ml
).
}
val round_of_shell_header :
Tezos_protocol_018_Proxford.Protocol.Alpha_context.Block_header.shell_header ->
Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t
Tezos_base.TzPervasives.tzresult
module SlotMap :
Tezos_base.TzPervasives.Map.S
with type key = Tezos_protocol_018_Proxford.Protocol.Alpha_context.Slot.t
type delegate_slot = {
consensus_key_and_delegate : consensus_key_and_delegate;
first_slot : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Slot.t;
attesting_power : int;
}
A delegate slot consists of the delegate's consensus key, its public key hash, its first slot, and its attesting power at some level.
Identify the first block of the protocol, ie. the block that activates the current protocol.
This block should be baked by the baker of the previous protocol (that's why this same block is also referred to as the last block of the previous protocol). It is always considered final and therefore is not attested.
type locked_round = {
payload_hash : Tezos_protocol_018_Proxford.Protocol.Block_payload_hash.t;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
}
type prepared_block = {
signed_block_header : Tezos_protocol_018_Proxford.Protocol.block_header;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
delegate : consensus_key_and_delegate;
operations : Tezos_base.Operation.t list list;
baking_votes : Tezos_protocol_018_Proxford.Protocol.Per_block_votes_repr.per_block_votes;
}
val consensus_vote_kind_encoding :
consensus_vote_kind Tezos_base.TzPervasives.Data_encoding.t
type unsigned_consensus_vote = {
vote_kind : consensus_vote_kind;
vote_consensus_content : Tezos_protocol_018_Proxford.Protocol.Alpha_context.consensus_content;
delegate : consensus_key_and_delegate;
}
type signed_consensus_vote = {
unsigned_consensus_vote : unsigned_consensus_vote;
signed_operation : Tezos_protocol_018_Proxford.Protocol.Alpha_context.packed_operation;
}
type batch_content = {
level : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Raw_level.t;
round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
block_payload_hash : Tezos_protocol_018_Proxford.Protocol.Block_payload_hash.t;
}
type unsigned_consensus_vote_batch = private {
batch_kind : consensus_vote_kind;
batch_content : batch_content;
batch_branch : Tezos_base.TzPervasives.Block_hash.t;
unsigned_consensus_votes : unsigned_consensus_vote list;
}
val make_unsigned_consensus_vote_batch :
consensus_vote_kind ->
batch_content ->
batch_branch:Tezos_base.TzPervasives.Block_hash.t ->
(consensus_key_and_delegate
* Tezos_protocol_018_Proxford.Protocol.Alpha_context.Slot.t)
list ->
unsigned_consensus_vote_batch
type signed_consensus_vote_batch = private {
batch_kind : consensus_vote_kind;
batch_content : batch_content;
batch_branch : Tezos_base.TzPervasives.Block_hash.t;
signed_consensus_votes : signed_consensus_vote list;
}
val make_signed_consensus_vote_batch :
consensus_vote_kind ->
batch_content ->
batch_branch:Tezos_base.TzPervasives.Block_hash.t ->
signed_consensus_vote list ->
signed_consensus_vote_batch Tezos_base.TzPervasives.tzresult
val make_singleton_consensus_vote_batch :
signed_consensus_vote ->
signed_consensus_vote_batch
type level_state = {
current_level : int32;
latest_proposal : proposal;
is_latest_proposal_applied : bool;
locked_round : locked_round option;
attestable_payload : attestable_payload option;
elected_block : elected_block option;
delegate_slots : delegate_slots;
next_level_delegate_slots : delegate_slots;
next_level_proposed_round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t option;
}
type round_state = {
current_round : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t;
current_phase : phase;
delayed_quorum : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.attestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list option;
early_attestations : signed_consensus_vote list;
awaiting_unlocking_pqc : bool;
}
type forge_event =
| Block_ready of prepared_block
| Preattestation_ready of signed_consensus_vote
| Attestation_ready of signed_consensus_vote
forge_event
type used to return the result of a task completion in the forge worker.
type forge_request =
| Forge_and_sign_block of block_to_bake
| Forge_and_sign_preattestations of {
unsigned_preattestations : unsigned_consensus_vote_batch;
}
| Forge_and_sign_attestations of {
unsigned_attestations : unsigned_consensus_vote_batch;
}
forge_request
type used to push a concurrent forging task in the forge worker.
type forge_worker_hooks = {
push_request : forge_request -> unit;
get_forge_event_stream : unit -> forge_event Lwt_stream.t;
cancel_all_pending_tasks : unit -> unit;
}
forge_worker_hooks
type that allows interactions with the forge worker. Hooks are needed in order to break a circular dependency.
type global_state = {
cctxt : Tezos_client_018_Proxford.Protocol_client_context.full;
chain_id : Tezos_base.TzPervasives.Chain_id.t;
config : Baking_configuration.t;
constants : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Constants.t;
round_durations : Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.round_durations;
operation_worker : Operation_worker.t;
mutable forge_worker_hooks : forge_worker_hooks;
validation_mode : validation_mode;
delegates : consensus_key list;
cache : cache;
dal_node_rpc_ctxt : Tezos_rpc.Context.generic option;
}
type state = {
global_state : global_state;
level_state : level_state;
round_state : round_state;
}
val round_proposer :
state ->
level:[ `Current | `Next ] ->
Tezos_protocol_018_Proxford.Protocol.Alpha_context.Round.t ->
delegate_slot option
Returns, among our *own* delegates, the delegate (and its attesting slot) that has a proposer slot at the given round and the current or next level, if any.
type event =
| New_valid_proposal of proposal
| New_head_proposal of proposal
| Prequorum_reached of Operation_worker.candidate * Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.preattestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list
| Quorum_reached of Operation_worker.candidate * Tezos_protocol_018_Proxford.Protocol.Alpha_context.Kind.attestation Tezos_protocol_018_Proxford.Protocol.Alpha_context.operation list
| New_forge_event of forge_event
| Timeout of timeout_kind
type state_data = {
level_data : int32;
locked_round_data : locked_round option;
attestable_payload_data : attestable_payload option;
}
val may_record_new_state :
previous_state:t ->
new_state:t ->
unit Tezos_base.TzPervasives.tzresult Lwt.t
val load_attestable_data :
Tezos_client_018_Proxford.Protocol_client_context.full ->
[ `State ] Baking_files.location ->
state_data option Tezos_base.TzPervasives.tzresult Lwt.t
val compute_delegate_slots :
Tezos_client_018_Proxford.Protocol_client_context.full ->
?block:Tezos_shell_services.Block_services.block ->
level:int32 ->
chain:Tezos_shell_services.Shell_services.chain ->
consensus_key list ->
delegate_slots Tezos_base.TzPervasives.tzresult Lwt.t