Electroneum
Loading...
Searching...
No Matches
tx_extra.h
Go to the documentation of this file.
1// Copyrights(c) 2017-2021, The Electroneum Project
2// Copyrights(c) 2014-2019, The Monero Project
3//
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without modification, are
7// permitted provided that the following conditions are met:
8//
9// 1. Redistributions of source code must retain the above copyright notice, this list of
10// conditions and the following disclaimer.
11//
12// 2. Redistributions in binary form must reproduce the above copyright notice, this list
13// of conditions and the following disclaimer in the documentation and/or other
14// materials provided with the distribution.
15//
16// 3. Neither the name of the copyright holder nor the names of its contributors may be
17// used to endorse or promote products derived from this software without specific
18// prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
21// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
28// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29//
30// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
31
32#pragma once
33
34
35#define TX_EXTRA_PADDING_MAX_COUNT 255
36#define TX_EXTRA_NONCE_MAX_COUNT 255
37
38#define TX_EXTRA_TAG_PADDING 0x00
39#define TX_EXTRA_TAG_PUBKEY 0x01
40#define TX_EXTRA_NONCE 0x02
41#define TX_EXTRA_MERGE_MINING_TAG 0x03
42#define TX_EXTRA_TAG_ADDITIONAL_PUBKEYS 0x04
43#define TX_EXTRA_TAG_BRIDGE_SOURCE_ADDRESS 0x05
44#define TX_EXTRA_TAG_BRIDGE_SMARTCHAIN_ADDRESS 0x06
45#define TX_EXTRA_TAG_BRIDGE_OWNERSHIP_SIG 0x07
46#define TX_EXTRA_MYSTERIOUS_MINERGATE_TAG 0xDE
47
48#define TX_EXTRA_NONCE_PAYMENT_ID 0x00
49#define TX_EXTRA_NONCE_ENCRYPTED_PAYMENT_ID 0x01
50
51namespace cryptonote
52{
54 {
55 size_t size;
56
57 // load
58 template <template <bool> class Archive>
59 bool do_serialize(Archive<false>& ar)
60 {
61 // size - 1 - because of variant tag
63 {
64 std::ios_base::iostate state = ar.stream().rdstate();
65 bool eof = EOF == ar.stream().peek();
66 ar.stream().clear(state);
67
68 if (eof)
69 break;
70
71 uint8_t zero;
72 if (!::do_serialize(ar, zero))
73 return false;
74
75 if (0 != zero)
76 return false;
77 }
78
80 }
81
82 // store
83 template <template <bool> class Archive>
84 bool do_serialize(Archive<true>& ar)
85 {
87 return false;
88
89 // i = 1 - because of variant tag
90 for (size_t i = 1; i < size; ++i)
91 {
92 uint8_t zero = 0;
93 if (!::do_serialize(ar, zero))
94 return false;
95 }
96 return true;
97 }
98 };
99
108
110 {
111 std::string nonce;
112
114 FIELD(nonce)
117 };
118
120 {
122 {
124
126 {
127 }
128
130 VARINT_FIELD_N("depth", mm_tag.depth)
131 FIELD_N("merkle_root", mm_tag.merkle_root)
133 };
134
135 size_t depth;
137
138 // load
139 template <template <bool> class Archive>
140 bool do_serialize(Archive<false>& ar)
141 {
142 std::string field;
143 if(!::do_serialize(ar, field))
144 return false;
145
146 std::istringstream iss(field);
147 binary_archive<false> iar(iss);
148 serialize_helper helper(*this);
149 return ::serialization::serialize(iar, helper);
150 }
151
152 // store
153 template <template <bool> class Archive>
154 bool do_serialize(Archive<true>& ar)
155 {
156 std::ostringstream oss;
157 binary_archive<true> oar(oss);
158 serialize_helper helper(*this);
159 if(!::do_serialize(oar, helper))
160 return false;
161
162 std::string field = oss.str();
163 return ::serialization::serialize(ar, field);
164 }
165 };
166
167 // per-output additional tx pubkey for multi-destination transfers involving at least one subaddress
169 {
170 std::vector<crypto::public_key> data;
171
173 FIELD(data)
175 };
176
178 {
179 std::string data;
180
182 FIELD(data)
184 };
185
187 {
188 std::string data;
189
191 FIELD(data)
193 };
194
196 {
197 std::string data;
198
200 FIELD(data)
202 };
203
205 {
206 std::string data;
207
209 FIELD(data)
211 };
212
213 // tx_extra_field format, except tx_extra_padding and tx_extra_pub_key:
214 // varint tag;
215 // varint size;
216 // varint data[];
218}
219
crypto namespace.
Definition crypto.cpp:58
POD_CLASS public_key
Definition crypto.h:79
Holds cryptonote related classes and helpers.
Definition ban.cpp:40
boost::variant< tx_extra_padding, tx_extra_pub_key, tx_extra_nonce, tx_extra_merge_mining_tag, tx_extra_additional_pub_keys, tx_extra_bridge_source_address, tx_extra_bridge_smartchain_address, tx_extra_bridge_ownership_sig, tx_extra_mysterious_minergate > tx_extra_field
Definition tx_extra.h:217
#define BEGIN_SERIALIZE()
#define VARINT_FIELD_N(t, f)
#define FIELD(f)
#define FIELD_N(t, f)
#define false
#define END_SERIALIZE()
#define VARIANT_TAG(Archive, Type, Tag)
unsigned char uint8_t
Definition stdint.h:124
std::vector< crypto::public_key > data
Definition tx_extra.h:170
serialize_helper(tx_extra_merge_mining_tag &mm_tag_)
Definition tx_extra.h:125
bool do_serialize(Archive< false > &ar)
Definition tx_extra.h:140
bool do_serialize(Archive< true > &ar)
Definition tx_extra.h:154
if(TX_EXTRA_NONCE_MAX_COUNT< nonce.size()) return false
bool do_serialize(Archive< true > &ar)
Definition tx_extra.h:84
bool do_serialize(Archive< false > &ar)
Definition tx_extra.h:59
crypto::public_key pub_key
Definition tx_extra.h:102
#define TX_EXTRA_NONCE_MAX_COUNT
Definition tx_extra.h:36
#define TX_EXTRA_TAG_PADDING
Definition tx_extra.h:38
#define TX_EXTRA_TAG_PUBKEY
Definition tx_extra.h:39
#define TX_EXTRA_TAG_BRIDGE_SMARTCHAIN_ADDRESS
Definition tx_extra.h:44
#define TX_EXTRA_NONCE
Definition tx_extra.h:40
#define TX_EXTRA_MYSTERIOUS_MINERGATE_TAG
Definition tx_extra.h:46
#define TX_EXTRA_TAG_ADDITIONAL_PUBKEYS
Definition tx_extra.h:42
#define TX_EXTRA_TAG_BRIDGE_SOURCE_ADDRESS
Definition tx_extra.h:43
#define TX_EXTRA_PADDING_MAX_COUNT
Definition tx_extra.h:35
#define TX_EXTRA_MERGE_MINING_TAG
Definition tx_extra.h:41
#define TX_EXTRA_TAG_BRIDGE_OWNERSHIP_SIG
Definition tx_extra.h:45