chainparamsbase.cpp raw

   1  // Copyright (c) 2010 Satoshi Nakamoto
   2  // Copyright (c) 2009-2021 The Limenka 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  #include <chainparamsbase.h>
   7  
   8  #include <common/args.h>
   9  #include <tinyformat.h>
  10  #include <util/chaintype.h>
  11  
  12  #include <assert.h>
  13  
  14  void SetupChainParamsBaseOptions(ArgsManager& argsman)
  15  {
  16      argsman.AddArg("-chain=<chain>", "Use the chain <chain> (default: main). Allowed values: " LIST_CHAIN_NAMES, ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  17      argsman.AddArg("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. "
  18                   "This is intended for regression testing tools and app development. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
  19      argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (segwit, bip34, dersig, cltv, csv). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
  20      argsman.AddArg("-testnet", "Use the testnet3 chain. Equivalent to -chain=test. Support for testnet3 is deprecated and will be removed in an upcoming release. Consider moving to testnet4 now by using -testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  21      argsman.AddArg("-testnet4", "Use the testnet4 chain. Equivalent to -chain=testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  22      argsman.AddArg("-vbparams=deployment:start:end[:min_activation_height]", "Use given start/end times and min_activation_height for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
  23      argsman.AddArg("-signet", "Use the signet chain. Equivalent to -chain=signet. Note that the network is defined by the -signetchallenge parameter", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  24      argsman.AddArg("-signetchallenge", "Blocks must satisfy the given script to be considered valid (only for signet networks; defaults to the global default signet test network challenge)", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::CHAINPARAMS);
  25      argsman.AddArg("-signetblocktime", "Difficulty adjustment will target a block time of the given amount in seconds (only for custom signet networks, must have -signetchallenge set; defaults to 10 minutes)", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::CHAINPARAMS);
  26      argsman.AddArg("-signetseednode", "Specify a seed node for the signet network, in the hostname[:port] format, e.g. sig.net:1234 (may be used multiple times to specify multiple seed nodes; defaults to the global default signet test network seed node(s))", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::CHAINPARAMS);
  27      argsman.AddArg("-limenka", "Use the limenka chain. Equivalent to -chain=limenka.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  28      argsman.AddArg("-forkactivationtime=<n>", "Set fork activation MTP timestamp (default: 1792328400 for mainnet).", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
  29      argsman.AddArg("-forkdelaysteps=<n>", "Set delay step count for test mode (reduces delay time for testing).", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
  30      argsman.AddArg("-forkmineondemand", "Mine fork blocks on demand via generatetoaddress (testnet bootstrap and functional tests).", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
  31      argsman.AddArg("-forkstandalone", "Run the fork as a standalone chain from its own genesis (testnet deployment, no parent-chain bootstrap).", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
  32  }
  33  
  34  static std::unique_ptr<CBaseChainParams> globalChainBaseParams;
  35  
  36  const CBaseChainParams& BaseParams()
  37  {
  38      assert(globalChainBaseParams);
  39      return *globalChainBaseParams;
  40  }
  41  
  42  /**
  43   * Port numbers for incoming Tor connections (8334, 18334, 38334, 48334, 18445) have
  44   * been chosen arbitrarily to keep ranges of used ports tight.
  45   */
  46  std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const ChainType chain)
  47  {
  48      switch (chain) {
  49      case ChainType::MAIN:
  50          return std::make_unique<CBaseChainParams>("", 8332);
  51      case ChainType::TESTNET:
  52          return std::make_unique<CBaseChainParams>("testnet3", 18332);
  53      case ChainType::TESTNET4:
  54          return std::make_unique<CBaseChainParams>("testnet4", 48332);
  55      case ChainType::SIGNET:
  56          return std::make_unique<CBaseChainParams>("signet", 38332);
  57      case ChainType::REGTEST:
  58          return std::make_unique<CBaseChainParams>("regtest", 18443);
  59      case ChainType::FORK:
  60          return std::make_unique<CBaseChainParams>("fork", 19444);
  61      }
  62      assert(false);
  63  }
  64  
  65  void SelectBaseParams(const ChainType chain)
  66  {
  67      globalChainBaseParams = CreateBaseChainParams(chain);
  68      gArgs.SelectConfigNetwork(ChainTypeToString(chain));
  69  }
  70