package tezos-protocol-016-PtMumbai
This module introduces the semantics of Proof-generating Virtual Machines.
A PVM defines an operational semantics for some computational model. The specificity of PVMs, in comparison with standard virtual machines, is their ability to generate and to validate a *compact* proof that a given atomic execution step turned a given state into another one.
In the smart-contract rollups, PVMs are used for two purposes:
- They allow for the externalization of rollup execution by completely specifying the operational semantics of a given rollup. This standardization of the semantics gives a unique and executable source of truth about the interpretation of smart-contract rollup inboxes, seen as a transformation of a rollup state.
- They allow for the validation or refutation of a claim that the processing of some messages led to a given new rollup state (given an actual source of truth about the nature of these messages).
An input to a PVM is the message_counter
element of an inbox at a given inbox_level
and contains a given payload
.
According the rollup management protocol, the payload must be obtained through Sc_rollup_inbox_message_repr.serialize
which follows a documented format.
type inbox_message = {
inbox_level : Raw_level_repr.t;
message_counter : Tezos_protocol_environment_016_PtMumbai.Z.t;
payload : Sc_rollup_inbox_message_repr.serialized;
}
type reveal_data =
| Raw_data of string
| Metadata of Sc_rollup_metadata_repr.t
| Dal_page of Dal_slot_repr.Page.content option
val pp_inbox_message :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
inbox_message ->
unit
val pp_reveal_data :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
reveal_data ->
unit
val pp_input :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
input ->
unit
val inbox_message_encoding :
inbox_message Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
inbox_message_encoding
encoding value for inbox_message
.
val reveal_data_encoding :
reveal_data Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
val input_encoding :
input Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
val inbox_message_equal : inbox_message -> inbox_message -> bool
input_equal i1 i2
return whether i1
and i2
are equal.
val reveal_data_equal : reveal_data -> reveal_data -> bool
type reveal =
| Reveal_raw_data of Sc_rollup_reveal_hash.t
| Reveal_metadata
| Request_dal_page of Dal_slot_repr.Page.t
val reveal_encoding :
reveal Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
type input_request =
| No_input_required
| Initial
| First_after of Raw_level_repr.t * Tezos_protocol_environment_016_PtMumbai.Z.t
| Needs_reveal of reveal
The PVM's current input expectations:
No_input_required
if the machine is busy and has no need for new input.
Initial
if the machine has never received an input so expects the very first item in the inbox.
First_after (level, counter)
expects whatever comes next after that position in the inbox.
Needs_metadata
if the machine needs the metadata to continue its execution.
val input_request_encoding :
input_request Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
input_request_encoding
encoding value for input_request
.
val pp_reveal :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
reveal ->
unit
val pp_input_request :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
input_request ->
unit
pp_input_request fmt i
pretty prints the given input i
to the formatter fmt
.
val input_request_equal : input_request -> input_request -> bool
input_request_equal i1 i2
return whether i1
and i2
are equal.
type output = {
outbox_level : Raw_level_repr.t;
(*The outbox level containing the message. The level corresponds to the inbox level for which the message was produced.
*)message_index : Tezos_protocol_environment_016_PtMumbai.Z.t;
(*The message index.
*)message : Sc_rollup_outbox_message_repr.t;
(*The message itself.
*)
}
Type that describes output values.
val output_encoding :
output Tezos_protocol_environment_016_PtMumbai.Data_encoding.encoding
output_encoding
encoding value for output
.
val pp_output :
Tezos_protocol_environment_016_PtMumbai.Format.formatter ->
output ->
unit
pp_output fmt o
pretty prints the given output o
to the formatter fmt
.
module type S = sig ... end