1. Overview
  2. Docs

Representation of a block in the simulator.

type chain = block list

Chain is a list of blocks.

type propagation =
  1. | Block

    Block the operation/block, it'll never be delivered.

  2. | Pass

    Pass the operation/block as is.

  3. | Delay of float

    Delay the operation/block for the given number of seconds.


How an operation or block should propagate through the network.

type propagation_vector = propagation list

Values of this type specify to which bakers a block or operation should be delivered.

module type Hooks = sig ... end

The way to control behavior of a mockup node.

The default hook implementation.

type config = {
  1. debug : bool;

    Whether to initialize the event system in order to display information about the progress of the simulation.

  2. round0 : int64;

    Duration of the round 0 in seconds.

  3. round1 : int64;

    Duration of the round 1 in seconds.

  4. timeout : int;

    Maximal duration of the test. If the test takes longer to terminate it'll be aborted with an error.

  5. delegate_selection : (int32 * (int32 * Tezos_crypto.Signature.public_key_hash) list) list;

    Desired selection of delegates per level/round

  6. initial_seed : Tezos_protocol_013_PtJakart.Protocol.State_hash.t option;

    Optional initial seed for protocol (used to control delegate selection)

  7. consensus_committee_size : int;

    Size of the committee for tenderbake in number of slots

  8. consensus_threshold : int;

    Threshold, in number of slots, for the quorum to be considered reached. Should be 2 * consensus_committee_size / 3 + 1 in usual setting for tenderbake.


Simulation configuration.

val default_config : config

Default configuration.

val run : ?config:config -> (int * (module Hooks)) list -> unit Tezos_base.TzPervasives.tzresult Lwt.t

run spec runs a simulation according to the spec. Elements of spec describe bakers: how many delegate each baker has and how it behaves. The total number of delegates cannot exceed 5 for now (it is easy to increase this limit). The delegates are assigned in order, gradually exhausting the standard bootstrap accounts. For example, if the first baker has 3 delegates and the second one has 2 delegates, we have the following distribution of bootstrap accounts:

Baker no. 1: bootstrap1, bootstrap2, bootstrap3

Baker no. 2: bootstrap4, bootstrap5

A simulation continues till all nodes finish either with an error or successfully. If at least one node finishes with an error, it propagates to the final result.

Check if a block header is signed by a given delegate.

Count the number of operations in the mempool that satisfy the given predicate.

Check if the mempool has at least one operation that satisfies the given predicate.

Similar to mempool_has_op but instead of returning a bool it sets the given bool ref.

val op_is_signed_by : public_key:Tezos_crypto.Signature.public_key -> op_predicate

Check if an operation is signed by the given delegate.

val op_is_preendorsement : ?level:int32 -> ?round:int32 -> op_predicate

Check that an operation is a preendorsement.

val op_is_endorsement : ?level:int32 -> ?round:int32 -> op_predicate

Check that an operation is an endorsement.

val op_is_both : op_predicate -> op_predicate -> op_predicate

Combine two predicates.

Check that payload hashes match, fail if it is not the case.

val get_block_round : block -> int32 Tezos_base.TzPervasives.tzresult Lwt.t

Get round of a block.