Bitcoin ABC 0.31.5
P2P Digital Currency
chainparams.h
Go to the documentation of this file.
1// Copyright (c) 2010 Satoshi Nakamoto
2// Copyright (c) 2009-2021 The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef BITCOIN_KERNEL_CHAINPARAMS_H
7#define BITCOIN_KERNEL_CHAINPARAMS_H
8
9#include <consensus/params.h>
10#include <netaddress.h>
11#include <primitives/block.h>
12#include <protocol.h>
13#include <uint256.h>
14#include <util/chaintype.h>
15#include <util/hash_type.h>
16#include <util/vector.h>
17
18#include <cstdint>
19#include <iterator>
20#include <map>
21#include <memory>
22#include <optional>
23#include <string>
24#include <unordered_map>
25#include <utility>
26#include <vector>
27
28struct SeedSpec6 {
29 uint8_t addr[16];
30 uint16_t port;
31};
32
33typedef std::map<int, BlockHash> MapCheckpoints;
34
37};
38
39struct AssumeutxoHash : public BaseHash<uint256> {
40 explicit AssumeutxoHash(const uint256 &hash) : BaseHash(hash) {}
41};
42
49 int height;
50
53
60 unsigned int nChainTx;
61
65};
66
74 int64_t nTime;
75 int64_t nTxCount;
76 double dTxRate;
77};
78
87public:
94
96 };
97
98 const Consensus::Params &GetConsensus() const { return consensus; }
101 uint16_t GetDefaultPort() const { return nDefaultPort; }
102 uint16_t GetDefaultPort(Network net) const {
103 return net == NET_I2P ? I2P_SAM31_PORT : GetDefaultPort();
104 }
105 uint16_t GetDefaultPort(const std::string &addr) const {
106 CNetAddr a;
107 return a.SetSpecial(addr) ? GetDefaultPort(a.GetNetwork())
108 : GetDefaultPort();
109 }
110 std::vector<int> GetAvailableSnapshotHeights() const;
111
112 const CBlock &GenesisBlock() const { return genesis; }
116 bool RequireStandard() const { return fRequireStandard; }
118 bool IsTestChain() const { return m_is_test_chain; }
120 bool IsMockableChain() const { return m_is_mockable_chain; }
121 uint64_t PruneAfterHeight() const { return nPruneAfterHeight; }
128 uint64_t AssumedChainStateSize() const {
130 }
134 std::string GetChainTypeString() const {
136 }
140 const std::vector<uint8_t> &Base58Prefix(Base58Type type) const {
141 return base58Prefixes[type];
142 }
143 const std::string &CashAddrPrefix() const { return cashaddrPrefix; }
144 const std::vector<SeedSpec6> &FixedSeeds() const { return vFixedSeeds; }
145 const CCheckpointData &Checkpoints() const { return checkpointData; }
146
147 std::optional<AssumeutxoData> AssumeutxoForHeight(int height) const {
149 [&](const auto &d) { return d.height == height; });
150 }
151 std::optional<AssumeutxoData>
152 AssumeutxoForBlockhash(const BlockHash &blockhash) const {
153 return FindFirst(m_assumeutxo_data, [&](const auto &d) {
154 return d.blockhash == blockhash;
155 });
156 }
157
158 const ChainTxData &TxData() const { return chainTxData; }
159
161 bool ecash{true};
162 bool fastprune{false};
163 };
164
165 static std::unique_ptr<const CChainParams>
166 RegTest(const ChainOptions &options);
167 static std::unique_ptr<const CChainParams>
168 Main(const ChainOptions &options);
169 static std::unique_ptr<const CChainParams>
170 TestNet(const ChainOptions &options);
171
172protected:
174
178 uint16_t nDefaultPort;
182 std::vector<std::string> vSeeds;
183 std::vector<uint8_t> base58Prefixes[MAX_BASE58_TYPES];
184 std::string cashaddrPrefix;
187 std::vector<SeedSpec6> vFixedSeeds;
193 std::vector<AssumeutxoData> m_assumeutxo_data;
195
196 friend std::vector<std::string>
197 GetRandomizedDNSSeeds(const CChainParams &params);
198};
199
200const CCheckpointData &CheckpointData(const ChainType chain);
201
202std::optional<ChainType>
204
205#endif // BITCOIN_KERNEL_CHAINPARAMS_H
std::string ChainTypeToString(ChainType chain)
Definition: chaintype.cpp:11
ChainType
Definition: chaintype.h:11
Definition: block.h:60
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
Definition: chainparams.h:86
std::string GetChainTypeString() const
Return the chain type string.
Definition: chainparams.h:134
uint64_t m_assumed_chain_state_size
Definition: chainparams.h:181
const CBlock & GenesisBlock() const
Definition: chainparams.h:112
bool DefaultConsistencyChecks() const
Default value for -checkmempool and -checkblockindex argument.
Definition: chainparams.h:114
const CMessageHeader::MessageMagic & NetMagic() const
Definition: chainparams.h:100
std::vector< int > GetAvailableSnapshotHeights() const
const CMessageHeader::MessageMagic & DiskMagic() const
Definition: chainparams.h:99
const std::vector< SeedSpec6 > & FixedSeeds() const
Definition: chainparams.h:144
bool m_is_test_chain
Definition: chainparams.h:190
CBlock genesis
Definition: chainparams.h:186
uint16_t GetDefaultPort(const std::string &addr) const
Definition: chainparams.h:105
bool RequireStandard() const
Policy: Filter transactions that do not match well-defined patterns.
Definition: chainparams.h:116
const std::vector< uint8_t > & Base58Prefix(Base58Type type) const
Return the list of hostnames to look up for DNS seeds.
Definition: chainparams.h:140
uint64_t m_assumed_blockchain_size
Definition: chainparams.h:180
bool IsMockableChain() const
If this chain allows time to be mocked.
Definition: chainparams.h:120
CMessageHeader::MessageMagic netMagic
Definition: chainparams.h:177
std::vector< uint8_t > base58Prefixes[MAX_BASE58_TYPES]
Definition: chainparams.h:183
bool fDefaultConsistencyChecks
Definition: chainparams.h:188
std::vector< SeedSpec6 > vFixedSeeds
Definition: chainparams.h:187
const ChainTxData & TxData() const
Definition: chainparams.h:158
std::optional< AssumeutxoData > AssumeutxoForBlockhash(const BlockHash &blockhash) const
Definition: chainparams.h:152
const Consensus::Params & GetConsensus() const
Definition: chainparams.h:98
bool IsTestChain() const
If this chain is exclusively used for testing.
Definition: chainparams.h:118
bool MineBlocksOnDemand() const
Whether it is possible to mine blocks on demand (no retargeting)
Definition: chainparams.h:132
Consensus::Params consensus
Definition: chainparams.h:175
friend std::vector< std::string > GetRandomizedDNSSeeds(const CChainParams &params)
Return the list of hostnames to look up for DNS seeds.
Definition: dnsseeds.cpp:10
static std::unique_ptr< const CChainParams > TestNet(const ChainOptions &options)
uint16_t GetDefaultPort() const
Definition: chainparams.h:101
static std::unique_ptr< const CChainParams > RegTest(const ChainOptions &options)
std::vector< AssumeutxoData > m_assumeutxo_data
Definition: chainparams.h:193
const std::string & CashAddrPrefix() const
Definition: chainparams.h:143
uint64_t AssumedBlockchainSize() const
Minimum free space (in GB) needed for data directory.
Definition: chainparams.h:123
bool fRequireStandard
Definition: chainparams.h:189
std::string cashaddrPrefix
Definition: chainparams.h:184
std::vector< std::string > vSeeds
Definition: chainparams.h:182
bool m_is_mockable_chain
Definition: chainparams.h:191
CMessageHeader::MessageMagic diskMagic
Definition: chainparams.h:176
static std::unique_ptr< const CChainParams > Main(const ChainOptions &options)
ChainType m_chain_type
Definition: chainparams.h:185
uint64_t AssumedChainStateSize() const
Minimum free space (in GB) needed for data directory when pruned; Does not include prune target.
Definition: chainparams.h:128
uint64_t PruneAfterHeight() const
Definition: chainparams.h:121
CCheckpointData checkpointData
Definition: chainparams.h:192
uint16_t nDefaultPort
Definition: chainparams.h:178
std::optional< AssumeutxoData > AssumeutxoForHeight(int height) const
Definition: chainparams.h:147
ChainType GetChainType() const
Return the chain type.
Definition: chainparams.h:138
const CCheckpointData & Checkpoints() const
Definition: chainparams.h:145
uint64_t nPruneAfterHeight
Definition: chainparams.h:179
ChainTxData chainTxData
Definition: chainparams.h:194
uint16_t GetDefaultPort(Network net) const
Definition: chainparams.h:102
std::array< uint8_t, MESSAGE_START_SIZE > MessageMagic
Definition: protocol.h:46
Network address.
Definition: netaddress.h:121
bool SetSpecial(const std::string &addr)
Parse a Tor or I2P address and set this object to it.
Definition: netaddress.cpp:224
enum Network GetNetwork() const
Definition: netaddress.cpp:546
256-bit opaque blob.
Definition: uint256.h:129
std::optional< ChainType > GetNetworkForMagic(CMessageHeader::MessageMagic &pchMessageStart)
std::map< int, BlockHash > MapCheckpoints
Definition: chainparams.h:33
const CCheckpointData & CheckpointData(const ChainType chain)
static constexpr uint16_t I2P_SAM31_PORT
SAM 3.1 and earlier do not support specifying ports and force the port to 0.
Definition: netaddress.h:116
Network
A network type.
Definition: netaddress.h:44
@ NET_I2P
I2P.
Definition: netaddress.h:59
Holds configuration for use during UTXO snapshot load and validation.
Definition: chainparams.h:48
AssumeutxoHash hash_serialized
The expected hash of the deserialized UTXO set.
Definition: chainparams.h:52
BlockHash blockhash
The hash of the base block for this snapshot.
Definition: chainparams.h:64
unsigned int nChainTx
Used to populate the nChainTx value, which is used during BlockManager::LoadBlockIndex().
Definition: chainparams.h:60
AssumeutxoHash(const uint256 &hash)
Definition: chainparams.h:40
A BlockHash is a unqiue identifier for a block.
Definition: blockhash.h:13
MapCheckpoints mapCheckpoints
Definition: chainparams.h:36
Holds various statistics on transactions within a chain.
Definition: chainparams.h:73
double dTxRate
Definition: chainparams.h:76
int64_t nTime
Definition: chainparams.h:74
int64_t nTxCount
Definition: chainparams.h:75
Parameters that influence chain consensus.
Definition: params.h:34
bool fPowNoRetargeting
Definition: params.h:78
uint16_t port
Definition: chainparams.h:30
uint8_t addr[16]
Definition: chainparams.h:29
std::optional< V > FindFirst(const std::vector< V > &vec, const L fnc)
Definition: vector.h:52