@@ -135,7 +135,6 @@ class CMainParams : public CChainParams {
135135 };
136136 }
137137};
138- static CMainParams mainParams;
139138
140139/* *
141140 * Testnet (v3)
@@ -196,7 +195,6 @@ class CTestNetParams : public CMainParams {
196195
197196 }
198197};
199- static CTestNetParams testNetParams;
200198
201199/* *
202200 * Regression test
@@ -242,33 +240,54 @@ class CRegTestParams : public CTestNetParams {
242240 };
243241 }
244242};
245- static CRegTestParams regTestParams;
246243
247244static CChainParams *pCurrentParams = 0 ;
245+ static CChainParams* pSwitchingParams = 0 ;
248246
249247const CChainParams &Params () {
250248 assert (pCurrentParams);
251249 return *pCurrentParams;
252250}
253251
254- CChainParams& Params (std::string chain)
252+ CChainParams* ParamsFactory (std::string chain)
255253{
256254 if (chain == " main" )
257- return mainParams ;
255+ return new CMainParams () ;
258256 if (chain == " testnet" )
259- return testNetParams ;
257+ return new CTestNetParams () ;
260258 if (chain == " regtest" )
261- return regTestParams ;
259+ return new CRegTestParams () ;
262260 throw std::runtime_error (" Unknown chain " + chain + " \n " );
263261}
264262
263+ const CChainParams& Params (std::string chain)
264+ {
265+ if (pSwitchingParams)
266+ delete (pSwitchingParams);
267+ pSwitchingParams = ParamsFactory (chain);
268+ return *pSwitchingParams;
269+ }
270+
265271void SelectParams (std::string chain)
266272{
267273 SelectBaseParams (chain);
268- pCurrentParams = &Params (chain);
274+ if (pCurrentParams)
275+ delete (pCurrentParams);
276+ pCurrentParams = ParamsFactory (chain);
269277}
270278
271279void SelectParamsFromCommandLine ()
272280{
273281 SelectParams (ChainNameFromCommandLine ());
274282}
283+
284+ void ClearSelectedParams ()
285+ {
286+ if (pCurrentParams)
287+ delete (pCurrentParams);
288+ pCurrentParams = NULL ;
289+ if (pSwitchingParams)
290+ delete (pSwitchingParams);
291+ pSwitchingParams = NULL ;
292+ ClearSelectedBaseParams ();
293+ }
0 commit comments