Guest User

Untitled

a guest
Oct 30th, 2021
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.84 KB | None | 0 0
  1. // Copyright (c) 2010 Satoshi Nakamoto
  2. // Copyright (c) 2009-2018 The Bitcoin Core developers
  3. // Distributed under the MIT software license, see the accompanying
  4. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  5.  
  6. #include <chainparams.h>
  7.  
  8. #include <chainparamsseeds.h>
  9. #include <consensus/merkle.h>
  10. #include <tinyformat.h>
  11. #include <util/system.h>
  12. #include <util/strencodings.h>
  13. #include <versionbitsinfo.h>
  14.  
  15. #include <assert.h>
  16.  
  17. #include <boost/algorithm/string/classification.hpp>
  18. #include <boost/algorithm/string/split.hpp>
  19.  
  20. static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
  21. {
  22. CMutableTransaction txNew;
  23. txNew.nVersion = 1;
  24. txNew.vin.resize(1);
  25. txNew.vout.resize(1);
  26. txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << std::vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
  27. txNew.vout[0].nValue = genesisReward;
  28. txNew.vout[0].scriptPubKey = genesisOutputScript;
  29.  
  30. CBlock genesis;
  31. genesis.nTime = nTime;
  32. genesis.nBits = nBits;
  33. genesis.nNonce = nNonce;
  34. genesis.nVersion = nVersion;
  35. genesis.vtx.push_back(MakeTransactionRef(std::move(txNew)));
  36. genesis.hashPrevBlock.SetNull();
  37. genesis.hashMerkleRoot = BlockMerkleRoot(genesis);
  38. return genesis;
  39. }
  40.  
  41. /**
  42. * Build the genesis block. Note that the output of its generation
  43. * transaction cannot be spent since it did not originally exist in the
  44. * database.
  45. *
  46. * CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1)
  47. * CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
  48. * CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73)
  49. * CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B)
  50. * vMerkleTree: 4a5e1e
  51. */
  52. static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
  53. {
  54. const char* pszTimestamp = "Hello World";
  55. const CScript genesisOutputScript = CScript() << ParseHex("04d7314cecc645e4430dce00c4f74748b999cef920e6b5799f4563431203574156e64e1489efa112d4777d8b7bf6e4e5ecde090b8615f703022599f05df792e11b") << OP_CHECKSIG;
  56. return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
  57. }
  58.  
  59. /**
  60. * Main network
  61. */
  62. class CMainParams : public CChainParams {
  63. public:
  64. CMainParams() {
  65. strNetworkID = "main";
  66. consensus.nSubsidyHalvingInterval = 840000;
  67. consensus.BIP16Height = 0;
  68. consensus.BIP34Height = 0;
  69. consensus.BIP34Hash = uint256S("");
  70. consensus.BIP65Height = 0;
  71. consensus.BIP66Height = 0;
  72. consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
  73. consensus.nPowTargetTimespan = 3.5 * 24 * 60 * 60; // 3.5 days
  74. consensus.nPowTargetSpacing = 2.5 * 60;
  75. consensus.fPowAllowMinDifficultyBlocks = false;
  76. consensus.fPowNoRetargeting = false;
  77. consensus.nRuleChangeActivationThreshold = 2; // 95% of 2
  78. consensus.nMinerConfirmationWindow = 2; // nPowTargetTimespan / nPowTargetSpacing
  79. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
  80. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008
  81. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008
  82.  
  83. // Deployment of BIP68, BIP112, and BIP113.
  84. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0;
  85. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 1485561600; // January 28, 2017
  86. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = 1517356801; // January 31st, 2018
  87.  
  88. // Deployment of SegWit (BIP141, BIP143, and BIP147)
  89. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
  90. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1485561600; // January 28, 2017
  91. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018
  92.  
  93. // The best chain should have at least this much work.
  94. consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000000000100010");
  95.  
  96. // By default assume that the signatures in ancestors of this block are valid.
  97. consensus.defaultAssumeValid = uint256S("0xf1cd82a8f213d8c9e60efa224c2a2f29830609ffb6b5f96605788b518485fa83");
  98.  
  99. /**
  100. * The message start string is designed to be unlikely to occur in normal data.
  101. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce
  102. * a large 32-bit integer with any alignment.
  103. */
  104. pchMessageStart[0] = 0x1b;
  105. pchMessageStart[1] = 0xb0;
  106. pchMessageStart[2] = 0xc6;
  107. pchMessageStart[3] = 0xfb;
  108. nDefaultPort = 7777;
  109. nPruneAfterHeight = 100000;
  110. m_assumed_blockchain_size = 22;
  111. m_assumed_chain_state_size = 3;
  112.  
  113. genesis = CreateGenesisBlock(1635542955, 940977, 0x1e0ffff0, 1, 70 * COIN);
  114. consensus.hashGenesisBlock = genesis.GetHash();
  115. //printf("TEST GENESIS HASH: %s\n",consensus.hashGenesisBlock.ToString().c_str());
  116. //printf("TEST MERKLE ROOT: %s\n",genesis.hashMerkleRoot.ToString().c_str());
  117. assert(consensus.hashGenesisBlock == uint256S("0xf1cd82a8f213d8c9e60efa224c2a2f29830609ffb6b5f96605788b518485fa83"));
  118. assert(genesis.hashMerkleRoot == uint256S("0xbf71b26ae8b0f966ccb9df9e0ac6fec375df23e82a004a506b756d994960c857"));
  119.  
  120. // Note that of those which support the service bits prefix, most only support a subset of
  121. // possible options.
  122. // This is fine at runtime as we'll fall back to using them as a oneshot if they don't support the
  123. // service bits we want, but we should get them updated to support all service bits wanted by any
  124. // release ASAP to avoid it where possible.
  125. vSeeds.emplace_back("192.168.10.10");
  126. vSeeds.emplace_back("192.168.10.11");
  127.  
  128. base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,12);
  129. base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,12);
  130. base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,155);
  131. base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,25);
  132. base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E};
  133. base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4};
  134.  
  135. bech32_hrp = "ltc";
  136.  
  137. vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
  138.  
  139. fDefaultConsistencyChecks = false;
  140. fRequireStandard = true;
  141. fMineBlocksOnDemand = false;
  142.  
  143. checkpointData = {
  144. {
  145. {0, uint256S("0xf1cd82a8f213d8c9e60efa224c2a2f29830609ffb6b5f96605788b518485fa83")},
  146. }
  147. };
  148.  
  149. chainTxData = ChainTxData{
  150. // Data from rpc: getchaintxstats 4096 f1cd82a8f213d8c9e60efa224c2a2f29830609ffb6b5f96605788b518485fa83
  151. /* nTime */ 1635542955,
  152. /* nTxCount */ 0,
  153. /* dTxRate */ 0
  154. };
  155.  
  156. /* disable fallback fee on mainnet */
  157. m_fallback_fee_enabled = false;
  158. }
  159. };
  160.  
  161. /**
  162. * Testnet (v3)
  163. */
  164. class CTestNetParams : public CChainParams {
  165. public:
  166. CTestNetParams() {
  167. strNetworkID = "test";
  168. consensus.nSubsidyHalvingInterval = 510000;
  169. consensus.BIP16Height = 0;
  170. consensus.BIP34Height = 0;
  171. consensus.BIP34Hash = uint256S("");
  172. consensus.BIP65Height = 0;
  173. consensus.BIP66Height = 0;
  174. consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
  175. consensus.nPowTargetTimespan = 3.5 * 24 * 60 * 60; // 3.5 days
  176. consensus.nPowTargetSpacing = 2.5 * 60;
  177. consensus.fPowAllowMinDifficultyBlocks = true;
  178. consensus.fPowNoRetargeting = false;
  179. consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains
  180. consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
  181. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
  182. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008
  183. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008
  184.  
  185. // Deployment of BIP68, BIP112, and BIP113.
  186. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0;
  187. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 1483228800; // January 1, 2017
  188. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = 1517356801; // January 31st, 2018
  189.  
  190. // Deployment of SegWit (BIP141, BIP143, and BIP147)
  191. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
  192. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1483228800; // January 1, 2017
  193. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018
  194.  
  195. // The best chain should have at least this much work.
  196. consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000000000100010");
  197.  
  198. // By default assume that the signatures in ancestors of this block are valid.
  199. consensus.defaultAssumeValid = uint256S("0xe45211771115aa97bd40ac22ce064c96ba669b3c94adb04893a976ea51df4ce1");
  200.  
  201. pchMessageStart[0] = 0xf1;
  202. pchMessageStart[1] = 0xc2;
  203. pchMessageStart[2] = 0xf8;
  204. pchMessageStart[3] = 0xf0;
  205. nDefaultPort = 19777;
  206. nPruneAfterHeight = 1000;
  207. m_assumed_blockchain_size = 2;
  208. m_assumed_chain_state_size = 1;
  209.  
  210. genesis = CreateGenesisBlock(1635542956, 2788785, 0x1e0ffff0, 1, 70 * COIN);
  211. consensus.hashGenesisBlock = genesis.GetHash();
  212. //printf("TEST GENESIS HASH: %s\n",consensus.hashGenesisBlock.ToString().c_str());
  213. //printf("TEST MERKLE ROOT: %s\n",genesis.hashMerkleRoot.ToString().c_str());
  214. assert(consensus.hashGenesisBlock == uint256S("0x4759283af8d2bdcb6c1aea489b2639096ef8e715b4928e73779a225e76eefb10"));
  215. assert(genesis.hashMerkleRoot == uint256S("0xbf71b26ae8b0f966ccb9df9e0ac6fec375df23e82a004a506b756d994960c857"));
  216.  
  217. vFixedSeeds.clear();
  218. vSeeds.clear();
  219. // nodes with support for servicebits filtering should be at the top
  220. vSeeds.emplace_back("23.95.166.180");
  221. vSeeds.emplace_back("107.172.29.67");
  222.  
  223. base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
  224. base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
  225. base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,58);
  226. base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
  227. base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
  228. base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
  229.  
  230. bech32_hrp = "tltc";
  231.  
  232. vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
  233.  
  234. fDefaultConsistencyChecks = false;
  235. fRequireStandard = false;
  236. fMineBlocksOnDemand = false;
  237.  
  238. checkpointData = {
  239. {
  240. {0, uint256S("0x4759283af8d2bdcb6c1aea489b2639096ef8e715b4928e73779a225e76eefb10")},
  241. }
  242. };
  243.  
  244. chainTxData = ChainTxData{
  245. // Data from rpc: getchaintxstats 4096 4759283af8d2bdcb6c1aea489b2639096ef8e715b4928e73779a225e76eefb10
  246. /* nTime */ 1635542956,
  247. /* nTxCount */ 0,
  248. /* dTxRate */ 0
  249. };
  250.  
  251. /* enable fallback fee on testnet */
  252. m_fallback_fee_enabled = true;
  253. }
  254. };
  255.  
  256. /**
  257. * Regression test
  258. */
  259. class CRegTestParams : public CChainParams {
  260. public:
  261. explicit CRegTestParams(const ArgsManager& args) {
  262. strNetworkID = "regtest";
  263. consensus.nSubsidyHalvingInterval = 150;
  264. consensus.BIP16Height = 0;
  265. consensus.BIP34Height = 0;
  266. consensus.BIP34Hash = uint256();
  267. consensus.BIP65Height = 0;
  268. consensus.BIP66Height = 0;
  269. consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
  270. consensus.nPowTargetTimespan = 3.5 * 24 * 60 * 60; // two weeks
  271. consensus.nPowTargetSpacing = 2.5 * 60;
  272. consensus.fPowAllowMinDifficultyBlocks = true;
  273. consensus.fPowNoRetargeting = true;
  274. consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains
  275. consensus.nMinerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 2016)
  276. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
  277. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0;
  278. consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
  279. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0;
  280. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 0;
  281. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
  282. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
  283. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
  284. consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
  285.  
  286. // The best chain should have at least this much work.
  287. consensus.nMinimumChainWork = uint256S("0x00");
  288.  
  289. // By default assume that the signatures in ancestors of this block are valid.
  290. consensus.defaultAssumeValid = uint256S("0x77b2096c1bcc75780b71d27d75430945c6f4e50646a4ae3616f4561de6489574");
  291.  
  292. pchMessageStart[0] = 0xfb;
  293. pchMessageStart[1] = 0xba;
  294. pchMessageStart[2] = 0xb2;
  295. pchMessageStart[3] = 0xfa;
  296. nDefaultPort = 19778;
  297. nPruneAfterHeight = 1000;
  298. m_assumed_blockchain_size = 0;
  299. m_assumed_chain_state_size = 0;
  300.  
  301. UpdateVersionBitsParametersFromArgs(args);
  302.  
  303. genesis = CreateGenesisBlock(1635542957, 0, 0x207fffff, 1, 70 * COIN);
  304. consensus.hashGenesisBlock = genesis.GetHash();
  305. //printf("REG GENESIS HASH: %s\n",consensus.hashGenesisBlock.ToString().c_str());
  306. //printf("REG MERKLE ROOT: %s\n",genesis.hashMerkleRoot.ToString().c_str());
  307. assert(consensus.hashGenesisBlock == uint256S("0x368ba6799e8111eab7346f0c7ed06fd065d7fa22c99c27d14d9f7ace3d4764ab"));
  308. assert(genesis.hashMerkleRoot == uint256S("0xbf71b26ae8b0f966ccb9df9e0ac6fec375df23e82a004a506b756d994960c857"));
  309.  
  310. vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds.
  311. vSeeds.clear(); //!< Regtest mode doesn't have any DNS seeds.
  312.  
  313. fDefaultConsistencyChecks = true;
  314. fRequireStandard = false;
  315. fMineBlocksOnDemand = true;
  316.  
  317. checkpointData = {
  318. {
  319. {0, uint256S("0x368ba6799e8111eab7346f0c7ed06fd065d7fa22c99c27d14d9f7ace3d4764ab")},
  320. }
  321. };
  322.  
  323. chainTxData = ChainTxData{
  324. 0,
  325. 0,
  326. 0
  327. };
  328.  
  329. base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
  330. base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
  331. base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,58);
  332. base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
  333. base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
  334. base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
  335.  
  336. bech32_hrp = "rltc";
  337.  
  338. /* enable fallback fee on regtest */
  339. m_fallback_fee_enabled = true;
  340. }
  341.  
  342. /**
  343. * Allows modifying the Version Bits regtest parameters.
  344. */
  345. void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout)
  346. {
  347. consensus.vDeployments[d].nStartTime = nStartTime;
  348. consensus.vDeployments[d].nTimeout = nTimeout;
  349. }
  350. void UpdateVersionBitsParametersFromArgs(const ArgsManager& args);
  351. };
  352.  
  353. void CRegTestParams::UpdateVersionBitsParametersFromArgs(const ArgsManager& args)
  354. {
  355. if (!args.IsArgSet("-vbparams")) return;
  356.  
  357. for (const std::string& strDeployment : args.GetArgs("-vbparams")) {
  358. std::vector<std::string> vDeploymentParams;
  359. boost::split(vDeploymentParams, strDeployment, boost::is_any_of(":"));
  360. if (vDeploymentParams.size() != 3) {
  361. throw std::runtime_error("Version bits parameters malformed, expecting deployment:start:end");
  362. }
  363. int64_t nStartTime, nTimeout;
  364. if (!ParseInt64(vDeploymentParams[1], &nStartTime)) {
  365. throw std::runtime_error(strprintf("Invalid nStartTime (%s)", vDeploymentParams[1]));
  366. }
  367. if (!ParseInt64(vDeploymentParams[2], &nTimeout)) {
  368. throw std::runtime_error(strprintf("Invalid nTimeout (%s)", vDeploymentParams[2]));
  369. }
  370. bool found = false;
  371. for (int j=0; j < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++j) {
  372. if (vDeploymentParams[0] == VersionBitsDeploymentInfo[j].name) {
  373. UpdateVersionBitsParameters(Consensus::DeploymentPos(j), nStartTime, nTimeout);
  374. found = true;
  375. LogPrintf("Setting version bits activation parameters for %s to start=%ld, timeout=%ld\n", vDeploymentParams[0], nStartTime, nTimeout);
  376. break;
  377. }
  378. }
  379. if (!found) {
  380. throw std::runtime_error(strprintf("Invalid deployment (%s)", vDeploymentParams[0]));
  381. }
  382. }
  383. }
  384.  
  385. static std::unique_ptr<const CChainParams> globalChainParams;
  386.  
  387. const CChainParams &Params() {
  388. assert(globalChainParams);
  389. return *globalChainParams;
  390. }
  391.  
  392. std::unique_ptr<const CChainParams> CreateChainParams(const std::string& chain)
  393. {
  394. if (chain == CBaseChainParams::MAIN)
  395. return std::unique_ptr<CChainParams>(new CMainParams());
  396. else if (chain == CBaseChainParams::TESTNET)
  397. return std::unique_ptr<CChainParams>(new CTestNetParams());
  398. else if (chain == CBaseChainParams::REGTEST)
  399. return std::unique_ptr<CChainParams>(new CRegTestParams(gArgs));
  400. throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
  401. }
  402.  
  403. void SelectParams(const std::string& network)
  404. {
  405. SelectBaseParams(network);
  406. globalChainParams = CreateChainParams(network);
  407. }
  408.  
Advertisement
Add Comment
Please, Sign In to add comment