]>
Commit | Line | Data |
---|---|---|
0e4b3175 | 1 | // Copyright (c) 2010 Satoshi Nakamoto |
f914f1a7 | 2 | // Copyright (c) 2009-2014 The Bitcoin Core developers |
f2e03ffa | 3 | // Distributed under the MIT software license, see the accompanying |
0e4b3175 MH |
4 | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | ||
c6a7e897 DH |
6 | #include "main.h" |
7 | #include "crypto/equihash.h" | |
51ed9ec9 | 8 | |
0e4b3175 | 9 | #include "util.h" |
85c579e3 | 10 | #include "utilstrencodings.h" |
0e4b3175 | 11 | |
187115c0 PK |
12 | #include <assert.h> |
13 | ||
8388289e PW |
14 | #include <boost/assign/list_of.hpp> |
15 | ||
db0f9315 S |
16 | #include "base58.h" |
17 | ||
a60120e9 WL |
18 | #include "chainparamsseeds.h" |
19 | ||
a97308c5 | 20 | static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, const uint256& nNonce, const std::vector<unsigned char>& nSolution, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward) |
90b6ee6c | 21 | { |
072099d7 S |
22 | // To create a genesis block for a new chain which is Overwintered: |
23 | // txNew.nVersion = 3 | |
24 | // txNew.fOverwintered = true | |
25 | // txNew.nVersionGroupId = OVERWINTER_VERSION_GROUP_ID | |
26 | // txNew.nExpiryHeight = <default value> | |
90b6ee6c JT |
27 | CMutableTransaction txNew; |
28 | txNew.nVersion = 1; | |
29 | txNew.vin.resize(1); | |
30 | txNew.vout.resize(1); | |
91690d6e | 31 | txNew.vin[0].scriptSig = CScript() << 520617983 << CScriptNum(4) << std::vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); |
90b6ee6c JT |
32 | txNew.vout[0].nValue = genesisReward; |
33 | txNew.vout[0].scriptPubKey = genesisOutputScript; | |
34 | ||
35 | CBlock genesis; | |
36 | genesis.nTime = nTime; | |
37 | genesis.nBits = nBits; | |
38 | genesis.nNonce = nNonce; | |
39 | genesis.nSolution = nSolution; | |
40 | genesis.nVersion = nVersion; | |
41 | genesis.vtx.push_back(txNew); | |
42 | genesis.hashPrevBlock.SetNull(); | |
43 | genesis.hashMerkleRoot = genesis.BuildMerkleTree(); | |
44 | return genesis; | |
45 | } | |
46 | ||
47 | /** | |
48 | * Build the genesis block. Note that the output of its generation | |
49 | * transaction cannot be spent since it did not originally exist in the | |
50 | * database (and is in any case of zero value). | |
51 | * | |
52 | * >>> from pyblake2 import blake2s | |
53 | * >>> 'Zcash' + blake2s(b'The Economist 2016-10-29 Known unknown: Another crypto-currency is born. BTC#436254 0000000000000000044f321997f336d2908cf8c8d6893e88dbf067e2d949487d ETH#2521903 483039a6b6bd8bd05f0584f9a078d075e454925eb71c1f13eaff59b405a721bb DJIA close on 27 Oct 2016: 18,169.68').hexdigest() | |
54 | * | |
55 | * CBlock(hash=00040fe8, ver=4, hashPrevBlock=00000000000000, hashMerkleRoot=c4eaa5, nTime=1477641360, nBits=1f07ffff, nNonce=4695, vtx=1) | |
56 | * CTransaction(hash=c4eaa5, ver=1, vin.size=1, vout.size=1, nLockTime=0) | |
57 | * CTxIn(COutPoint(000000, -1), coinbase 04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334) | |
58 | * CTxOut(nValue=0.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) | |
59 | * vMerkleTree: c4eaa5 | |
60 | */ | |
a97308c5 | 61 | static CBlock CreateGenesisBlock(uint32_t nTime, const uint256& nNonce, const std::vector<unsigned char>& nSolution, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward) |
90b6ee6c JT |
62 | { |
63 | const char* pszTimestamp = "Zcash0b9c4eef8b7cc417ee5001e3500984b6fea35683a7cac141a043c42064835d34"; | |
a97308c5 | 64 | const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; |
90b6ee6c JT |
65 | return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nSolution, nBits, nVersion, genesisReward); |
66 | } | |
67 | ||
f2e03ffa MF |
68 | /** |
69 | * Main network | |
70 | */ | |
f2e03ffa MF |
71 | /** |
72 | * What makes a good checkpoint block? | |
73 | * + Is surrounded by blocks with reasonable timestamps | |
74 | * (no blocks before with a timestamp after, none after with | |
75 | * timestamp before) | |
76 | * + Contains no strange transactions | |
77 | */ | |
1efd6f2b | 78 | void *chainparams_commandline(void *ptr); |
b978bc5b | 79 | #include "komodo_defs.h" |
80 | ||
7c130297 | 81 | extern char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN]; |
05c2ba63 | 82 | extern uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT; |
00aec80e | 83 | extern uint32_t ASSETCHAIN_INIT; |
84 | extern uint32_t ASSETCHAINS_MAGIC; | |
85 | extern uint64_t ASSETCHAINS_SUPPLY; | |
e11712df | 86 | |
3e24a533 JG |
87 | const arith_uint256 maxUint = UintToArith256(uint256S("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); |
88 | ||
0e4b3175 MH |
89 | class CMainParams : public CChainParams { |
90 | public: | |
7a4c01c9 | 91 | CMainParams() |
92 | { | |
f5ae6c98 | 93 | strNetworkID = "main"; |
bc17ac49 | 94 | strCurrencyUnits = "KMD"; |
1a321777 | 95 | consensus.fCoinbaseMustBeProtected = false;//true; |
45e3deea JG |
96 | consensus.nSubsidySlowStartInterval = 20000; |
97 | consensus.nSubsidyHalvingInterval = 840000; | |
bd006110 JT |
98 | consensus.nMajorityEnforceBlockUpgrade = 750; |
99 | consensus.nMajorityRejectBlockOutdated = 950; | |
45e3deea | 100 | consensus.nMajorityWindow = 4000; |
ae381ffd | 101 | consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); |
f2c48e15 | 102 | consensus.nPowAveragingWindow = 17; |
3e24a533 | 103 | assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); |
8f3ec042 JG |
104 | consensus.nPowMaxAdjustDown = 32; // 32% adjustment down |
105 | consensus.nPowMaxAdjustUp = 16; // 16% adjustment up | |
20285609 | 106 | consensus.nPowTargetSpacing = 1 * 60; |
50027f06 | 107 | consensus.fPowAllowMinDifficultyBlocks = true; //false; |
2423a40c | 108 | consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; |
780f526b JG |
109 | consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = |
110 | Consensus::NetworkUpgrade::ALWAYS_ACTIVE; | |
2423a40c | 111 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; |
f52da911 JG |
112 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = |
113 | Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; | |
2423a40c | 114 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170004; |
54868376 JG |
115 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = |
116 | Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; | |
780f526b | 117 | |
9d365796 | 118 | /** |
f2e03ffa MF |
119 | * The message start string is designed to be unlikely to occur in normal data. |
120 | * The characters are rarely used upper ASCII, not valid as UTF-8, and produce | |
b05a89b2 | 121 | * a large 32-bit integer with any alignment. |
f2e03ffa | 122 | */ |
3090f2a1 | 123 | pchMessageStart[0] = 0xf9; |
62fdd8d0 | 124 | pchMessageStart[1] = 0xee; |
3090f2a1 | 125 | pchMessageStart[2] = 0xe4; |
126 | pchMessageStart[3] = 0x8d; | |
870e3556 | 127 | vAlertPubKey = ParseHex("020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9"); |
3090f2a1 | 128 | nDefaultPort = 7770; |
2595b9ac | 129 | nMinerThreads = 0; |
33d6825c | 130 | nMaxTipAge = 24 * 60 * 60; |
f9ec3f0f | 131 | nPruneAfterHeight = 100000; |
c6a7e897 DH |
132 | const size_t N = 200, K = 9; |
133 | BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); | |
134 | nEquihashN = N; | |
135 | nEquihashK = K; | |
0e4b3175 | 136 | |
4b0a8bbd | 137 | const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; |
4949004d | 138 | CMutableTransaction txNew; |
0e4b3175 MH |
139 | txNew.vin.resize(1); |
140 | txNew.vout.resize(1); | |
1ade2131 | 141 | txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << std::vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); |
4b0a8bbd | 142 | txNew.vout[0].nValue = 50 * COIN; |
0e4b3175 MH |
143 | txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; |
144 | genesis.vtx.push_back(txNew); | |
4f152496 | 145 | genesis.hashPrevBlock.SetNull(); |
0e4b3175 MH |
146 | genesis.hashMerkleRoot = genesis.BuildMerkleTree(); |
147 | genesis.nVersion = 1; | |
148 | genesis.nTime = 1231006505; | |
50027f06 | 149 | genesis.nBits = KOMODO_MINDIFF_NBITS; |
66f07f5d JG |
150 | genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000000b"); |
151 | genesis.nSolution = ParseHex("000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2"); | |
1d095ca0 | 152 | |
9000990c | 153 | |
154 | /*genesis = CreateGenesisBlock( | |
a97308c5 DK |
155 | 1477641360, |
156 | uint256S("0x0000000000000000000000000000000000000000000000000000000000001257"), | |
157 | ParseHex("000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce157"), | |
9000990c | 158 | 0x1f07ffff, 4, 0);*/ |
0e4b3175 | 159 | |
bd006110 | 160 | consensus.hashGenesisBlock = genesis.GetHash(); |
4b0a8bbd | 161 | assert(consensus.hashGenesisBlock == uint256S("0x027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71")); |
162 | assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); | |
57466ea6 JG |
163 | vFixedSeeds.clear(); |
164 | vSeeds.clear(); | |
4afdbc95 MF |
165 | vSeeds.push_back(CDNSSeedData("komodoplatform.com", "seeds.komodoplatform.com")); // @kolo - old static dns seeds |
166 | vSeeds.push_back(CDNSSeedData("kolo.supernet.org", "static.kolo.supernet.org")); // @kolo - new static dns seeds ToDo | |
b26a0857 | 167 | vSeeds.push_back(CDNSSeedData("kolo.supernet.org", "dynamic.kolo.supernet.org")); // @kolo - crawler seeds ToDo |
88188dc2 | 168 | // TODO: set up bootstrapping for mainnet |
6fc71791 | 169 | base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,60); |
3090f2a1 | 170 | base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,85); |
171 | base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,188); | |
a2b04ddf CF |
172 | base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container<std::vector<unsigned char> >(); |
173 | base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container<std::vector<unsigned char> >(); | |
e104fcdd SB |
174 | // guarantees the first two characters, when base58 encoded, are "zc" |
175 | base58Prefixes[ZCPAYMENT_ADDRRESS] = {22,154}; | |
97d48e24 JDL |
176 | // guarantees the first 4 characters, when base58 encoded, are "ZiVK" |
177 | base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAB,0xD3}; | |
d5d2fb71 | 178 | // guarantees the first two characters, when base58 encoded, are "SK" |
6fc71791 | 179 | base58Prefixes[ZCSPENDING_KEY] = {171,54}; |
b801c3b7 | 180 | |
739d6155 | 181 | vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main)); |
0e4b3175 | 182 | |
78dece34 | 183 | fMiningRequiresPeers = true; |
3fcfbc8a | 184 | fDefaultConsistencyChecks = false; |
c8c52de3 | 185 | fRequireStandard = true; |
c8c52de3 | 186 | fMineBlocksOnDemand = false; |
cc972107 | 187 | fTestnetToBeDeprecatedFieldRPC = false; |
b3f7ce9b D |
188 | |
189 | // LogPrintf(">>>>>>>> ac_name = %u\n",GetArg("-ac_name","").c_str()); | |
190 | ||
191 | // if ( GetArg("-ac_name","").c_str()[0] != 0 ) | |
192 | // { | |
193 | // } | |
194 | // else | |
195 | // { | |
196 | // } | |
197 | ||
cad9f4c8 | 198 | if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 ) |
1efd6f2b | 199 | { |
9d365796 | 200 | |
1efd6f2b | 201 | } |
e11712df | 202 | } |
0e4b3175 MH |
203 | }; |
204 | static CMainParams mainParams; | |
205 | ||
b35fd600 | 206 | void CChainParams::SetCheckpointData(CChainParams::CCheckpointData checkpointData) |
b3f7ce9b D |
207 | { |
208 | CChainParams::checkpointData = checkpointData; | |
209 | } | |
210 | ||
1efd6f2b | 211 | void *chainparams_commandline(void *ptr) |
212 | { | |
d78a07c6 | 213 | CChainParams::CCheckpointData checkpointData; |
05c2ba63 | 214 | while ( ASSETCHAINS_P2PPORT == 0 ) |
1efd6f2b | 215 | { |
9d365796 | 216 | #ifdef _WIN32 |
217 | boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); | |
218 | #else | |
1efd6f2b | 219 | sleep(1); |
9d365796 | 220 | #endif |
1efd6f2b | 221 | } |
05c2ba63 | 222 | //fprintf(stderr,">>>>>>>> port.%u\n",ASSETCHAINS_P2PPORT); |
cad9f4c8 | 223 | if ( ASSETCHAINS_SYMBOL[0] != 0 ) |
224 | { | |
05c2ba63 | 225 | mainParams.SetDefaultPort(ASSETCHAINS_P2PPORT); |
226 | if ( ASSETCHAINS_RPCPORT == 0 ) | |
227 | ASSETCHAINS_RPCPORT = ASSETCHAINS_P2PPORT + 1; | |
cad9f4c8 | 228 | mainParams.pchMessageStart[0] = ASSETCHAINS_MAGIC & 0xff; |
229 | mainParams.pchMessageStart[1] = (ASSETCHAINS_MAGIC >> 8) & 0xff; | |
230 | mainParams.pchMessageStart[2] = (ASSETCHAINS_MAGIC >> 16) & 0xff; | |
231 | mainParams.pchMessageStart[3] = (ASSETCHAINS_MAGIC >> 24) & 0xff; | |
05c2ba63 | 232 | fprintf(stderr,">>>>>>>>>> %s: p2p.%u rpc.%u magic.%08x %u %u coins\n",ASSETCHAINS_SYMBOL,ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT,ASSETCHAINS_MAGIC,ASSETCHAINS_MAGIC,(uint32_t)ASSETCHAINS_SUPPLY); |
b3f7ce9b D |
233 | |
234 | checkpointData = //(Checkpoints::CCheckpointData) | |
235 | { | |
236 | boost::assign::map_list_of | |
237 | (0, mainParams.consensus.hashGenesisBlock), | |
238 | //(2500, uint256S("0x0e6a3d5a46eba97c4e7618d66a39f115729e1176433c98481124c2bf733aa54e")) | |
239 | //(15000, uint256S("0x00f0bd236790e903321a2d22f85bd6bf8a505f6ef4eddb20458a65d37e14d142")), | |
240 | //(100000, uint256S("0x0f02eb1f3a4b89df9909fec81a4bd7d023e32e24e1f5262d9fc2cc36a715be6f")), | |
241 | (int64_t)1481120910, // * UNIX timestamp of last checkpoint block | |
242 | (int64_t)110415, // * total number of transactions between genesis and last checkpoint | |
243 | // (the tx=... number in the SetBestChain debug.log lines) | |
244 | (double)2777 // * estimated number of transactions per day after checkpoint | |
245 | // total number of tx / (checkpoint block height / (24 * 24)) | |
246 | }; | |
247 | ||
248 | } | |
249 | else | |
250 | { | |
251 | checkpointData = //(Checkpoints::CCheckpointData) | |
252 | { | |
253 | boost::assign::map_list_of | |
254 | ||
255 | (0, mainParams.consensus.hashGenesisBlock) | |
256 | ( 5000, uint256S("0x049cfc91eef411e96603a42c9a77c5e30e9fe96f783ab818f4c00fb56fb29b6c")) | |
257 | ( 10000, uint256S("0x0a0169db3614311cd4181deb73cfcf7f640e7dc956cda34e0121a0351925e9ae")) | |
258 | ( 15000, uint256S("0x00f0bd236790e903321a2d22f85bd6bf8a505f6ef4eddb20458a65d37e14d142")) | |
259 | ( 20000, uint256S("0x01bbf0c38892bdcced62b538329cf63bc7badca3e7e1bff8eb10345436871c6e")) | |
260 | ( 25000, uint256S("0x04ca27808268dda8f942b647a6df844be1b263a661a13740293db962022d1f9e")) | |
261 | ( 30000, uint256S("0x04c9e8cfbcd37399085e529b50147de8afb80c76c48752c122d56f23316a7acb")) | |
262 | ( 35000, uint256S("0x00815f1240354cff7487c67f7dff78e248cb9053ed2c92751d1a9ad42d3eaedf")) | |
263 | ( 40000, uint256S("0x00eafd9dfb1e5f1bf1cca0c49be628538900daf69b665464443d29c2c3b6a2fe")) | |
264 | ( 45000, uint256S("0x0377730632caf694b92f40d03ae0fbe5bd86a1205014b71d975453ac793b0af9")) | |
265 | ( 50000, uint256S("0x00076e16d3fa5194da559c17cf9cf285e21d1f13154ae4f7c7b87919549345aa")) | |
266 | ( 55000, uint256S("0x0005a0701a83e05b639418ea4c87018544a4d22b2b49e5f111161e8ffc455108")) | |
267 | ( 60000, uint256S("0x0000296fc15f8599b7c6561d0e0a96f24766135ed79107b603d6dd6e55142c0d")) | |
268 | ( 65000, uint256S("0x000861f5d7970d5399733b4605074d47f877d6536f74ffae6f08e871ee29e6f2")) | |
269 | ( 70000, uint256S("0x0002af1d487c567526c517b52996944dca344e139cddca77c2e72f746e73b263")) | |
270 | ( 75000, uint256S("0x0d08129659be5f105e70c047769359eaf3475d61a726750859fdca3e1a2bf5cc")) | |
271 | ( 80000, uint256S("0x0af5f3f1caae4f08c74a82689731d1ef8e55107c06f9a996e251b8ecb96989ad")) | |
272 | ( 85000, uint256S("0x00000c8ee29086c5fb39eddad0619773b9ce936c77c13e5e5118a4998e939544")) | |
273 | ( 90000, uint256S("0x06d3bb7f9ee5b55f67b2dc13c680699a2f736f43a44b4e4cfd41a58aa00f063f")) | |
274 | ( 95000, uint256S("0x0670981b269879aae83a88f6f0c4db34763c93fd410d96435f2acb4e6580b976")) | |
275 | ( 100000, uint256S("0x0f02eb1f3a4b89df9909fec81a4bd7d023e32e24e1f5262d9fc2cc36a715be6f")) | |
276 | ( 105000, uint256S("0x018b97d7e6d259add24afe0e08fc125dc21d734e8831b68b430f5c3896deb4af")) | |
277 | ( 110000, uint256S("0x09644ff52734e0e911a9ba7ecd03cf7995b25301840a9637891ef9af69f59c32")) | |
278 | ( 115000, uint256S("0x0ee382b4729b8ceb918a92913f9c144a6a4f8a50bfc0f8b4aac5b12592caed7f")) | |
279 | ( 120000, uint256S("0x082a7918a0dd9cb2df65f55acb8d0a4a535b3fa684d92c3ebcb24ed7019d975b")) | |
280 | ( 125000, uint256S("0x00008f76c4484fd539c9d02fc69c40a50b6f9e00984d33890b85cc0324159e9e")) | |
281 | ( 130000, uint256S("0x011b09e53acfe46f310e8c960a9c4f4f490cc7b2cd3791d7a6a80d6e8ac96b36")) | |
282 | ( 135000, uint256S("0x01e0cd48358fa05646baa6f00e26717474d6049a537c8861b324d1f497dc3d4a")) | |
283 | ( 140000, uint256S("0x0e6db36fd8a9d1b7baf359c8bd5c76635d0bcada973a75b5d2028ca3baea4961")) | |
284 | ( 145000, uint256S("0x00010c40b57316ce6cde076807c9db956452a3c82cb09fe7d56c6bb1a7e24726")) | |
285 | ( 150000, uint256S("0x0a817f15b9da636f453a7a01835cfc534ed1a55ce7f08c566471d167678bedce")) | |
286 | ( 155000, uint256S("0x0528084fd00223bd9747635d7a4d8cc79f158795cad654efb78e4e4cc5f23d6a")) | |
287 | ( 160000, uint256S("0x00003a09f26ae9fb7ebbfa3ef589b81ccd8909a82430f7414bc68d5a5a3316ab")) | |
288 | ( 165000, uint256S("0x00004a0c6a29e7d1f22ea4e44d05e861fec5fcd8eebc5a61574c4ecf29dbb9be")) | |
289 | ( 170000, uint256S("0x0cf9eac27badc0ae9a2b370dd7cc3fcb550f139349551e60978f394a2e1b262b")) | |
290 | ( 175000, uint256S("0x0000137856b825d431da27ff4c3cf22f5482fa21952d45b0db0ec6774fb9b510")) | |
291 | ( 180000, uint256S("0x000000b0afcccf98aa0afb6ac61050892bd9415857d66313d1f67fd1bbac312f")) | |
292 | ( 185000, uint256S("0x00c2af8f88d84de080067f8ae1c25754e32e5516d20c11f85b9adae2d683687b")) | |
293 | ( 190000, uint256S("0x00000033d85b3e7d19e02278ef300b8ab957d3dd3e58b4c81166ba0a58af5c3f")) | |
294 | ( 195000, uint256S("0x000000964b6068be1dd4ee6893d183e86cba82a2744fb5439c463d0ba7e053b6")) | |
295 | ( 200000, uint256S("0x000001763a9337328651ca57ac487cc0507087be5838fb74ca4165ff19f0e84f")) | |
296 | ( 205000, uint256S("0x049fc6832e64a75ae898b32804e151e7561ea49082858c3d4af89a7de4b82f06")) | |
297 | ( 210000, uint256S("0x0000000d9078b9c9604cc663eafafba8f3643bb3f3ddbb78fed4993236e1edb5")) | |
298 | ( 215000, uint256S("0x00060089ecc21bcc62094e2f7f0448fe163415f6ef2f2aafe047757889ca82fe")) | |
299 | ( 220000, uint256S("0x000082c78e6c2a13a9c23dd7a6faaf962fc133142b4a2d07725561f59c03bfa2")) | |
300 | ( 225000, uint256S("0x00030026483167fe13505cf27049307ce42e0d9c5aa093aed10baa4f49edf4ca")) | |
301 | ( 230000, uint256S("0x000183a3e17988060a35776b99c1f0b43393bbe7153b2718dfc57f428191de4e")) | |
302 | ( 235000, uint256S("0x000184995f0ec024ed3783e322c8cfa5e68d9f0c77c3aaea301b22d311619156")) | |
303 | ( 240000, uint256S("0x0000002cc7cf6d0a44ab57f9bd3bfa11a865bbf1cd87a2081095bc90981633a3")) | |
304 | ( 245000, uint256S("0x004c5f19a88c8fe8a604006dbd2d44c94baef2a00876a17d8e2be2124003f979")) | |
305 | ( 250000, uint256S("0x0dd54ef5f816c7fde9d2b1c8c1a26412b3c761cc5dd3901fa5c4cd1900892fba")) | |
306 | ( 255000, uint256S("0x0b6da9e4f50c8bc7a92c539bc7474ffd6c29e0a8531f0dbbbc261fff1f990827")) | |
307 | ( 260000, uint256S("0x0cac8b12bf7233ee5a68fcde9e251852b177833fefa2a9f39ec28474b0851cb9")) | |
308 | ( 265000, uint256S("0x04feb5b4029f3b8b8eb3e6661a78eadd1a26b4af00ac59b5f05b261afcfd2818")) | |
309 | ( 270000, uint256S("0x01bc5897bd20b8b61acf4989987ba85fbc37d9ebe848924aa8effcb08bf48fe0")) | |
310 | ( 275000, uint256S("0x0416bc29eb5a12231826e546ba90fcd38aeef387ff77b45849cd418a9c1a6f12")) | |
311 | ( 280000, uint256S("0x000007593e9880b171d46bce59aa0cec2a1b1f53d1fd7e8f71ccb2b9182374a4")) | |
312 | ( 285000, uint256S("0x05a338b2d90cd79740221fe8635b7a834f2e486fcbb2464a4294f5a21231a5f5")) | |
313 | ( 290000, uint256S("0x064ca3912cdcd833702d07a530e98bc5c6c1cd738a8825c7240b17cd68ca0cc4")) | |
314 | ( 295000, uint256S("0x036b3bb318d743fd78db983a9aadd52869991d48913c4eebe2a074387d67cc5a")) | |
315 | ( 300000, uint256S("0x000000fa5efd1998959926047727519ed7de06dcf9f2cd92a4f71e907e1312dc")) | |
316 | ( 305000, uint256S("0x00003656231e83de2348755153ed175794696a113d7e8a15c01f90fdb7c2f287")) | |
317 | ( 310000, uint256S("0x0cf6baf727eb931da0813ed8b032648c4766be79e146b0d40c643f9d8edf40f7")) | |
318 | ( 315000, uint256S("0x082469974c152ebe69f1787f0d06aa5d9dd1dc69c880febde7eac2bc800146dd")) | |
319 | ( 320000, uint256S("0x0000063df36b99bfb2516f55cb548a5baed1f2d8ae69c3559dc478c5c2eb32df")) | |
320 | ( 325000, uint256S("0x0cb926b303a1514ba0a2f729af88ccb143517f396e9e0bde09b0736900698e0f")) | |
321 | ( 330000, uint256S("0x000000be3d8bb6e31c3b534819aae7014cbbe9a44ab3e799dc1bfc724c6ab184")) | |
322 | ( 335000, uint256S("0x0d0756608189fd5bbd8ec50e76180074e69e973439cc09df49134e4cb970ed4d")) | |
323 | ( 340000, uint256S("0x0d814eacdb9c97003d703c0ff79b1b97b9ed8615fe12b1afaede946e5fdfe0a7")) | |
324 | ( 345000, uint256S("0x000000c2910f510f1de325d300202da1a391f2719dd378173299151c3da94e85")) | |
325 | ( 350000, uint256S("0x0000000228ef321323f81dae00c98d7960fc7486fb2d881007fee60d1e34653f")) | |
326 | ( 355000, uint256S("0x03e6a55e382b478e0fab9c3584da3629fd9b977986a333a406b24b0d3559bf44")) | |
327 | ( 360000, uint256S("0x0859c86dd718bcb5b58af06389197794e2beea6239653f2e6fa7b8a7433d29ea")) | |
328 | ( 365000, uint256S("0x07896332665c707a8f55398a998e7878e8d2681ba79dd95c2859b1dafc9343d0")) | |
329 | ( 370000, uint256S("0x040efd8c64cf5cf96ecf75468741a8880d1386eb5e349bef0a55116d4023944c")) | |
330 | ( 375000, uint256S("0x053029e7599a09fe6c01203997d7ca738dd4c6d216a433695a0d514def1eccc0")) | |
331 | ( 380000, uint256S("0x0cae44e7a421c389b88a5a204d3e39779e93aeacaab1b693741bf279fd0c8acd")) | |
332 | ( 385000, uint256S("0x0b4032d2c799ba93644231ce57134dd24e13ec0dc267c1ed5912389691d2bd72")) | |
333 | ( 390000, uint256S("0x0afd0f166f33a881ef289af7ea7010d58c4bbd560dee10b561c79e1b8dfd0593")) | |
334 | ( 395000, uint256S("0x083774b88cf1b138d67c242d9b33c54f69d7e901b5e8144dc4a2303ab9927102")) | |
335 | ( 400000, uint256S("0x036d294c5be96f4c0efb28e652eb3968231e87204a823991a85c5fdab3c43ae6")) | |
336 | ( 405000, uint256S("0x0522e33bb2161fb1b33acef9a4a438fcf420dcae8a0b472e234d223d731c42b2")) | |
337 | ( 410000, uint256S("0x0361d06aa807c66b87befea8119a485341d1118b694c3dbb4c3cf0b85ac69e9b")) | |
338 | ( 415000, uint256S("0x072d5653d8673f64ef8b9c655f7b8021072070a072b799013ff6e96de99a59e6")) | |
339 | ( 420000, uint256S("0x013b693d66955be69d4501cb1d307ca323a5c8473e25866ae7e700cdce0c654f")) | |
340 | ( 425000, uint256S("0x0ef0c55af27c6971289a790dee2b2ec728fb9c6555ff9306c07f1083cf0fb4b5")) | |
341 | ( 430000, uint256S("0x0ccbeeaba28291e0316a9cf54c005097c61dc67ba6f32283406d6c83b828da00")) | |
342 | ( 435000, uint256S("0x020ed6b7fe1124400baba7feed463ba0c90e7e6903493fdc1a1a18c4a506055a")) | |
343 | ( 440000, uint256S("0x055aaadca1908abeedc831a3f9115aa31284fc223d010590caf7b612960b61a4")) | |
344 | ( 445000, uint256S("0x06d2327fa25ea7e2be742fc0e45fc4f9adb41811f21be0357f8543c5434df715")) | |
345 | ( 450000, uint256S("0x0906ef1e8dc194f1f03bd4ce1ac8c6992fd721ef2c5ccbf4871ec8cdbb456c18")) | |
346 | ( 455000, uint256S("0x0b8b92eec29eb20262dcf9916f0ca36d6abf0c39d321d3f480a5535cb978db71")) | |
347 | ( 460000, uint256S("0x0cb04591f69a255b1127aaff3bbd59eaa21a5d9cca999de197516c251895c536")) | |
348 | ( 465000, uint256S("0x029985ae78d8bb8fd170aeb3ab02ea76134ed0c19ae00211cc28a61fe5755b88")) | |
349 | ( 470000, uint256S("0x01a2f4b56f37b223e75572862ad1ba956ec179332f8cd40590d7253563c86ba8")) | |
350 | ( 475000, uint256S("0x0a34c6f9d4d9cb8c78c14b8041a7cc1874cfcbb22a34a5c068d1d6ff3ed9fdf0")) | |
351 | ( 480000, uint256S("0x0ebab25030179996ae25969f34f6a297c7ffce1994f9b4186082a47032a9a7dc")) | |
352 | ( 485000, uint256S("0x06a096e6bccf3b85537a30f95db6a414deacc0509bc84da264c2830df1a1d9b0")) | |
353 | ( 490000, uint256S("0x0af828930ef13405cb536b88a3d1d4e0d84dc79ee260402c56bfa86e261c74ff")) | |
354 | ( 495000, uint256S("0x09d44905bfd12849d3c2178b2ba882f8e9d6565b6e4d7a97c70a92bd6de7c5e6")) | |
355 | ( 500000, uint256S("0x0bebdb417f7a51fe0c36fcf94e2ed29895a9a862eaa61601272866a7ecd6391b")) | |
356 | ( 505000, uint256S("0x0c1609f4f3561baa1fc975877948af94d2107c88686a9821bc240016cc87d953")) | |
357 | ( 510000, uint256S("0x0cf9a5a4997b871e615e5e398627e45fa15b3e6970ae22b47bdd11b0f5fa0fa7")) | |
358 | ( 515000, uint256S("0x034171d4819e9961de13309743a32a179abede97d60ea64101dc04c97a1a0807")) | |
359 | ( 520000, uint256S("0x0648fa44d5bbc2cc04a782e083c11df64ac06185f0f8e11a7416625ebb6409a6")) | |
360 | ( 525000, uint256S("0x0000000ef17d63af3159e52cd351b6f000536ad88adc3a937bb747955fed58a2")) | |
361 | ( 530000, uint256S("0x08e3af153995ba09e50086b64145cf4cd57db6b29f16f06f28d80d7f6121cfad")) | |
362 | ( 535000, uint256S("0x02a0ffd00b51e2061b85de50a9223d9c84f4e357dc1046397bb9d7d4a827a3fb")) | |
363 | ( 540000, uint256S("0x04bf07d026af29025c1ac2815e067f4a41d2872701ac9780eb3015d51cdcd854")) | |
364 | ( 545000, uint256S("0x0a0d6d86635946792ad0dca57ed227a5360fc8b6d79e47132aac11e90a4963ce")) | |
365 | ( 550000, uint256S("0x06df52fc5f9ba03ccc3a7673b01ab47990bd5c4947f6e1bc0ba14d21cd5bcccd")) | |
366 | ( 555000, uint256S("0x0baf38eea8e08fcad3a9d760f27377e79c291b08e7fb4920cadd5cb7bab547f3")) | |
367 | ( 560000, uint256S("0x00000004c34abbf1366adbae965b644c01debf15409acc715ff51cb221d92dd7")) | |
368 | ( 565000, uint256S("0x067bae7119f083e0fa1820bc8e25dcfa7717e42aabaef18beefd87d974953dfb")) | |
369 | ( 570000, uint256S("0x00000011a7ce7b628b7be17777d8dea2574d83f165e23c9e44aa705975820fd3")) | |
370 | ( 575000, uint256S("0x0e1110a193a30d3f8d369017233a2486b11c748b3d033859a2eb7b37062d303e")) | |
371 | ( 580000, uint256S("0x083cb58484aff80f48e3537e0451d49e544b3efa3da97274800c91e567d33a92")) | |
372 | ( 585000, uint256S("0x0224cf835428d03472edf4f7b6fcc63b9d8d6f1d5a90ad8186bf123d541b4ea8")) | |
373 | ( 590000, uint256S("0x0cfcf3b9517894e4df49db5faf8b74f3a9e01eb83c0cc5051c115d4424615dae")) | |
374 | ( 595000, uint256S("0x0000000a45266983dd81e0df381a3b0455699b2f76d5b4d3f17b87d657a1b56d")) | |
375 | ( 600000, uint256S("0x00000005080d5689c3b4466e551cd1986e5d2024a62a79b1335afe12c42779e4")) | |
376 | ( 605000, uint256S("0x0000001c691da36848542299af859d4eb3fa408a0f425b1fbe6d622d2100623a")) | |
377 | ( 610000, uint256S("0x040d8c7a0ac89e3ed8605a198583a795986aacbf18722a9897d7b925bcf757f6")) | |
378 | ( 615000, uint256S("0x0449cf00fc36206389c14cbf1d762f8b96bb0440ccea5b46703e7c69b0e2bc42")) | |
379 | ( 620000, uint256S("0x07227a41340c25ee1a7e9b60414259780202ffa990079fc91d8faeac9af03e60")) | |
380 | ( 625000, uint256S("0x047c2472fe2afabb3d38decf24bba4ba712b60e7a1782f4afae3ede3f912f493")) | |
381 | ( 630000, uint256S("0x0a7f1f04e66260cf972ab1374a9126b8abc1adaa3ab4669db5d4d4ddb9ad493d")) | |
382 | ( 635000, uint256S("0x048df95165eb821dabf37ef28cf7f3be72e216e95377684253dab806985b50a4")) | |
383 | ( 640000, uint256S("0x066b3c6a6a3c8dc58bef509a972c3e3ade14493b40e1b361ecbc928134e302be")) | |
384 | ( 645000, uint256S("0x07d059888c9ade3bbe16d6b4d70ee9b8302d104b37a3c6cd61f81012aabd0e1e")) | |
385 | ( 650000, uint256S("0x039a3cb760cc6e564974caf69e8ae621c14567f3a36e4991f77fd869294b1d52")) | |
386 | ( 655000, uint256S("0x089350ee8d28b44837eb4b1fe77704953d5de2077f10c74a888d9d3ea1e13c2a")) | |
387 | ( 660000, uint256S("0x000000023f8a582a61ae2f6fab6fe8197e79b7a68aaac67432421b09f1bdd4ba")) | |
388 | ( 665000, uint256S("0x0b16edce865e7a0d662115774e0c0d3abbf9c69004155b693ddc933f051bfb26")) | |
389 | ( 670000, uint256S("0x09070b109b089490bc372fd8358abae352d6db0e46ade6ed2200e4d4ff7aa6af")) | |
390 | ( 675000, uint256S("0x08d9edeed3b6ac55991e9f32af0218ff8fa9dc808078623f4c831eb09d4f186b")) | |
391 | ( 680000, uint256S("0x00000003eb2b30bfac929d3496acecab19625ac9f854a86aaf9678bea99e1cc1")) | |
392 | ( 681777, uint256S("0x0000243296b9b26c040f471fdd9398ef72e57062cf05c19b9ba2fefac8165306")), | |
393 | (int64_t)1516924927, // * UNIX timestamp of last checkpoint block | |
394 | (int64_t)1253783, // * total number of transactions between genesis and last checkpoint | |
395 | // (the tx=... number in the SetBestChain debug.log lines) | |
396 | (double)2777 // * estimated number of transactions per day after checkpoint | |
397 | // total number of tx / (checkpoint block height / (24 * 24)) | |
398 | }; | |
cad9f4c8 | 399 | } |
b3f7ce9b D |
400 | |
401 | mainParams.SetCheckpointData(checkpointData); | |
402 | ||
1efd6f2b | 403 | ASSETCHAIN_INIT = 1; |
404 | return(0); | |
405 | } | |
406 | ||
f2e03ffa MF |
407 | /** |
408 | * Testnet (v3) | |
409 | */ | |
54ab3b31 | 410 | class CTestNetParams : public CChainParams { |
0e4b3175 MH |
411 | public: |
412 | CTestNetParams() { | |
f5ae6c98 | 413 | strNetworkID = "test"; |
d793f94b | 414 | strCurrencyUnits = "TAZ"; |
54ab3b31 JT |
415 | consensus.fCoinbaseMustBeProtected = true; |
416 | consensus.nSubsidySlowStartInterval = 20000; | |
417 | consensus.nSubsidyHalvingInterval = 840000; | |
bd006110 JT |
418 | consensus.nMajorityEnforceBlockUpgrade = 51; |
419 | consensus.nMajorityRejectBlockOutdated = 75; | |
45e3deea | 420 | consensus.nMajorityWindow = 400; |
2360dd64 | 421 | consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); |
54ab3b31 | 422 | consensus.nPowAveragingWindow = 17; |
3e24a533 | 423 | assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); |
9000990c | 424 | |
425 | vAlertPubKey = ParseHex("00"); | |
426 | nDefaultPort = 17770; | |
427 | nMinerThreads = 0; | |
54ab3b31 JT |
428 | consensus.nPowMaxAdjustDown = 32; // 32% adjustment down |
429 | consensus.nPowMaxAdjustUp = 16; // 16% adjustment up | |
430 | consensus.nPowTargetSpacing = 2.5 * 60; | |
2423a40c | 431 | consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; |
780f526b JG |
432 | consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = |
433 | Consensus::NetworkUpgrade::ALWAYS_ACTIVE; | |
2423a40c | 434 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; |
f52da911 JG |
435 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = |
436 | Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; | |
2423a40c | 437 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170003; |
138cf770 | 438 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = 207500; |
780f526b | 439 | |
bd006110 | 440 | consensus.fPowAllowMinDifficultyBlocks = true; |
3090f2a1 | 441 | pchMessageStart[0] = 0x5A; |
442 | pchMessageStart[1] = 0x1F; | |
443 | pchMessageStart[2] = 0x7E; | |
444 | pchMessageStart[3] = 0x62; | |
9000990c | 445 | vAlertPubKey = ParseHex("020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9"); |
54ab3b31 | 446 | nMaxTipAge = 24 * 60 * 60; |
9000990c | 447 | |
f9ec3f0f | 448 | nPruneAfterHeight = 1000; |
54ab3b31 JT |
449 | const size_t N = 200, K = 9; |
450 | BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); | |
451 | nEquihashN = N; | |
452 | nEquihashK = K; | |
0e4b3175 | 453 | |
f2e03ffa | 454 | //! Modify the testnet genesis block so the timestamp is valid for a later start. |
0e4b3175 | 455 | genesis.nTime = 1296688602; |
50027f06 | 456 | genesis.nBits = KOMODO_MINDIFF_NBITS; |
66f07f5d JG |
457 | genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"); |
458 | genesis.nSolution = ParseHex("003423da3e41f916bf3ff0ee770eb844a240361abe08a8c9d46bd30226e2ad411a4047b6ddc230d173c60537e470e24f764120f5a2778b2a1285b0727bf79a0b085ad67e6266fb38fd72ef17f827315c42f921720248c983d4100e6ebd1c4b5e8762a973bac3bec7f7153b93752ebbb465f0fc9520bcfc30f9abfe303627338fed6ede9cf1b9173a736cf270cf4d9c6999ff4c3a301a78fd50dab6ccca67a0c5c2e41f216a1f3efd049a74bbe6252f9773bc309d3f9e554d996913ce8e1cec672a1fa4ea59726b61ea9e75d5ce9aa5dbfa96179a293810e02787f26de324fe7c88376ff57e29574a55faff7c2946f3e40e451861c32bf67da7377de3136858a18f34fab1bc8da37726ca2c25fc7b312a5427554ec944da81c7e27255d6c94ade9987ff7daedc2d1cc63d7d4cf93e691d13326fb1c7ee72ccdc0b134eb665fc6a9821e6fef6a6d45e4aac6dca6b505a0100ad56ea4f6fa4cdc2f0d1b65f730104a515172e34163bdb422f99d083e6eb860cf6b3f66642c4dbaf0d0fa1dca1b6166f1d1ffaa55a9d6d6df628afbdd14f1622c1c8303259299521a253bc28fcc93676723158067270fc710a09155a1e50c533e9b79ed5edba4ab70a08a9a2fc0eef0ddae050d75776a9804f8d6ad7e30ccb66c6a98d86710ca7a4dfb4feb159484796b9a015c5764aa3509051c87f729b9877ea41f8b470898c01388ed9098b1e006d3c30fc6e7c781072fa3f75d918505ee8ca75840fc62f67c57060666aa42578a2dd022eda62e3f1e447d7364074d34fd60ad9b138f60422afa6cfcb913fd6c213b496144dbfda7bfc7c24540cfe40ad0c0fd5a8c0902127f53d3178ba1b2a87bf1224d53d3a15e49ccdf121ae872a011c996d1b9793153cdcd4c0a7e99f8a35669788551cca2b62769eda24b6b55e2f4e0ac0d30aa50ecf33c6cdb24adfc922006a7bf434ced800fefe814c94c6fc8caa37b372d5088bb31d2f6b11a7a67ad3f70abbac0d5c256b637828de6cc525978cf151a2e50798e0c591787639a030291272c9ced3ab7d682e03f8c7db51f60163baa85315789666ea8c5cd6f789a7f4a5de4f8a9dfefce20f353cec606492fde8eab3e3b487b3a3a57434f8cf252a4b643fc125c8a5948b06744f5dc306aa587bdc85364c7488235c6edddd78763675e50a9637181519be06dd30c4ba0d845f9ba320d01706fd6dd64d1aa3cd4211a4a7d1d3f2c1ef2766d27d5d2cdf8e7f5e3ea309d4f149bb737305df1373a7f5313abe5986f4aa620bec4b0065d48aafac3631de3771f5c4d2f6eec67b09d9c70a3c1969fecdb014cb3c69832b63cc9d6efa378bff0ef95ffacdeb1675bb326e698f022c1a3a2e1c2b0f05e1492a6d2b7552388eca7ee8a2467ef5d4207f65d4e2ae7e33f13eb473954f249d7c20158ae703e1accddd4ea899f026618695ed2949715678a32a153df32c08922fafad68b1895e3b10e143e712940104b3b352369f4fe79bd1f1dbe03ea9909dbcf5862d1f15b3d1557a6191f54c891513cdb3c729bb9ab08c0d4c35a3ed67d517ffe1e2b7a798521aed15ff9822169c0ec860d7b897340bc2ef4c37f7eb73bd7dafef12c4fd4e6f5dd3690305257ae14ed03df5e3327b68467775a90993e613173fa6650ffa2a26e84b3ce79606bf234eda9f4053307f344099e3b10308d3785b8726fd02d8e94c2759bebd05748c3fe7d5fe087dc63608fb77f29708ab167a13f32da251e249a544124ed50c270cfc6986d9d1814273d2f0510d0d2ea335817207db6a4a23ae9b079967b63b25cb3ceea7001b65b879263f5009ac84ab89738a5b8b71fd032beb9f297326f1f5afa630a5198d684514e242f315a4d95fa6802e82799a525bb653b80b4518ec610a5996403b1391"); | |
bd006110 | 459 | consensus.hashGenesisBlock = genesis.GetHash(); |
a9b54b9d | 460 | //assert(consensus.hashGenesisBlock == uint256S("0x05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38")); |
0e4b3175 MH |
461 | |
462 | vFixedSeeds.clear(); | |
463 | vSeeds.clear(); | |
5166804f | 464 | //vSeeds.push_back(CDNSSeedData("z.cash", "dns.testnet.z.cash")); // Komodo |
0e4b3175 | 465 | |
3090f2a1 | 466 | base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,0); |
467 | base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5); | |
468 | base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,128); | |
a2b04ddf CF |
469 | base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container<std::vector<unsigned char> >(); |
470 | base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x35)(0x83)(0x94).convert_to_container<std::vector<unsigned char> >(); | |
13039c53 | 471 | base58Prefixes[ZCPAYMENT_ADDRRESS] = {20,81}; |
97d48e24 JDL |
472 | // guarantees the first 4 characters, when base58 encoded, are "ZiVt" |
473 | base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; | |
05a6d19a | 474 | base58Prefixes[ZCSPENDING_KEY] = {177,235}; |
21913a9a | 475 | |
739d6155 | 476 | vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test)); |
a60120e9 | 477 | |
d5f3353d | 478 | //fRequireRPCPassword = true; |
684eb8d6 | 479 | fMiningRequiresPeers = false;//true; |
3fcfbc8a | 480 | fDefaultConsistencyChecks = false; |
77175766 | 481 | fRequireStandard = true; |
c8c52de3 | 482 | fMineBlocksOnDemand = false; |
cc972107 | 483 | fTestnetToBeDeprecatedFieldRPC = true; |
69968230 | 484 | |
47b71cec | 485 | checkpointData = (CCheckpointData) { |
69968230 | 486 | boost::assign::map_list_of |
5a888f72 S |
487 | (0, consensus.hashGenesisBlock) |
488 | (38000, uint256S("0x001e9a2d2e2892b88e9998cf7b079b41d59dd085423a921fe8386cecc42287b8")), | |
489 | 1486897419, // * UNIX timestamp of last checkpoint block | |
490 | 47163, // * total number of transactions between genesis and last checkpoint | |
491 | // (the tx=... number in the SetBestChain debug.log lines) | |
492 | 715 // total number of tx / (checkpoint block height / (24 * 24)) | |
69968230 | 493 | }; |
e11712df | 494 | } |
0e4b3175 MH |
495 | }; |
496 | static CTestNetParams testNetParams; | |
497 | ||
f2e03ffa MF |
498 | /** |
499 | * Regression test | |
500 | */ | |
54ab3b31 | 501 | class CRegTestParams : public CChainParams { |
0e4b3175 MH |
502 | public: |
503 | CRegTestParams() { | |
f5ae6c98 | 504 | strNetworkID = "regtest"; |
d793f94b | 505 | strCurrencyUnits = "REG"; |
a180d0a6 | 506 | consensus.fCoinbaseMustBeProtected = false; |
7a1f5518 | 507 | consensus.nSubsidySlowStartInterval = 0; |
bd006110 JT |
508 | consensus.nSubsidyHalvingInterval = 150; |
509 | consensus.nMajorityEnforceBlockUpgrade = 750; | |
510 | consensus.nMajorityRejectBlockOutdated = 950; | |
511 | consensus.nMajorityWindow = 1000; | |
3e24a533 | 512 | consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); |
54ab3b31 | 513 | consensus.nPowAveragingWindow = 17; |
3e24a533 | 514 | assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); |
f2c48e15 JG |
515 | consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down |
516 | consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up | |
54ab3b31 | 517 | consensus.nPowTargetSpacing = 2.5 * 60; |
2423a40c | 518 | consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; |
780f526b JG |
519 | consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = |
520 | Consensus::NetworkUpgrade::ALWAYS_ACTIVE; | |
2423a40c | 521 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; |
f52da911 JG |
522 | consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = |
523 | Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; | |
2423a40c | 524 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170003; |
54868376 JG |
525 | consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = |
526 | Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; | |
a97308c5 | 527 | |
62fdd8d0 | 528 | pchMessageStart[0] = 0xaa; |
3090f2a1 | 529 | pchMessageStart[1] = 0x8e; |
530 | pchMessageStart[2] = 0xf3; | |
531 | pchMessageStart[3] = 0xf5; | |
2595b9ac | 532 | nMinerThreads = 1; |
33d6825c | 533 | nMaxTipAge = 24 * 60 * 60; |
a97308c5 | 534 | nPruneAfterHeight = 1000; |
c6a7e897 DH |
535 | const size_t N = 48, K = 5; |
536 | BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); | |
537 | nEquihashN = N; | |
538 | nEquihashK = K; | |
16df92af | 539 | |
b78c39be | 540 | genesis = CreateGenesisBlock( |
373afcb4 | 541 | 1296688602, |
16df92af JDL |
542 | uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"), |
543 | ParseHex("01936b7db1eb4ac39f151b8704642d0a8bda13ec547d54cd5e43ba142fc6d8877cab07b3"), | |
8cf70067 | 544 | KOMODO_MINDIFF_NBITS, 4, 0); |
bd006110 | 545 | consensus.hashGenesisBlock = genesis.GetHash(); |
16df92af JDL |
546 | assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327")); |
547 | assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb")); | |
db83a2c0 | 548 | |
3090f2a1 | 549 | nDefaultPort = 17779; |
f9ec3f0f | 550 | nPruneAfterHeight = 1000; |
0e4b3175 | 551 | |
f2e03ffa MF |
552 | vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. |
553 | vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds. | |
0e4b3175 | 554 | |
c8c52de3 | 555 | fMiningRequiresPeers = false; |
3fcfbc8a | 556 | fDefaultConsistencyChecks = true; |
c8c52de3 | 557 | fRequireStandard = false; |
c8c52de3 | 558 | fMineBlocksOnDemand = true; |
cc972107 | 559 | fTestnetToBeDeprecatedFieldRPC = false; |
69968230 | 560 | |
47b71cec | 561 | checkpointData = (CCheckpointData){ |
69968230 CF |
562 | boost::assign::map_list_of |
563 | ( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")), | |
564 | 0, | |
565 | 0, | |
566 | 0 | |
567 | }; | |
54ab3b31 JT |
568 | // These prefixes are the same as the testnet prefixes |
569 | base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; | |
570 | base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA}; | |
571 | base58Prefixes[SECRET_KEY] = {0xEF}; | |
572 | // do not rely on these BIP32 prefixes; they are not specified and may change | |
573 | base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF}; | |
574 | base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94}; | |
575 | base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0xB6}; | |
40ebf08f | 576 | base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; |
54ab3b31 | 577 | base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08}; |
db0f9315 S |
578 | |
579 | // Founders reward script expects a vector of 2-of-3 multisig addresses | |
1fc7e92e | 580 | vFoundersRewardAddress = { "t2FwcEhFdNXuFMv1tcYwaBJtYVtMj8b1uTg" }; |
22dadb35 | 581 | assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight()); |
e11712df | 582 | } |
b174b7e3 JG |
583 | |
584 | void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight) | |
585 | { | |
586 | assert(idx > Consensus::BASE_SPROUT && idx < Consensus::MAX_NETWORK_UPGRADES); | |
587 | consensus.vUpgrades[idx].nActivationHeight = nActivationHeight; | |
588 | } | |
0e4b3175 MH |
589 | }; |
590 | static CRegTestParams regTestParams; | |
591 | ||
84ce18ca | 592 | static CChainParams *pCurrentParams = 0; |
0e4b3175 MH |
593 | |
594 | const CChainParams &Params() { | |
84ce18ca | 595 | assert(pCurrentParams); |
0e4b3175 MH |
596 | return *pCurrentParams; |
597 | } | |
598 | ||
e84843c0 | 599 | CChainParams &Params(CBaseChainParams::Network network) { |
0e4b3175 | 600 | switch (network) { |
84ce18ca | 601 | case CBaseChainParams::MAIN: |
e84843c0 | 602 | return mainParams; |
84ce18ca | 603 | case CBaseChainParams::TESTNET: |
e84843c0 | 604 | return testNetParams; |
84ce18ca | 605 | case CBaseChainParams::REGTEST: |
e84843c0 | 606 | return regTestParams; |
0e4b3175 MH |
607 | default: |
608 | assert(false && "Unimplemented network"); | |
e84843c0 | 609 | return mainParams; |
0e4b3175 MH |
610 | } |
611 | } | |
612 | ||
e84843c0 RN |
613 | void SelectParams(CBaseChainParams::Network network) { |
614 | SelectBaseParams(network); | |
615 | pCurrentParams = &Params(network); | |
2b1cda3b S |
616 | |
617 | // Some python qa rpc tests need to enforce the coinbase consensus rule | |
618 | if (network == CBaseChainParams::REGTEST && mapArgs.count("-regtestprotectcoinbase")) { | |
619 | regTestParams.SetRegTestCoinbaseMustBeProtected(); | |
620 | } | |
e84843c0 RN |
621 | } |
622 | ||
ca3ce0fa | 623 | bool SelectParamsFromCommandLine() |
3fdb9e8c | 624 | { |
b796cb08 | 625 | CBaseChainParams::Network network = NetworkIdFromCommandLine(); |
3fdb9e8c | 626 | if (network == CBaseChainParams::MAX_NETWORK_TYPES) |
0e4b3175 | 627 | return false; |
0e4b3175 | 628 | |
3fdb9e8c | 629 | SelectParams(network); |
0e4b3175 MH |
630 | return true; |
631 | } | |
db0f9315 S |
632 | |
633 | ||
634 | // Block height must be >0 and <=last founders reward block height | |
635 | // Index variable i ranges from 0 - (vFoundersRewardAddress.size()-1) | |
241867b1 | 636 | std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const { |
db0f9315 | 637 | int maxHeight = consensus.GetLastFoundersRewardBlockHeight(); |
241867b1 | 638 | assert(nHeight > 0 && nHeight <= maxHeight); |
db0f9315 | 639 | |
3b30d836 S |
640 | size_t addressChangeInterval = (maxHeight + vFoundersRewardAddress.size()) / vFoundersRewardAddress.size(); |
641 | size_t i = nHeight / addressChangeInterval; | |
db0f9315 S |
642 | return vFoundersRewardAddress[i]; |
643 | } | |
644 | ||
645 | // Block height must be >0 and <=last founders reward block height | |
646 | // The founders reward address is expected to be a multisig (P2SH) address | |
241867b1 | 647 | CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const { |
db0f9315 S |
648 | assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight()); |
649 | ||
3b30d836 | 650 | CBitcoinAddress address(GetFoundersRewardAddressAtHeight(nHeight).c_str()); |
db0f9315 S |
651 | assert(address.IsValid()); |
652 | assert(address.IsScript()); | |
ff145dfe | 653 | CScriptID scriptID = boost::get<CScriptID>(address.Get()); // Get() returns a boost variant |
db0f9315 S |
654 | CScript script = CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL; |
655 | return script; | |
656 | } | |
3b30d836 S |
657 | |
658 | std::string CChainParams::GetFoundersRewardAddressAtIndex(int i) const { | |
241867b1 | 659 | assert(i >= 0 && i < vFoundersRewardAddress.size()); |
3b30d836 S |
660 | return vFoundersRewardAddress[i]; |
661 | } | |
b174b7e3 JG |
662 | |
663 | void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight) | |
664 | { | |
665 | regTestParams.UpdateNetworkUpgradeParameters(idx, nActivationHeight); | |
666 | } |