-
Notifications
You must be signed in to change notification settings - Fork 65
Expand file tree
/
Copy pathCryptoNoteConfig.h
More file actions
474 lines (428 loc) · 30.1 KB
/
CryptoNoteConfig.h
File metadata and controls
474 lines (428 loc) · 30.1 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
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
// Copyright (c) 2012-2017 The Cryptonote developers
// Copyright (c) 2017-2018 The Circle Foundation & Conceal Devs
// Copyright (c) 2018-2023 Conceal Network & Conceal Devs
//
//
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include <cstdint>
#include <initializer_list>
namespace cn
{
namespace parameters
{
const uint64_t CRYPTONOTE_MAX_BLOCK_NUMBER = 500000000;
const size_t CRYPTONOTE_MAX_BLOCK_BLOB_SIZE = 500000000;
const size_t CRYPTONOTE_MAX_TX_SIZE = 1000000000;
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 0x7ad4; /* ccx7 address prefix */
const size_t CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW = 10; /* 20 minutes */
const uint64_t CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT = 60 * 60 * 2; /* two hours */
const uint64_t CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT_V1 = 360; /* changed for LWMA3 */
const uint64_t CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE = 10; /* 20 minutes */
const size_t BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW = 30;
const size_t BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW_V1 = 11; /* changed for LWMA3 */
const uint64_t MONEY_SUPPLY = UINT64_C(200000000000000); /* max supply: 200M (Consensus II) */
const uint32_t ZAWY_DIFFICULTY_BLOCK_INDEX = 0;
const size_t ZAWY_DIFFICULTY_FIX = 1;
const uint8_t ZAWY_DIFFICULTY_BLOCK_VERSION = 0;
const size_t CRYPTONOTE_REWARD_BLOCKS_WINDOW = 100;
const size_t CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE = 100000; /* size of block in bytes, after which reward is calculated using block size */
const size_t CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE = 600;
const size_t CRYPTONOTE_DISPLAY_DECIMAL_POINT = 6;
const uint64_t POINT = UINT64_C(1000);
const uint64_t COIN = UINT64_C(1000000); /* smallest atomic unit */
const uint64_t MINIMUM_FEE = UINT64_C(10); /* 0.000010 CCX */
const uint64_t MINIMUM_FEE_V1 = UINT64_C(100); /* 0.000100 CCX */
const uint64_t MINIMUM_FEE_V2 = UINT64_C(1000); /* 0.001000 CCX */
const uint64_t MINIMUM_FEE_BANKING = UINT64_C(1000); /* 0.001000 CCX */
const uint64_t DEFAULT_DUST_THRESHOLD = UINT64_C(10); /* 0.000010 CCX */
const uint64_t DIFFICULTY_TARGET = 120; /* two minutes */
const uint64_t EXPECTED_NUMBER_OF_BLOCKS_PER_DAY = 24 * 60 * 60 / DIFFICULTY_TARGET; /* 720 blocks */
const size_t DIFFICULTY_WINDOW = EXPECTED_NUMBER_OF_BLOCKS_PER_DAY;
const size_t DIFFICULTY_WINDOW_V1 = DIFFICULTY_WINDOW;
const size_t DIFFICULTY_WINDOW_V2 = DIFFICULTY_WINDOW;
const size_t DIFFICULTY_WINDOW_V3 = 60; /* changed for LWMA3 */
const size_t DIFFICULTY_WINDOW_V4 = 60;
const size_t DIFFICULTY_BLOCKS_COUNT = DIFFICULTY_WINDOW_V3 + 1; /* added for LWMA3 */
const size_t DIFFICULTY_BLOCKS_COUNT_V1 = DIFFICULTY_WINDOW_V4 + 1; /* added for LWMA1 */
const size_t DIFFICULTY_CUT = 60; /* timestamps to cut after sorting */
const size_t DIFFICULTY_CUT_V1 = DIFFICULTY_CUT;
const size_t DIFFICULTY_CUT_V2 = DIFFICULTY_CUT;
const size_t DIFFICULTY_LAG = 15;
const size_t DIFFICULTY_LAG_V1 = DIFFICULTY_LAG;
const size_t DIFFICULTY_LAG_V2 = DIFFICULTY_LAG;
const size_t MINIMUM_MIXIN = 5;
static_assert(2 * DIFFICULTY_CUT <= DIFFICULTY_WINDOW - 2, "Bad DIFFICULTY_WINDOW or DIFFICULTY_CUT");
const uint64_t DEPOSIT_MIN_AMOUNT = 1 * COIN;
const uint32_t DEPOSIT_MIN_TERM = 5040; /* one week */
const uint32_t DEPOSIT_MAX_TERM = 1 * 12 * 21900; /* legacy deposts - one year */
const uint32_t DEPOSIT_MAX_TERM_V1 = 64800 * 20; /* five years */
const uint32_t DEPOSIT_MIN_TERM_V3 = 21900; /* consensus 2019 - one month */
const uint32_t DEPOSIT_MAX_TERM_V3 = 1 * 12 * 21900; /* consensus 2019 - one year */
const uint32_t DEPOSIT_HEIGHT_V3 = 413400; /* consensus 2019 - deposts v3.0 */
const uint64_t DEPOSIT_MIN_TOTAL_RATE_FACTOR = 0; /* constant rate */
const uint64_t DEPOSIT_MAX_TOTAL_RATE = 4; /* legacy deposits */
const uint32_t DEPOSIT_HEIGHT_V4 = 1162162; /* enforce deposit terms */
const uint32_t BLOCK_WITH_MISSING_INTEREST = 425799; /* */
static_assert(DEPOSIT_MIN_TERM > 0, "Bad DEPOSIT_MIN_TERM");
static_assert(DEPOSIT_MIN_TERM <= DEPOSIT_MAX_TERM, "Bad DEPOSIT_MAX_TERM");
static_assert(DEPOSIT_MIN_TERM * DEPOSIT_MAX_TOTAL_RATE > DEPOSIT_MIN_TOTAL_RATE_FACTOR, "Bad DEPOSIT_MIN_TOTAL_RATE_FACTOR or DEPOSIT_MAX_TOTAL_RATE");
const uint64_t MULTIPLIER_FACTOR = 100; /* legacy deposits */
const uint32_t END_MULTIPLIER_BLOCK = 12750; /* legacy deposits */
const size_t MAX_BLOCK_SIZE_INITIAL = CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE * 10;
const uint64_t MAX_BLOCK_SIZE_GROWTH_SPEED_NUMERATOR = 100 * 1024;
const uint64_t MAX_BLOCK_SIZE_GROWTH_SPEED_DENOMINATOR = 365 * 24 * 60 * 60 / DIFFICULTY_TARGET;
const uint64_t CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS = 1;
const uint64_t CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_SECONDS = DIFFICULTY_TARGET * CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS;
const size_t CRYPTONOTE_MAX_TX_SIZE_LIMIT = CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE; /* maximum transaction size */
const size_t CRYPTONOTE_OPTIMIZE_SIZE = 100; /* proportional to CRYPTONOTE_MAX_TX_SIZE_LIMIT */
const uint64_t CRYPTONOTE_MEMPOOL_TX_LIVETIME = (60 * 60 * 12); /* 1 hour in seconds */
const uint64_t CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME = (60 * 60 * 12); /* 24 hours in seconds */
const uint64_t CRYPTONOTE_NUMBER_OF_PERIODS_TO_FORGET_TX_DELETED_FROM_POOL = 7; /* CRYPTONOTE_NUMBER_OF_PERIODS_TO_FORGET_TX_DELETED_FROM_POOL * CRYPTONOTE_MEMPOOL_TX_LIVETIME = time to forget tx */
const size_t FUSION_TX_MAX_SIZE = CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE * 30 / 100;
const size_t FUSION_TX_MIN_INPUT_COUNT = 12;
const size_t FUSION_TX_MIN_IN_OUT_COUNT_RATIO = 4;
const uint64_t UPGRADE_HEIGHT = 1;
const uint64_t UPGRADE_HEIGHT_V2 = 1;
const uint64_t UPGRADE_HEIGHT_V3 = 12750; /* Cryptonight-Fast */
const uint64_t UPGRADE_HEIGHT_V4 = 45000; /* MixIn 2 */
const uint64_t UPGRADE_HEIGHT_V5 = 98160; /* Deposits 2.0, Investments 1.0 */
const uint64_t UPGRADE_HEIGHT_V6 = 104200; /* LWMA3 */
const uint64_t UPGRADE_HEIGHT_V7 = 195765; /* Cryptoight Conceal */
const uint64_t UPGRADE_HEIGHT_V8 = 661300; /* LWMA1, CN-GPU, Halving */
const unsigned UPGRADE_VOTING_THRESHOLD = 90; // percent
const size_t UPGRADE_VOTING_WINDOW = EXPECTED_NUMBER_OF_BLOCKS_PER_DAY;
const size_t UPGRADE_WINDOW = EXPECTED_NUMBER_OF_BLOCKS_PER_DAY;
const uint64_t TESTNET_UPGRADE_HEIGHT = 1;
const uint64_t TESTNET_UPGRADE_HEIGHT_V2 = 1;
const uint64_t TESTNET_UPGRADE_HEIGHT_V3 = 12; /* Cryptonight-Fast */
const uint64_t TESTNET_UPGRADE_HEIGHT_V4 = 24; /* MixIn 2 */
const uint64_t TESTNET_UPGRADE_HEIGHT_V5 = 36; /* Deposits 2.0, Investments 1.0 */
const uint64_t TESTNET_UPGRADE_HEIGHT_V6 = 48; /* LWMA3 */
const uint64_t TESTNET_UPGRADE_HEIGHT_V7 = 60; /* Cryptoight Conceal */
const uint64_t TESTNET_UPGRADE_HEIGHT_V8 = 72; /* LWMA1, CN-GPU, Halving */
const uint32_t TESTNET_DEPOSIT_MIN_TERM_V3 = 30; /* testnet deposits 1 month -> 1 hour */
const uint32_t TESTNET_DEPOSIT_MAX_TERM_V3 = 12 * 30; /* testnet deposits 1 year -> 12 hour */
const uint32_t TESTNET_DEPOSIT_HEIGHT_V3 = 60;
const uint32_t TESTNET_DEPOSIT_HEIGHT_V4 = 300000;
const uint32_t TESTNET_BLOCK_WITH_MISSING_INTEREST = 0; /* testnet is not impacted */
static_assert(0 < UPGRADE_VOTING_THRESHOLD && UPGRADE_VOTING_THRESHOLD <= 100, "Bad UPGRADE_VOTING_THRESHOLD");
static_assert(UPGRADE_VOTING_WINDOW > 1, "Bad UPGRADE_VOTING_WINDOW");
const char CRYPTONOTE_BLOCKS_FILENAME[] = "blocks.dat";
const char CRYPTONOTE_BLOCKINDEXES_FILENAME[] = "blockindexes.dat";
const char CRYPTONOTE_BLOCKSCACHE_FILENAME[] = "blockscache.dat";
const char CRYPTONOTE_POOLDATA_FILENAME[] = "poolstate.bin";
const char P2P_NET_DATA_FILENAME[] = "p2pstate.bin";
const char CRYPTONOTE_BLOCKCHAIN_INDICES_FILENAME[] = "blockchainindices.dat";
const char MINER_CONFIG_FILE_NAME[] = "miner_conf.json";
} // namespace parameters
const uint64_t START_BLOCK_REWARD = (UINT64_C(5000) * parameters::POINT); // start reward (Consensus I)
const uint64_t FOUNDATION_TRUST = (UINT64_C(12000000) * parameters::COIN); // locked funds to secure network (Consensus II)
const uint64_t MAX_BLOCK_REWARD = (UINT64_C(15) * parameters::COIN); // max reward (Consensus I)
const uint64_t MAX_BLOCK_REWARD_V1 = (UINT64_C(6) * parameters::COIN);
const uint64_t REWARD_INCREASE_INTERVAL = (UINT64_C(21900)); // aprox. 1 month (+ 0.25 CCX increment per month)
const char BLOCKCHAIN_DIR[] = "conceal";
const char GENESIS_COINBASE_TX_HEX[] = "010a01ff0001c096b102029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017d6775185749e95ac2d70cae3f29e0e46f430ab648abbe9fdc61d8e7437c60f8";
const uint32_t GENESIS_NONCE = 10000;
const uint64_t GENESIS_TIMESTAMP = 1527078920;
const uint64_t TESTNET_GENESIS_TIMESTAMP = 1632048808;
const uint8_t TRANSACTION_VERSION_1 = 1;
const uint8_t TRANSACTION_VERSION_2 = 2;
const uint8_t BLOCK_MAJOR_VERSION_1 = 1; // (Consensus I)
const uint8_t BLOCK_MAJOR_VERSION_2 = 2; // (Consensus II)
const uint8_t BLOCK_MAJOR_VERSION_3 = 3; // (Consensus III)
const uint8_t BLOCK_MAJOR_VERSION_4 = 4; // LWMA3
const uint8_t BLOCK_MAJOR_VERSION_7 = 7; /* Cryptonight Conceal */
const uint8_t BLOCK_MAJOR_VERSION_8 = 8; /* LWMA1, CN-GPU, Halving */
const uint8_t BLOCK_MINOR_VERSION_0 = 0;
const uint8_t BLOCK_MINOR_VERSION_1 = 1;
const size_t BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT = 10000; // by default, blocks ids count in synchronizing
const size_t BLOCKS_SYNCHRONIZING_DEFAULT_COUNT = 128; // by default, blocks count in blocks downloading
const size_t COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT = 1000;
const size_t COMMAND_RPC_GET_OBJECTS_MAX_COUNT = 1000;
const int P2P_DEFAULT_PORT = 15000;
const int RPC_DEFAULT_PORT = 16000;
const int PAYMENT_GATE_DEFAULT_PORT = 8070;
const int TESTNET_P2P_DEFAULT_PORT = 15500;
const int TESTNET_RPC_DEFAULT_PORT = 16600;
const int TESTNET_PAYMENT_GATE_DEFAULT_PORT = 8770;
/* P2P Network Configuration Section - This defines our current P2P network version
and the minimum version for communication between nodes */
const uint8_t P2P_VERSION_1 = 1;
const uint8_t P2P_VERSION_2 = 2;
const uint8_t P2P_CURRENT_VERSION = 1;
const uint8_t P2P_MINIMUM_VERSION = 1;
const uint8_t P2P_UPGRADE_WINDOW = 2;
// This defines the minimum P2P version required for lite blocks propogation
const uint8_t P2P_LITE_BLOCKS_PROPOGATION_VERSION = 3;
const size_t P2P_LOCAL_WHITE_PEERLIST_LIMIT = 1000;
const size_t P2P_LOCAL_GRAY_PEERLIST_LIMIT = 5000;
const size_t P2P_CONNECTION_MAX_WRITE_BUFFER_SIZE = 64 * 1024 * 1024; // 64MB
const uint32_t P2P_DEFAULT_CONNECTIONS_COUNT = 8;
const size_t P2P_DEFAULT_ANCHOR_CONNECTIONS_COUNT = 2;
const size_t P2P_DEFAULT_WHITELIST_CONNECTIONS_PERCENT = 70; // percent
const uint32_t P2P_DEFAULT_HANDSHAKE_INTERVAL = 60; // seconds
const uint32_t P2P_DEFAULT_PACKET_MAX_SIZE = 50000000; // 50000000 bytes maximum packet size
const uint32_t P2P_DEFAULT_PEERS_IN_HANDSHAKE = 250;
const uint32_t P2P_DEFAULT_CONNECTION_TIMEOUT = 5000; // 5 seconds
const uint32_t P2P_DEFAULT_PING_CONNECTION_TIMEOUT = 2000; // 2 seconds
const uint64_t P2P_DEFAULT_INVOKE_TIMEOUT = 60 * 2 * 1000; // 2 minutes
const size_t P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT = 5000; // 5 seconds
const char P2P_STAT_TRUSTED_PUB_KEY[] = "f7061e9a5f0d30549afde49c9bfbaa52ac60afdc46304642b460a9ea34bf7a4e";
// Seed Nodes
const std::initializer_list<const char *> SEED_NODES = {
"seed1.conceal.network:15000",
"seed2.conceal.network:15000",
"seed3.conceal.network:15000",
"seed4.conceal.network:15000",
"seed5.conceal.network:15000",
"seed6.conceal.network:15000"
};
const std::initializer_list<const char *> TESTNET_SEED_NODES = {
"161.97.145.65:15500",
"161.97.145.65:15501"
};
struct CheckpointData
{
uint32_t height;
const char *blockId;
};
#ifdef __GNUC__
__attribute__((unused))
#endif
// Blockchain Checkpoints:
// {<block height>, "<block hash>"},
const std::initializer_list<CheckpointData>
CHECKPOINTS = {
{0, "b9dc432e56e37b52771970ce014dd23fda517cfd4fc5a9b296f1954b7d4505de"},
{10000, "55cf271a5c97785fb35fea7ed177cb75f47c18688bd86fc01ae66508878029d6"},
{20000, "52533de7f1596154c6954530ae8331fe4f92e92d476f097c6d7d20ebab1c2748"},
{30000, "50b5d84ac0b8abfe25669aac8514505c4c5f7ffd8e2bba0b52ab64f600d90796"},
{40000, "ae2ed29163a57396f11c743400e55fba3f6b8e6bb6473f421c48ff8c87447ad0"},
{50000, "8ad7969ca5d3cf48f784d33b60d1ea00bfb35b632447584e5181b194f3bb9cd6"},
{60000, "22b1a161de2318b1a83ae0e3d1d04a2c420accccadd861aa8ad6365ec630ce04"},
{70000, "4ef8a3c59b04ad8ae335fee0b5df0c1b114dda57d13232741d82c4984bf22bed"},
{80000, "a60bd6b446c5b09997b5b70f31c56f35358657a673dcf56213a163fb6516750d"},
{90000, "9985f631d4b2c15388e8c3797a1384b4610b13ff3852bc6d8f125ea4e13fdd22"},
{100000, "1ccef60fb31646fc1745ccb42167f2e2efcf953a83b99ff4b6a39c99eb37d0e5"},
{110000, "1b80bf8355ea023de7ed3367881ef111dfdb3aaeb25db3a0d6cad4c3cc0bb4bd"},
{120000, "f621bd615716b75716eb89714d60481077a16b1df4046bf829f6d09b1c8e58a6"},
{130000, "deb2514d03e2faf1c63b55f707b1524665ca4bd71cace3f4e8f0de58f32ecc41"},
{140000, "c439524c13187bb6008acb1e9999317aa44e8d1cd75c96faae78831f6b961bac"},
{150000, "90cc70379ea81d47df998e8b9928ba9191968035ae79ec1cb429c64a55497e03"},
{160000, "4176bdff06416934d7766a6c2f6279d048cfdc516019a0580ea19c1d003038cc"},
{170000, "50e3af756e96115011c8e4d138852e1f4835da805ca5ccd826f81593a53f4bd3"},
{180000, "e1672173a2794245830a742d1df38b5fe5006fe6f00707e1b776bf29316ab18b"},
{190000, "763eaa3c049ef46479144924b41cc9cb37346da88b0a3ae32a10e026c6f7984c"},
{200000, "2ef304bec067c3a94f04440a593a13903a1487890493d15f74ec79c0ae585109"},
{210000, "90dd7aca026ec5f9fdfd2fa9cd0c114c1c6c6bfc0536fb6490c804ac7ef72425"},
{220000, "8de5278fc6703933e32e062b14496b0e1562c941e7e3c5b93147a3b39491fac5"},
{230000, "f8ed2680d912a7f3aeb452d4eb8023f93f6387ff4c6927615691f66701d05d32"},
{240000, "4445874d16b3dd8d5b0f9dee287e47219022c2b214c459e03be2bb71e4a12e3d"},
{250000, "c579d2ad4f95a6c34180a89b32aa9fbe6ab2ecba9f3714ddde90fd5d9f85f6e9"},
{260000, "ce63d00de7546f1dee417b2391692b367dc5c2cfe19ea43c98cf932d3838c5ec"},
{270000, "f16000fefb54ad1f0f927f634c5b6f44fcfa201adc5ee093850301bd773c18fa"},
{280000, "aba16466e085b2c7a792ba449f025bd1e37d6a1d44fa957a1ad4df78f41f6478"},
{290000, "9fd5f13ac51df7ce2b8d78c45fbb864b231d6275bf7495118b4cc415301e6fe1"},
{290665, "4e0082f3e66b0fe4176a850ff9560f1d8d2f2e11dc3a2045904209d11478f779"},
{290674, "ac89a1f4c20674a8d735681b1ded3a1242252bb23341bc9b79bc06b310b490f4"},
{290675, "6782c5e7436f77f4466253d6a70466cc6bfc66c6c51b675864c4543250c09e8b"},
{290676, "0b25026f8c7fb194776c081f2bb32874b82f4298bd0d71c2d0a986117b97fa1e"},
{290720, "36572a88fbed4654f4291f6d7a35a732b81f61e87ec27ce58f38047981b84e09"},
{300000, "2a984212cc42ef62cd2229b624e05aa72926f0e89006e976c88b52d99ea14225"},
{305000, "46104ab66387ab6ca6a3889e81c7b9810e27f547a8684659aeb62c438a3b6cf0"},
{310000, "4a896f5de4f782c59f1f4691505aba0df87a20f2e06499b59496b8d7ffb025fe"},
{320000, "c68d15c181bdfc6c5b7fe5c46c6432a03b95d640caa425a5cb3aa675c1d8f8fd"},
{330000, "af9e972f98bed57579a6691c3d21443d3cbff35005e984044bc99cee82d93922"},
{340000, "6fce13dd473f3673cd08b28171902e281d7fdbbd8b8ba34e0019ae18f597d22f"},
{350000, "f08aad1562ceee3a6c8147846bb3e5dd15b3168007f588ab68bd8ee816eb386d"},
{360000, "cd910715be7dccc155ad3e8a6311f1bbcfaffe3ee25186c454ed27ee61faa977"},
{370000, "6c4a86be9a1f697cadc38d21718803c43f49bf60c71ae253293e29ebac6efe31"},
{380000, "620709892437c28deb72a56e6a91960f481aa682d8dd8652f792fb33e6683ef5"},
{390000, "d2ff4c39b4aed7ef08a99a00b9823bed44581e866180ae3daa8b8e990b57ec63"},
{400000, "9b7302daf5e5933b9a3e75a12651eaad83bea7d0058191cf65eb20985fe281c5"},
{410000, "4f343219e57f78c1063f4b4c5be6cb5a10599d64d36e9f686f7046469a6c7e73"},
{420000, "56b2fec8f7a55c9e2960d7224999c2e8c83a77f051931ba1673e071e7bcd6851"},
{430000, "6d6e24f6c518c9cc24a05967fd1bbb3aeffb670fd7329d0a24053662a2305d9e"},
{440000, "6a0138801d48150985045bc671c752f8209d084adad3624a57edd22f9edbef78"},
{460000, "dec1da5df01c3cdf5d25a577816c93de58dfb6dd6b073619c5cbd50aedefceb7"},
{470000, "1d07fd8995e17429143202da00138f0bfcbdd20aa5ddbba18ac762bc473ffd77"},
{480000, "c896df9146e8f09f6205496dfa1e28037c8223f531546d2d64119068a6d1db1d"},
{490000, "faa86e0b546f7655e829dcd8e967a52d9fa933c832863a648df30cc0e8771fa8"},
{500000, "df5b2b47960ecd7809f037de44c6817640283e13323a36fe3dd894f3b2b3c5e1"},
{510000, "db784d782ac463fbfbf221b417166a80ca1451f8895a1e3027bd19de2952c9bc"},
{520000, "70b9c6945d8156d97d5f337b22ec8a4f77fa8af3b89d63e3fe6b834a03f7a613"},
{530000, "f1b6f4018201e9c498e2b441f8e20f6e562e5d45c69008fe74caa7baa0a16611"},
{550000, "1b922d13de891cd9f7224bd1a3c879a1d7634505f5f562623d7a487d44211327"},
{570000, "9efe8868099afd1f6b17de773da0f5baebf2ace666bf5e599188c64d27cd429f"},
{580000, "39ecee8d292c4e0440467b28ead6ed96c480ac85bec4fdba1e4c14b49b08077e"},
{590000, "d6201b072cfed013b0e1091517624ca72bdd1ef147143356a1f951dd3241dd88"},
{600000, "9f87dd161e37e9dbbcd86a3fafe8e1dec8c54194251ca0c36c646173db12c115"},
{610000, "9c95678a27c5bde2b53efdae5c20a5528f134c4ff75737dee3e3d63b4d79c7ba"},
{620000, "e5de278b0ea676855873663a32a2d21bc6d98cffcb133e249c8219fb0fcdc3eb"},
{630000, "762c8269af35d53408d806d453b8ca6f19fc9e83048bb8d985502344f1d5e08a"},
{640000, "24e1ac8aff3e1e7850c06a377c68b2ea3afe53477b710b988b6b456383a50081"},
{650000, "4587f3196487cdf12e701bebe30340669374e39b6e0ca7a3c32d6b522be44570"},
{660000, "8d8338dab606e4010f1fa53bc0ef268c98f63bf727150184bfedbea37c40026d"},
{670000, "26350d735576a40e4d4e628b57186f4c7f85b3bea6c15f28554706f4c78c3837"},
{680000, "6774c21beb0f4e2383069da967654ce4d26743f313aa7c705f222c055fcf0e05"},
{690000, "33e1ddd732edfb8e850cdca304ae398a2eb495fd2a6876ff759725788f5b1135"},
{700000, "a6b8e9707cd5ac93931b3fcc6bb516d11e7cb840bf49c8d3712bdeba605557be"},
{710000, "922f1ca029163e58a24d6573e7de6bf9bcecc16ae164ebfd0285c0eda57d4eec"},
{750000, "0e22dabd4379040815f078525ed02ae95e26ae92bc9eb35628a5d588e176b900"},
{760000, "ecc64815b44b4c0c67340ff7e0d9fefee2cfbfbed10d61260c49bbe98aeb6ea2"},
{770000, "7c97512a8ffdefa3e97809779841e48ffa6b68bd8a5bf90fcb59c1547f5ad90f"},
{780000, "7acd1d5c843245bf1cc12a966f388111e2258c029595d31539b9257bb1217e61"},
{790000, "580580b3b628b68532d9b141cc5e3299ebdc6e421c58ed155916c418144704ff"},
{800000, "bb0dc113b1bfde3f06bfa341ba7d6de6ea82cebc86b98fc3d122b695e0bfdebe"},
{810000, "c8a8e81032d66b137a99087ddd6ca6289040cb336012d4248ff616e1e7abb5b3"},
{820000, "98a8373323adca6f09048177c774783150bcf25b62e26c804fd33461fc1af09b"},
{830000, "7007d4331703233f48a3f1a2e824734d02ec81e7da46b7e00a2c354edb8de357"},
{840000, "eae669f44a964ce5501b971139ee04657b62dc2535e9305857a1c9e2e839790a"},
{850000, "e354bf503e8273a90d5d338ce78966ee820b69490b3a3183f0765281429d2f77"},
{860000, "11b35a3f0c78686d75991d5bf65e868e565ea4ba15e96c9b0f643a4d9983eedf"},
{870000, "21fef5a9cbb6ebe8ba271bdb55ed4d3ccd0468ab31a77f634cabc893e2a9661e"},
{880000, "a861367503fec46c12f8ae957438a389c4de7b3c267cfdb21a7be29337885e10"},
{890000, "092b29ab3369d0227239f0604d57ab91a3e1794ca3abe0c75fd5e69acb611a66"},
{900000, "4cb49bba6abe10464db1075ed7125172e639ec9ee03f08ddb4dbed318d9dbfb9"},
{910000, "2b3064cc74a3780e55c6eba250ec1e6ad6deb7ea6188430c07ba6fb3b60b63f0"},
{920000, "961be71463b51c41fa5fbd43213b43b4b66173c26c1cd29d55881aae29a8ce07"},
{930000, "511d2784b65e9ff0da55358834b88319b653aa1b5bf5a0f76c25c0467c16c536"},
{940000, "781dba46e6a2d8a7ba4129e32e7764c519e011d8967672f7873599eb5449f760"},
{950000, "5404a8e358ddf55c018bff01f4c112fc5ea291ac4429524d8b5c496ede697246"},
{960000, "5133cf16ece3cba43a199c11dc80ecd81a8dbda4ce0c517f78a3e400efa6a730"},
{970000, "e9ae491f24acd824dbcd43178c3070878e0ec32b494fe293b153fd19b2e8428a"},
{980000, "c99c74ae4e3ff43ba2c93cd8a6d3ed52598c7bda6b42fac18d9569e29c5753aa"},
{990000, "0412793a1650aeba2cf9ab7c32bee26668e8e997a55e97d65c609e903f9e04ec"},
{1000000, "6ad9d4ccc9666b31481079374e573c20ebdf2d63862da8fcc2c45d13093b93ba"},
{1010000, "f341d678cfbd5d488bbc179bc54fc92587dad7fb29823facc95f3e26158a722d"},
{1020000, "e3dae82d451358ac300e3960695784efb7d76833e620d75196cd0af9db0568bb"},
{1030000, "4d1d4f3174e684c93cb3dc0e261776224b02f6c0bd2c7ea91b6f923b42e7b321"},
{1040000, "c894d5f5a6637d7ec50c9a09722059aa5e878bf1eda7210a1f6c4e61eca770ef"},
{1050000, "8a0f5df47ce13a082423743651f22209cef78f46b933ced7642d1f6b8d8d80be"},
{1060000, "59d6ee913234a03eefa023a3a12487c5244973e17a9c9dcc61bd7cb3c5dcc426"},
{1070000, "0895514f95977bdbb220550f00ec38962a6e672a125dad115f2408600fd9b593"},
{1080000, "58a71c6f06c16e3337f5dd43a018d2768b2f6ca2d97a7bee9e81b2b2bae866c3"},
{1090000, "2c268f5a834ac104b04991b8b131205468ed06cd6a5acdadffa05db82394f113"},
{1100000, "8b87b5d9941cf9b46ceaff134cff5bd8a9d0326bb045e8abcaa1eb63fda739bd"},
{1110000, "2215193bc9e56654777e40c4d62c7b89f48e8d14b62335a800034bd5bed12835"},
{1120000, "35a3baaaf080bd2e8321a0344fc939fbeca147f6078bc3c807cc3eec23325f96"},
{1130000, "ea86d90d85c8b56edd03365d8558acb84dc3f33764a32df426eaf20b7d5b9d71"},
{1140000, "611dd25b2ec9cc5a630e5aee561921efc13c939f179507f7a08afceb13f5035f"},
{1150000, "122a7bf817cddd406a016304b35991f6f2a5cdd122cdc1b5a54fdd4e012066ae"},
{1160000, "85b4997808f2c21ba7f94baa97de19bf1dc809fcd40936bf1fcaaca191ae1466"},
{1170000, "7675f0144db2ae5f6e0c378a25778850c9fd6facd285e89cdfc4169f19bb79d2"},
{1180000, "4f9c52d49f270df62ddf2b45f7e616321b686d6204e3c67f8807129ff180cdfb"},
{1190000, "8b6fd535bec46f3b28772e82e210fd1988b1b4704801b75712c6af17b9a09a2b"},
{1200000, "9434fdddd2e7521fa92aea42f11a30d364ccc413074993b2aacb31987cca02da"},
{1210000, "d424b084320d8c138dca36de8bb2dba40e142f9fe6785f50b39c80543a653c4e"},
{1220000, "9dad391d2c819b482d9a9408db63e480726597f21d180f9a590f3c20f2c9fbc8"},
{1230000, "3c0fda332a0a1d0d9329087430960fd6506f7d01cf14cd027567074c3c9b79ef"},
{1240000, "00a5a0b11c0f20fd30e98881dcf7c2246a67aea8529c71400f3bae4658214ce2"},
{1250000, "786f2af5d5ff526cfb0330baed655d2a7bafbe5bcafa10759b17d6cd9cf9ee1c"},
{1260000, "0aded508302e4987d6a585990e2b1f27b81582dd0ccff3fc40ca0779daaa7da1"},
{1270000, "0b8a495699b85eae4e115b84259b056d9084025a0e9b11b67cca1c47552f0998"},
{1280000, "544b164dfc4e19221e23e427fe821c812dda2a41fe5eee1915065f99a3c707d2"},
{1290000, "7844314fdd7e70ed38def90377339e249108e328bb94820f070c6aa2a787abf9"},
{1300000, "68e1ce32210bc1cd41ea26e64382f39c5302bf251273cc6fd35d80a3c19df815"},
{1310000, "64aab7bbc148131f11479e74bbbd74c67e6ee45312bd6e72f5b68d5d1d383e46"},
{1320000, "1e3d88026216db2a09b7771f5c36b6a9cf49086d259160b2ad4530155265c394"},
{1330000, "2c05b06c4412738a06961406cea1d3b605afd0380a29ff306db6f1b820ce802f"},
{1340000, "271352a6b9d8cdef191aaf3395d5b38d7e7bd1b270766aceec915d0e5d6eb9c4"},
{1350000, "2911699e718b064a4820a860bff5b421ee122707cd4cc7bacebfcb70ed4ea8a5"},
{1360000, "2635c819e25ea4d25be05adf7b515c09b14ff0bffd600921ab488d8597e1e35e"},
{1370000, "a8e01900ca2289971a6f926c9bbd420a86c9213c287b8c207c4ee5accff27f10"},
{1380000, "d6014404b60a7fd16372aacefb78132d417d8e08b5a6876851ab4862b167c84a"},
{1390000, "30c3eb1c67b1ff52e84c7637131f6e0a950464c633e6e69bb27be7488a690462"},
{1400000, "9668035887ed9f819382db025f852e57aa02fa8980b4c9043f0dd535ea4a1085"},
{1410000, "a01f353bfe5b907f9b0ffa7e4226caca5d8a67e2bf4b39c13c93b63a4a7d4379"},
{1420000, "930ad5850a8aeeb8ee38b08006bfea2e93474d97bf666b97df9ab9fbe84a79be"},
{1430000, "8d1b006f9fa277196f62a98a501ecf91a81731d199463c23931181b4a28b694a"},
{1440000, "b54921b7c396e66e1a15492289e33993a166f49675739f437257fbb760ee1035"},
{1450000, "f8a2b95f394f6cd188363a20f585dadbfa0db707dd5fa2699604eb7ccab313a6"},
{1460000, "6bd96b76bd2d3bc7ca320c089ffe21e64565432401cb94736d60d8f70cfb42f3"},
{1470000, "7e2d26dd0b258ff826d6ff1e36fe6606206fca535ba0ed40e944ddb165da9dc0"},
{1480000, "f4463eed0890245dca0ccf9fb3a9f101e110f1dc53ce1286ef47d56938faf007"},
{1490000, "bc76acf39ea16ce02588798b93034208881bab6c6dd9dfc545a6fab51dfce886"},
{1500000, "13909d5ebed03c5e54de4b3e1f47483d38e1bb612fe191bf4be5e2aee8671909"},
{1510000, "b0bf0d7ced3918d768277f88f0d34a088904a4548b96ba2f586e027d7c948d8f"},
{1520000, "4bebc0c4f960178c302801058f7a19d9fb3375f1034039c739419eb1314f540b"},
{1530000, "a148df907c658bd5b9f58fed5b4a406da95a097e821a9ab80021010b574c5002"},
{1540000, "1371572913d79bde7e706b290bed84a42f8cfa51aab988de836b10d386800a05"},
{1550000, "1390b9c2e364c9c94de66cf17913d153eac03397009ded8e535a9cbc564f4590"},
{1560000, "b56e9cd0c3221c0667c3936bcc1c4bd2bcb00bd15bb975f832e217024627d905"},
{1570000, "dd811f410f4869ccb51df14067106a0253fd2d34f1035be0c2616ffb57aa8476"},
{1580000, "5cb85e0cb5c2107a7f27836634a0db741b9ab116f533f3cb18ddf1138cc0d4a3"},
{1590000, "054b3e309b71c74a2503a9b72923181a8187a7f745d654c611aa411da4d59b91"},
{1600000, "62c0e5532769631a264db1e7de3dbdb0a4e707016030e7b36094653a89b3383f"},
{1610000, "c5f373b758ec4dc0c2c79a38e63f2f9773a5f98340081a3d955146f3c4b02177"},
{1620000, "fa9183f70ace53045a32308bc025b7aed664b8dc3e80f214a80df7649e7d7756"},
{1630000, "f9f7beb0d45d1341981fb6c6053b2a011bc1a6a9217ba95bec21c49689c03830"},
{1640000, "4ec7b83027c461a7b456c147ac7bc443419d77e8455293f82ed5f21471887a90"},
{1650000, "3251ef7ac4e565e667aa0baeca3999fe8bb10ec86b982da82a155a0b8f11b444"},
{1660000, "cb06857c89eab079bfb46915ff580fa3a7b1aea98b8716313d80031093f1e73e"},
{1670000, "0b80109884e517455e0cbbefecb1a82305c7dd3c531bf8af025931fd78fe4659"},
{1680000, "fbd0570f79c908ae1d2a50f8f8721c8ac4033b084d25058101742b69abd72cd6"},
{1690000, "ddccf0e57aa2e0b620dbad688540d9dc96e919e003d043c15ac2400670a988c3"},
{1700000, "0adc9fa2b3dca278a8cdf941916bccd2b6eaf9c62258e395ed1bc9e335e52bf7"},
{1710000, "3c83e0ec8ba2f34f98d7e54dfcc23edc8cef54cbe8105a229857587dac23b366"},
{1720000, "eae66d4e769f84f091b8543fef37028ecdece1f8c9bb4c60c7a029b7abc4fd98"},
{1730000, "4460de0f010fdfbee496f9c0c48e45837631034d1e3fbfad210dcd84a02cd030"},
{1740000, "ab11dccc84aaa807caca37c29409412bd81f627c7acb57063854eb6406642e23"},
{1750000, "8902ea70c03fbbe69fb17a251c75cc31875b8dfb11c9cb9cc37d794c6118d8fe"},
{1760000, "e7637ab5d169b0b57d9498b010f47b7c8fc81e1ff92a2c28b87f8db6e858e010"},
{1770000, "7aea53caebec726b6819297d0a12b478b058f44a7903aed515b5a17bc904642d"},
{1780000, "9d585a0619f00c32cc467a99f56806cd9d4c8b345e4ec15b201816f68fb279e1"},
{1790000, "1ffe75d43b7d0e9c01bbff3e10ea96312b41a2521c28b7b280ebacce8205cb5a"},
{1800000, "5aca5a5330986fff309661ce481b88a666353a168cbcbef3e2a81dac222c3ef1"},
{1810000, "fab81821bb7ba4597ad498c2a46e0b1424bdd29108eaf5af5ad054f09729c0c6"},
{1820000, "37f409b7f205c5d062d390bcc9cc0d7bc720d400665e5da0df8c7c341e4c5e43"},
{1830000, "e418011daa0f12e4c62e7b55475cdbd16d572b3ea4fedd984414fc33554d4913"},
{1840000, "b3a95fbf906555264a31906678b299c0851d09628b8d37969a285cb54a614c31"},
{1850000, "041d84a8c1fb68d24e6a9d8fe5aab27c6db654ecaad3b2d541c40d6e9df53feb"},
{1860000, "63642037f4d5d82150c120e776a3b2d2a80f725b4759ffda12c94bd45499fb25"},
{1870000, "159fa13f6f9f48e2d8344e76ebdfe2ea986b9a72e94325dacbbd3bd73cbdbb41"}
};
const std::initializer_list<CheckpointData> TESTNET_CHECKPOINTS = {
{0, "850ac16022f4dddab624fad3f9049dba80592c8ea51a5dff19fefeb386e536b1"},
{25000, "bdde29c10211c911947e1e0d602309e95fb915372f3317690c7860ef451a78e7"},
{50000, "ceb6c3e01ccd832779060a65a348ef38cab067bc951df11aa38332b8c2b7d299"},
{75000, "cf2e2c171107e05aa9932e7f66a3df5117e5c1a4b084bb9b0c9c79300ebb82ce"},
{100000, "a2c7179f5e7ea541ba8ed929044600b9cbf2aa20e5cf1d29cb93439fda4431ba"},
{125000, "8a1737f2eee125776dff01288ada59ced95f9ab3a3fcbbed9c32a3dc20cad033"},
{150000, "ffacefc66ca2a8e8f86cb857682568f1ba6280cd7d0363d4c322947ec32ccfe7"},
{175000, "a053a4d65eeabafdb2766d1d70969c81849d6f00d9bd2bc88913c578bc462336"},
{200000, "64fdf3fc7cb0cf0596624370324c898dc70f6792f654490fad2a2211ad07fd5f"},
{225000, "a39f3d7a0891f9f58b6419d61cd954411fbff93e122205d7f46ecec9948470eb"},
{250000, "8cdecb3de4ba342e4a817cbd02e81238574391864182711b193c05403eb1c87d"},
{275000, "61cab9e0d8133e58ae8544c320e43b433945ae32d9599df8eb41c0398c1377b8"},
{300000, "48ee76f5c16deb56f5d4e5acd632c78f8d5b71b1371514459066c224e4cd82dc"},
{325000, "2c2566bdabcd1ae1fc328bdeb6b55da56414847101e767a808cf9d9e2e4a1358"},
{350000, "14aaebe52ec107fac28179ae1056821c112932e74bfa971e9040730b9a797b09"},
{375000, "11858ed98655337da5f959194e96f4405a5811bb96afdb8ad1e450a62face3c8"},
{400000, "1de31d8d458e0b0355fd7ff14ab757e6991b1b66c5e63156849891118843bc26"},
{425000, "63c2ff4cb122d76acb4c8939996d2486fcf6d347f801ad2b3b7356ffab0f1b85"},
{450000, "aa34be98d020af37faf6b78ffe51561a3c001b0322f726da75574e9c8c86dc7b"},
{475000, "d6224b5f69024e101487da252b3efc75a8b035810eae32d51656e2dee42cc757"},
{500000, "f0aa507fdd0cc13698381002ee962e5943db1ade6d20c27eaf8544a3d0dc8230"},
{525000, "14c6a1f432d577861d0c6a510bffa18bf8c09629f3553d9d475d5a46421ec8fa"},
{550000, "29699db2cc98d5e9aee8c3abcc0d64604d121692aae50f8bb7e642083ba8f7fc"},
{575000, "f32d55598a3df5e83a28a1c0f67ecc836c7fc2d710be7656fddd3d07b0f3e88f"},
{600000, "b44f8e1a1bcc9841a174f76ff04832e7090851dfd0a2e7ac9ce68990c5b21ca3"},
{625000, "774e1129050fe4d09661ddf335f9b44922b1e44637bbfd30f44a89142e7bf8f9"},
{650000, "ddc7bd7f5842031225f69361da9b361429b656c6f2db9e5a8df24a7448618823"},
{675000, "d5aa61c6b083b03f2c530c94ada73b7601cf10611119595e096561fc00bc0d6a"},
{700000, "41ae611b7f582e0e094bfd479b079fa2066e81ade5c0b74ab0bf50c69e66f6f9"},
{725000, "6505b30b014e9fc81e9f5227ebcb498690fc5a2c3082c2a7bb9e32ed37009d88"},
{750000, "c6997a86c757510bfa9d028c87a4468f29beac8a3960010eecb6b2554f02e06c"},
{775000, "9c3fa48b14aa8a11220f4336de4f9a001b329ccaca45aaf7020a97b4c556afd3"},
{800000, "eb5b90084843077ee53bc80554e03bd7a67358a01be1eb5221affb38b9521b63"},
{825000, "062c0294f5400e211407fd00ee65dc45989a2c9c51dd9f1b8b6c50fa29001404"},
{850000, "a5cb6c33edd8c39a21b0105461f668bd89bf9a7e18ec27c8b4c5e3662109ae8e"},
{875000, "91eac54f608c1d0e43111c107a2f5caf259bcbbd66714b6591cedbc64f9c4cdf"},
{900000, "a70b6df1794a6d91071cd5fc87719769bf09610d520c2c2134f53908d1e3de40"},
{925000, "a00b47f3610cfd5c509183322fca89e388c0427601ce4db7e397acbcab5a3ee6"},
{950000, "387573b7b9bdbc1d79c28156cf15d7e08ddf248a0257b0ee7ef2731c5c7a0534"}
};
} // namespace cn