18 #include <boost/algorithm/string/classification.hpp>
19 #include <boost/algorithm/string/split.hpp>
27 txNew.
vin[0].scriptSig =
CScript() << 486604799 <<
CScriptNum(4) << std::vector<unsigned char>((
const unsigned char*)pszTimestamp, (
const unsigned char*)pszTimestamp + strlen(pszTimestamp));
28 txNew.
vout[0].nValue = genesisReward;
29 txNew.
vout[0].scriptPubKey = genesisOutputScript;
32 genesis.
nTime = nTime;
33 genesis.
nBits = nBits;
55 const char* pszTimestamp =
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
56 const CScript genesisOutputScript =
CScript() <<
ParseHex(
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") <<
OP_CHECKSIG;
57 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")},
227 vSeeds.emplace_back(
"testnet-seed.bitcoin.jonasschnelli.ch");
228 vSeeds.emplace_back(
"seed.tbtc.petertodd.org");
229 vSeeds.emplace_back(
"seed.testnet.bitcoin.sprovoost.nl");
230 vSeeds.emplace_back(
"testnet-seed.bluematt.me");
249 {546,
uint256S(
"000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")},
268 std::vector<uint8_t> bin;
271 if (!args.
IsArgSet(
"-signetchallenge")) {
272 bin =
ParseHex(
"512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae");
273 vSeeds.emplace_back(
"178.128.221.177");
274 vSeeds.emplace_back(
"2a01:7c8:d005:390::5");
275 vSeeds.emplace_back(
"v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333");
288 const auto signet_challenge = args.
GetArgs(
"-signetchallenge");
289 if (signet_challenge.size() != 1) {
290 throw std::runtime_error(
strprintf(
"%s: -signetchallenge cannot be multiple values.", __func__));
292 bin =
ParseHex(signet_challenge[0]);
303 LogPrintf(
"Signet with challenge %s\n", signet_challenge[0]);
306 if (args.
IsArgSet(
"-signetseednode")) {
430 {0,
uint256S(
"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")},
462 if (args.
IsArgSet(
"-segwitheight")) {
464 if (height < -1 || height >= std::numeric_limits<int>::max()) {
465 throw std::runtime_error(
strprintf(
"Activation height %ld for segwit is out of valid range. Use -1 to disable segwit.", height));
466 }
else if (height == -1) {
467 LogPrintf(
"Segwit disabled for testing\n");
468 height = std::numeric_limits<int>::max();
473 if (!args.
IsArgSet(
"-vbparams"))
return;
475 for (
const std::string& strDeployment : args.
GetArgs(
"-vbparams")) {
476 std::vector<std::string> vDeploymentParams;
477 boost::split(vDeploymentParams, strDeployment, boost::is_any_of(
":"));
478 if (vDeploymentParams.size() != 3) {
479 throw std::runtime_error(
"Version bits parameters malformed, expecting deployment:start:end");
481 int64_t nStartTime, nTimeout;
482 if (!
ParseInt64(vDeploymentParams[1], &nStartTime)) {
483 throw std::runtime_error(
strprintf(
"Invalid nStartTime (%s)", vDeploymentParams[1]));
485 if (!
ParseInt64(vDeploymentParams[2], &nTimeout)) {
486 throw std::runtime_error(
strprintf(
"Invalid nTimeout (%s)", vDeploymentParams[2]));
493 LogPrintf(
"Setting version bits activation parameters for %s to start=%ld, timeout=%ld\n", vDeploymentParams[0], nStartTime, nTimeout);
498 throw std::runtime_error(
strprintf(
"Invalid deployment (%s)", vDeploymentParams[0]));
513 return std::unique_ptr<CChainParams>(
new CMainParams());
517 return std::unique_ptr<CChainParams>(
new SigNetParams(args));
521 throw std::runtime_error(
strprintf(
"%s: Unknown chain %s.", __func__, chain));
int64_t CAmount
Amount in satoshis (Can be negative)
static const CAmount COIN
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.
void SelectParams(const std::string &network)
Sets the params returned by Params() to those for the given chain name.
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
const CChainParams & Params()
Return the currently selected parameters.
void SelectBaseParams(const std::string &chain)
Sets the params returned by Params() to those for the given network.
static SeedSpec6 pnSeed6_main[]
List of fixed seed nodes for the bitcoin network AUTOGENERATED by contrib/seeds/generate-seeds....
static SeedSpec6 pnSeed6_test[]
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.
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string 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
uint64_t m_assumed_blockchain_size
bool fDefaultConsistencyChecks
std::vector< SeedSpec6 > vFixedSeeds
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.
void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout)
Allows modifying the Version Bits regtest parameters.
CRegTestParams(const ArgsManager &args)
void UpdateActivationParametersFromArgs(const ArgsManager &args)
Serialized script, used inside transaction inputs and outputs.
SigNetParams(const ArgsManager &args)
void * memcpy(void *a, const void *b, size_t c)
static void LogPrintf(const char *fmt, const Args &... args)
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
@ MAX_VERSION_BITS_DEPLOYMENTS
static CTransactionRef MakeTransactionRef()
std::vector< unsigned char > ParseHex(const char *psz)
bool ParseInt64(const std::string &str, int64_t *out)
Convert string to signed 64-bit integer with strict parse error feedback.
#define ARRAYLEN(array)
Utilities for converting data from/to strings.
A mutable version of CTransaction.
std::vector< CTxOut > vout
Holds various statistics on transactions within a chain.
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.
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.
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)
const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_BITS_DEPLOYMENTS]