P2P message format

This page details the structure and layout of messages used by the Mavryk P2P layer.

The elementary types used for message or header fields are documented in the Data_encoding module, for example:

Additionally, the type unsigned 30-bit integer is used to denote the subset of positive integers of type signed 31-bit integers.

Note

31-bit integers: The internal representation of integers in OCaml reserves one bit for GC tagging. The remaining bits encode a signed integer. For compatibility with 32-bit machines, we restrict these native integers to the 31-bit range.

Block header (shell)

Name

Size

Contents

level

4 bytes

signed 32-bit big-endian integer

proto

1 byte

unsigned 8-bit integer

predecessor

32 bytes

bytes

timestamp

8 bytes

signed 64-bit big-endian integer

validation_pass

1 byte

unsigned 8-bit integer

operations_hash

32 bytes

bytes

# bytes in field “fitness”

4 bytes

unsigned 30-bit big-endian integer

fitness

Variable

sequence of $fitness.elem

context

32 bytes

bytes

protocol_data

Variable

bytes

fitness.elem

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

bytes

Operation (shell)

Name

Size

Contents

branch

32 bytes

bytes

data

Variable

bytes

Block_header (alpha-specific)

Name

Size

Contents

payload_hash

32 bytes

bytes

payload_round

4 bytes

signed 32-bit big-endian integer

proof_of_work_nonce

8 bytes

bytes

? presence of field “seed_nonce_hash”

1 byte

boolean (0 for false, 255 for true)

seed_nonce_hash

32 bytes

bytes

per_block_votes

1 byte

$alpha.per_block_votes

signature

Variable

bytes

alpha.per_block_votes (1 byte, 8-bit tag)

