diff --git a/src/bench/coin_selection.cpp b/src/bench/coin_selection.cpp --- a/src/bench/coin_selection.cpp +++ b/src/bench/coin_selection.cpp @@ -35,7 +35,7 @@ SelectParams(CBaseChainParams::REGTEST); NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); const CWallet wallet(Params(), chain.get(), WalletLocation(), WalletDatabase::CreateDummy()); std::vector> wtxs; @@ -108,7 +108,7 @@ SelectParams(CBaseChainParams::REGTEST); NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); const CWallet wallet(Params(), chain.get(), WalletLocation(), WalletDatabase::CreateDummy()); diff --git a/src/bench/wallet_balance.cpp b/src/bench/wallet_balance.cpp --- a/src/bench/wallet_balance.cpp +++ b/src/bench/wallet_balance.cpp @@ -18,7 +18,8 @@ const Config &config = GetConfig(); NodeContext node; - std::unique_ptr chain = interfaces::MakeChain(node); + std::unique_ptr chain = + interfaces::MakeChain(node, config.GetChainParams()); CWallet wallet{config.GetChainParams(), chain.get(), WalletLocation(), WalletDatabase::CreateMock()}; { diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -68,8 +68,6 @@ HTTPRPCRequestProcessor httpRPCRequestProcessor(config, rpcServer); NodeContext node; - node.chain = interfaces::MakeChain(node); - bool fRet = false; util::ThreadSetInternalName("init"); @@ -118,6 +116,7 @@ // only valid after this clause) try { SelectParams(gArgs.GetChainName()); + node.chain = interfaces::MakeChain(node, config.GetChainParams()); } catch (const std::exception &e) { return InitError(strprintf("%s\n", e.what())); } diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -298,7 +298,7 @@ }; //! Return implementation of Chain interface. -std::unique_ptr MakeChain(NodeContext &node); +std::unique_ptr MakeChain(NodeContext &node, const CChainParams ¶ms); //! Return implementation of ChainClient interface for a wallet client. This //! function will be undefined in builds where ENABLE_WALLET is false. diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp --- a/src/interfaces/chain.cpp +++ b/src/interfaces/chain.cpp @@ -246,7 +246,8 @@ class ChainImpl : public Chain { public: - explicit ChainImpl(NodeContext &node) : m_node(node) {} + explicit ChainImpl(NodeContext &node, const CChainParams ¶ms) + : m_node(node), m_params(params) {} std::unique_ptr lock(bool try_lock) override { auto lock = std::make_unique( ::cs_main, "cs_main", __FILE__, __LINE__, try_lock); @@ -405,12 +406,14 @@ } } NodeContext &m_node; + const CChainParams &m_params; }; } // namespace -std::unique_ptr MakeChain(NodeContext &node) { - return std::make_unique(node); +std::unique_ptr MakeChain(NodeContext &node, + const CChainParams ¶ms) { + return std::make_unique(node, params); } } // namespace interfaces diff --git a/src/interfaces/node.cpp b/src/interfaces/node.cpp --- a/src/interfaces/node.cpp +++ b/src/interfaces/node.cpp @@ -93,7 +93,7 @@ bool appInitMain(Config &config, RPCServer &rpcServer, HTTPRPCRequestProcessor &httpRPCRequestProcessor) override { - m_context.chain = MakeChain(m_context); + m_context.chain = MakeChain(m_context, config.GetChainParams()); return AppInitMain(config, rpcServer, httpRPCRequestProcessor, m_context); } diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -138,7 +138,7 @@ std::string privkey2 = "\"Kyhdf5LuKTRx4ge69ybABsiUAWjVRK4XGxAKk2FQLp2HjGMy87Z4\""; NodeContext node; - node.chain = interfaces::MakeChain(node); + node.chain = interfaces::MakeChain(node, GetConfig().GetChainParams()); g_rpc_node = &node; r = CallRPC(std::string("signrawtransactionwithkey ") + notsigned + " [] " + prevout); @@ -178,7 +178,7 @@ errorWasMissingAmount = false; NodeContext node; - node.chain = interfaces::MakeChain(node); + node.chain = interfaces::MakeChain(node, GetConfig().GetChainParams()); g_rpc_node = &node; try { diff --git a/src/wallet/test/coinselector_tests.cpp b/src/wallet/test/coinselector_tests.cpp --- a/src/wallet/test/coinselector_tests.cpp +++ b/src/wallet/test/coinselector_tests.cpp @@ -36,7 +36,6 @@ static std::vector vCoins; static NodeContext testNode; -static auto testChain = interfaces::MakeChain(testNode); static Amount balance = Amount::zero(); CoinEligibilityFilter filter_standard(1, 6, 0); @@ -304,6 +303,7 @@ } BOOST_AUTO_TEST_CASE(knapsack_solver_test) { + auto testChain = interfaces::MakeChain(testNode, Params()); CWallet testWallet(Params(), testChain.get(), WalletLocation(), WalletDatabase::CreateDummy()); @@ -732,6 +732,7 @@ // Tests that with the ideal conditions, the coin selector will always be able // to find a solution that can pay the target value BOOST_AUTO_TEST_CASE(SelectCoins_test) { + auto testChain = interfaces::MakeChain(testNode, Params()); CWallet testWallet(Params(), testChain.get(), WalletLocation(), WalletDatabase::CreateDummy()); diff --git a/src/wallet/test/init_test_fixture.h b/src/wallet/test/init_test_fixture.h --- a/src/wallet/test/init_test_fixture.h +++ b/src/wallet/test/init_test_fixture.h @@ -20,7 +20,7 @@ fs::path m_cwd; std::map m_walletdir_path_cases; NodeContext m_node; - std::unique_ptr m_chain = interfaces::MakeChain(m_node); + std::unique_ptr m_chain; std::unique_ptr m_chain_client; }; diff --git a/src/wallet/test/init_test_fixture.cpp b/src/wallet/test/init_test_fixture.cpp --- a/src/wallet/test/init_test_fixture.cpp +++ b/src/wallet/test/init_test_fixture.cpp @@ -4,12 +4,14 @@ #include +#include #include #include InitWalletDirTestingSetup::InitWalletDirTestingSetup( const std::string &chainName) : BasicTestingSetup(chainName) { + m_chain = interfaces::MakeChain(m_node, Params()); m_chain_client = MakeWalletClient(*m_chain, {}); std::string sep; diff --git a/src/wallet/test/ismine_tests.cpp b/src/wallet/test/ismine_tests.cpp --- a/src/wallet/test/ismine_tests.cpp +++ b/src/wallet/test/ismine_tests.cpp @@ -29,7 +29,8 @@ uncompressedKey.MakeNewKey(false); CPubKey uncompressedPubkey = uncompressedKey.GetPubKey(); NodeContext node; - std::unique_ptr chain = interfaces::MakeChain(node); + std::unique_ptr chain = + interfaces::MakeChain(node, Params()); CScript scriptPubKey; isminetype result; diff --git a/src/wallet/test/wallet_test_fixture.h b/src/wallet/test/wallet_test_fixture.h --- a/src/wallet/test/wallet_test_fixture.h +++ b/src/wallet/test/wallet_test_fixture.h @@ -22,7 +22,7 @@ const std::string &chainName = CBaseChainParams::MAIN); NodeContext m_node; - std::unique_ptr m_chain = interfaces::MakeChain(m_node); + std::unique_ptr m_chain; std::unique_ptr m_chain_client = interfaces::MakeWalletClient(*m_chain, {}); CWallet m_wallet; diff --git a/src/wallet/test/wallet_test_fixture.cpp b/src/wallet/test/wallet_test_fixture.cpp --- a/src/wallet/test/wallet_test_fixture.cpp +++ b/src/wallet/test/wallet_test_fixture.cpp @@ -9,7 +9,7 @@ #include WalletTestingSetup::WalletTestingSetup(const std::string &chainName) - : TestingSetup(chainName), + : TestingSetup(chainName), m_chain(interfaces::MakeChain(m_node, Params())), m_wallet(Params(), m_chain.get(), WalletLocation(), WalletDatabase::CreateMock()) { bool fFirstRun; diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -41,7 +41,7 @@ CBlockIndex *newTip = ::ChainActive().Tip(); NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); auto locked_chain = chain->lock(); LockAssertion lock(::cs_main); @@ -128,7 +128,7 @@ CBlockIndex *newTip = ::ChainActive().Tip(); NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); auto locked_chain = chain->lock(); LockAssertion lock(::cs_main); @@ -214,7 +214,7 @@ .vtx[0]); NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); auto locked_chain = chain->lock(); LockAssertion lock(::cs_main); @@ -271,7 +271,7 @@ // debit functions. BOOST_FIXTURE_TEST_CASE(coin_mark_dirty_immature_credit, TestChain100Setup) { NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); CWallet wallet(Params(), chain.get(), WalletLocation(), WalletDatabase::CreateDummy()); CWalletTx wtx(&wallet, m_coinbase_txns.back()); @@ -421,7 +421,8 @@ } NodeContext m_node; - std::unique_ptr m_chain = interfaces::MakeChain(m_node); + std::unique_ptr m_chain = + interfaces::MakeChain(m_node, Params()); std::unique_ptr wallet; }; @@ -496,7 +497,7 @@ BOOST_FIXTURE_TEST_CASE(wallet_disableprivkeys, TestChain100Setup) { NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); std::shared_ptr wallet = std::make_shared( Params(), chain.get(), WalletLocation(), WalletDatabase::CreateDummy()); wallet->SetMinVersion(FEATURE_LATEST); diff --git a/src/wallet/test/walletdb_tests.cpp b/src/wallet/test/walletdb_tests.cpp --- a/src/wallet/test/walletdb_tests.cpp +++ b/src/wallet/test/walletdb_tests.cpp @@ -19,7 +19,7 @@ namespace { static std::unique_ptr LoadWallet(WalletBatch &batch) { NodeContext node; - auto chain = interfaces::MakeChain(node); + auto chain = interfaces::MakeChain(node, Params()); std::unique_ptr wallet = std::make_unique( Params(), chain.get(), WalletLocation(), WalletDatabase::CreateDummy()); DBErrors res = batch.LoadWallet(wallet.get());