]> Git Repo - VerusCoin.git/blob - src/chainparams.h
Merge pull request #3119
[VerusCoin.git] / src / chainparams.h
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 #ifndef BITCOIN_CHAIN_PARAMS_H
7 #define BITCOIN_CHAIN_PARAMS_H
8
9 #include "bignum.h"
10 #include "uint256.h"
11 #include "util.h"
12
13 #include <vector>
14
15 using namespace std;
16
17 #define MESSAGE_START_SIZE 4
18 typedef unsigned char MessageStartChars[MESSAGE_START_SIZE];
19
20 class CAddress;
21 class CBlock;
22
23 struct CDNSSeedData {
24     string name, host;
25     CDNSSeedData(const string &strName, const string &strHost) : name(strName), host(strHost) {}
26 };
27
28 /**
29  * CChainParams defines various tweakable parameters of a given instance of the
30  * Bitcoin system. There are three: the main network on which people trade goods
31  * and services, the public test network which gets reset from time to time and
32  * a regression test mode which is intended for private networks only. It has
33  * minimal difficulty to ensure that blocks can be found instantly.
34  */
35 class CChainParams
36 {
37 public:
38     enum Network {
39         MAIN,
40         TESTNET,
41         REGTEST,
42
43         MAX_NETWORK_TYPES
44     };
45
46     enum Base58Type {
47         PUBKEY_ADDRESS,
48         SCRIPT_ADDRESS,
49         SECRET_KEY,
50         EXT_PUBLIC_KEY,
51         EXT_SECRET_KEY,
52
53         MAX_BASE58_TYPES
54     };
55
56     const uint256& HashGenesisBlock() const { return hashGenesisBlock; }
57     const MessageStartChars& MessageStart() const { return pchMessageStart; }
58     const vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
59     int GetDefaultPort() const { return nDefaultPort; }
60     const CBigNum& ProofOfWorkLimit() const { return bnProofOfWorkLimit; }
61     int SubsidyHalvingInterval() const { return nSubsidyHalvingInterval; }
62     virtual const CBlock& GenesisBlock() const = 0;
63     virtual bool RequireRPCPassword() const { return true; }
64     const string& DataDir() const { return strDataDir; }
65     virtual Network NetworkID() const = 0;
66     const vector<CDNSSeedData>& DNSSeeds() const { return vSeeds; }
67     const std::vector<unsigned char> &Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
68     virtual const vector<CAddress>& FixedSeeds() const = 0;
69     int RPCPort() const { return nRPCPort; }
70 protected:
71     CChainParams() {}
72
73     uint256 hashGenesisBlock;
74     MessageStartChars pchMessageStart;
75     // Raw pub key bytes for the broadcast alert signing key.
76     vector<unsigned char> vAlertPubKey;
77     int nDefaultPort;
78     int nRPCPort;
79     CBigNum bnProofOfWorkLimit;
80     int nSubsidyHalvingInterval;
81     string strDataDir;
82     vector<CDNSSeedData> vSeeds;
83     std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
84 };
85
86 /**
87  * Return the currently selected parameters. This won't change after app startup
88  * outside of the unit tests.
89  */
90 const CChainParams &Params();
91
92 /** Sets the params returned by Params() to those for the given network. */
93 void SelectParams(CChainParams::Network network);
94
95 /**
96  * Looks for -regtest or -testnet and then calls SelectParams as appropriate.
97  * Returns false if an invalid combination is given.
98  */
99 bool SelectParamsFromCommandLine();
100
101 inline bool TestNet() {
102     // Note: it's deliberate that this returns "false" for regression test mode.
103     return Params().NetworkID() == CChainParams::TESTNET;
104 }
105
106 inline bool RegTest() {
107     return Params().NetworkID() == CChainParams::REGTEST;
108 }
109
110 #endif
This page took 0.030875 seconds and 4 git commands to generate.