Changeset View
Changeset View
Standalone View
Standalone View
src/chainparams.cpp
Show First 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
/** | /** | ||||
* What makes a good checkpoint block? | * What makes a good checkpoint block? | ||||
* + Is surrounded by blocks with reasonable timestamps | * + Is surrounded by blocks with reasonable timestamps | ||||
* (no blocks before with a timestamp after, none after with | * (no blocks before with a timestamp after, none after with | ||||
* timestamp before) | * timestamp before) | ||||
* + Contains no strange transactions | * + Contains no strange transactions | ||||
*/ | */ | ||||
class CMainParams : public CChainParams { | CMainParams::CMainParams() { | ||||
public: | |||||
CMainParams() { | |||||
strNetworkID = "main"; | strNetworkID = "main"; | ||||
consensus.nSubsidyHalvingInterval = 210000; | consensus.nSubsidyHalvingInterval = 210000; | ||||
consensus.BIP34Height = 227931; | consensus.BIP34Height = 227931; | ||||
consensus.BIP34Hash = uint256S( | consensus.BIP34Hash = uint256S( | ||||
"000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8"); | "000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8"); | ||||
// 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0 | // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0 | ||||
consensus.BIP65Height = 388381; | consensus.BIP65Height = 388381; | ||||
// 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931 | // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931 | ||||
consensus.BIP66Height = 363725; | consensus.BIP66Height = 363725; | ||||
// 000000000000000004a1b34462cb8aeebd5799177f7a29cf28f2d1961716b5b5 | // 000000000000000004a1b34462cb8aeebd5799177f7a29cf28f2d1961716b5b5 | ||||
consensus.CSVHeight = 419328; | consensus.CSVHeight = 419328; | ||||
consensus.powLimit = uint256S( | consensus.powLimit = uint256S( | ||||
"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | ||||
// two weeks | // two weeks | ||||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | ||||
consensus.nPowTargetSpacing = 10 * 60; | consensus.nPowTargetSpacing = 10 * 60; | ||||
consensus.fPowAllowMinDifficultyBlocks = false; | consensus.fPowAllowMinDifficultyBlocks = false; | ||||
consensus.fPowNoRetargeting = false; | consensus.fPowNoRetargeting = false; | ||||
// 95% of 2016 | // 95% of 2016 | ||||
consensus.nRuleChangeActivationThreshold = 1916; | consensus.nRuleChangeActivationThreshold = 1916; | ||||
// nPowTargetTimespan / nPowTargetSpacing | // nPowTargetTimespan / nPowTargetSpacing | ||||
consensus.nMinerConfirmationWindow = 2016; | consensus.nMinerConfirmationWindow = 2016; | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | ||||
// January 1, 2008 | // January 1, 2008 | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = | ||||
1199145601; | 1199145601; | ||||
// December 31, 2008 | // December 31, 2008 | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | ||||
1230767999; | 1230767999; | ||||
// The best chain should have at least this much work. | // The best chain should have at least this much work. | ||||
consensus.nMinimumChainWork = uint256S( | consensus.nMinimumChainWork = uint256S( | ||||
"000000000000000000000000000000000000000000e2440d9db8afdd1d82263d"); | "000000000000000000000000000000000000000000e2440d9db8afdd1d82263d"); | ||||
// By default assume that the signatures in ancestors of this block are | // By default assume that the signatures in ancestors of this block are | ||||
// valid. | // valid. | ||||
consensus.defaultAssumeValid = uint256S( | consensus.defaultAssumeValid = uint256S( | ||||
"00000000000000000227f86232670e3ffe0f8849b2e211f6854df01c07e75862"); | "00000000000000000227f86232670e3ffe0f8849b2e211f6854df01c07e75862"); | ||||
// August 1, 2017 hard fork | // August 1, 2017 hard fork | ||||
consensus.uahfHeight = 478558; | consensus.uahfHeight = 478558; | ||||
// November 13, 2017 hard fork | // November 13, 2017 hard fork | ||||
consensus.daaHeight = 504031; | consensus.daaHeight = 504031; | ||||
// November 15, 2018 hard fork | // November 15, 2018 hard fork | ||||
consensus.magneticAnomalyHeight = 556766; | consensus.magneticAnomalyHeight = 556766; | ||||
// Wed, 15 May 2019 12:00:00 UTC hard fork | // Wed, 15 May 2019 12:00:00 UTC hard fork | ||||
consensus.greatWallActivationTime = 1557921600; | consensus.greatWallActivationTime = 1557921600; | ||||
// Nov 15, 2019 12:00:00 UTC protocol upgrade | // Nov 15, 2019 12:00:00 UTC protocol upgrade | ||||
consensus.gravitonActivationTime = 1573819200; | consensus.gravitonActivationTime = 1573819200; | ||||
/** | /** | ||||
* The message start string is designed to be unlikely to occur in | * The message start string is designed to be unlikely to occur in | ||||
* normal data. The characters are rarely used upper ASCII, not valid as | * normal data. The characters are rarely used upper ASCII, not valid as | ||||
* UTF-8, and produce a large 32-bit integer with any alignment. | * UTF-8, and produce a large 32-bit integer with any alignment. | ||||
*/ | */ | ||||
diskMagic[0] = 0xf9; | diskMagic[0] = 0xf9; | ||||
diskMagic[1] = 0xbe; | diskMagic[1] = 0xbe; | ||||
diskMagic[2] = 0xb4; | diskMagic[2] = 0xb4; | ||||
diskMagic[3] = 0xd9; | diskMagic[3] = 0xd9; | ||||
netMagic[0] = 0xe3; | netMagic[0] = 0xe3; | ||||
netMagic[1] = 0xe1; | netMagic[1] = 0xe1; | ||||
netMagic[2] = 0xf3; | netMagic[2] = 0xf3; | ||||
netMagic[3] = 0xe8; | netMagic[3] = 0xe8; | ||||
nDefaultPort = 8333; | nDefaultPort = 8333; | ||||
nPruneAfterHeight = 100000; | nPruneAfterHeight = 100000; | ||||
genesis = CreateGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, | genesis = | ||||
50 * COIN); | CreateGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, 50 * COIN); | ||||
consensus.hashGenesisBlock = genesis.GetHash(); | consensus.hashGenesisBlock = genesis.GetHash(); | ||||
assert(consensus.hashGenesisBlock == | assert(consensus.hashGenesisBlock == | ||||
uint256S("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1" | uint256S("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1" | ||||
"b60a8ce26f")); | "b60a8ce26f")); | ||||
assert(genesis.hashMerkleRoot == | assert(genesis.hashMerkleRoot == | ||||
uint256S("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b" | uint256S("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b" | ||||
"7afdeda33b")); | "7afdeda33b")); | ||||
// Note that of those which support the service bits prefix, most only | // Note that of those which support the service bits prefix, most only | ||||
// support a subset of possible options. This is fine at runtime as | // support a subset of possible options. This is fine at runtime as | ||||
// we'll fall back to using them as a oneshot if they dont support the | // we'll fall back to using them as a oneshot if they dont support the | ||||
// service bits we want, but we should get them updated to support all | // service bits we want, but we should get them updated to support all | ||||
// service bits wanted by any release ASAP to avoid it where possible. | // service bits wanted by any release ASAP to avoid it where possible. | ||||
// Bitcoin ABC seeder | // Bitcoin ABC seeder | ||||
vSeeds.emplace_back("seed.bitcoinabc.org"); | vSeeds.emplace_back("seed.bitcoinabc.org"); | ||||
// bitcoinforks seeders | // bitcoinforks seeders | ||||
vSeeds.emplace_back("seed-abc.bitcoinforks.org"); | vSeeds.emplace_back("seed-abc.bitcoinforks.org"); | ||||
// BU backed seeder | // BU backed seeder | ||||
vSeeds.emplace_back("btccash-seeder.bitcoinunlimited.info"); | vSeeds.emplace_back("btccash-seeder.bitcoinunlimited.info"); | ||||
// Bitprim | // Bitprim | ||||
vSeeds.emplace_back("seed.bitprim.org"); | vSeeds.emplace_back("seed.bitprim.org"); | ||||
// Amaury SÉCHET | // Amaury SÉCHET | ||||
vSeeds.emplace_back("seed.deadalnix.me"); | vSeeds.emplace_back("seed.deadalnix.me"); | ||||
// criptolayer.net | // criptolayer.net | ||||
vSeeds.emplace_back("seeder.criptolayer.net"); | vSeeds.emplace_back("seeder.criptolayer.net"); | ||||
base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 0); | base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 0); | ||||
base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 5); | base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 5); | ||||
base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 128); | base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 128); | ||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E}; | base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E}; | ||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4}; | base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4}; | ||||
cashaddrPrefix = "bitcoincash"; | cashaddrPrefix = "bitcoincash"; | ||||
vFixedSeeds = std::vector<SeedSpec6>( | vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, | ||||
pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main)); | pnSeed6_main + ARRAYLEN(pnSeed6_main)); | ||||
fDefaultConsistencyChecks = false; | fDefaultConsistencyChecks = false; | ||||
fRequireStandard = true; | fRequireStandard = true; | ||||
fMineBlocksOnDemand = false; | fMineBlocksOnDemand = false; | ||||
checkpointData = { | checkpointData = { | ||||
.mapCheckpoints = { | .mapCheckpoints = { | ||||
{11111, uint256S("0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee" | {11111, uint256S("0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee" | ||||
"92559f542fdb26e7c1d")}, | "92559f542fdb26e7c1d")}, | ||||
{33333, uint256S("000000002dd5588a74784eaa7ab0507a18ad16a236e7b" | {33333, uint256S("000000002dd5588a74784eaa7ab0507a18ad16a236e7b" | ||||
"1ce69f00d7ddfb5d0a6")}, | "1ce69f00d7ddfb5d0a6")}, | ||||
{74000, uint256S("0000000000573993a3c9e41ce34471c079dcf5f52a0e8" | {74000, uint256S("0000000000573993a3c9e41ce34471c079dcf5f52a0e8" | ||||
"24a81e7f953b8661a20")}, | "24a81e7f953b8661a20")}, | ||||
{105000, uint256S("00000000000291ce28027faea320c8d2b054b2e0fe44" | {105000, uint256S("00000000000291ce28027faea320c8d2b054b2e0fe44" | ||||
"a773f3eefb151d6bdc97")}, | "a773f3eefb151d6bdc97")}, | ||||
{134444, uint256S("00000000000005b12ffd4cd315cd34ffd4a594f430ac" | {134444, uint256S("00000000000005b12ffd4cd315cd34ffd4a594f430ac" | ||||
"814c91184a0d42d2b0fe")}, | "814c91184a0d42d2b0fe")}, | ||||
{168000, uint256S("000000000000099e61ea72015e79632f216fe6cb33d7" | {168000, uint256S("000000000000099e61ea72015e79632f216fe6cb33d7" | ||||
"899acb35b75c8303b763")}, | "899acb35b75c8303b763")}, | ||||
{193000, uint256S("000000000000059f452a5f7340de6682a977387c1701" | {193000, uint256S("000000000000059f452a5f7340de6682a977387c1701" | ||||
"0ff6e6c3bd83ca8b1317")}, | "0ff6e6c3bd83ca8b1317")}, | ||||
{210000, uint256S("000000000000048b95347e83192f69cf0366076336c6" | {210000, uint256S("000000000000048b95347e83192f69cf0366076336c6" | ||||
"39f9b7228e9ba171342e")}, | "39f9b7228e9ba171342e")}, | ||||
{216116, uint256S("00000000000001b4f4b433e81ee46494af945cf96014" | {216116, uint256S("00000000000001b4f4b433e81ee46494af945cf96014" | ||||
"816a4e2370f11b23df4e")}, | "816a4e2370f11b23df4e")}, | ||||
{225430, uint256S("00000000000001c108384350f74090433e7fcf79a606" | {225430, uint256S("00000000000001c108384350f74090433e7fcf79a606" | ||||
"b8e797f065b130575932")}, | "b8e797f065b130575932")}, | ||||
{250000, uint256S("000000000000003887df1f29024b06fc2200b55f8af8" | {250000, uint256S("000000000000003887df1f29024b06fc2200b55f8af8" | ||||
"f35453d7be294df2d214")}, | "f35453d7be294df2d214")}, | ||||
{279000, uint256S("0000000000000001ae8c72a0b0c301f67e3afca10e81" | {279000, uint256S("0000000000000001ae8c72a0b0c301f67e3afca10e81" | ||||
"9efa9041e458e9bd7e40")}, | "9efa9041e458e9bd7e40")}, | ||||
{295000, uint256S("00000000000000004d9b4ef50f0f9d686fd69db2e03a" | {295000, uint256S("00000000000000004d9b4ef50f0f9d686fd69db2e03a" | ||||
"f35a100370c64632a983")}, | "f35a100370c64632a983")}, | ||||
// UAHF fork block. | // UAHF fork block. | ||||
{478558, uint256S("0000000000000000011865af4122fe3b144e2cbeea86" | {478558, uint256S("0000000000000000011865af4122fe3b144e2cbeea86" | ||||
"142e8ff2fb4107352d43")}, | "142e8ff2fb4107352d43")}, | ||||
// Nov, 13 DAA activation block. | // Nov, 13 DAA activation block. | ||||
{504031, uint256S("0000000000000000011ebf65b60d0a3de80b8175be70" | {504031, uint256S("0000000000000000011ebf65b60d0a3de80b8175be70" | ||||
"9d653b4c1a1beeb6ab9c")}, | "9d653b4c1a1beeb6ab9c")}, | ||||
// Monolith activation. | // Monolith activation. | ||||
{530359, uint256S("0000000000000000011ada8bd08f46074f44a8f15539" | {530359, uint256S("0000000000000000011ada8bd08f46074f44a8f15539" | ||||
"6f43e38acf9501c49103")}, | "6f43e38acf9501c49103")}, | ||||
// Magnetic anomaly activation. | // Magnetic anomaly activation. | ||||
{556767, uint256S("0000000000000000004626ff6e3b936941d341c5932e" | {556767, uint256S("0000000000000000004626ff6e3b936941d341c5932e" | ||||
"ce4357eeccac44e6d56c")}, | "ce4357eeccac44e6d56c")}, | ||||
}}; | }}; | ||||
// Data as of block | // Data as of block | ||||
// 000000000000000001d2ce557406b017a928be25ee98906397d339c3f68eec5d | // 000000000000000001d2ce557406b017a928be25ee98906397d339c3f68eec5d | ||||
// (height 523992). | // (height 523992). | ||||
chainTxData = ChainTxData{ | chainTxData = ChainTxData{ | ||||
// UNIX timestamp of last known number of transactions. | // UNIX timestamp of last known number of transactions. | ||||
1522608016, | 1522608016, | ||||
// Total number of transactions between genesis and that timestamp | // Total number of transactions between genesis and that timestamp | ||||
// (the tx=... number in the SetBestChain debug.log lines) | // (the tx=... number in the SetBestChain debug.log lines) | ||||
248589038, | 248589038, | ||||
// Estimated number of transactions per second after that timestamp. | // Estimated number of transactions per second after that timestamp. | ||||
3.2}; | 3.2}; | ||||
} | } | ||||
}; | |||||
/** | /** | ||||
* Testnet (v3) | * Testnet (v3) | ||||
*/ | */ | ||||
class CTestNetParams : public CChainParams { | CTestNetParams::CTestNetParams() { | ||||
public: | |||||
CTestNetParams() { | |||||
strNetworkID = "test"; | strNetworkID = "test"; | ||||
consensus.nSubsidyHalvingInterval = 210000; | consensus.nSubsidyHalvingInterval = 210000; | ||||
consensus.BIP34Height = 21111; | consensus.BIP34Height = 21111; | ||||
consensus.BIP34Hash = uint256S( | consensus.BIP34Hash = uint256S( | ||||
"0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"); | "0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"); | ||||
// 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6 | // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6 | ||||
consensus.BIP65Height = 581885; | consensus.BIP65Height = 581885; | ||||
// 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182 | // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182 | ||||
consensus.BIP66Height = 330776; | consensus.BIP66Height = 330776; | ||||
// 00000000025e930139bac5c6c31a403776da130831ab85be56578f3fa75369bb | // 00000000025e930139bac5c6c31a403776da130831ab85be56578f3fa75369bb | ||||
consensus.CSVHeight = 770112; | consensus.CSVHeight = 770112; | ||||
consensus.powLimit = uint256S( | consensus.powLimit = uint256S( | ||||
"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | ||||
// two weeks | // two weeks | ||||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | ||||
consensus.nPowTargetSpacing = 10 * 60; | consensus.nPowTargetSpacing = 10 * 60; | ||||
consensus.fPowAllowMinDifficultyBlocks = true; | consensus.fPowAllowMinDifficultyBlocks = true; | ||||
consensus.fPowNoRetargeting = false; | consensus.fPowNoRetargeting = false; | ||||
// 75% for testchains | // 75% for testchains | ||||
consensus.nRuleChangeActivationThreshold = 1512; | consensus.nRuleChangeActivationThreshold = 1512; | ||||
// nPowTargetTimespan / nPowTargetSpacing | // nPowTargetTimespan / nPowTargetSpacing | ||||
consensus.nMinerConfirmationWindow = 2016; | consensus.nMinerConfirmationWindow = 2016; | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | ||||
// January 1, 2008 | // January 1, 2008 | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = | ||||
1199145601; | 1199145601; | ||||
// December 31, 2008 | // December 31, 2008 | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | ||||
1230767999; | 1230767999; | ||||
// The best chain should have at least this much work. | // The best chain should have at least this much work. | ||||
consensus.nMinimumChainWork = uint256S( | consensus.nMinimumChainWork = uint256S( | ||||
"000000000000000000000000000000000000000000000043cb761ba833f844c5"); | "000000000000000000000000000000000000000000000043cb761ba833f844c5"); | ||||
// By default assume that the signatures in ancestors of this block are | // By default assume that the signatures in ancestors of this block are | ||||
// valid. | // valid. | ||||
consensus.defaultAssumeValid = uint256S( | consensus.defaultAssumeValid = uint256S( | ||||
"00000000000002cb911c0a756a24c2fe6c1a29acaede3569ce430b95d8ff012d"); | "00000000000002cb911c0a756a24c2fe6c1a29acaede3569ce430b95d8ff012d"); | ||||
// August 1, 2017 hard fork | // August 1, 2017 hard fork | ||||
consensus.uahfHeight = 1155875; | consensus.uahfHeight = 1155875; | ||||
// November 13, 2017 hard fork | // November 13, 2017 hard fork | ||||
consensus.daaHeight = 1188697; | consensus.daaHeight = 1188697; | ||||
// November 15, 2018 hard fork | // November 15, 2018 hard fork | ||||
consensus.magneticAnomalyHeight = 1267996; | consensus.magneticAnomalyHeight = 1267996; | ||||
// Wed, 15 May 2019 12:00:00 UTC hard fork | // Wed, 15 May 2019 12:00:00 UTC hard fork | ||||
consensus.greatWallActivationTime = 1557921600; | consensus.greatWallActivationTime = 1557921600; | ||||
// Nov 15, 2019 12:00:00 UTC protocol upgrade | // Nov 15, 2019 12:00:00 UTC protocol upgrade | ||||
consensus.gravitonActivationTime = 1573819200; | consensus.gravitonActivationTime = 1573819200; | ||||
diskMagic[0] = 0x0b; | diskMagic[0] = 0x0b; | ||||
diskMagic[1] = 0x11; | diskMagic[1] = 0x11; | ||||
diskMagic[2] = 0x09; | diskMagic[2] = 0x09; | ||||
diskMagic[3] = 0x07; | diskMagic[3] = 0x07; | ||||
netMagic[0] = 0xf4; | netMagic[0] = 0xf4; | ||||
netMagic[1] = 0xe5; | netMagic[1] = 0xe5; | ||||
netMagic[2] = 0xf3; | netMagic[2] = 0xf3; | ||||
netMagic[3] = 0xf4; | netMagic[3] = 0xf4; | ||||
nDefaultPort = 18333; | nDefaultPort = 18333; | ||||
nPruneAfterHeight = 1000; | nPruneAfterHeight = 1000; | ||||
genesis = | genesis = | ||||
CreateGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, 50 * COIN); | CreateGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, 50 * COIN); | ||||
consensus.hashGenesisBlock = genesis.GetHash(); | consensus.hashGenesisBlock = genesis.GetHash(); | ||||
assert(consensus.hashGenesisBlock == | assert(consensus.hashGenesisBlock == | ||||
uint256S("000000000933ea01ad0ee984209779baaec3ced90fa3f408719526" | uint256S("000000000933ea01ad0ee984209779baaec3ced90fa3f408719526" | ||||
"f8d77f4943")); | "f8d77f4943")); | ||||
assert(genesis.hashMerkleRoot == | assert(genesis.hashMerkleRoot == | ||||
uint256S("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b" | uint256S("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b" | ||||
"7afdeda33b")); | "7afdeda33b")); | ||||
vFixedSeeds.clear(); | vFixedSeeds.clear(); | ||||
vSeeds.clear(); | vSeeds.clear(); | ||||
// nodes with support for servicebits filtering should be at the top | // nodes with support for servicebits filtering should be at the top | ||||
// Bitcoin ABC seeder | // Bitcoin ABC seeder | ||||
vSeeds.emplace_back("testnet-seed.bitcoinabc.org"); | vSeeds.emplace_back("testnet-seed.bitcoinabc.org"); | ||||
// bitcoinforks seeders | // bitcoinforks seeders | ||||
vSeeds.emplace_back("testnet-seed-abc.bitcoinforks.org"); | vSeeds.emplace_back("testnet-seed-abc.bitcoinforks.org"); | ||||
// Bitprim | // Bitprim | ||||
vSeeds.emplace_back("testnet-seed.bitprim.org"); | vSeeds.emplace_back("testnet-seed.bitprim.org"); | ||||
// Amaury SÉCHET | // Amaury SÉCHET | ||||
vSeeds.emplace_back("testnet-seed.deadalnix.me"); | vSeeds.emplace_back("testnet-seed.deadalnix.me"); | ||||
// criptolayer.net | // criptolayer.net | ||||
vSeeds.emplace_back("testnet-seeder.criptolayer.net"); | vSeeds.emplace_back("testnet-seeder.criptolayer.net"); | ||||
base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 111); | base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 111); | ||||
base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 196); | base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 196); | ||||
base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 239); | base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 239); | ||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; | base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; | ||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; | base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; | ||||
cashaddrPrefix = "bchtest"; | cashaddrPrefix = "bchtest"; | ||||
vFixedSeeds = std::vector<SeedSpec6>( | vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, | ||||
pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test)); | pnSeed6_test + ARRAYLEN(pnSeed6_test)); | ||||
fDefaultConsistencyChecks = false; | fDefaultConsistencyChecks = false; | ||||
fRequireStandard = false; | fRequireStandard = false; | ||||
fMineBlocksOnDemand = false; | fMineBlocksOnDemand = false; | ||||
checkpointData = { | checkpointData = { | ||||
.mapCheckpoints = { | .mapCheckpoints = { | ||||
{546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345" | {546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345" | ||||
"d31b1bcebf76acb70")}, | "d31b1bcebf76acb70")}, | ||||
// UAHF fork block. | // UAHF fork block. | ||||
{1155875, uint256S("00000000f17c850672894b9a75b63a1e72830bbd5f4" | {1155875, uint256S("00000000f17c850672894b9a75b63a1e72830bbd5f4" | ||||
"c8889b5c1a80e7faef138")}, | "c8889b5c1a80e7faef138")}, | ||||
// Nov, 13. DAA activation block. | // Nov, 13. DAA activation block. | ||||
{1188697, uint256S("0000000000170ed0918077bde7b4d36cc4c91be69fa" | {1188697, uint256S("0000000000170ed0918077bde7b4d36cc4c91be69fa" | ||||
"09211f748240dabe047fb")}, | "09211f748240dabe047fb")}, | ||||
}}; | }}; | ||||
// Data as of block | // Data as of block | ||||
// 000000000005b07ecf85563034d13efd81c1a29e47e22b20f4fc6919d5b09cd6 | // 000000000005b07ecf85563034d13efd81c1a29e47e22b20f4fc6919d5b09cd6 | ||||
// (height 1223263) | // (height 1223263) | ||||
chainTxData = ChainTxData{1522608381, 15052068, 0.15}; | chainTxData = ChainTxData{1522608381, 15052068, 0.15}; | ||||
} | } | ||||
}; | |||||
/** | /** | ||||
* Regression test | * Regression test | ||||
*/ | */ | ||||
class CRegTestParams : public CChainParams { | CRegTestParams::CRegTestParams() { | ||||
public: | |||||
CRegTestParams() { | |||||
strNetworkID = "regtest"; | strNetworkID = "regtest"; | ||||
consensus.nSubsidyHalvingInterval = 150; | consensus.nSubsidyHalvingInterval = 150; | ||||
// BIP34 has not activated on regtest (far in the future so block v1 are | // BIP34 has not activated on regtest (far in the future so block v1 are | ||||
// not rejected in tests) | // not rejected in tests) | ||||
consensus.BIP34Height = 100000000; | consensus.BIP34Height = 100000000; | ||||
consensus.BIP34Hash = uint256(); | consensus.BIP34Hash = uint256(); | ||||
// BIP65 activated on regtest (Used in rpc activation tests) | // BIP65 activated on regtest (Used in rpc activation tests) | ||||
consensus.BIP65Height = 1351; | consensus.BIP65Height = 1351; | ||||
// BIP66 activated on regtest (Used in rpc activation tests) | // BIP66 activated on regtest (Used in rpc activation tests) | ||||
consensus.BIP66Height = 1251; | consensus.BIP66Height = 1251; | ||||
// CSV activated on regtest (Used in rpc activation tests) | // CSV activated on regtest (Used in rpc activation tests) | ||||
consensus.CSVHeight = 576; | consensus.CSVHeight = 576; | ||||
consensus.powLimit = uint256S( | consensus.powLimit = uint256S( | ||||
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); | ||||
// two weeks | // two weeks | ||||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; | ||||
consensus.nPowTargetSpacing = 10 * 60; | consensus.nPowTargetSpacing = 10 * 60; | ||||
consensus.fPowAllowMinDifficultyBlocks = true; | consensus.fPowAllowMinDifficultyBlocks = true; | ||||
consensus.fPowNoRetargeting = true; | consensus.fPowNoRetargeting = true; | ||||
// 75% for testchains | // 75% for testchains | ||||
consensus.nRuleChangeActivationThreshold = 108; | consensus.nRuleChangeActivationThreshold = 108; | ||||
// Faster than normal for regtest (144 instead of 2016) | // Faster than normal for regtest (144 instead of 2016) | ||||
consensus.nMinerConfirmationWindow = 144; | consensus.nMinerConfirmationWindow = 144; | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; | ||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = | ||||
999999999999ULL; | 999999999999ULL; | ||||
// The best chain should have at least this much work. | // The best chain should have at least this much work. | ||||
consensus.nMinimumChainWork = uint256S("0x00"); | consensus.nMinimumChainWork = uint256S("0x00"); | ||||
// By default assume that the signatures in ancestors of this block are | // By default assume that the signatures in ancestors of this block are | ||||
// valid. | // valid. | ||||
consensus.defaultAssumeValid = uint256S("0x00"); | consensus.defaultAssumeValid = uint256S("0x00"); | ||||
// UAHF is always enabled on regtest. | // UAHF is always enabled on regtest. | ||||
consensus.uahfHeight = 0; | consensus.uahfHeight = 0; | ||||
// November 13, 2017 hard fork is always on on regtest. | // November 13, 2017 hard fork is always on on regtest. | ||||
consensus.daaHeight = 0; | consensus.daaHeight = 0; | ||||
// November 15, 2018 hard fork is always on on regtest. | // November 15, 2018 hard fork is always on on regtest. | ||||
consensus.magneticAnomalyHeight = 0; | consensus.magneticAnomalyHeight = 0; | ||||
// Wed, 15 May 2019 12:00:00 UTC hard fork | // Wed, 15 May 2019 12:00:00 UTC hard fork | ||||
consensus.greatWallActivationTime = 1557921600; | consensus.greatWallActivationTime = 1557921600; | ||||
// Nov 15, 2019 12:00:00 UTC protocol upgrade | // Nov 15, 2019 12:00:00 UTC protocol upgrade | ||||
consensus.gravitonActivationTime = 1573819200; | consensus.gravitonActivationTime = 1573819200; | ||||
diskMagic[0] = 0xfa; | diskMagic[0] = 0xfa; | ||||
diskMagic[1] = 0xbf; | diskMagic[1] = 0xbf; | ||||
diskMagic[2] = 0xb5; | diskMagic[2] = 0xb5; | ||||
diskMagic[3] = 0xda; | diskMagic[3] = 0xda; | ||||
netMagic[0] = 0xda; | netMagic[0] = 0xda; | ||||
netMagic[1] = 0xb5; | netMagic[1] = 0xb5; | ||||
netMagic[2] = 0xbf; | netMagic[2] = 0xbf; | ||||
netMagic[3] = 0xfa; | netMagic[3] = 0xfa; | ||||
nDefaultPort = 18444; | nDefaultPort = 18444; | ||||
nPruneAfterHeight = 1000; | nPruneAfterHeight = 1000; | ||||
genesis = CreateGenesisBlock(1296688602, 2, 0x207fffff, 1, 50 * COIN); | genesis = CreateGenesisBlock(1296688602, 2, 0x207fffff, 1, 50 * COIN); | ||||
consensus.hashGenesisBlock = genesis.GetHash(); | consensus.hashGenesisBlock = genesis.GetHash(); | ||||
assert(consensus.hashGenesisBlock == | assert(consensus.hashGenesisBlock == | ||||
uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b" | uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b" | ||||
"1a11466e2206")); | "1a11466e2206")); | ||||
assert(genesis.hashMerkleRoot == | assert(genesis.hashMerkleRoot == | ||||
uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab212" | uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab212" | ||||
"7b7afdeda33b")); | "7b7afdeda33b")); | ||||
//!< Regtest mode doesn't have any fixed seeds. | //!< Regtest mode doesn't have any fixed seeds. | ||||
vFixedSeeds.clear(); | vFixedSeeds.clear(); | ||||
//!< Regtest mode doesn't have any DNS seeds. | //!< Regtest mode doesn't have any DNS seeds. | ||||
vSeeds.clear(); | vSeeds.clear(); | ||||
fDefaultConsistencyChecks = true; | fDefaultConsistencyChecks = true; | ||||
fRequireStandard = false; | fRequireStandard = false; | ||||
fMineBlocksOnDemand = true; | fMineBlocksOnDemand = true; | ||||
checkpointData = {.mapCheckpoints = { | checkpointData = {.mapCheckpoints = { | ||||
{0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5" | {0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5" | ||||
"beb436012afca590b1a11466e2206")}, | "beb436012afca590b1a11466e2206")}, | ||||
}}; | }}; | ||||
chainTxData = ChainTxData{0, 0, 0}; | chainTxData = ChainTxData{0, 0, 0}; | ||||
base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 111); | base58Prefixes[PUBKEY_ADDRESS] = std::vector<uint8_t>(1, 111); | ||||
base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 196); | base58Prefixes[SCRIPT_ADDRESS] = std::vector<uint8_t>(1, 196); | ||||
base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 239); | base58Prefixes[SECRET_KEY] = std::vector<uint8_t>(1, 239); | ||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; | base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; | ||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; | base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; | ||||
cashaddrPrefix = "bchreg"; | cashaddrPrefix = "bchreg"; | ||||
} | } | ||||
}; | |||||
static std::unique_ptr<CChainParams> globalChainParams; | static std::unique_ptr<CChainParams> globalChainParams; | ||||
const CChainParams &Params() { | const CChainParams &Params() { | ||||
assert(globalChainParams); | assert(globalChainParams); | ||||
return *globalChainParams; | return *globalChainParams; | ||||
} | } | ||||
Show All 21 Lines |