package octez-shell-libs
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
sha256=aa2f5bc99cc4ca2217c52a1af2a2cdfd3b383208cb859ca2e79ca0903396ca1d
    
    
  sha512=d68bb3eb615e3dcccc845fddfc9901c95b3c6dc8e105e39522ce97637b1308a7fa7aa1d271351d5933febd7476b2819e1694f31198f1f0919681f1f9cc97cb3a
    
    
  doc/octez-shell-libs.shell/Tezos_shell/Distributed_db/index.html
Module Tezos_shell.Distributed_dbSource
Tezos Shell - High-level API for the Gossip network and local storage.
It provides functions to query *static* resources such as blocks headers, operations, and functions to access dynamic resources such as heads and chains.
Several chains (mainchain, testchain, ...) can be managed independently. First a chain is activated using activate, which provides a chain_db from which it is possible to access resources. Eventually the chain is deactivated using deactivate.
Static resources are accessible via "Requester" modules (Block_header, Operation, Operations, Protocol). These modules act as read-through caches in front of the local storage State and the p2p layer. They centralize concurrent requests, and cache results in memory. They don't update State directly.
For instance, from a block_header hash, one can fetch the actual block header using Block_header.fetch, then the block operations with Operations.fetch.
Network database
An instance of the distributed DB for a given chain
The first call to activate t chain callbacks activates chain, creates a chain_db and sends a Get_current_branch chain_id message to all neighbors, where chain_id is the identifier of chain. This informs the neighbors that this node expects notifications for new heads/mempools. The given callbacks are given to the P2p_reader for each peer:
- notify_branch peer locatoris called when the- P2p_readerreceives the message- Current_branch (chain, locator)from peer- peer.
- notify_head peer headis called when the- P2p_readerreceives the message- Current_head (chain, head, mempool)from peer- peer.
- Disconnection peeris called when the- P2p_readerreceives the message- Deactivate chainfrom peer- peeror when the- P2p_readerassociated to- peeris shutdown.
Subsequent calls simply return the existing chain_db.
Look for the database of an active chain.
deactivate chain_db sends a Deactivate chain_id message to all active neighbors for this chain. This notifies them that this node isn't interested in messages for this chain
Kick a given peer.
Greylist a given peer.
Various accessors.
Return the peer id of the node
val get_peer_metadata : 
  chain_db ->
  Tezos_base.P2p_peer.Id.t ->
  Tezos_p2p_services.Peer_metadata.tSending messages
Block index
Index of block headers.
module Operations : 
  Tezos_requester.Requester.REQUESTER
    with type t := chain_db
     and type key = Tezos_base.TzPervasives.Block_hash.t * int
     and type value = Tezos_base.Operation.t list
     and type param := Tezos_base.TzPervasives.Operation_list_list_hash.tIndex of all the operations of a given block (per validation pass).
val commit_block : 
  chain_db ->
  Tezos_base.TzPervasives.Block_hash.t ->
  Block_header.t ->
  Tezos_base.Operation.t list list ->
  Tezos_validation.Block_validation.result ->
  Tezos_store.Store.Block.t option Tezos_base.TzPervasives.tzresult Lwt.tStore on disk all the data associated to a valid block.
val commit_invalid_block : 
  chain_db ->
  Tezos_base.TzPervasives.Block_hash.t ->
  Block_header.t ->
  Tezos_base.TzPervasives.Error_monad.error list ->
  unit Tezos_base.TzPervasives.tzresult Lwt.tStore on disk all the data associated to an invalid block.
Operations index
val inject_operation : 
  chain_db ->
  Tezos_base.TzPervasives.Operation_hash.t ->
  Tezos_base.Operation.t ->
  bool Lwt.tInject a new operation in the local index (memory only).
val inject_prechecked_block : 
  chain_db ->
  Tezos_base.TzPervasives.Block_hash.t ->
  Block_header.t ->
  Tezos_base.Operation.t Tezos_base.TzPervasives.trace
    Tezos_base.TzPervasives.trace ->
  unit Tezos_base.TzPervasives.tzresult Lwt.tInject a prechecked block in the precheck_blocks memory table. This is to ensure the data availability of the operations once the block has been prechecked and advertised to our peers.
No need to remove the data explicitely of the precheck_blocks memory table. The table is handled as an LRU cache.
module Operation : 
  Tezos_requester.Requester.REQUESTER
    with type t := chain_db
     and type key := Tezos_base.TzPervasives.Operation_hash.t
     and type value := Tezos_base.Operation.t
     and type param := unitIndex of operations (for the mempool).
Protocol index
val commit_protocol : 
  db ->
  Tezos_base.TzPervasives.Protocol_hash.t ->
  Protocol.t ->
  bool Tezos_base.TzPervasives.tzresult Lwt.tStore on disk protocol sources.