-
Notifications
You must be signed in to change notification settings - Fork 158
/
extra.cddl
62 lines (50 loc) · 3 KB
/
extra.cddl
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
; Conway era introduces an optional 258 tag for sets, which will become mandatory in the
; second era after Conway. We recommend all the tooling to account for this future breaking
; change sooner rather than later, in order to provide a smooth transition for their users.
; This is an unordered set. Duplicate elements are not allowed and the order of elements is implementation specific.
set<a> = #6.258([* a]) / [* a]
; Just like `set`, but must contain at least one element.
nonempty_set<a> = #6.258([+ a]) / [+ a]
; This is a non-empty ordered set. Duplicate elements are not allowed and the order of elements will be preserved.
nonempty_oset<a> = #6.258([+ a]) / [+ a]
positive_int = 1 .. 18446744073709551615
unit_interval = #6.30([1, 2])
; unit_interval = #6.30([uint, uint])
;
; Comment above depicts the actual definition for `unit_interval`.
;
; Unit interval is a number in the range between 0 and 1, which
; means there are two extra constraints:
; * numerator <= denominator
; * denominator > 0
;
; Relation between numerator and denominator cannot be expressed in CDDL, which
; poses a problem for testing. We need to be able to generate random valid data
; for testing implementation of our encoders/decoders. Which means we cannot use
; the actual definition here and we hard code the value to 1/2
nonnegative_interval = #6.30([uint, positive_int])
address =
h'001000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000' /
h'102000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000' /
h'203000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000' /
h'304000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000' /
h'405000000000000000000000000000000000000000000000000000000087680203' /
h'506000000000000000000000000000000000000000000000000000000087680203' /
h'6070000000000000000000000000000000000000000000000000000000' /
h'7080000000000000000000000000000000000000000000000000000000'
reward_account =
h'E090000000000000000000000000000000000000000000000000000000' /
h'F0A0000000000000000000000000000000000000000000000000000000'
bounded_bytes = bytes .size (0..64)
; the real bounded_bytes does not have this limit. it instead has a different
; limit which cannot be expressed in CDDL.
; The limit is as follows:
; - bytes with a definite-length encoding are limited to size 0..64
; - for bytes with an indefinite-length CBOR encoding, each chunk is
; limited to size 0..64
; ( reminder: in CBOR, the indefinite-length encoding of bytestrings
; consists of a token #2.31 followed by a sequence of definite-length
; encoded bytestrings and a stop code )
; a type for distinct values.
; The type parameter must support .size, for example: bytes or uint
distinct<a> = a .size 8 / a .size 16 / a .size 20 / a .size 24 / a .size 30 / a .size 32