]> Git Repo - VerusCoin.git/blame - src/chainparams.cpp
Auto merge of #1907 - bitcartel:1903_z_sendmany_fee_parameter, r=ebfull
[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 fRequireRPCPassword = true;
121 fMiningRequiresPeers = true;
3fcfbc8a 122 fDefaultConsistencyChecks = false;
c8c52de3 123 fRequireStandard = true;
c8c52de3 124 fMineBlocksOnDemand = false;
cc972107 125 fTestnetToBeDeprecatedFieldRPC = false;
e11712df 126
69968230
CF
127 checkpointData = (Checkpoints::CCheckpointData) {
128 boost::assign::map_list_of
73363c3d 129 (0, consensus.hashGenesisBlock)
2f1238bc
S
130 (2500, uint256S("0x00000006dc968f600be11a86cbfbf7feb61c7577f45caced2e82b6d261d19744"))
131 (15000, uint256S("0x00000000b6bc56656812a5b8dcad69d6ad4446dec23b5ec456c18641fb5381ba")),
132 1479851027, // * UNIX timestamp of last checkpoint block
133 110415, // * total number of transactions between genesis and last checkpoint
134 // (the tx=... number in the SetBestChain debug.log lines)
135 4240 // * estimated number of transactions per day after checkpoint
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 fRequireRPCPassword = true;
254 fMiningRequiresPeers = true;
3fcfbc8a 255 fDefaultConsistencyChecks = false;
77175766 256 fRequireStandard = true;
c8c52de3 257 fMineBlocksOnDemand = false;
cc972107 258 fTestnetToBeDeprecatedFieldRPC = true;
69968230
CF
259
260 checkpointData = (Checkpoints::CCheckpointData) {
261 boost::assign::map_list_of
9144ea8c
SB
262 ( 0, consensus.hashGenesisBlock),
263 genesis.nTime,
264 0,
265 0
69968230
CF
266 };
267
db0f9315
S
268 // Founders reward script expects a vector of 2-of-3 multisig addresses
269 vFoundersRewardAddress = {
1fc7e92e
JG
270 "t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi", "t2N9PH9Wk9xjqYg9iin1Ua3aekJqfAtE543", "t2NGQjYMQhFndDHguvUw4wZdNdsssA6K7x2", "t27ktmq1kbeCWiQ5TZ7w5npSzcdbBmTB7v6",
271 "t2GcBttAKD2WTHka8HyGc2dfvVTKYZUfHmJ", "t2Q3vxWaD9LrdqUE8Xd9Ddjpr9pUQ2aGotK", "t2TTfWDsYu998fHWzVP9Gns4fgxXXRi1Wzu", "t2KS6R4MMWdSBMjLCiw2iMyhWGRQPmyRqDn",
272 "t2Q2ELrgotWv3Eec6LEtMMiiQ8dtW38u8Tj", "t2AEgJA88vTWAKqxJDFUEJWyHUtQAZi5G1D", "t2HCSdmpq1TQKksuwPQevwAzPTgfJ2rkMbG", "t2HQCPFAUQaUdJWHPhg5pPBxit7inaJzubE",
273 "t2Fzqvq8Y9e6Mn3JNPb982aYsLmq4b5HmhH", "t2HEz7YZQqDUgC5h4y2WSD3mWneqJNVRjjJ", "t2GCR1SCk687Eeo5NEZ23MLsms7JjVWBgfG", "t2KyiPR9Lztq2w1w747X6W4nkUMAGL8M9KN",
274 "t2UxymadyxSyVihmbq7S1yxw5dCBqJ1S4jT", "t2AVeMy7fdmTcJhckqiKRG8B7F1vccEhSqU", "t26m7LwihQzD2sH7ZVhYpPJM5j7kzwbfKW9", "t2DgwUNTe7NxuyPU6fxsB5xJXap3E4yWXrN",
275 "t2U6funcXA11fC9SZehyvUL3rk3Vhuh7fzS", "t284JhyS8LGM72Tx1porSqwrcq3CejthP1p", "t29egu8QcpzKeLoPLqWS6QVMnUUPQdF6eNm", "t29LqD9p9D3B26euBwFi6mfcWu8HPA38VNs",
276 "t28GsAMCxAyLy85XaasddDzaYFTtfewr86y", "t2GV44QyaikQPLUfm6oTfZnw71LLjnR7gDG", "t2U2QzNLQ1jtAu4L6xxVnRXLBsQpQvGRR2g", "t2QKGr5PNan7nrwDgseyHMN9NFeeuUjCh8b",
277 "t2AfS8u6HwBeJpKpbuxztvRjupKQDXqnrwa", "t2CTRQUViQd3CWMhnKhFnUHqDLUyTxmWhJs", "t2CbM9EqszNURqh1UXZBXYhwp1R4GwEhWRE", "t2LM7uYiAsKDU42GNSnMwDxbZ8s1DowQzYH",
278 "t2AgvT35LHR378AE3ouz6xKMhkTLHLJC6nD", "t285EAQXUVyi4NMddJv2QqTrnv45GRMbP8e", "t2EpMRCD5b8f2DCQ37npNULcpZhkjC8muqA", "t2BCmWXrRPiCeQTpizSWKKRPM5X6PS7umDY",
279 "t2DN7X6wDFn5hYKBiBmn3Z98st419yaTVTH", "t2QJj8HeCwQ6mHwqekxxDLZntYpZTHNU62t", "t2QdHBR1Yciqn4j8gpS8DcQZZtYetKvfNj3", "t2E5cpLA1ey5VNxFNcuopeQMq2rH2NHiPdu",
280 "t2EVRGtzjFAyz8CF8ndvLuiJu7qZUfDa93H", "t2KoQDk3BSFadBkuaWdLwchFuQamzw9RE4L", "t2FnR3yhTmuiejEJeu6qpidWTghRd1HpjLt", "t2BAuBAAospDc9d1u5nNGEi6x4NRJBD2PQ2",
281 "t2RtKrLCGcyPkm4a4APg1YY9Wu2m4R2PgrB", "t28aUbSteZzBq2pFgj1K1XNZRZP5mMMyakV", "t2Urdy1ERfkvsFuy6Z4BkhvYGzWdmivfAFR", "t2ADinR4JrvCMd4Q1XGALPajzFrirqvhED6",
db0f9315 282 };
22dadb35 283 assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight());
e11712df 284 }
0e4b3175
MH
285};
286static CTestNetParams testNetParams;
287
f2e03ffa
MF
288/**
289 * Regression test
290 */
0e4b3175
MH
291class CRegTestParams : public CTestNetParams {
292public:
293 CRegTestParams() {
f5ae6c98 294 strNetworkID = "regtest";
d793f94b 295 strCurrencyUnits = "REG";
a180d0a6 296 consensus.fCoinbaseMustBeProtected = false;
7a1f5518 297 consensus.nSubsidySlowStartInterval = 0;
bd006110
JT
298 consensus.nSubsidyHalvingInterval = 150;
299 consensus.nMajorityEnforceBlockUpgrade = 750;
300 consensus.nMajorityRejectBlockOutdated = 950;
301 consensus.nMajorityWindow = 1000;
3e24a533
JG
302 consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
303 assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
f2c48e15
JG
304 consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down
305 consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up
62fdd8d0
SB
306 pchMessageStart[0] = 0xaa;
307 pchMessageStart[1] = 0xe8;
308 pchMessageStart[2] = 0x3f;
309 pchMessageStart[3] = 0x5f;
2595b9ac 310 nMinerThreads = 1;
33d6825c 311 nMaxTipAge = 24 * 60 * 60;
c6a7e897
DH
312 const size_t N = 48, K = 5;
313 BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
314 nEquihashN = N;
315 nEquihashK = K;
0e4b3175 316 genesis.nTime = 1296688602;
66f07f5d 317 genesis.nBits = 0x200f0f0f;
6be67622 318 genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009");
30ed3791 319 genesis.nSolution = ParseHex("01936b7db1eb4ac39f151b8704642d0a8bda13ec547d54cd5e43ba142fc6d8877cab07b3");
bd006110 320 consensus.hashGenesisBlock = genesis.GetHash();
0e4b3175 321 nDefaultPort = 18444;
30ed3791 322 assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327"));
f9ec3f0f 323 nPruneAfterHeight = 1000;
0e4b3175 324
f2e03ffa
MF
325 vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds.
326 vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds.
0e4b3175 327
c8c52de3 328 fRequireRPCPassword = false;
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.196902 seconds and 4 git commands to generate.