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)