]> Git Repo - VerusCoin.git/blame - src/chainparams.cpp
uni3
[VerusCoin.git] / src / chainparams.cpp
CommitLineData
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
09eb201b 18using namespace std;
8388289e 19
a60120e9
WL
20#include "chainparamsseeds.h"
21
f2e03ffa
MF
22/**
23 * Main network
24 */
f2e03ffa
MF
25/**
26 * What makes a good checkpoint block?
27 * + Is surrounded by blocks with reasonable timestamps
28 * (no blocks before with a timestamp after, none after with
29 * timestamp before)
30 * + Contains no strange transactions
31 */
1efd6f2b 32void *chainparams_commandline(void *ptr);
f71f89bb 33extern char ASSETCHAINS_SYMBOL[16];
00aec80e 34extern uint16_t ASSETCHAINS_PORT;
35extern uint32_t ASSETCHAIN_INIT;
36extern uint32_t ASSETCHAINS_MAGIC;
37extern uint64_t ASSETCHAINS_SUPPLY;
e11712df 38
3e24a533
JG
39const arith_uint256 maxUint = UintToArith256(uint256S("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"));
40
0e4b3175
MH
41class CMainParams : public CChainParams {
42public:
7a4c01c9 43 CMainParams()
44 {
f5ae6c98 45 strNetworkID = "main";
bc17ac49 46 strCurrencyUnits = "KMD";
1a321777 47 consensus.fCoinbaseMustBeProtected = false;//true;
45e3deea
JG
48 consensus.nSubsidySlowStartInterval = 20000;
49 consensus.nSubsidyHalvingInterval = 840000;
bd006110
JT
50 consensus.nMajorityEnforceBlockUpgrade = 750;
51 consensus.nMajorityRejectBlockOutdated = 950;
45e3deea 52 consensus.nMajorityWindow = 4000;
ae381ffd 53 consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
f2c48e15 54 consensus.nPowAveragingWindow = 17;
3e24a533 55 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
8f3ec042
JG
56 consensus.nPowMaxAdjustDown = 32; // 32% adjustment down
57 consensus.nPowMaxAdjustUp = 16; // 16% adjustment up
20285609 58 consensus.nPowTargetSpacing = 1 * 60;
50027f06 59 consensus.fPowAllowMinDifficultyBlocks = true; //false;
9d365796 60 /**
f2e03ffa
MF
61 * The message start string is designed to be unlikely to occur in normal data.
62 * The characters are rarely used upper ASCII, not valid as UTF-8, and produce
b05a89b2 63 * a large 32-bit integer with any alignment.
f2e03ffa 64 */
3090f2a1 65 pchMessageStart[0] = 0xf9;
62fdd8d0 66 pchMessageStart[1] = 0xee;
3090f2a1 67 pchMessageStart[2] = 0xe4;
68 pchMessageStart[3] = 0x8d;
870e3556 69 vAlertPubKey = ParseHex("020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9");
3090f2a1 70 nDefaultPort = 7770;
2595b9ac 71 nMinerThreads = 0;
33d6825c 72 nMaxTipAge = 24 * 60 * 60;
f9ec3f0f 73 nPruneAfterHeight = 100000;
c6a7e897
DH
74 const size_t N = 200, K = 9;
75 BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
76 nEquihashN = N;
77 nEquihashK = K;
4b0a8bbd 78 const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
4949004d 79 CMutableTransaction txNew;
0e4b3175
MH
80 txNew.vin.resize(1);
81 txNew.vout.resize(1);
4b0a8bbd 82 txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
83 txNew.vout[0].nValue = 50 * COIN;
0e4b3175
MH
84 txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
85 genesis.vtx.push_back(txNew);
4f152496 86 genesis.hashPrevBlock.SetNull();
0e4b3175
MH
87 genesis.hashMerkleRoot = genesis.BuildMerkleTree();
88 genesis.nVersion = 1;
89 genesis.nTime = 1231006505;
50027f06 90 genesis.nBits = KOMODO_MINDIFF_NBITS;
66f07f5d
JG
91 genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000000b");
92 genesis.nSolution = ParseHex("000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2");
1d095ca0 93
bd006110 94 consensus.hashGenesisBlock = genesis.GetHash();
4b0a8bbd 95 assert(consensus.hashGenesisBlock == uint256S("0x027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71"));
96 assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
57466ea6
JG
97 vFixedSeeds.clear();
98 vSeeds.clear();
96298cff 99 vSeeds.push_back(CDNSSeedData("komodoplatform.com", "seeds.komodoplatform.com")); // @kolo
f4fd2426 100 vSeeds.push_back(CDNSSeedData("komodo.mewhub.com", "seeds.komodo.mewhub.com")); // @kolo
88188dc2 101 // TODO: set up bootstrapping for mainnet
6fc71791 102 base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,60);
3090f2a1 103 base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,85);
104 base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,188);
a2b04ddf
CF
105 base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container<std::vector<unsigned char> >();
106 base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container<std::vector<unsigned char> >();
e104fcdd
SB
107 // guarantees the first two characters, when base58 encoded, are "zc"
108 base58Prefixes[ZCPAYMENT_ADDRRESS] = {22,154};
d5d2fb71 109 // guarantees the first two characters, when base58 encoded, are "SK"
6fc71791 110 base58Prefixes[ZCSPENDING_KEY] = {171,54};
b801c3b7 111
739d6155 112 vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
0e4b3175 113
78dece34 114 fMiningRequiresPeers = true;
3fcfbc8a 115 fDefaultConsistencyChecks = false;
c8c52de3 116 fRequireStandard = true;
c8c52de3 117 fMineBlocksOnDemand = false;
cc972107 118 fTestnetToBeDeprecatedFieldRPC = false;
7a4c01c9 119 checkpointData = (Checkpoints::CCheckpointData)
120 {
69968230 121 boost::assign::map_list_of
a6fa1054 122 (0, consensus.hashGenesisBlock),
fd5bb9fb 123 //(2500, uint256S("0x0e6a3d5a46eba97c4e7618d66a39f115729e1176433c98481124c2bf733aa54e"))
124 //(15000, uint256S("0x00f0bd236790e903321a2d22f85bd6bf8a505f6ef4eddb20458a65d37e14d142")),
125 //(100000, uint256S("0x0f02eb1f3a4b89df9909fec81a4bd7d023e32e24e1f5262d9fc2cc36a715be6f")),
15373725 126 1481120910, // * UNIX timestamp of last checkpoint block
2f1238bc
S
127 110415, // * total number of transactions between genesis and last checkpoint
128 // (the tx=... number in the SetBestChain debug.log lines)
b897de53 129 2777 // * estimated number of transactions per day after checkpoint
2f1238bc 130 // total number of tx / (checkpoint block height / (24 * 24))
69968230 131 };
cad9f4c8 132 if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 )
1efd6f2b 133 {
9d365796 134
1efd6f2b 135 }
e11712df 136 }
0e4b3175
MH
137};
138static CMainParams mainParams;
139
1efd6f2b 140void *chainparams_commandline(void *ptr)
141{
1efd6f2b 142 while ( ASSETCHAINS_PORT == 0 )
143 {
9d365796 144 #ifdef _WIN32
145 boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
146 #else
1efd6f2b 147 sleep(1);
9d365796 148 #endif
1efd6f2b 149 }
0f0d8331 150 //fprintf(stderr,">>>>>>>> port.%u\n",ASSETCHAINS_PORT);
cad9f4c8 151 if ( ASSETCHAINS_SYMBOL[0] != 0 )
152 {
153 mainParams.SetDefaultPort(ASSETCHAINS_PORT);
154 mainParams.pchMessageStart[0] = ASSETCHAINS_MAGIC & 0xff;
155 mainParams.pchMessageStart[1] = (ASSETCHAINS_MAGIC >> 8) & 0xff;
156 mainParams.pchMessageStart[2] = (ASSETCHAINS_MAGIC >> 16) & 0xff;
157 mainParams.pchMessageStart[3] = (ASSETCHAINS_MAGIC >> 24) & 0xff;
158 fprintf(stderr,">>>>>>>>>> %s: port.%u/%u magic.%08x %u %u coins\n",ASSETCHAINS_SYMBOL,ASSETCHAINS_PORT,ASSETCHAINS_PORT+1,ASSETCHAINS_MAGIC,ASSETCHAINS_MAGIC,(uint32_t)ASSETCHAINS_SUPPLY);
159 }
1efd6f2b 160 ASSETCHAIN_INIT = 1;
161 return(0);
162}
163
f2e03ffa
MF
164/**
165 * Testnet (v3)
166 */
0e4b3175
MH
167class CTestNetParams : public CMainParams {
168public:
169 CTestNetParams() {
f5ae6c98 170 strNetworkID = "test";
d793f94b 171 strCurrencyUnits = "TAZ";
bd006110
JT
172 consensus.nMajorityEnforceBlockUpgrade = 51;
173 consensus.nMajorityRejectBlockOutdated = 75;
45e3deea 174 consensus.nMajorityWindow = 400;
2360dd64 175 consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
3e24a533 176 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
bd006110 177 consensus.fPowAllowMinDifficultyBlocks = true;
3090f2a1 178 pchMessageStart[0] = 0x5A;
179 pchMessageStart[1] = 0x1F;
180 pchMessageStart[2] = 0x7E;
181 pchMessageStart[3] = 0x62;
182 vAlertPubKey = ParseHex("00");
183 nDefaultPort = 17770;
fd704c7b 184 nMinerThreads = 0;
f9ec3f0f 185 nPruneAfterHeight = 1000;
0e4b3175 186
f2e03ffa 187 //! Modify the testnet genesis block so the timestamp is valid for a later start.
0e4b3175 188 genesis.nTime = 1296688602;
50027f06 189 genesis.nBits = KOMODO_MINDIFF_NBITS;
66f07f5d
JG
190 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009");
191 genesis.nSolution = ParseHex("003423da3e41f916bf3ff0ee770eb844a240361abe08a8c9d46bd30226e2ad411a4047b6ddc230d173c60537e470e24f764120f5a2778b2a1285b0727bf79a0b085ad67e6266fb38fd72ef17f827315c42f921720248c983d4100e6ebd1c4b5e8762a973bac3bec7f7153b93752ebbb465f0fc9520bcfc30f9abfe303627338fed6ede9cf1b9173a736cf270cf4d9c6999ff4c3a301a78fd50dab6ccca67a0c5c2e41f216a1f3efd049a74bbe6252f9773bc309d3f9e554d996913ce8e1cec672a1fa4ea59726b61ea9e75d5ce9aa5dbfa96179a293810e02787f26de324fe7c88376ff57e29574a55faff7c2946f3e40e451861c32bf67da7377de3136858a18f34fab1bc8da37726ca2c25fc7b312a5427554ec944da81c7e27255d6c94ade9987ff7daedc2d1cc63d7d4cf93e691d13326fb1c7ee72ccdc0b134eb665fc6a9821e6fef6a6d45e4aac6dca6b505a0100ad56ea4f6fa4cdc2f0d1b65f730104a515172e34163bdb422f99d083e6eb860cf6b3f66642c4dbaf0d0fa1dca1b6166f1d1ffaa55a9d6d6df628afbdd14f1622c1c8303259299521a253bc28fcc93676723158067270fc710a09155a1e50c533e9b79ed5edba4ab70a08a9a2fc0eef0ddae050d75776a9804f8d6ad7e30ccb66c6a98d86710ca7a4dfb4feb159484796b9a015c5764aa3509051c87f729b9877ea41f8b470898c01388ed9098b1e006d3c30fc6e7c781072fa3f75d918505ee8ca75840fc62f67c57060666aa42578a2dd022eda62e3f1e447d7364074d34fd60ad9b138f60422afa6cfcb913fd6c213b496144dbfda7bfc7c24540cfe40ad0c0fd5a8c0902127f53d3178ba1b2a87bf1224d53d3a15e49ccdf121ae872a011c996d1b9793153cdcd4c0a7e99f8a35669788551cca2b62769eda24b6b55e2f4e0ac0d30aa50ecf33c6cdb24adfc922006a7bf434ced800fefe814c94c6fc8caa37b372d5088bb31d2f6b11a7a67ad3f70abbac0d5c256b637828de6cc525978cf151a2e50798e0c591787639a030291272c9ced3ab7d682e03f8c7db51f60163baa85315789666ea8c5cd6f789a7f4a5de4f8a9dfefce20f353cec606492fde8eab3e3b487b3a3a57434f8cf252a4b643fc125c8a5948b06744f5dc306aa587bdc85364c7488235c6edddd78763675e50a9637181519be06dd30c4ba0d845f9ba320d01706fd6dd64d1aa3cd4211a4a7d1d3f2c1ef2766d27d5d2cdf8e7f5e3ea309d4f149bb737305df1373a7f5313abe5986f4aa620bec4b0065d48aafac3631de3771f5c4d2f6eec67b09d9c70a3c1969fecdb014cb3c69832b63cc9d6efa378bff0ef95ffacdeb1675bb326e698f022c1a3a2e1c2b0f05e1492a6d2b7552388eca7ee8a2467ef5d4207f65d4e2ae7e33f13eb473954f249d7c20158ae703e1accddd4ea899f026618695ed2949715678a32a153df32c08922fafad68b1895e3b10e143e712940104b3b352369f4fe79bd1f1dbe03ea9909dbcf5862d1f15b3d1557a6191f54c891513cdb3c729bb9ab08c0d4c35a3ed67d517ffe1e2b7a798521aed15ff9822169c0ec860d7b897340bc2ef4c37f7eb73bd7dafef12c4fd4e6f5dd3690305257ae14ed03df5e3327b68467775a90993e613173fa6650ffa2a26e84b3ce79606bf234eda9f4053307f344099e3b10308d3785b8726fd02d8e94c2759bebd05748c3fe7d5fe087dc63608fb77f29708ab167a13f32da251e249a544124ed50c270cfc6986d9d1814273d2f0510d0d2ea335817207db6a4a23ae9b079967b63b25cb3ceea7001b65b879263f5009ac84ab89738a5b8b71fd032beb9f297326f1f5afa630a5198d684514e242f315a4d95fa6802e82799a525bb653b80b4518ec610a5996403b1391");
bd006110 192 consensus.hashGenesisBlock = genesis.GetHash();
a9b54b9d 193 //assert(consensus.hashGenesisBlock == uint256S("0x05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38"));
0e4b3175
MH
194
195 vFixedSeeds.clear();
196 vSeeds.clear();
5166804f 197 //vSeeds.push_back(CDNSSeedData("z.cash", "dns.testnet.z.cash")); // Komodo
0e4b3175 198
3090f2a1 199 base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,0);
200 base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
201 base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,128);
a2b04ddf
CF
202 base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container<std::vector<unsigned char> >();
203 base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x35)(0x83)(0x94).convert_to_container<std::vector<unsigned char> >();
13039c53 204 base58Prefixes[ZCPAYMENT_ADDRRESS] = {20,81};
05a6d19a 205 base58Prefixes[ZCSPENDING_KEY] = {177,235};
21913a9a 206
739d6155 207 vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
a60120e9 208
d5f3353d 209 //fRequireRPCPassword = true;
684eb8d6 210 fMiningRequiresPeers = false;//true;
3fcfbc8a 211 fDefaultConsistencyChecks = false;
77175766 212 fRequireStandard = true;
c8c52de3 213 fMineBlocksOnDemand = false;
cc972107 214 fTestnetToBeDeprecatedFieldRPC = true;
69968230
CF
215
216 checkpointData = (Checkpoints::CCheckpointData) {
217 boost::assign::map_list_of
5a888f72
S
218 (0, consensus.hashGenesisBlock)
219 (38000, uint256S("0x001e9a2d2e2892b88e9998cf7b079b41d59dd085423a921fe8386cecc42287b8")),
220 1486897419, // * UNIX timestamp of last checkpoint block
221 47163, // * total number of transactions between genesis and last checkpoint
222 // (the tx=... number in the SetBestChain debug.log lines)
223 715 // total number of tx / (checkpoint block height / (24 * 24))
69968230 224 };
e11712df 225 }
0e4b3175
MH
226};
227static CTestNetParams testNetParams;
228
f2e03ffa
MF
229/**
230 * Regression test
231 */
0e4b3175
MH
232class CRegTestParams : public CTestNetParams {
233public:
234 CRegTestParams() {
f5ae6c98 235 strNetworkID = "regtest";
d793f94b 236 strCurrencyUnits = "REG";
a180d0a6 237 consensus.fCoinbaseMustBeProtected = false;
7a1f5518 238 consensus.nSubsidySlowStartInterval = 0;
bd006110
JT
239 consensus.nSubsidyHalvingInterval = 150;
240 consensus.nMajorityEnforceBlockUpgrade = 750;
241 consensus.nMajorityRejectBlockOutdated = 950;
242 consensus.nMajorityWindow = 1000;
3e24a533
JG
243 consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
244 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
f2c48e15
JG
245 consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down
246 consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up
62fdd8d0 247 pchMessageStart[0] = 0xaa;
3090f2a1 248 pchMessageStart[1] = 0x8e;
249 pchMessageStart[2] = 0xf3;
250 pchMessageStart[3] = 0xf5;
2595b9ac 251 nMinerThreads = 1;
33d6825c 252 nMaxTipAge = 24 * 60 * 60;
c6a7e897
DH
253 const size_t N = 48, K = 5;
254 BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
255 nEquihashN = N;
256 nEquihashK = K;
0e4b3175 257 genesis.nTime = 1296688602;
50027f06 258 genesis.nBits = KOMODO_MINDIFF_NBITS;
66f07f5d
JG
259 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000021");
260 genesis.nSolution = ParseHex("0f2a976db4c4263da10fd5d38eb1790469cf19bdb4bf93450e09a72fdff17a3454326399");
bd006110 261 consensus.hashGenesisBlock = genesis.GetHash();
3090f2a1 262 nDefaultPort = 17779;
66f07f5d 263 assert(consensus.hashGenesisBlock == uint256S("0x00a215b4fe36f5d2f829d43e587bf10e89e64f9f48a5b6ce18559089e8fd643d"));
f9ec3f0f 264 nPruneAfterHeight = 1000;
0e4b3175 265
f2e03ffa
MF
266 vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds.
267 vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds.
0e4b3175 268
c8c52de3 269 fMiningRequiresPeers = false;
3fcfbc8a 270 fDefaultConsistencyChecks = true;
c8c52de3 271 fRequireStandard = false;
c8c52de3 272 fMineBlocksOnDemand = true;
cc972107 273 fTestnetToBeDeprecatedFieldRPC = false;
69968230
CF
274
275 checkpointData = (Checkpoints::CCheckpointData){
276 boost::assign::map_list_of
277 ( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")),
278 0,
279 0,
280 0
281 };
db0f9315
S
282
283 // Founders reward script expects a vector of 2-of-3 multisig addresses
1fc7e92e 284 vFoundersRewardAddress = { "t2FwcEhFdNXuFMv1tcYwaBJtYVtMj8b1uTg" };
22dadb35 285 assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight());
e11712df 286 }
0e4b3175
MH
287};
288static CRegTestParams regTestParams;
289
84ce18ca 290static CChainParams *pCurrentParams = 0;
0e4b3175
MH
291
292const CChainParams &Params() {
84ce18ca 293 assert(pCurrentParams);
0e4b3175
MH
294 return *pCurrentParams;
295}
296
e84843c0 297CChainParams &Params(CBaseChainParams::Network network) {
0e4b3175 298 switch (network) {
84ce18ca 299 case CBaseChainParams::MAIN:
e84843c0 300 return mainParams;
84ce18ca 301 case CBaseChainParams::TESTNET:
e84843c0 302 return testNetParams;
84ce18ca 303 case CBaseChainParams::REGTEST:
e84843c0 304 return regTestParams;
0e4b3175
MH
305 default:
306 assert(false && "Unimplemented network");
e84843c0 307 return mainParams;
0e4b3175
MH
308 }
309}
310
e84843c0
RN
311void SelectParams(CBaseChainParams::Network network) {
312 SelectBaseParams(network);
313 pCurrentParams = &Params(network);
2b1cda3b
S
314
315 // Some python qa rpc tests need to enforce the coinbase consensus rule
316 if (network == CBaseChainParams::REGTEST && mapArgs.count("-regtestprotectcoinbase")) {
317 regTestParams.SetRegTestCoinbaseMustBeProtected();
318 }
e84843c0
RN
319}
320
ca3ce0fa 321bool SelectParamsFromCommandLine()
3fdb9e8c 322{
b796cb08 323 CBaseChainParams::Network network = NetworkIdFromCommandLine();
3fdb9e8c 324 if (network == CBaseChainParams::MAX_NETWORK_TYPES)
0e4b3175 325 return false;
0e4b3175 326
3fdb9e8c 327 SelectParams(network);
0e4b3175
MH
328 return true;
329}
db0f9315
S
330
331
332// Block height must be >0 and <=last founders reward block height
333// Index variable i ranges from 0 - (vFoundersRewardAddress.size()-1)
241867b1 334std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const {
db0f9315 335 int maxHeight = consensus.GetLastFoundersRewardBlockHeight();
241867b1 336 assert(nHeight > 0 && nHeight <= maxHeight);
db0f9315 337
3b30d836
S
338 size_t addressChangeInterval = (maxHeight + vFoundersRewardAddress.size()) / vFoundersRewardAddress.size();
339 size_t i = nHeight / addressChangeInterval;
db0f9315
S
340 return vFoundersRewardAddress[i];
341}
342
343// Block height must be >0 and <=last founders reward block height
344// The founders reward address is expected to be a multisig (P2SH) address
241867b1 345CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const {
db0f9315
S
346 assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight());
347
3b30d836 348 CBitcoinAddress address(GetFoundersRewardAddressAtHeight(nHeight).c_str());
db0f9315
S
349 assert(address.IsValid());
350 assert(address.IsScript());
351 CScriptID scriptID = get<CScriptID>(address.Get()); // Get() returns a boost variant
352 CScript script = CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL;
353 return script;
354}
3b30d836
S
355
356std::string CChainParams::GetFoundersRewardAddressAtIndex(int i) const {
241867b1 357 assert(i >= 0 && i < vFoundersRewardAddress.size());
3b30d836
S
358 return vFoundersRewardAddress[i];
359}
This page took 0.30552 seconds and 4 git commands to generate.