-
Notifications
You must be signed in to change notification settings - Fork 0
/
cns005.txt
224 lines (123 loc) · 7.07 KB
/
cns005.txt
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
CRYPTONOTE STANDARD 005 Albert Werner
Category: Main Track Montag
Prometheus
Tereno
CryptoNote
October 2012
CryptoNote Transaction Extra Field
Abstract
This document is part of the CryptoNote Standards describing a peer-
to-peer anonymous payment system. It defines the way extra data can
be added to a CryptoNote transaction. The content of transaction
Extra field is not verified by the network. Transaction Extra field
can contain arbitrary data.
Copyright and License Notice
Copyright (c) 2012 CryptoNote. This document is available under the
Creative Commons Attribution 3.0 License (international). To view a
copy of the license visit http://creativecommons.org/licenses/by/3.0/
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Extra Field Format . . . . . . . . . . . . . . . . . . . . . . 2
4. Sub-Field Tags . . . . . . . . . . . . . . . . . . . . . . . . 3
5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Werner et al. CryptoNote Transaction Extra Field [Page 1]
CRYPTONOTE STANDARD 005 October 2012
1. Introduction
Every transaction contains the Extra field, which is a part of
transaction prefix (i.e. is signed) [CNS004].
All network nodes verify CryptoNote transactions before they are
included into blocks. If verification fails, a transaction will be
rejected. However, the content of Extra field is not verified.
2. Definitions
transaction: a single record of assets ownership transfer
transaction prefix: the part of a transaction that contains all the
data except signatures
3. Extra Field Format
The value of Extra field is an array of bytes. In transactions, the
array is preceded by its size value:
+------------+--------------------------+
| Size | Transaction Extra data |
| (varint) | (array of bytes) |
+------------+--------------------------+
Figure 3a: Extra field size
The Extra field can be used to store certain user-defined content.
There are common rules for the interpretation of the content of Extra
field to ensure compatibility among different software.
The Extra field can contain several sub-fields. Each sub-field
contains a sub-field tag followed by sub-field content. The sub-field
tag indicates the nature of the data. In some cases the size of the
data is implied by the sub-field tag itself (Figure 3b). In other
cases the size is specified explicitly after the sub-field tag
(Figure 3c). The list of the defined sub-field tags is provided in
the next section.
Werner et al. CryptoNote Transaction Extra Field [Page 2]
CRYPTONOTE STANDARD 005 October 2012
+-------+--------+
| Tag | Data |
+-------+--------+
Figure 3b: Data size implied by the sub-field tag
+-------+--------+--------+
| Tag | Size | Data |
+-------+--------+--------+
Figure 3c: Data size specified explicitly
If the data size is specified explicitly, it is encoded as varint
(variable-length encoding of integers). See section 3 of [CNS003].
4. Sub-Field Tags
This section defines known sub-fields tags and the corresponding data
sizes. If the size is missing in this table, it has to be explicitly
specified as shown in Figure 3c.
+---------------+-------------+-------------------------------------+
| Value | Length | Meaning |
+---------------+-------------+-------------------------------------+
| 0x00 | - | Transaction padding. |
| | | The following restrictions apply: |
| | | - padding is allowed only at the |
| | | end of the Extra field, |
| | | - padding can only contain null |
| | | bytes, |
| | | - the padding length is limited |
| | | to 255 bytes, |
| | | - no explicit size is specified |
| | | for padding (it occupies the |
| | | remaining space of the Extra |
| | | field) |
+---------------+-------------+-------------------------------------+
| 0x01 | 32 bytes | Transaction public key |
+---------------+-------------+-------------------------------------+
| 0x02 | - | Extra nonce (for pooled mining) |
+---------------+-------------+-------------------------------------+
Table 4: Sub-field tag descriptions
Werner et al. CryptoNote Transaction Extra Field [Page 3]
CRYPTONOTE STANDARD 005 October 2012
5. Example
Below is an example of Extra field of a base transaction with three
sub-fields:
- transaction public key (size is omitted for the public key;
it always equals 32 bytes),
- extra nonce (size is specified explicitly),
- transaction padding (size is omitted; only null bytes are
possible).
+--------------------+--------+
| Extra field size | 0x78 |
+--------------------+--------+
+--------------------+--------+-----------------------+
| Tx public key | 0x01 | 32-byte public key |
+--------------------+--------+-----------------------+
Tag Data
+--------------------+--------+--------+-------------+
| Extra nonce | 0x02 | 0x52 | . . . . . |
+--------------------+--------+--------+-------------+
Tag Size Data
+--------------------+--------+-------------+
| Tx size padding | 0x00 | 0x00 0x00 |
+--------------------+--------+-------------+
Tag Data
Figure 5: Transaction Extra field example
6. References
[CNS003] "CryptoNote Blockchain", CryptoNote Standard 003, September
2012.
[CNS004] "CryptoNote Transactions", CryptoNote Standard 004,
September 2012.
Werner et al. CryptoNote Transaction Extra Field [Page 4]