Module Mavkit_smart_rollup.Inbox

Smart rollup shared inbox representation, adapted from a subset of src/proto_alpha/lib_protocol/sc_rollup_inbox_repr.mli.

module Hash = Inbox_hash
module V1 : sig ... end
include Versioned_data.S with type t = V1.t
type versioned

The type of versioned values, including the one that is currently used and the previous ones.

val versioned_encoding : versioned Mavryk_base.TzPervasives.Data_encoding.t

Encoding for versioned values, corresponds to the one defined by the protocol.

val of_versioned : versioned -> V1.t

Conversion to the currently used representation. In practice this function must provide ways to translate values of older versions to the latest one.

val to_versioned : V1.t -> versioned

Wrapping a current value as a versioned one.

include module type of V1 with type level_proof = V1.level_proof and type history_proof = V1.history_proof and type t = V1.t
type history_proof = V1.history_proof

A history_proof is a Skip_list.cell that stores multiple hashes. Skip_list.content history_proof gives the hash of this cell, while Skip_list.back_pointers history_proof is an array of hashes of earlier history_proofs in the inbox.

On the one hand, we think of this type as representing the whole Merkle structure of an inbox at a given level---it is the part of t above that can actually be used to prove things (it cannot be forged by a malicious node because it much match the hash stored by the L1).

On the other hand, we think of this type as representing a single proof-step back through the history of the inbox; given a hash that appears at some point later in the inbox this type proves that that hash points to this particular combination of a witness and further back-pointers.

In terms of size, this type is a small set of hashes; one for the current witness and `O(log2(ix))` in the back-pointers, where ix is the index of the cell in the skip list. That is, ix is the number of non-empty levels between now and the origination level of the rollup.

type t = V1.t = {
  1. level : int32;
  2. old_levels_messages : history_proof;
}

The type of the inbox for a smart-contract rollup as stored by the protocol in the context. Values that inhabit this type only act as fingerprint for inboxes and contain:

  • level : the inbox level ;
  • old_levels_messages : a witness of the inbox history.
val pp : Stdlib.Format.formatter -> t -> unit
val equal : t -> t -> bool
val hash : t -> Hash.t
val encoding : t Mavryk_base.TzPervasives.Data_encoding.t
val inbox_level : t -> int32

inbox_level inbox returns the maximum level of message insertion in inbox or its initial level.

val pp_history_proof : Stdlib.Format.formatter -> history_proof -> unit
val history_proof_encoding : history_proof Mavryk_base.TzPervasives.Data_encoding.t
val equal_history_proof : history_proof -> history_proof -> bool
val old_levels_messages : t -> history_proof

old_levels_messages inbox returns the latest skip list cell of the inbox history that is not up to change (i.e. not the current witness).

current_witness inbox returns the current witness of the inbox, i.e. the merkelized payload hash.