case_0 (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_1 (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_2 (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_4 (tag 4)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_5 (tag 5)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_6 (tag 6)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_8 (tag 8)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_9 (tag 9)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_10 (tag 10)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Operation (alpha-specific)

Name

Size

Contents

contents_and_signature_prefix

Variable

sequence of $alpha.operation.alpha.contents_or_signature_prefix

signature_suffix

64 bytes

bytes

bls_signature_prefix (33 bytes, 8-bit tag)

Bls_prefix (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Unnamed field 0

32 bytes

bytes

public_key_hash (21 bytes, 8-bit tag)

Ed25519 (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Ed25519.Public_key_hash

20 bytes

bytes

Secp256k1 (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Secp256k1.Public_key_hash

20 bytes

bytes

P256 (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

P256.Public_key_hash

20 bytes

bytes

Bls (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Mavryk_bls12_381.Public_key_hash

20 bytes

bytes

N.t

A variable-length sequence of bytes encoding a Zarith natural number. Each byte has a running unary size bit: the most significant bit of each byte indicates whether this is the last byte in the sequence (0) or whether the sequence continues (1). Size bits ignored, the data is the binary representation of the number in little-endian order.

Name

Size

Contents

N.t

Determined from data

bytes

X_2

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

bytes

X_3

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

new_state

Variable

sequence of bytes

fee

32 bytes

bytes

exit_validity

1 byte

boolean (0 for false, 255 for true)

X_1

Name

Size

Contents

Unnamed field 0

Determined from data

$X_2

Unnamed field 1

Determined from data

$X_3

X_6

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

new_state

Variable

sequence of bytes

fee

32 bytes

bytes

X_4

Name

Size

Contents

Unnamed field 0

Determined from data

$X_2

Unnamed field 1

Determined from data

$X_6

X_7

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

sequence of bytes

X_0

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

pending_pis

Variable

sequence of $X_1

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

private_pis

Variable

sequence of $X_4

fee_pi

Determined from data

$X_7

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

proof

Variable

bytes

Z.t

A variable-length sequence of bytes encoding a Zarith integer. Each byte has a running unary size bit: the most significant bit of each byte indicates whether this is the last byte in the sequence (0) or whether the sequence continues (1). The second most significant bit of the first byte is reserved for the sign (0 for positive, 1 for negative). Size and sign bits ignored, the data is the binary representation of the absolute value of the number in little-endian order.

Name

Size

Contents

Z.t

Determined from data

bytes

X_10

Name

Size

Contents

id

32 bytes

bytes

amount

Determined from data

$Z.t

X_9

Name

Size

Contents

op_code

4 bytes

signed 31-bit big-endian integer in the range -1073741824 to 1073741823

price

Determined from data

$X_10

l1_dst

21 bytes

$public_key_hash

rollup_id

20 bytes

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

payload

Variable

sequence of bytes

alpha.michelson.v1.primitives (Enumeration: unsigned 8-bit integer):

Case number

Encoded string

0

parameter

1

storage

2

code

3

False

4

Elt

5

Left

6

None

7

Pair

8

Right

9

Some

10

True

11

Unit

12

PACK

13

UNPACK

14

BLAKE2B

15

SHA256

16

SHA512

17

ABS

18

ADD

19

AMOUNT

20

AND

21

BALANCE

22

CAR

23

CDR

24

CHECK_SIGNATURE

25

COMPARE

26

CONCAT

27

CONS

28

CREATE_ACCOUNT

29

CREATE_CONTRACT

30

IMPLICIT_ACCOUNT

31

DIP

32

DROP

33

DUP

34

EDIV

35

EMPTY_MAP

36

EMPTY_SET

37

EQ

38

EXEC

39

FAILWITH

40

GE

41

GET

42

GT

43

HASH_KEY

44

IF

45

IF_CONS

46

IF_LEFT

47

IF_NONE

48

INT

49

LAMBDA

50

LE

51

LEFT

52

LOOP

53

LSL

54

LSR

55

LT

56

MAP

57

MEM

58

MUL

59

NEG

60

NEQ

61

NIL

62

NONE

63

NOT

64

NOW

65

OR

66

PAIR

67

PUSH

68

RIGHT

69

SIZE

70

SOME

71

SOURCE

72

SENDER

73

SELF

74

STEPS_TO_QUOTA

75

SUB

76

SWAP

77

TRANSFER_TOKENS

78

SET_DELEGATE

79

UNIT

80

UPDATE

81

XOR

82

ITER

83

LOOP_LEFT

84

ADDRESS

85

CONTRACT

86

ISNAT

87

CAST

88

RENAME

89

bool

90

contract

91

int

92

key

93

key_hash

94

lambda

95

list

96

map

97

big_map

98

nat

99

option

100

or

101

pair

102

set

103

signature

104

string

105

bytes

106

mumav

107

timestamp

108

unit

109

operation

110

address

111

SLICE

112

DIG

113

DUG

114

EMPTY_BIG_MAP

115

APPLY

116

chain_id

117

CHAIN_ID

118

LEVEL

119

SELF_ADDRESS

120

never

121

NEVER

122

UNPAIR

123

VOTING_POWER

124

TOTAL_VOTING_POWER

125

KECCAK

126

SHA3

127

PAIRING_CHECK

128

bls12_381_g1

129

bls12_381_g2

130

bls12_381_fr

131

sapling_state

132

sapling_transaction_deprecated

133

SAPLING_EMPTY_STATE

134

SAPLING_VERIFY_UPDATE

135

ticket

136

TICKET_DEPRECATED

137

READ_TICKET

138

SPLIT_TICKET

139

JOIN_TICKETS

140

GET_AND_UPDATE

141

chest

142

chest_key

143

OPEN_CHEST

144

VIEW

145

view

146

constant

147

SUB_MUMAV

148

tx_rollup_l2_address

149

MIN_BLOCK_TIME

150

sapling_transaction

151

EMIT

152

Lambda_rec

153

LAMBDA_REC

154

TICKET

155

BYTES

156

NAT

157

Ticket

micheline.alpha.michelson_v1.expression (Determined from data, 8-bit tag)

Int (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

int

Determined from data

$Z.t

String (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

string

Variable

bytes

Sequence (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

sequence of $micheline.alpha.michelson_v1.expression

Prim__no_args__no_annots (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

Prim__no_args__some_annots (tag 4)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

annots

Variable

bytes

Prim__1_arg__no_annots (tag 5)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

arg

Determined from data

$micheline.alpha.michelson_v1.expression

Prim__1_arg__some_annots (tag 6)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

arg

Determined from data

$micheline.alpha.michelson_v1.expression

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

annots

Variable

bytes

Prim__2_args__no_annots (tag 7)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

arg1

Determined from data

$micheline.alpha.michelson_v1.expression

arg2

Determined from data

$micheline.alpha.michelson_v1.expression

Prim__2_args__some_annots (tag 8)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

arg1

Determined from data

$micheline.alpha.michelson_v1.expression

arg2

Determined from data

$micheline.alpha.michelson_v1.expression

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

annots

Variable

bytes

Prim__generic (tag 9)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

prim

1 byte

unsigned 8-bit integer encoding an enumeration (see alpha.michelson.v1.primitives)

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

args

Variable

sequence of $micheline.alpha.michelson_v1.expression

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

annots

Variable

bytes

Bytes (tag 10)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

bytes

Variable

bytes

alpha.contract_id (22 bytes, 8-bit tag)

Implicit (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Signature.Public_key_hash

21 bytes

$public_key_hash

Originated (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Contract_hash

20 bytes

bytes

padding

1 byte

padding

X_13 (Determined from data, 8-bit tag)

None (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Some (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

contents

Determined from data

$micheline.alpha.michelson_v1.expression

ty

Determined from data

$micheline.alpha.michelson_v1.expression

ticketer

22 bytes

$alpha.contract_id

X_8

Name

Size

Contents

Unnamed field 0

Determined from data

$X_9

Unnamed field 1

Determined from data

$X_13

X_16 (1 byte, 8-bit tag) ********************

Public (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Private (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Fee (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

X_14

Name

Size

Contents

Unnamed field 0

Determined from data

$X_2

Unnamed field 1

1 byte

$X_16

X_17

Name

Size

Contents

slot_index

1 byte

unsigned 8-bit integer

commitment

48 bytes

bytes

commitment_proof

96 bytes

bytes

X_18

Name

Size

Contents

alice

21 bytes

$public_key_hash

bob

21 bytes

$public_key_hash

X_19

Name

Size

Contents

published_level

4 bytes

signed 32-bit big-endian integer

slot_index

1 byte

unsigned 8-bit integer

page_index

2 bytes

signed 16-bit big-endian integer

X_20 (Determined from data, 8-bit tag)

raw data proof (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

2 bytes

unsigned 16-bit big-endian integer

raw_data

Variable

bytes

metadata proof (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

dal page proof (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

dal_page_id

7 bytes

$X_19

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

dal_proof

Variable

bytes

dal parameters proof (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

X_21 (Determined from data, 8-bit tag)

inbox proof (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

level

4 bytes

signed 32-bit big-endian integer

message_counter

Determined from data

$N.t

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

serialized_proof

Variable

bytes

reveal proof (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

reveal_proof

Determined from data

$X_20

first input (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

X_22

Name

Size

Contents

? presence of field “state”

1 byte

boolean (0 for false, 255 for true)

state

32 bytes

bytes

tick

Determined from data

$N.t

X_23 (Determined from data, 8-bit tag)

Dissection (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

sequence of $X_22

Proof (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

pvm_step

Variable

bytes

? presence of field “input_proof”

1 byte

boolean (0 for false, 255 for true)

input_proof

Determined from data

$X_21

X_24 (Determined from data, 8-bit tag)

Start (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

player_commitment_hash

32 bytes

bytes

opponent_commitment_hash

32 bytes

bytes

Move (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

choice

Determined from data

$N.t

step

Determined from data

$X_23

X_25

Name

Size

Contents

compressed_state

32 bytes

bytes

inbox_level

4 bytes

signed 32-bit big-endian integer

predecessor

32 bytes

bytes

number_of_ticks

8 bytes

signed 64-bit big-endian integer

X_27 (Enumeration: unsigned 8-bit integer):

Case number

Encoded string

0

arith

1

wasm_2_0_0

2

riscv

X_28

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

sequence of $public_key_hash

public_key (Determined from data, 8-bit tag)

Ed25519 (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Ed25519.Public_key

32 bytes

bytes

Secp256k1 (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Secp256k1.Public_key

33 bytes

bytes

P256 (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

P256.Public_key

33 bytes

bytes

Bls (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Mavryk_bls12_381.Public_key

48 bytes

bytes

alpha.contract_id.originated (22 bytes, 8-bit tag)

Originated (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

Contract_hash

20 bytes

bytes

padding

1 byte

padding

alpha.scripted.contracts

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

code

Variable

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

storage

Variable

bytes

alpha.entrypoint (Determined from data, 8-bit tag)

default (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

root (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

do (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

set_delegate (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

remove_delegate (tag 4)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

deposit (tag 5)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

stake (tag 6)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

unstake (tag 7)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

finalize_unstake (tag 8)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

set_delegate_parameters (tag 9)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

named (tag 255)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

1 byte

unsigned 8-bit integer

Unnamed field 0

Variable

bytes

X_29

Name

Size

Contents

entrypoint

Determined from data

$alpha.entrypoint

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

value

Variable

bytes

X_30

Name

Size

Contents

Unnamed field 0

100 bytes

bytes

Unnamed field 1

100 bytes

bytes

alpha.inlined.preattestation.contents (43 bytes, 8-bit tag)

Preattestation (tag 20)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

alpha.inlined.preattestation

Name

Size

Contents

branch

32 bytes

bytes

operations

43 bytes

$alpha.inlined.preattestation.contents

signature

Variable

bytes

fitness.elem

Name

Size

Contents

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

Unnamed field 0

Variable

bytes

alpha.per_block_votes (1 byte, 8-bit tag)

case_0 (tag 0)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_1 (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_2 (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_4 (tag 4)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_5 (tag 5)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_6 (tag 6)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_8 (tag 8)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_9 (tag 9)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

case_10 (tag 10)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

alpha.block_header.alpha.full_header

Name

Size

Contents

level

4 bytes

signed 32-bit big-endian integer

proto

1 byte

unsigned 8-bit integer

predecessor

32 bytes

bytes

timestamp

8 bytes

signed 64-bit big-endian integer

validation_pass

1 byte

unsigned 8-bit integer

operations_hash

32 bytes

bytes

# bytes in field “fitness”

4 bytes

unsigned 30-bit big-endian integer

fitness

Variable

sequence of $fitness.elem

context

32 bytes

bytes

payload_hash

32 bytes

bytes

payload_round

4 bytes

signed 32-bit big-endian integer

proof_of_work_nonce

8 bytes

bytes

? presence of field “seed_nonce_hash”

1 byte

boolean (0 for false, 255 for true)

seed_nonce_hash

32 bytes

bytes

per_block_votes

1 byte

$alpha.per_block_votes

signature

Variable

bytes

alpha.inlined.attestation_mempool.contents (Determined from data, 8-bit tag)

Attestation (tag 21)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

Attestation_with_dal (tag 23)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

dal_attestation

Determined from data

$Z.t

alpha.inlined.attestation

Name

Size

Contents

branch

32 bytes

bytes

operations

Determined from data

$alpha.inlined.attestation_mempool.contents

signature

Variable

bytes

alpha.operation.alpha.contents_or_signature_prefix (Determined from data, 8-bit tag)

Seed_nonce_revelation (tag 1)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

level

4 bytes

signed 32-bit big-endian integer

nonce

32 bytes

bytes

Double_attestation_evidence (tag 2)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

op1

Variable

$alpha.inlined.attestation

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

op2

Variable

$alpha.inlined.attestation

Double_baking_evidence (tag 3)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

bh1

Variable

$alpha.block_header.alpha.full_header

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

bh2

Variable

$alpha.block_header.alpha.full_header

Activate_account (tag 4)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

pkh

20 bytes

bytes

secret

20 bytes

bytes

Proposals (tag 5)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

period

4 bytes

signed 32-bit big-endian integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

proposals

Variable

sequence of at most 20 bytes

Ballot (tag 6)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

period

4 bytes

signed 32-bit big-endian integer

proposal

32 bytes

bytes

ballot

1 byte

signed 8-bit integer

Double_preattestation_evidence (tag 7)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

op1

Variable

$alpha.inlined.preattestation

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

op2

Variable

$alpha.inlined.preattestation

Vdf_revelation (tag 8)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

solution

200 bytes

$X_30

Drain_delegate (tag 9)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

consensus_key

21 bytes

$public_key_hash

delegate

21 bytes

$public_key_hash

destination

21 bytes

$public_key_hash

Failing_noop (tag 17)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

arbitrary

Variable

bytes

Preattestation (tag 20)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

Attestation (tag 21)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

Attestation_with_dal (tag 23)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

slot

2 bytes

unsigned 16-bit big-endian integer

level

4 bytes

signed 32-bit big-endian integer

round

4 bytes

signed 32-bit big-endian integer

block_payload_hash

32 bytes

bytes

dal_attestation

Determined from data

$Z.t

Reveal (tag 107)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

public_key

Determined from data

$public_key

Transaction (tag 108)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

amount

Determined from data

$N.t

destination

22 bytes

$alpha.contract_id

? presence of field “parameters”

1 byte

boolean (0 for false, 255 for true)

parameters

Determined from data

$X_29

Origination (tag 109)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

balance

Determined from data

$N.t

? presence of field “delegate”

1 byte

boolean (0 for false, 255 for true)

delegate

21 bytes

$public_key_hash

script

Determined from data

$alpha.scripted.contracts

Delegation (tag 110)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

? presence of field “delegate”

1 byte

boolean (0 for false, 255 for true)

delegate

21 bytes

$public_key_hash

Register_global_constant (tag 111)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

value

Variable

bytes

Set_deposits_limit (tag 112)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

? presence of field “limit”

1 byte

boolean (0 for false, 255 for true)

limit

Determined from data

$N.t

Increase_paid_storage (tag 113)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

amount

Determined from data

$Z.t

destination

22 bytes

$alpha.contract_id.originated

Update_consensus_key (tag 114)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

pk

Determined from data

$public_key

Transfer_ticket (tag 158)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

ticket_contents

Variable

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

ticket_ty

Variable

bytes

ticket_ticketer

22 bytes

$alpha.contract_id

ticket_amount

Determined from data

$N.t

destination

22 bytes

$alpha.contract_id

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

entrypoint

Variable

bytes

Smart_rollup_originate (tag 200)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

pvm_kind

1 byte

unsigned 8-bit integer encoding an enumeration (see X_27)

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

kernel

Variable

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

parameters_ty

Variable

bytes

? presence of field “whitelist”

1 byte

boolean (0 for false, 255 for true)

whitelist

Determined from data

$X_28

Smart_rollup_add_messages (tag 201)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

message

Variable

sequence of $X_2

Smart_rollup_cement (tag 202)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

Smart_rollup_publish (tag 203)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

commitment

76 bytes

$X_25

Smart_rollup_refute (tag 204)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

opponent

21 bytes

$public_key_hash

refutation

Determined from data

$X_24

Smart_rollup_timeout (tag 205)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

stakers

42 bytes

$X_18

Smart_rollup_execute_outbox_message (tag 206)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

cemented_commitment

32 bytes

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

output_proof

Variable

bytes

Smart_rollup_recover_bond (tag 207)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

rollup

20 bytes

bytes

staker

21 bytes

$public_key_hash

Dal_publish_commitment (tag 230)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

slot_header

145 bytes

$X_17

Zk_rollup_origination (tag 250)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

public_parameters

Variable

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

circuits_info

Variable

sequence of $X_14

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

init_state

Variable

sequence of bytes

nb_ops

4 bytes

signed 31-bit big-endian integer in the range -1073741824 to 1073741823

Zk_rollup_publish (tag 251)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

zk_rollup

20 bytes

bytes

# bytes in next field

4 bytes

unsigned 30-bit big-endian integer

op

Variable

sequence of $X_8

Zk_rollup_update (tag 252)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

source

21 bytes

$public_key_hash

fee

Determined from data

$N.t

counter

Determined from data

$N.t

gas_limit

Determined from data

$N.t

storage_limit

Determined from data

$N.t

zk_rollup

20 bytes

bytes

update

Determined from data

$X_0

Signature_prefix (tag 255)

Name

Size

Contents

Tag

1 byte

unsigned 8-bit integer

signature_prefix

33 bytes

$bls_signature_prefix