@@ -87,6 +87,7 @@ BITCOIN_CORE_H = \ | |||
coins.h \ | |||
compat.h \ | |||
compressor.h \ | |||
consensus/params.h \ | |||
core_io.h \ | |||
wallet/db.h \ | |||
eccryptoverify.h \ |
@@ -101,6 +101,14 @@ class CMainParams : public CChainParams { | |||
public: | |||
CMainParams() { | |||
strNetworkID = "main"; | |||
consensus.nSubsidyHalvingInterval = 210000; | |||
consensus.nMajorityEnforceBlockUpgrade = 750; | |||
consensus.nMajorityRejectBlockOutdated = 950; | |||
consensus.nMajorityWindow = 1000; | |||
consensus.powLimit = ~arith_uint256(0) >> 32; | |||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks | |||
consensus.nPowTargetSpacing = 10 * 60; | |||
consensus.fPowAllowMinDifficultyBlocks = false; | |||
/** | |||
* The message start string is designed to be unlikely to occur in normal data. | |||
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce | |||
@@ -112,14 +120,7 @@ public: | |||
pchMessageStart[3] = 0xd9; | |||
vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284"); | |||
nDefaultPort = 8333; | |||
bnProofOfWorkLimit = ~arith_uint256(0) >> 32; | |||
nSubsidyHalvingInterval = 210000; | |||
nEnforceBlockUpgradeMajority = 750; | |||
nRejectBlockOutdatedMajority = 950; | |||
nToCheckBlockUpgradeMajority = 1000; | |||
nMinerThreads = 0; | |||
nTargetTimespan = 14 * 24 * 60 * 60; // two weeks | |||
nTargetSpacing = 10 * 60; | |||
/** | |||
* Build the genesis block. Note that the output of the genesis coinbase cannot | |||
@@ -146,8 +147,8 @@ public: | |||
genesis.nBits = 0x1d00ffff; | |||
genesis.nNonce = 2083236893; | |||
hashGenesisBlock = genesis.GetHash(); | |||
assert(hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); | |||
consensus.hashGenesisBlock = genesis.GetHash(); | |||
assert(consensus.hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); | |||
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); | |||
vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); | |||
@@ -167,7 +168,6 @@ public: | |||
fRequireRPCPassword = true; | |||
fMiningRequiresPeers = true; | |||
fDefaultCheckMemPool = false; | |||
fAllowMinDifficultyBlocks = false; | |||
fRequireStandard = true; | |||
fMineBlocksOnDemand = false; | |||
fTestnetToBeDeprecatedFieldRPC = false; | |||
@@ -187,24 +187,23 @@ class CTestNetParams : public CMainParams { | |||
public: | |||
CTestNetParams() { | |||
strNetworkID = "test"; | |||
consensus.nMajorityEnforceBlockUpgrade = 51; | |||
consensus.nMajorityRejectBlockOutdated = 75; | |||
consensus.nMajorityWindow = 100; | |||
consensus.fPowAllowMinDifficultyBlocks = true; | |||
pchMessageStart[0] = 0x0b; | |||
pchMessageStart[1] = 0x11; | |||
pchMessageStart[2] = 0x09; | |||
pchMessageStart[3] = 0x07; | |||
vAlertPubKey = ParseHex("04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a"); | |||
nDefaultPort = 18333; | |||
nEnforceBlockUpgradeMajority = 51; | |||
nRejectBlockOutdatedMajority = 75; | |||
nToCheckBlockUpgradeMajority = 100; | |||
nMinerThreads = 0; | |||
nTargetTimespan = 14 * 24 * 60 * 60; //! two weeks | |||
nTargetSpacing = 10 * 60; | |||
//! Modify the testnet genesis block so the timestamp is valid for a later start. | |||
genesis.nTime = 1296688602; | |||
genesis.nNonce = 414098458; | |||
hashGenesisBlock = genesis.GetHash(); | |||
assert(hashGenesisBlock == uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")); | |||
consensus.hashGenesisBlock = genesis.GetHash(); | |||
assert(consensus.hashGenesisBlock == uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")); | |||
vFixedSeeds.clear(); | |||
vSeeds.clear(); | |||
@@ -224,7 +223,6 @@ public: | |||
fRequireRPCPassword = true; | |||
fMiningRequiresPeers = true; | |||
fDefaultCheckMemPool = false; | |||
fAllowMinDifficultyBlocks = true; | |||
fRequireStandard = false; | |||
fMineBlocksOnDemand = false; | |||
fTestnetToBeDeprecatedFieldRPC = true; | |||
@@ -243,24 +241,22 @@ class CRegTestParams : public CTestNetParams { | |||
public: | |||
CRegTestParams() { | |||
strNetworkID = "regtest"; | |||
consensus.nSubsidyHalvingInterval = 150; | |||
consensus.nMajorityEnforceBlockUpgrade = 750; | |||
consensus.nMajorityRejectBlockOutdated = 950; | |||
consensus.nMajorityWindow = 1000; | |||
consensus.powLimit = ~arith_uint256(0) >> 1; | |||
pchMessageStart[0] = 0xfa; | |||
pchMessageStart[1] = 0xbf; | |||
pchMessageStart[2] = 0xb5; | |||
pchMessageStart[3] = 0xda; | |||
nSubsidyHalvingInterval = 150; | |||
nEnforceBlockUpgradeMajority = 750; | |||
nRejectBlockOutdatedMajority = 950; | |||
nToCheckBlockUpgradeMajority = 1000; | |||
nMinerThreads = 1; | |||
nTargetTimespan = 14 * 24 * 60 * 60; //! two weeks | |||
nTargetSpacing = 10 * 60; | |||
bnProofOfWorkLimit = ~arith_uint256(0) >> 1; | |||
genesis.nTime = 1296688602; | |||
genesis.nBits = 0x207fffff; | |||
genesis.nNonce = 2; | |||
hashGenesisBlock = genesis.GetHash(); | |||
consensus.hashGenesisBlock = genesis.GetHash(); | |||
nDefaultPort = 18444; | |||
assert(hashGenesisBlock == uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")); | |||
assert(consensus.hashGenesisBlock == uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")); | |||
vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. | |||
vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds. | |||
@@ -268,7 +264,6 @@ public: | |||
fRequireRPCPassword = false; | |||
fMiningRequiresPeers = false; | |||
fDefaultCheckMemPool = true; | |||
fAllowMinDifficultyBlocks = true; | |||
fRequireStandard = false; | |||
fMineBlocksOnDemand = true; | |||
fTestnetToBeDeprecatedFieldRPC = false; |
@@ -6,11 +6,12 @@ | |||
#ifndef BITCOIN_CHAINPARAMS_H | |||
#define BITCOIN_CHAINPARAMS_H | |||
#include "arith_uint256.h" | |||
#include "chainparamsbase.h" | |||
#include "checkpoints.h" | |||
#include "consensus/params.h" | |||
#include "primitives/block.h" | |||
#include "protocol.h" | |||
#include "arith_uint256.h" | |||
#include <vector> | |||
@@ -39,16 +40,16 @@ public: | |||
MAX_BASE58_TYPES | |||
}; | |||
const uint256& HashGenesisBlock() const { return hashGenesisBlock; } | |||
const Consensus::Params& GetConsensus() const { return consensus; } | |||
const uint256& HashGenesisBlock() const { return consensus.hashGenesisBlock; } | |||
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; } | |||
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; } | |||
int GetDefaultPort() const { return nDefaultPort; } | |||
const arith_uint256& ProofOfWorkLimit() const { return bnProofOfWorkLimit; } | |||
int SubsidyHalvingInterval() const { return nSubsidyHalvingInterval; } | |||
/** Used to check majorities for block version upgrade */ | |||
int EnforceBlockUpgradeMajority() const { return nEnforceBlockUpgradeMajority; } | |||
int RejectBlockOutdatedMajority() const { return nRejectBlockOutdatedMajority; } | |||
int ToCheckBlockUpgradeMajority() const { return nToCheckBlockUpgradeMajority; } | |||
const arith_uint256& ProofOfWorkLimit() const { return consensus.powLimit; } | |||
int SubsidyHalvingInterval() const { return consensus.nSubsidyHalvingInterval; } | |||
int EnforceBlockUpgradeMajority() const { return consensus.nMajorityEnforceBlockUpgrade; } | |||
int RejectBlockOutdatedMajority() const { return consensus.nMajorityRejectBlockOutdated; } | |||
int ToCheckBlockUpgradeMajority() const { return consensus.nMajorityWindow; } | |||
/** Used if GenerateBitcoins is called with a negative number of threads */ | |||
int DefaultMinerThreads() const { return nMinerThreads; } | |||
@@ -59,12 +60,12 @@ public: | |||
/** Default value for -checkmempool argument */ | |||
bool DefaultCheckMemPool() const { return fDefaultCheckMemPool; } | |||
/** Allow mining of a min-difficulty block */ | |||
bool AllowMinDifficultyBlocks() const { return fAllowMinDifficultyBlocks; } | |||
bool AllowMinDifficultyBlocks() const { return consensus.fPowAllowMinDifficultyBlocks; } | |||
/** Make standard checks */ | |||
bool RequireStandard() const { return fRequireStandard; } | |||
int64_t TargetTimespan() const { return nTargetTimespan; } | |||
int64_t TargetSpacing() const { return nTargetSpacing; } | |||
int64_t DifficultyAdjustmentInterval() const { return nTargetTimespan / nTargetSpacing; } | |||
int64_t TargetTimespan() const { return consensus.nPowTargetTimespan; } | |||
int64_t TargetSpacing() const { return consensus.nPowTargetSpacing; } | |||
int64_t DifficultyAdjustmentInterval() const { return consensus.nPowTargetTimespan / consensus.nPowTargetSpacing; } | |||
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */ | |||
bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; } | |||
/** In the future use NetworkIDString() for RPC fields */ | |||
@@ -78,18 +79,11 @@ public: | |||
protected: | |||
CChainParams() {} | |||
uint256 hashGenesisBlock; | |||
Consensus::Params consensus; | |||
CMessageHeader::MessageStartChars pchMessageStart; | |||
//! Raw pub key bytes for the broadcast alert signing key. | |||
std::vector<unsigned char> vAlertPubKey; | |||
int nDefaultPort; | |||
arith_uint256 bnProofOfWorkLimit; | |||
int nSubsidyHalvingInterval; | |||
int nEnforceBlockUpgradeMajority; | |||
int nRejectBlockOutdatedMajority; | |||
int nToCheckBlockUpgradeMajority; | |||
int64_t nTargetTimespan; | |||
int64_t nTargetSpacing; | |||
int nMinerThreads; | |||
std::vector<CDNSSeedData> vSeeds; | |||
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES]; | |||
@@ -99,7 +93,6 @@ protected: | |||
bool fRequireRPCPassword; | |||
bool fMiningRequiresPeers; | |||
bool fDefaultCheckMemPool; | |||
bool fAllowMinDifficultyBlocks; | |||
bool fRequireStandard; | |||
bool fMineBlocksOnDemand; | |||
bool fTestnetToBeDeprecatedFieldRPC; |
@@ -0,0 +1,32 @@ | |||
// Copyright (c) 2009-2010 Satoshi Nakamoto | |||
// Copyright (c) 2009-2014 The Bitcoin Core developers | |||
// Distributed under the MIT software license, see the accompanying | |||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||
#ifndef BITCOIN_CONSENSUS_CONSENSUS_PARAMS_H | |||
#define BITCOIN_CONSENSUS_CONSENSUS_PARAMS_H | |||
#include "arith_uint256.h" | |||
#include "uint256.h" | |||
namespace Consensus { | |||
/** | |||
* Parameters that influence chain consensus. | |||
*/ | |||
struct Params { | |||
uint256 hashGenesisBlock; | |||
int nSubsidyHalvingInterval; | |||
/** Used to check majorities for block version upgrade */ | |||
int nMajorityEnforceBlockUpgrade; | |||
int nMajorityRejectBlockOutdated; | |||
int nMajorityWindow; | |||
/** Proof of work parameters */ | |||
arith_uint256 powLimit; | |||
bool fPowAllowMinDifficultyBlocks; | |||
int64_t nPowTargetSpacing; | |||
int64_t nPowTargetTimespan; | |||
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; } | |||
}; | |||
} // namespace Consensus | |||
#endif // BITCOIN_CONSENSUS_CONSENSUS_PARAMS_H |