16#include <boost/algorithm/string/classification.hpp> 
   17#include <boost/algorithm/string/split.hpp> 
   25    txNew.
vin[0].scriptSig = 
CScript() << 486604799 << 
CScriptNum(4) << std::vector<unsigned char>((
const unsigned char*)pszTimestamp, (
const unsigned char*)pszTimestamp + strlen(pszTimestamp));
 
   26    txNew.
vout[0].nValue = genesisReward;
 
   27    txNew.
vout[0].scriptPubKey = genesisOutputScript;
 
   30    genesis.
nTime    = nTime;
 
   31    genesis.
nBits    = nBits;
 
   53    const char* pszTimestamp = 
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
 
   54    const CScript genesisOutputScript = 
CScript() << 
ParseHex(
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << 
OP_CHECKSIG;
 
   55    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
 
  121        vSeeds.emplace_back(
"seed.bitcoin.sipa.be."); 
 
  122        vSeeds.emplace_back(
"dnsseed.bluematt.me."); 
 
  123        vSeeds.emplace_back(
"dnsseed.bitcoin.dashjr.org."); 
 
  124        vSeeds.emplace_back(
"seed.bitcoinstats.com."); 
 
  125        vSeeds.emplace_back(
"seed.bitcoin.jonasschnelli.ch."); 
 
  126        vSeeds.emplace_back(
"seed.btc.petertodd.org."); 
 
  127        vSeeds.emplace_back(
"seed.bitcoin.sprovoost.nl."); 
 
  128        vSeeds.emplace_back(
"dnsseed.emzy.de."); 
 
  129        vSeeds.emplace_back(
"seed.bitcoin.wiz.biz."); 
 
  148                { 11111, 
uint256S(
"0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")},
 
  149                { 33333, 
uint256S(
"0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")},
 
  150                { 74000, 
uint256S(
"0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")},
 
  151                {105000, 
uint256S(
"0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")},
 
  152                {134444, 
uint256S(
"0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")},
 
  153                {168000, 
uint256S(
"0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")},
 
  154                {193000, 
uint256S(
"0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")},
 
  155                {210000, 
uint256S(
"0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")},
 
  156                {216116, 
uint256S(
"0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")},
 
  157                {225430, 
uint256S(
"0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")},
 
  158                {250000, 
uint256S(
"0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")},
 
  159                {279000, 
uint256S(
"0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")},
 
  160                {295000, 
uint256S(
"0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")},
 
  233        vSeeds.emplace_back(
"testnet-seed.bitcoin.jonasschnelli.ch.");
 
  234        vSeeds.emplace_back(
"seed.tbtc.petertodd.org.");
 
  235        vSeeds.emplace_back(
"seed.testnet.bitcoin.sprovoost.nl.");
 
  236        vSeeds.emplace_back(
"testnet-seed.bluematt.me."); 
 
  255                {546, 
uint256S(
"000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")},
 
  278        std::vector<uint8_t> bin;
 
  281        if (!args.
IsArgSet(
"-signetchallenge")) {
 
  282            bin = 
ParseHex(
"512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae");
 
  283            vSeeds.emplace_back(
"seed.signet.bitcoin.sprovoost.nl.");
 
  286            vSeeds.emplace_back(
"178.128.221.177");
 
  287            vSeeds.emplace_back(
"v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333");
 
  300            const auto signet_challenge = args.
GetArgs(
"-signetchallenge");
 
  301            if (signet_challenge.size() != 1) {
 
  302                throw std::runtime_error(
strprintf(
"%s: -signetchallenge cannot be multiple values.", __func__));
 
  304            bin = 
ParseHex(signet_challenge[0]);
 
  315            LogPrintf(
"Signet with challenge %s\n", signet_challenge[0]);
 
  318        if (args.
IsArgSet(
"-signetseednode")) {
 
  441        vSeeds.emplace_back(
"dummySeed.invalid.");
 
  450                {0, 
uint256S(
"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")},
 
  494    for (
const std::string& arg : args.
GetArgs(
"-testactivationheight")) {
 
  495        const auto found{arg.find(
'@')};
 
  496        if (found == std::string::npos) {
 
  497            throw std::runtime_error(
strprintf(
"Invalid format (%s) for -testactivationheight=name@height.", arg));
 
  499        const auto name{arg.substr(0, found)};
 
  500        const auto value{arg.substr(found + 1)};
 
  502        if (!
ParseInt32(value, &height) || height < 0 || height >= std::numeric_limits<int>::max()) {
 
  503            throw std::runtime_error(
strprintf(
"Invalid height value (%s) for -testactivationheight=name@height.", arg));
 
  505        if (
name == 
"segwit") {
 
  507        } 
else if (
name == 
"bip34") {
 
  509        } 
else if (
name == 
"dersig") {
 
  511        } 
else if (
name == 
"cltv") {
 
  513        } 
else if (
name == 
"csv") {
 
  516            throw std::runtime_error(
strprintf(
"Invalid name (%s) for -testactivationheight=name@height.", arg));
 
  525    if (!args.
IsArgSet(
"-vbparams")) 
return;
 
  527    for (
const std::string& strDeployment : args.
GetArgs(
"-vbparams")) {
 
  528        std::vector<std::string> vDeploymentParams;
 
  529        boost::split(vDeploymentParams, strDeployment, boost::is_any_of(
":"));
 
  530        if (vDeploymentParams.size() < 3 || 4 < vDeploymentParams.size()) {
 
  531            throw std::runtime_error(
"Version bits parameters malformed, expecting deployment:start:end[:min_activation_height]");
 
  533        int64_t nStartTime, nTimeout;
 
  534        int min_activation_height = 0;
 
  535        if (!
ParseInt64(vDeploymentParams[1], &nStartTime)) {
 
  536            throw std::runtime_error(
strprintf(
"Invalid nStartTime (%s)", vDeploymentParams[1]));
 
  538        if (!
ParseInt64(vDeploymentParams[2], &nTimeout)) {
 
  539            throw std::runtime_error(
strprintf(
"Invalid nTimeout (%s)", vDeploymentParams[2]));
 
  541        if (vDeploymentParams.size() >= 4 && !
ParseInt32(vDeploymentParams[3], &min_activation_height)) {
 
  542            throw std::runtime_error(
strprintf(
"Invalid min_activation_height (%s)", vDeploymentParams[3]));
 
  549                LogPrintf(
"Setting version bits activation parameters for %s to start=%ld, timeout=%ld, min_activation_height=%d\n", vDeploymentParams[0], nStartTime, nTimeout, min_activation_height);
 
  554            throw std::runtime_error(
strprintf(
"Invalid deployment (%s)", vDeploymentParams[0]));
 
  569        return std::unique_ptr<CChainParams>(
new CMainParams());
 
  573        return std::unique_ptr<CChainParams>(
new SigNetParams(args));
 
  577    throw std::runtime_error(
strprintf(
"%s: Unknown chain %s.", __func__, chain));
 
int64_t CAmount
Amount in satoshis (Can be negative)
static constexpr CAmount COIN
The amount of satoshis in one BTC.
void SelectParams(const std::string &network)
Sets the params returned by Params() to those for the given chain name.
static void MaybeUpdateHeights(const ArgsManager &args, Consensus::Params &consensus)
static CBlock CreateGenesisBlock(const char *pszTimestamp, const CScript &genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount &genesisReward)
static std::unique_ptr< const CChainParams > globalChainParams
std::unique_ptr< const CChainParams > CreateChainParams(const ArgsManager &args, const std::string &chain)
Creates and returns a std::unique_ptr<CChainParams> of the chosen chain.
const CChainParams & Params()
Return the currently selected parameters.
std::map< int, const AssumeutxoData > MapAssumeutxo
void SelectBaseParams(const std::string &chain)
Sets the params returned by Params() to those for the given network.
static const uint8_t chainparams_seed_test[]
static const uint8_t chainparams_seed_main[]
List of fixed seed nodes for the bitcoin network AUTOGENERATED by contrib/seeds/generate-seeds....
std::vector< std::string > GetArgs(const std::string &strArg) const
Return a vector of strings of the given argument.
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
static const std::string REGTEST
static const std::string TESTNET
static const std::string SIGNET
static const std::string MAIN
Chain name strings.
std::vector< CTransactionRef > vtx
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
uint64_t m_assumed_chain_state_size
MapAssumeutxo m_assumeutxo_data
uint64_t m_assumed_blockchain_size
std::vector< uint8_t > vFixedSeeds
bool fDefaultConsistencyChecks
std::vector< unsigned char > base58Prefixes[MAX_BASE58_TYPES]
Consensus::Params consensus
std::vector< std::string > vSeeds
CCheckpointData checkpointData
CMessageHeader::MessageStartChars pchMessageStart
uint64_t nPruneAfterHeight
A writer stream (for serialization) that computes a 256-bit hash.
uint256 GetHash()
Compute the double-SHA256 hash of all data written to this object.
Main network on which people trade goods and services.
Regression test: intended for private networks only.
void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int min_activation_height)
Allows modifying the Version Bits regtest parameters.
CRegTestParams(const ArgsManager &args)
void UpdateActivationParametersFromArgs(const ArgsManager &args)
Serialized script, used inside transaction inputs and outputs.
Testnet (v3): public test network which is reset from time to time.
Signet: test network with an additional consensus parameter (see BIP325).
SigNetParams(const ArgsManager &args)
const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_BITS_DEPLOYMENTS]
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
@ MAX_VERSION_BITS_DEPLOYMENTS
static CTransactionRef MakeTransactionRef(Tx &&txIn)
std::vector< unsigned char > ParseHex(const char *psz)
bool ParseInt32(const std::string &str, int32_t *out)
Convert string to signed 32-bit integer with strict parse error feedback.
bool ParseInt64(const std::string &str, int64_t *out)
Convert string to signed 64-bit integer with strict parse error feedback.
A mutable version of CTransaction.
std::vector< CTxOut > vout
Holds various statistics on transactions within a chain.
int min_activation_height
If lock in occurs, delay activation until at least this block height.
int bit
Bit position to select the particular bit in nVersion.
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
static constexpr int64_t NEVER_ACTIVE
Special value for nStartTime indicating that the deployment is never active.
int64_t nTimeout
Timeout/expiry MedianTime for the deployment attempt.
static constexpr int64_t NO_TIMEOUT
Constant for nTimeout very far in the future.
int64_t nStartTime
Start MedianTime for version bits miner confirmation.
Parameters that influence chain consensus.
int BIP65Height
Block height at which BIP65 becomes active.
int CSVHeight
Block height at which CSV (BIP68, BIP112 and BIP113) becomes active.
uint32_t nMinerConfirmationWindow
uint256 defaultAssumeValid
By default assume that the signatures in ancestors of this block are valid.
std::vector< uint8_t > signet_challenge
bool signet_blocks
If true, witness commitments contain a payload equal to a Bitcoin Script solution to the signet chall...
int SegwitHeight
Block height at which Segwit (BIP141, BIP143 and BIP147) becomes active.
int BIP34Height
Block height and hash at which BIP34 becomes active.
int nSubsidyHalvingInterval
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]
int MinBIP9WarningHeight
Don't warn about unknown BIP 9 activations below this height.
uint256 nMinimumChainWork
The best chain should have at least this much work.
uint32_t nRuleChangeActivationThreshold
Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period,...
int64_t nPowTargetTimespan
int BIP66Height
Block height at which BIP66 becomes active.
uint256 powLimit
Proof of work parameters.
int64_t nPowTargetSpacing
bool fPowAllowMinDifficultyBlocks
uint256 uint256S(const char *str)