]> Git Repo - VerusCoin.git/blame - src/chainparams.cpp
Implement accurate memory accounting for mempool
[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 */
e11712df 32
3e24a533
JG
33const arith_uint256 maxUint = UintToArith256(uint256S("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"));
34
0e4b3175
MH
35class CMainParams : public CChainParams {
36public:
37 CMainParams() {
f5ae6c98 38 strNetworkID = "main";
d793f94b 39 strCurrencyUnits = "ZEC";
a180d0a6 40 consensus.fCoinbaseMustBeProtected = true;
45e3deea
JG
41 consensus.nSubsidySlowStartInterval = 20000;
42 consensus.nSubsidyHalvingInterval = 840000;
bd006110
JT
43 consensus.nMajorityEnforceBlockUpgrade = 750;
44 consensus.nMajorityRejectBlockOutdated = 950;
45e3deea 45 consensus.nMajorityWindow = 4000;
30ed3791 46 consensus.powLimit = uint256S("0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
f2c48e15 47 consensus.nPowAveragingWindow = 17;
3e24a533 48 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
8f3ec042
JG
49 consensus.nPowMaxAdjustDown = 32; // 32% adjustment down
50 consensus.nPowMaxAdjustUp = 16; // 16% adjustment up
45e3deea 51 consensus.nPowTargetSpacing = 2.5 * 60;
bd006110 52 consensus.fPowAllowMinDifficultyBlocks = false;
5c5f70f0 53 /**
1feaefac 54 * The message start string should be awesome! ⓩ❤
f2e03ffa 55 */
1feaefac
ZC
56 pchMessageStart[0] = 0x24;
57 pchMessageStart[1] = 0xe9;
58 pchMessageStart[2] = 0x27;
59 pchMessageStart[3] = 0x64;
174a68b3 60 vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264");
3985a40d 61 nDefaultPort = 8233;
2595b9ac 62 nMinerThreads = 0;
33d6825c 63 nMaxTipAge = 24 * 60 * 60;
f9ec3f0f 64 nPruneAfterHeight = 100000;
c6a7e897
DH
65 const size_t N = 200, K = 9;
66 BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
67 nEquihashN = N;
68 nEquihashK = K;
0e4b3175 69
f2e03ffa 70 /**
b05a89b2
LD
71 * Build the genesis block. Note that the output of its generation
72 * transaction cannot be spent since it did not originally exist in the
789914e7 73 * database (and is in any case of zero value).
30ed3791
JG
74 *
75 * >>> from pyblake2 import blake2s
76 * >>> '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()
f2e03ffa 77 */
30ed3791 78 const char* pszTimestamp = "Zcash0b9c4eef8b7cc417ee5001e3500984b6fea35683a7cac141a043c42064835d34";
4949004d 79 CMutableTransaction txNew;
0e4b3175
MH
80 txNew.vin.resize(1);
81 txNew.vout.resize(1);
30ed3791 82 txNew.vin[0].scriptSig = CScript() << 520617983 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
6be67622 83 txNew.vout[0].nValue = 0;
0e4b3175
MH
84 txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
85 genesis.vtx.push_back(txNew);
4f152496 86 genesis.hashPrevBlock.SetNull();
0e4b3175 87 genesis.hashMerkleRoot = genesis.BuildMerkleTree();
6be67622 88 genesis.nVersion = 4;
30ed3791
JG
89 genesis.nTime = 1477641360;
90 genesis.nBits = 0x1f07ffff;
91 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000001257");
92 genesis.nSolution = ParseHex("000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce157");
0e4b3175 93
bd006110 94 consensus.hashGenesisBlock = genesis.GetHash();
30ed3791
JG
95 assert(consensus.hashGenesisBlock == uint256S("0x00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08"));
96 assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb"));
0e4b3175 97
57466ea6
JG
98 vFixedSeeds.clear();
99 vSeeds.clear();
3483696b
DH
100 vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.z.cash")); // Zcash
101 vSeeds.push_back(CDNSSeedData("str4d.xyz", "dnsseed.str4d.xyz")); // @str4d
102 vSeeds.push_back(CDNSSeedData("znodes.org", "dnsseed.znodes.org")); // @bitcartel
0e4b3175 103
702721c1
DH
104 // guarantees the first 2 characters, when base58 encoded, are "t1"
105 base58Prefixes[PUBKEY_ADDRESS] = {0x1C,0xB8};
106 // guarantees the first 2 characters, when base58 encoded, are "t3"
107 base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBD};
108 // the first character, when base58 encoded, is "5" or "K" or "L" (as in Bitcoin)
109 base58Prefixes[SECRET_KEY] = {0x80};
110 // do not rely on these BIP32 prefixes; they are not specified and may change
111 base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x88,0xB2,0x1E};
112 base58Prefixes[EXT_SECRET_KEY] = {0x04,0x88,0xAD,0xE4};
113 // guarantees the first 2 characters, when base58 encoded, are "zc"
114 base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0x9A};
115 // guarantees the first 2 characters, when base58 encoded, are "SK"
116 base58Prefixes[ZCSPENDING_KEY] = {0xAB,0x36};
0e4b3175 117
739d6155 118 vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
0e4b3175 119
c8c52de3 120 fMiningRequiresPeers = true;
3fcfbc8a 121 fDefaultConsistencyChecks = false;
c8c52de3 122 fRequireStandard = true;
c8c52de3 123 fMineBlocksOnDemand = false;
cc972107 124 fTestnetToBeDeprecatedFieldRPC = false;
e11712df 125
69968230
CF
126 checkpointData = (Checkpoints::CCheckpointData) {
127 boost::assign::map_list_of
73363c3d 128 (0, consensus.hashGenesisBlock)
2f1238bc 129 (2500, uint256S("0x00000006dc968f600be11a86cbfbf7feb61c7577f45caced2e82b6d261d19744"))
b897de53
S
130 (15000, uint256S("0x00000000b6bc56656812a5b8dcad69d6ad4446dec23b5ec456c18641fb5381ba"))
131 (67500, uint256S("0x000000006b366d2c1649a6ebb4787ac2b39c422f451880bc922e3a6fbd723616")),
132 1487767578, // * UNIX timestamp of last checkpoint block
133 325430, // * total number of transactions between genesis and last checkpoint
2f1238bc 134 // (the tx=... number in the SetBestChain debug.log lines)
b897de53 135 2777 // * estimated number of transactions per day after checkpoint
2f1238bc 136 // total number of tx / (checkpoint block height / (24 * 24))
69968230 137 };
db0f9315
S
138
139 // Founders reward script expects a vector of 2-of-3 multisig addresses
140 vFoundersRewardAddress = {
9f15b823
JG
141 "t3Vz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd", /* main-index: 0*/
142 "t3cL9AucCajm3HXDhb5jBnJK2vapVoXsop3", /* main-index: 1*/
143 "t3fqvkzrrNaMcamkQMwAyHRjfDdM2xQvDTR", /* main-index: 2*/
144 "t3TgZ9ZT2CTSK44AnUPi6qeNaHa2eC7pUyF", /* main-index: 3*/
145 "t3SpkcPQPfuRYHsP5vz3Pv86PgKo5m9KVmx", /* main-index: 4*/
146 "t3Xt4oQMRPagwbpQqkgAViQgtST4VoSWR6S", /* main-index: 5*/
147 "t3ayBkZ4w6kKXynwoHZFUSSgXRKtogTXNgb", /* main-index: 6*/
148 "t3adJBQuaa21u7NxbR8YMzp3km3TbSZ4MGB", /* main-index: 7*/
149 "t3K4aLYagSSBySdrfAGGeUd5H9z5Qvz88t2", /* main-index: 8*/
150 "t3RYnsc5nhEvKiva3ZPhfRSk7eyh1CrA6Rk", /* main-index: 9*/
151 "t3Ut4KUq2ZSMTPNE67pBU5LqYCi2q36KpXQ", /* main-index: 10*/
152 "t3ZnCNAvgu6CSyHm1vWtrx3aiN98dSAGpnD", /* main-index: 11*/
153 "t3fB9cB3eSYim64BS9xfwAHQUKLgQQroBDG", /* main-index: 12*/
154 "t3cwZfKNNj2vXMAHBQeewm6pXhKFdhk18kD", /* main-index: 13*/
155 "t3YcoujXfspWy7rbNUsGKxFEWZqNstGpeG4", /* main-index: 14*/
156 "t3bLvCLigc6rbNrUTS5NwkgyVrZcZumTRa4", /* main-index: 15*/
157 "t3VvHWa7r3oy67YtU4LZKGCWa2J6eGHvShi", /* main-index: 16*/
158 "t3eF9X6X2dSo7MCvTjfZEzwWrVzquxRLNeY", /* main-index: 17*/
159 "t3esCNwwmcyc8i9qQfyTbYhTqmYXZ9AwK3X", /* main-index: 18*/
160 "t3M4jN7hYE2e27yLsuQPPjuVek81WV3VbBj", /* main-index: 19*/
161 "t3gGWxdC67CYNoBbPjNvrrWLAWxPqZLxrVY", /* main-index: 20*/
162 "t3LTWeoxeWPbmdkUD3NWBquk4WkazhFBmvU", /* main-index: 21*/
163 "t3P5KKX97gXYFSaSjJPiruQEX84yF5z3Tjq", /* main-index: 22*/
164 "t3f3T3nCWsEpzmD35VK62JgQfFig74dV8C9", /* main-index: 23*/
165 "t3Rqonuzz7afkF7156ZA4vi4iimRSEn41hj", /* main-index: 24*/
166 "t3fJZ5jYsyxDtvNrWBeoMbvJaQCj4JJgbgX", /* main-index: 25*/
167 "t3Pnbg7XjP7FGPBUuz75H65aczphHgkpoJW", /* main-index: 26*/
168 "t3WeKQDxCijL5X7rwFem1MTL9ZwVJkUFhpF", /* main-index: 27*/
169 "t3Y9FNi26J7UtAUC4moaETLbMo8KS1Be6ME", /* main-index: 28*/
170 "t3aNRLLsL2y8xcjPheZZwFy3Pcv7CsTwBec", /* main-index: 29*/
171 "t3gQDEavk5VzAAHK8TrQu2BWDLxEiF1unBm", /* main-index: 30*/
172 "t3Rbykhx1TUFrgXrmBYrAJe2STxRKFL7G9r", /* main-index: 31*/
173 "t3aaW4aTdP7a8d1VTE1Bod2yhbeggHgMajR", /* main-index: 32*/
174 "t3YEiAa6uEjXwFL2v5ztU1fn3yKgzMQqNyo", /* main-index: 33*/
175 "t3g1yUUwt2PbmDvMDevTCPWUcbDatL2iQGP", /* main-index: 34*/
176 "t3dPWnep6YqGPuY1CecgbeZrY9iUwH8Yd4z", /* main-index: 35*/
177 "t3QRZXHDPh2hwU46iQs2776kRuuWfwFp4dV", /* main-index: 36*/
178 "t3enhACRxi1ZD7e8ePomVGKn7wp7N9fFJ3r", /* main-index: 37*/
179 "t3PkLgT71TnF112nSwBToXsD77yNbx2gJJY", /* main-index: 38*/
180 "t3LQtHUDoe7ZhhvddRv4vnaoNAhCr2f4oFN", /* main-index: 39*/
181 "t3fNcdBUbycvbCtsD2n9q3LuxG7jVPvFB8L", /* main-index: 40*/
182 "t3dKojUU2EMjs28nHV84TvkVEUDu1M1FaEx", /* main-index: 41*/
183 "t3aKH6NiWN1ofGd8c19rZiqgYpkJ3n679ME", /* main-index: 42*/
184 "t3MEXDF9Wsi63KwpPuQdD6by32Mw2bNTbEa", /* main-index: 43*/
185 "t3WDhPfik343yNmPTqtkZAoQZeqA83K7Y3f", /* main-index: 44*/
186 "t3PSn5TbMMAEw7Eu36DYctFezRzpX1hzf3M", /* main-index: 45*/
187 "t3R3Y5vnBLrEn8L6wFjPjBLnxSUQsKnmFpv", /* main-index: 46*/
188 "t3Pcm737EsVkGTbhsu2NekKtJeG92mvYyoN", /* main-index: 47*/
189// "t3PZ9PPcLzgL57XRSG5ND4WNBC9UTFb8DXv", /* main-index: 48*/
190// "t3L1WgcyQ95vtpSgjHfgANHyVYvffJZ9iGb", /* main-index: 49*/
191// "t3JtoXqsv3FuS7SznYCd5pZJGU9di15mdd7", /* main-index: 50*/
192// "t3hLJHrHs3ytDgExxr1mD8DYSrk1TowGV25", /* main-index: 51*/
193// "t3fmYHU2DnVaQgPhDs6TMFVmyC3qbWEWgXN", /* main-index: 52*/
194// "t3T4WmAp6nrLkJ24iPpGeCe1fSWTPv47ASG", /* main-index: 53*/
195// "t3fP6GrDM4QVwdjFhmCxGNbe7jXXXSDQ5dv", /* main-index: 54*/
196};
22dadb35 197 assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight());
e11712df 198 }
0e4b3175
MH
199};
200static CMainParams mainParams;
201
f2e03ffa
MF
202/**
203 * Testnet (v3)
204 */
0e4b3175
MH
205class CTestNetParams : public CMainParams {
206public:
207 CTestNetParams() {
f5ae6c98 208 strNetworkID = "test";
d793f94b 209 strCurrencyUnits = "TAZ";
bd006110
JT
210 consensus.nMajorityEnforceBlockUpgrade = 51;
211 consensus.nMajorityRejectBlockOutdated = 75;
45e3deea 212 consensus.nMajorityWindow = 400;
2360dd64 213 consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
3e24a533 214 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
bd006110 215 consensus.fPowAllowMinDifficultyBlocks = true;
c5eba181
DH
216 pchMessageStart[0] = 0xfa;
217 pchMessageStart[1] = 0x1a;
1feaefac
ZC
218 pchMessageStart[2] = 0xf9;
219 pchMessageStart[3] = 0xbf;
174a68b3 220 vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6");
3985a40d 221 nDefaultPort = 18233;
fd704c7b 222 nMinerThreads = 0;
f9ec3f0f 223 nPruneAfterHeight = 1000;
0e4b3175 224
f2e03ffa 225 //! Modify the testnet genesis block so the timestamp is valid for a later start.
30ed3791 226 genesis.nTime = 1477648033;
2360dd64 227 genesis.nBits = 0x2007ffff;
30ed3791
JG
228 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000006");
229 genesis.nSolution = ParseHex("00a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff");
bd006110 230 consensus.hashGenesisBlock = genesis.GetHash();
30ed3791 231 assert(consensus.hashGenesisBlock == uint256S("0x05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38"));
0e4b3175
MH
232
233 vFixedSeeds.clear();
234 vSeeds.clear();
9fc324a1 235 vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.testnet.z.cash")); // Zcash
0e4b3175 236
702721c1
DH
237 // guarantees the first 2 characters, when base58 encoded, are "tm"
238 base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25};
239 // guarantees the first 2 characters, when base58 encoded, are "t2"
240 base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA};
241 // the first character, when base58 encoded, is "9" or "c" (as in Bitcoin)
242 base58Prefixes[SECRET_KEY] = {0xEF};
243 // do not rely on these BIP32 prefixes; they are not specified and may change
244 base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF};
245 base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94};
246 // guarantees the first 2 characters, when base58 encoded, are "zt"
247 base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0xB6};
248 // guarantees the first 2 characters, when base58 encoded, are "ST"
249 base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08};
21913a9a 250
739d6155 251 vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
a60120e9 252
c8c52de3 253 fMiningRequiresPeers = true;
3fcfbc8a 254 fDefaultConsistencyChecks = false;
77175766 255 fRequireStandard = true;
c8c52de3 256 fMineBlocksOnDemand = false;
cc972107 257 fTestnetToBeDeprecatedFieldRPC = true;
69968230
CF
258
259 checkpointData = (Checkpoints::CCheckpointData) {
260 boost::assign::map_list_of
5a888f72
S
261 (0, consensus.hashGenesisBlock)
262 (38000, uint256S("0x001e9a2d2e2892b88e9998cf7b079b41d59dd085423a921fe8386cecc42287b8")),
263 1486897419, // * UNIX timestamp of last checkpoint block
264 47163, // * total number of transactions between genesis and last checkpoint
265 // (the tx=... number in the SetBestChain debug.log lines)
266 715 // total number of tx / (checkpoint block height / (24 * 24))
69968230
CF
267 };
268
db0f9315
S
269 // Founders reward script expects a vector of 2-of-3 multisig addresses
270 vFoundersRewardAddress = {
10031802 271 "t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi", "t2N9PH9Wk9xjqYg9iin1Ua3aekJqfAtE543", "t2NGQjYMQhFndDHguvUw4wZdNdsssA6K7x2", "t2ENg7hHVqqs9JwU5cgjvSbxnT2a9USNfhy",
4340ec97
S
272 "t2BkYdVCHzvTJJUTx4yZB8qeegD8QsPx8bo", "t2J8q1xH1EuigJ52MfExyyjYtN3VgvshKDf", "t2Crq9mydTm37kZokC68HzT6yez3t2FBnFj", "t2EaMPUiQ1kthqcP5UEkF42CAFKJqXCkXC9",
273 "t2F9dtQc63JDDyrhnfpzvVYTJcr57MkqA12", "t2LPirmnfYSZc481GgZBa6xUGcoovfytBnC", "t26xfxoSw2UV9Pe5o3C8V4YybQD4SESfxtp", "t2D3k4fNdErd66YxtvXEdft9xuLoKD7CcVo",
274 "t2DWYBkxKNivdmsMiivNJzutaQGqmoRjRnL", "t2C3kFF9iQRxfc4B9zgbWo4dQLLqzqjpuGQ", "t2MnT5tzu9HSKcppRyUNwoTp8MUueuSGNaB", "t2AREsWdoW1F8EQYsScsjkgqobmgrkKeUkK",
275 "t2Vf4wKcJ3ZFtLj4jezUUKkwYR92BLHn5UT", "t2K3fdViH6R5tRuXLphKyoYXyZhyWGghDNY", "t2VEn3KiKyHSGyzd3nDw6ESWtaCQHwuv9WC", "t2F8XouqdNMq6zzEvxQXHV1TjwZRHwRg8gC",
276 "t2BS7Mrbaef3fA4xrmkvDisFVXVrRBnZ6Qj", "t2FuSwoLCdBVPwdZuYoHrEzxAb9qy4qjbnL", "t2SX3U8NtrT6gz5Db1AtQCSGjrpptr8JC6h", "t2V51gZNSoJ5kRL74bf9YTtbZuv8Fcqx2FH",
277 "t2FyTsLjjdm4jeVwir4xzj7FAkUidbr1b4R", "t2EYbGLekmpqHyn8UBF6kqpahrYm7D6N1Le", "t2NQTrStZHtJECNFT3dUBLYA9AErxPCmkka", "t2GSWZZJzoesYxfPTWXkFn5UaxjiYxGBU2a",
278 "t2RpffkzyLRevGM3w9aWdqMX6bd8uuAK3vn", "t2JzjoQqnuXtTGSN7k7yk5keURBGvYofh1d", "t2AEefc72ieTnsXKmgK2bZNckiwvZe3oPNL", "t2NNs3ZGZFsNj2wvmVd8BSwSfvETgiLrD8J",
279 "t2ECCQPVcxUCSSQopdNquguEPE14HsVfcUn", "t2JabDUkG8TaqVKYfqDJ3rqkVdHKp6hwXvG", "t2FGzW5Zdc8Cy98ZKmRygsVGi6oKcmYir9n", "t2DUD8a21FtEFn42oVLp5NGbogY13uyjy9t",
280 "t2UjVSd3zheHPgAkuX8WQW2CiC9xHQ8EvWp", "t2TBUAhELyHUn8i6SXYsXz5Lmy7kDzA1uT5", "t2Tz3uCyhP6eizUWDc3bGH7XUC9GQsEyQNc", "t2NysJSZtLwMLWEJ6MH3BsxRh6h27mNcsSy",
281 "t2KXJVVyyrjVxxSeazbY9ksGyft4qsXUNm9", "t2J9YYtH31cveiLZzjaE4AcuwVho6qjTNzp", "t2QgvW4sP9zaGpPMH1GRzy7cpydmuRfB4AZ", "t2NDTJP9MosKpyFPHJmfjc5pGCvAU58XGa4",
282 "t29pHDBWq7qN4EjwSEHg8wEqYe9pkmVrtRP", "t2Ez9KM8VJLuArcxuEkNRAkhNvidKkzXcjJ", "t2D5y7J5fpXajLbGrMBQkFg2mFN8fo3n8cX", "t2UV2wr1PTaUiybpkV3FdSdGxUJeZdZztyt",
283 };
22dadb35 284 assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight());
e11712df 285 }
0e4b3175
MH
286};
287static CTestNetParams testNetParams;
288
f2e03ffa
MF
289/**
290 * Regression test
291 */
0e4b3175
MH
292class CRegTestParams : public CTestNetParams {
293public:
294 CRegTestParams() {
f5ae6c98 295 strNetworkID = "regtest";
d793f94b 296 strCurrencyUnits = "REG";
a180d0a6 297 consensus.fCoinbaseMustBeProtected = false;
7a1f5518 298 consensus.nSubsidySlowStartInterval = 0;
bd006110
JT
299 consensus.nSubsidyHalvingInterval = 150;
300 consensus.nMajorityEnforceBlockUpgrade = 750;
301 consensus.nMajorityRejectBlockOutdated = 950;
302 consensus.nMajorityWindow = 1000;
3e24a533
JG
303 consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
304 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
f2c48e15
JG
305 consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down
306 consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up
62fdd8d0
SB
307 pchMessageStart[0] = 0xaa;
308 pchMessageStart[1] = 0xe8;
309 pchMessageStart[2] = 0x3f;
310 pchMessageStart[3] = 0x5f;
2595b9ac 311 nMinerThreads = 1;
33d6825c 312 nMaxTipAge = 24 * 60 * 60;
c6a7e897
DH
313 const size_t N = 48, K = 5;
314 BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
315 nEquihashN = N;
316 nEquihashK = K;
0e4b3175 317 genesis.nTime = 1296688602;
66f07f5d 318 genesis.nBits = 0x200f0f0f;
6be67622 319 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009");
30ed3791 320 genesis.nSolution = ParseHex("01936b7db1eb4ac39f151b8704642d0a8bda13ec547d54cd5e43ba142fc6d8877cab07b3");
bd006110 321 consensus.hashGenesisBlock = genesis.GetHash();
0e4b3175 322 nDefaultPort = 18444;
30ed3791 323 assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327"));
f9ec3f0f 324 nPruneAfterHeight = 1000;
0e4b3175 325
f2e03ffa
MF
326 vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds.
327 vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds.
0e4b3175 328
c8c52de3 329 fMiningRequiresPeers = false;
3fcfbc8a 330 fDefaultConsistencyChecks = true;
c8c52de3 331 fRequireStandard = false;
c8c52de3 332 fMineBlocksOnDemand = true;
cc972107 333 fTestnetToBeDeprecatedFieldRPC = false;
69968230
CF
334
335 checkpointData = (Checkpoints::CCheckpointData){
336 boost::assign::map_list_of
337 ( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")),
338 0,
339 0,
340 0
341 };
db0f9315
S
342
343 // Founders reward script expects a vector of 2-of-3 multisig addresses
1fc7e92e 344 vFoundersRewardAddress = { "t2FwcEhFdNXuFMv1tcYwaBJtYVtMj8b1uTg" };
22dadb35 345 assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight());
e11712df 346 }
0e4b3175
MH
347};
348static CRegTestParams regTestParams;
349
84ce18ca 350static CChainParams *pCurrentParams = 0;
0e4b3175
MH
351
352const CChainParams &Params() {
84ce18ca 353 assert(pCurrentParams);
0e4b3175
MH
354 return *pCurrentParams;
355}
356
e84843c0 357CChainParams &Params(CBaseChainParams::Network network) {
0e4b3175 358 switch (network) {
84ce18ca 359 case CBaseChainParams::MAIN:
e84843c0 360 return mainParams;
84ce18ca 361 case CBaseChainParams::TESTNET:
e84843c0 362 return testNetParams;
84ce18ca 363 case CBaseChainParams::REGTEST:
e84843c0 364 return regTestParams;
0e4b3175
MH
365 default:
366 assert(false && "Unimplemented network");
e84843c0 367 return mainParams;
0e4b3175
MH
368 }
369}
370
e84843c0
RN
371void SelectParams(CBaseChainParams::Network network) {
372 SelectBaseParams(network);
373 pCurrentParams = &Params(network);
2b1cda3b
S
374
375 // Some python qa rpc tests need to enforce the coinbase consensus rule
376 if (network == CBaseChainParams::REGTEST && mapArgs.count("-regtestprotectcoinbase")) {
377 regTestParams.SetRegTestCoinbaseMustBeProtected();
378 }
e84843c0
RN
379}
380
ca3ce0fa 381bool SelectParamsFromCommandLine()
3fdb9e8c 382{
b796cb08 383 CBaseChainParams::Network network = NetworkIdFromCommandLine();
3fdb9e8c 384 if (network == CBaseChainParams::MAX_NETWORK_TYPES)
0e4b3175 385 return false;
0e4b3175 386
3fdb9e8c 387 SelectParams(network);
0e4b3175
MH
388 return true;
389}
db0f9315
S
390
391
392// Block height must be >0 and <=last founders reward block height
393// Index variable i ranges from 0 - (vFoundersRewardAddress.size()-1)
241867b1 394std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const {
db0f9315 395 int maxHeight = consensus.GetLastFoundersRewardBlockHeight();
241867b1 396 assert(nHeight > 0 && nHeight <= maxHeight);
db0f9315 397
3b30d836
S
398 size_t addressChangeInterval = (maxHeight + vFoundersRewardAddress.size()) / vFoundersRewardAddress.size();
399 size_t i = nHeight / addressChangeInterval;
db0f9315
S
400 return vFoundersRewardAddress[i];
401}
402
403// Block height must be >0 and <=last founders reward block height
404// The founders reward address is expected to be a multisig (P2SH) address
241867b1 405CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const {
db0f9315
S
406 assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight());
407
3b30d836 408 CBitcoinAddress address(GetFoundersRewardAddressAtHeight(nHeight).c_str());
db0f9315
S
409 assert(address.IsValid());
410 assert(address.IsScript());
411 CScriptID scriptID = get<CScriptID>(address.Get()); // Get() returns a boost variant
412 CScript script = CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL;
413 return script;
414}
3b30d836
S
415
416std::string CChainParams::GetFoundersRewardAddressAtIndex(int i) const {
241867b1 417 assert(i >= 0 && i < vFoundersRewardAddress.size());
3b30d836
S
418 return vFoundersRewardAddress[i];
419}
This page took 0.252985 seconds and 4 git commands to generate.