Mavryk_shell.Bootstrap_pipelineThe bootstrap pipeline works as follows: 1. From a locator, it computes a list of subchains (identified by a Block_locator.step) to fetch. 2. A worker starts to fetch all the headers (top to bottom) from a subchain, starting with the top subchain. 3. A worker starts to download the list of operations by batch of blocks once a batch of headers is available. 4. A worker validates blocks one by one (bottom to top).
These three workers work concurrently.
val create :
?notify_new_block:(Block_validator.new_block -> unit) ->
block_header_timeout:Mavryk_base.Time.System.Span.t ->
block_operations_timeout:Mavryk_base.Time.System.Span.t ->
Block_validator.t ->
Mavryk_base.P2p_peer.Id.t ->
Distributed_db.chain_db ->
Mavryk_base.Block_locator.t ->
tcreate ?notify_new_block ~block_header_timeout
~block_operations_timeout validator peer ddb locator initializes a bootstrap_pipeline for a locator sent by peer. It uses the Distributed_db to fetch the data needed and validator to validate blocks one by one with the function Block_validator.validate.
Moreover:
notify_new_block is a called everytime a valid block is received.block_header_timeout is the timeout to fetch a block_header.block_operations_timeout is the timeout to fetch a block operation.If a timeout is triggered, the whole bootstrap_pipeline is canceled.
val wait : t -> unit Mavryk_base.TzPervasives.tzresult Lwt.tval cancel : t -> unit Lwt.tval length :
t ->
Mavryk_shell_services.Peer_validator_worker_state.pipeline_lengthlength pipeline returns the number of the headers and blocks fetched
val length_zero :
Mavryk_shell_services.Peer_validator_worker_state.pipeline_length