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");
133 base58Prefixes[
SECRET_KEY] = std::vector<unsigned char>(1,128);
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");
234 base58Prefixes[
SECRET_KEY] = std::vector<unsigned char>(1,239);
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(
"ntv3mtqw5wt63red.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")) {
356 base58Prefixes[
SECRET_KEY] = std::vector<unsigned char>(1,239);
430 {0,
uint256S(
"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")},
442 base58Prefixes[
SECRET_KEY] = std::vector<unsigned char>(1,239);
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));
static constexpr int64_t NO_TIMEOUT
Constant for nTimeout very far in the future.
int64_t nPowTargetTimespan
static const std::string REGTEST
void UpdateActivationParametersFromArgs(const ArgsManager &args)
static void LogPrintf(const char *fmt, const Args &...args)
std::vector< unsigned char > base58Prefixes[MAX_BASE58_TYPES]
static const CAmount COIN
#define ARRAYLEN(array)
Utilities for converting data from/to strings.
std::vector< unsigned char > ParseHex(const char *psz)
static CTransactionRef MakeTransactionRef()
bool fPowAllowMinDifficultyBlocks
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
int BIP66Height
Block height at which BIP66 becomes active.
uint64_t m_assumed_chain_state_size
static SeedSpec6 pnSeed6_test[]
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system...
int CSVHeight
Block height at which CSV (BIP68, BIP112 and BIP113) becomes active.
CMessageHeader::MessageStartChars pchMessageStart
bool ParseInt64(const std::string &str, int64_t *out)
Convert string to signed 64-bit integer with strict parse error feedback.
static const std::string MAIN
Chain name strings.
uint64_t m_assumed_blockchain_size
int nSubsidyHalvingInterval
int64_t CAmount
Amount in satoshis (Can be negative)
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.
uint256 powLimit
Proof of work parameters.
void SelectParams(const std::string &network)
Sets the params returned by Params() to those for the given chain name.
int BIP34Height
Block height and hash at which BIP34 becomes active.
CRegTestParams(const ArgsManager &args)
SigNetParams(const ArgsManager &args)
uint256 uint256S(const char *str)
int64_t nStartTime
Start MedianTime for version bits miner confirmation.
int64_t nPowTargetSpacing
Holds various statistics on transactions within a chain.
std::vector< std::string > vSeeds
void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout)
Allows modifying the Version Bits regtest parameters.
static std::unique_ptr< const CChainParams > globalChainParams
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
uint32_t nMinerConfirmationWindow
std::vector< CTxOut > vout
int BIP65Height
Block height at which BIP65 becomes active.
uint256 GetHash()
Compute the double-SHA256 hash of all data written to this object.
int64_t nTimeout
Timeout/expiry MedianTime for the deployment attempt.
uint256 nMinimumChainWork
The best chain should have at least this much work.
std::vector< CTransactionRef > vtx
const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_BITS_DEPLOYMENTS]
std::vector< SeedSpec6 > vFixedSeeds
uint256 defaultAssumeValid
By default assume that the signatures in ancestors of this block are valid.
const CChainParams & Params()
Return the currently selected parameters.
Serialized script, used inside transaction inputs and outputs.
void * memcpy(void *a, const void *b, size_t c)
Consensus::Params consensus
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
std::vector< uint8_t > signet_challenge
int MinBIP9WarningHeight
Don't warn about unknown BIP 9 activations below this height.
static const std::string TESTNET
A mutable version of CTransaction.
A writer stream (for serialization) that computes a 256-bit hash.
uint32_t nRuleChangeActivationThreshold
Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period...
uint64_t nPruneAfterHeight
int SegwitHeight
Block height at which Segwit (BIP141, BIP143 and BIP147) becomes active.
int bit
Bit position to select the particular bit in nVersion.
CCheckpointData checkpointData
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.py.
static const std::string SIGNET
bool fDefaultConsistencyChecks
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]
static CBlock CreateGenesisBlock(const char *pszTimestamp, const CScript &genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount &genesisReward)
std::unique_ptr< const CChainParams > CreateChainParams(const ArgsManager &args, const std::string &chain)
Creates and returns a std::unique_ptr of the chosen chain.