diff --git a/contrib/devtools/chainparams/chainparams_main.txt b/contrib/devtools/chainparams/chainparams_main.txt new file mode 100644 --- /dev/null +++ b/contrib/devtools/chainparams/chainparams_main.txt @@ -0,0 +1,2 @@ +000000000000000002be7b5e999ab5d40b8cbcbabd0f288695881da496eb65a2 +000000000000000000000000000000000000000000fd614ab0f9f59277fe2975 diff --git a/contrib/devtools/chainparams/chainparams_test.txt b/contrib/devtools/chainparams/chainparams_test.txt new file mode 100644 --- /dev/null +++ b/contrib/devtools/chainparams/chainparams_test.txt @@ -0,0 +1,2 @@ +00000000fbabb53ec6eddb3d56d3262f30dbb6549b391255090d351eccd01c24 +0000000000000000000000000000000000000000000000512031dc9900995ec4 diff --git a/contrib/devtools/chainparams/generate_chainparams_constants.py b/contrib/devtools/chainparams/generate_chainparams_constants.py new file mode 100755 --- /dev/null +++ b/contrib/devtools/chainparams/generate_chainparams_constants.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# Copyright (c) 2019 The Bitcoin developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +''' +Script to generate list of chainparams constants (ie. assumevalid and +minimum chainwork). + +This script expects a text file for each chain in the directory that is passed +as an argument: + + chainparams_main.txt + chainparams_test.txt + +These files must consist of lines in the format + + + + +The outputted constants should be pasted into `src/chainparamsconstants.h`. +''' + +import sys +import os + + +def process_constants(indir, file_name): + with open(os.path.join(indir, file_name), 'r', encoding="utf8") as f: + constants = f.readlines() + + # Ensure only two lines are read from the file. + assert(len(constants) == 2) + + return [line.rstrip() for line in constants] + + +def main(): + if len(sys.argv) != 2: + print('Usage: {} '.format(sys.argv[0]), file=sys.stderr) + sys.exit(1) + + indir = sys.argv[1] + + print('''\ +#ifndef BITCOIN_CHAINPARAMSCONSTANTS_H +#define BITCOIN_CHAINPARAMSCONSTANTS_H +/** + * Chain params constants for each tracked chain. + * @{} by contrib/devtools/chainparams/generate_chainparams_constants.py + */ + +#include + +namespace ChainParamsConstants {{ + const uint256 MAINNET_DEFAULT_ASSUME_VALID = uint256S("{}"); + const uint256 MAINNET_MINIMUM_CHAIN_WORK = uint256S("{}"); + + const uint256 TESTNET_DEFAULT_ASSUME_VALID = uint256S("{}"); + const uint256 TESTNET_MINIMUM_CHAIN_WORK = uint256S("{}"); +}} // namespace ChainParamsConstants + +#endif // BITCOIN_CHAINPARAMSCONSTANTS_H\ +'''.format( + # 'generated' is split out so this file is not identified as generated. + "generated", + *process_constants(indir, 'chainparams_main.txt'), + *process_constants(indir, 'chainparams_test.txt')) + ) + + +if __name__ == '__main__': + main() diff --git a/src/Makefile.am b/src/Makefile.am --- a/src/Makefile.am +++ b/src/Makefile.am @@ -118,6 +118,7 @@ chain.h \ chainparams.h \ chainparamsbase.h \ + chainparamsconstants.h \ chainparamsseeds.h \ checkpoints.h \ checkqueue.h \ diff --git a/src/chainparams.cpp b/src/chainparams.cpp --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -104,13 +105,13 @@ consensus.fPowNoRetargeting = false; // The best chain should have at least this much work. - consensus.nMinimumChainWork = uint256S( - "000000000000000000000000000000000000000000fd614ab0f9f59277fe2975"); + consensus.nMinimumChainWork = + ChainParamsConstants::MAINNET_MINIMUM_CHAIN_WORK; // By default assume that the signatures in ancestors of this block are // valid. - consensus.defaultAssumeValid = uint256S( - "000000000000000002be7b5e999ab5d40b8cbcbabd0f288695881da496eb65a2"); + consensus.defaultAssumeValid = + ChainParamsConstants::MAINNET_DEFAULT_ASSUME_VALID; // August 1, 2017 hard fork consensus.uahfHeight = 478558; @@ -272,13 +273,13 @@ consensus.fPowNoRetargeting = false; // The best chain should have at least this much work. - consensus.nMinimumChainWork = uint256S( - "0000000000000000000000000000000000000000000000512031dc9900995ec4"); + consensus.nMinimumChainWork = + ChainParamsConstants::TESTNET_MINIMUM_CHAIN_WORK; // By default assume that the signatures in ancestors of this block are // valid. - consensus.defaultAssumeValid = uint256S( - "00000000fbabb53ec6eddb3d56d3262f30dbb6549b391255090d351eccd01c24"); + consensus.defaultAssumeValid = + ChainParamsConstants::TESTNET_DEFAULT_ASSUME_VALID; // August 1, 2017 hard fork consensus.uahfHeight = 1155875; diff --git a/src/chainparamsconstants.h b/src/chainparamsconstants.h new file mode 100644 --- /dev/null +++ b/src/chainparamsconstants.h @@ -0,0 +1,18 @@ +#ifndef BITCOIN_CHAINPARAMSCONSTANTS_H +#define BITCOIN_CHAINPARAMSCONSTANTS_H +/** + * Chain params constants for each tracked chain. + * @generated by contrib/devtools/chainparams/generate_chainparams_constants.py + */ + +#include + +namespace ChainParamsConstants { + const uint256 MAINNET_DEFAULT_ASSUME_VALID = uint256S("000000000000000002be7b5e999ab5d40b8cbcbabd0f288695881da496eb65a2"); + const uint256 MAINNET_MINIMUM_CHAIN_WORK = uint256S("000000000000000000000000000000000000000000fd614ab0f9f59277fe2975"); + + const uint256 TESTNET_DEFAULT_ASSUME_VALID = uint256S("00000000fbabb53ec6eddb3d56d3262f30dbb6549b391255090d351eccd01c24"); + const uint256 TESTNET_MINIMUM_CHAIN_WORK = uint256S("0000000000000000000000000000000000000000000000512031dc9900995ec4"); +} // namespace ChainParamsConstants + +#endif // BITCOIN_CHAINPARAMSCONSTANTS_H