The main and test networks are configured to use parameters that are currently low-memory but usable with the basic solver; they will be increased once the solver is optimised. The regtest network is configured to have extremely low memory usage for speed. Note that Bitcoin's double-hasher is used for the difficulty check. This does not match the paper, but is simpler than changing the block header serialization. Single hashing is kept for the EquiHash solver because there is no requirement on execution time there, only on memory usage.
123 lines
4.6 KiB
C++
123 lines
4.6 KiB
C++
// 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_CHAINPARAMS_H
|
|
#define BITCOIN_CHAINPARAMS_H
|
|
|
|
#include "chainparamsbase.h"
|
|
#include "checkpoints.h"
|
|
#include "consensus/params.h"
|
|
#include "primitives/block.h"
|
|
#include "protocol.h"
|
|
|
|
#include <vector>
|
|
|
|
struct CDNSSeedData {
|
|
std::string name, host;
|
|
CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {}
|
|
};
|
|
|
|
struct SeedSpec6 {
|
|
uint8_t addr[16];
|
|
uint16_t port;
|
|
};
|
|
|
|
|
|
/**
|
|
* CChainParams defines various tweakable parameters of a given instance of the
|
|
* Bitcoin system. There are three: the main network on which people trade goods
|
|
* and services, the public test network which gets reset from time to time and
|
|
* a regression test mode which is intended for private networks only. It has
|
|
* minimal difficulty to ensure that blocks can be found instantly.
|
|
*/
|
|
class CChainParams
|
|
{
|
|
public:
|
|
enum Base58Type {
|
|
PUBKEY_ADDRESS,
|
|
SCRIPT_ADDRESS,
|
|
SECRET_KEY,
|
|
EXT_PUBLIC_KEY,
|
|
EXT_SECRET_KEY,
|
|
|
|
MAX_BASE58_TYPES
|
|
};
|
|
|
|
const Consensus::Params& GetConsensus() const { return consensus; }
|
|
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; }
|
|
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
|
int GetDefaultPort() const { return nDefaultPort; }
|
|
|
|
/** Used if GenerateBitcoins is called with a negative number of threads */
|
|
int DefaultMinerThreads() const { return nMinerThreads; }
|
|
const CBlock& GenesisBlock() const { return genesis; }
|
|
bool RequireRPCPassword() const { return fRequireRPCPassword; }
|
|
/** Make miner wait to have peers to avoid wasting work */
|
|
bool MiningRequiresPeers() const { return fMiningRequiresPeers; }
|
|
/** Default value for -checkmempool and -checkblockindex argument */
|
|
bool DefaultConsistencyChecks() const { return fDefaultConsistencyChecks; }
|
|
/** Policy: Filter transactions that do not match well-defined patterns */
|
|
bool RequireStandard() const { return fRequireStandard; }
|
|
int64_t MaxTipAge() const { return nMaxTipAge; }
|
|
int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
|
|
unsigned int EquihashN() const { return nEquihashN; }
|
|
unsigned int EquihashK() const { return nEquihashK; }
|
|
/** 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 */
|
|
bool TestnetToBeDeprecatedFieldRPC() const { return fTestnetToBeDeprecatedFieldRPC; }
|
|
/** Return the BIP70 network string (main, test or regtest) */
|
|
std::string NetworkIDString() const { return strNetworkID; }
|
|
const std::vector<CDNSSeedData>& DNSSeeds() const { return vSeeds; }
|
|
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
|
|
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
|
|
const Checkpoints::CCheckpointData& Checkpoints() const { return checkpointData; }
|
|
protected:
|
|
CChainParams() {}
|
|
|
|
Consensus::Params consensus;
|
|
CMessageHeader::MessageStartChars pchMessageStart;
|
|
//! Raw pub key bytes for the broadcast alert signing key.
|
|
std::vector<unsigned char> vAlertPubKey;
|
|
int nDefaultPort;
|
|
int nMinerThreads;
|
|
long nMaxTipAge;
|
|
uint64_t nPruneAfterHeight;
|
|
unsigned int nEquihashN;
|
|
unsigned int nEquihashK;
|
|
std::vector<CDNSSeedData> vSeeds;
|
|
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
|
|
std::string strNetworkID;
|
|
CBlock genesis;
|
|
std::vector<SeedSpec6> vFixedSeeds;
|
|
bool fRequireRPCPassword;
|
|
bool fMiningRequiresPeers;
|
|
bool fDefaultConsistencyChecks;
|
|
bool fRequireStandard;
|
|
bool fMineBlocksOnDemand;
|
|
bool fTestnetToBeDeprecatedFieldRPC;
|
|
Checkpoints::CCheckpointData checkpointData;
|
|
};
|
|
|
|
/**
|
|
* Return the currently selected parameters. This won't change after app
|
|
* startup, except for unit tests.
|
|
*/
|
|
const CChainParams &Params();
|
|
|
|
/** Return parameters for the given network. */
|
|
CChainParams &Params(CBaseChainParams::Network network);
|
|
|
|
/** Sets the params returned by Params() to those for the given network. */
|
|
void SelectParams(CBaseChainParams::Network network);
|
|
|
|
/**
|
|
* Looks for -regtest or -testnet and then calls SelectParams as appropriate.
|
|
* Returns false if an invalid combination is given.
|
|
*/
|
|
bool SelectParamsFromCommandLine();
|
|
|
|
#endif // BITCOIN_CHAINPARAMS_H
|