text: // Copyright (c) 2010 Satoshi Nakamoto
  // Copyright (c) 2009-2014 The Bitcoin developers
  // Copyright (c) 2016-2020 The PIVX developers
  // Copyright (c) 2021 The DECENOMY Core Developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #include "chainparamsbase.h"
  
  #include "util.h"
  
  #include <assert.h>
  
  #include <boost/assign/list_of.hpp>
  
  /**
   * Main network
   */
  class CBaseMainParams : public CBaseChainParams
  {
  public:
      CBaseMainParams() 
      {
          networkID = CBaseChainParams::MAIN;
          nRPCPort = 13334;
      }
  };
  static CBaseMainParams mainParams;
  
  /**
   * Testnet (v1)
   */
  class CBaseTestNetParams : public CBaseMainParams
  {
  public:
      CBaseTestNetParams()
      {
          networkID = CBaseChainParams::TESTNET;
          nRPCPort = 14334;
          strDataDir = "testnet1";
      }
  };
  static CBaseTestNetParams testNetParams;
  
  /*
   * Regression test
   */
  class CBaseRegTestParams : public CBaseTestNetParams
  {
  public:
      CBaseRegTestParams()
      {
          networkID = CBaseChainParams::REGTEST;
          strDataDir = "regtest";
      }
  };
  static CBaseRegTestParams regTestParams;
  
  static CBaseChainParams* pCurrentBaseParams = 0;
  
  const CBaseChainParams& BaseParams()
  {
      assert(pCurrentBaseParams);
      return *pCurrentBaseParams;
  }
  
  CBaseChainParams& BaseParams(CBaseChainParams::Network network)
  {
      switch (network) {
      case CBaseChainParams::MAIN:
          return mainParams;
      case CBaseChainParams::TESTNET:
          return testNetParams;
      case CBaseChainParams::REGTEST:
          return regTestParams;
      default:
          assert(false && "Unimplemented network");
          return mainParams;
      }
  }
  
  void SelectBaseParams(CBaseChainParams::Network network)
  {
      pCurrentBaseParams = &BaseParams(network);
  }
  
  CBaseChainParams::Network NetworkIdFromCommandLine()
  {
      bool fRegTest = GetBoolArg("-regtest", false);
      bool fTestNet = GetBoolArg("-testnet", false);
  
      if (fTestNet && fRegTest)
          return CBaseChainParams::MAX_NETWORK_TYPES;
      if (fRegTest)
          return CBaseChainParams::REGTEST;
      if (fTestNet)
          return CBaseChainParams::TESTNET;
      return CBaseChainParams::MAIN;
  }
  
  bool SelectBaseParamsFromCommandLine()
  {
      CBaseChainParams::Network network = NetworkIdFromCommandLine();
      if (network == CBaseChainParams::MAX_NETWORK_TYPES)
          return false;
  
      SelectBaseParams(network);
      return true;
  }
  
  bool AreBaseParamsConfigured()
  {
      return pCurrentBaseParams != NULL;
  }
  