-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathsafrole.asn
More file actions
115 lines (98 loc) · 3.01 KB
/
safrole.asn
File metadata and controls
115 lines (98 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
-- Syntax for Safrole protocol test vectors
SafroleModule DEFINITIONS ::= BEGIN
-- Define basic types
u8 ::= INTEGER (0..255)
u32 ::= INTEGER (0..4294967295)
-- Define constants
validators_count INTEGER ::= 6
epoch_length INTEGER ::= 12
-- Define fixed-length arrays
ByteArray32 ::= SEQUENCE (SIZE(32)) OF u8
OpaqueHash ::= ByteArray32
Ed25519Key ::= ByteArray32
BlsKey ::= SEQUENCE (SIZE(144)) OF u8
BandersnatchKey ::= ByteArray32
EpochKeys ::= SEQUENCE (SIZE(epoch_length)) OF BandersnatchKey
TicketsBodies ::= SEQUENCE (SIZE(epoch_length)) OF TicketBody
-- Define enumerations
TicketsOrKeys ::= ENUMERATED {
tickets (0),
keys (1)
}
-- Define structures
TicketBody ::= SEQUENCE {
id OpaqueHash,
attempt u8
}
ValidatorData ::= SEQUENCE {
ed25519 Ed25519Key,
bandersnatch BandersnatchKey,
bls BlsKey,
metadata SEQUENCE (SIZE(128)) OF u8
}
ValidatorsData ::= SEQUENCE (SIZE(validators_count)) OF ValidatorData
TicketEnvelope ::= SEQUENCE {
attempt u8,
signature SEQUENCE (SIZE(784)) OF u8
}
EpochMark ::= SEQUENCE {
entropy OpaqueHash,
validators SEQUENCE (SIZE(validators_count)) OF BandersnatchKey
}
TicketsMark ::= SEQUENCE (SIZE(epoch_length)) OF TicketBody
-- Output markers.
OutputMarks ::= SEQUENCE {
-- New epoch signal.
epoch_mark [0] EpochMark OPTIONAL,
-- Tickets signal.
tickets_mark [1] TicketsMark OPTIONAL
}
-- State relevant to Safrole protocol
State ::= SEQUENCE {
-- tau: The most recent block's timeslog.
timeslot u32,
-- eta: The entropy accumulator and epochal randomness.
entropy SEQUENCE (SIZE(4)) OF OpaqueHash,
-- lambda: The validator keys and metadata which were active in the prior epoch.
prev_validators ValidatorsData,
-- kappa: The validator keys and metadata currently active.
curr_validators ValidatorsData,
-- gamma_k: The validator keys for the following epoch.
next_validators ValidatorsData,
-- iota: The validator keys and metadata to be drawn from next.
designed_validators ValidatorsData,
-- gamma_a: The sealing-key contest ticket accumulator.
tickets_accumulator SEQUENCE (SIZE(0..epoch_length)) OF TicketBody,
-- gamma_s: The sealing-key series of the current epoch.
tickets_or_keys TicketsOrKeys,
-- gamma_z: The Bandersnatch ring root.
tickets_verifier_key SEQUENCE (SIZE(384)) OF u8
}
-- Input for Safrole protocol.
Input ::= SEQUENCE {
-- Current slot.
slot u32,
-- Per block entropy (originated from block entropy source VRF).
entropy OpaqueHash,
-- Safrole extrinsics (aka tickets evelopes).
extrinsics SEQUENCE (SIZE(0..16)) OF TicketEnvelope
}
-- Output from Safrole protocol
Output ::= CHOICE {
-- Markers
ok OutputMarks,
-- Error code (not in the spec, feel free to ignore the actual)
err u8
}
-- Safrole state transition function execution dump
ExecDump ::= SEQUENCE {
-- Input.
input Input,
-- Pre-execution state.
pre_state State,
-- Output.
output Output,
-- Post-execution state.
post_state State
}
END