diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -297,6 +297,12 @@ //! Shut down client. virtual void stop() = 0; + + //! Set mock time. + virtual void setMockTime(int64_t time) = 0; + + //! Return interfaces for accessing wallets (if any). + virtual std::vector> getWallets() = 0; }; //! Return implementation of Chain interface. diff --git a/src/interfaces/node.cpp b/src/interfaces/node.cpp --- a/src/interfaces/node.cpp +++ b/src/interfaces/node.cpp @@ -267,8 +267,10 @@ } std::vector> getWallets() override { std::vector> wallets; - for (const std::shared_ptr &wallet : GetWallets()) { - wallets.emplace_back(MakeWallet(wallet)); + for (auto &client : m_context.chain_clients) { + auto client_wallets = client->getWallets(); + std::move(client_wallets.begin(), client_wallets.end(), + std::back_inserter(wallets)); } return wallets; } diff --git a/src/interfaces/wallet.cpp b/src/interfaces/wallet.cpp --- a/src/interfaces/wallet.cpp +++ b/src/interfaces/wallet.cpp @@ -495,6 +495,14 @@ } void flush() override { return FlushWallets(); } void stop() override { return StopWallets(); } + void setMockTime(int64_t time) override { return SetMockTime(time); } + std::vector> getWallets() override { + std::vector> wallets; + for (const auto &wallet : GetWallets()) { + wallets.emplace_back(MakeWallet(wallet)); + } + return wallets; + } ~WalletClientImpl() override { UnloadWallets(); } Chain &m_chain; diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -448,12 +449,17 @@ LOCK(cs_main); RPCTypeCheck(request.params, {UniValue::VNUM}); - int64_t mockTime = request.params[0].get_int64(); - if (mockTime < 0) { + int64_t time = request.params[0].get_int64(); + if (time < 0) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Timestamp must be 0 or greater"); } - SetMockTime(mockTime); + SetMockTime(time); + if (g_rpc_node) { + for (const auto &chain_client : g_rpc_node->chain_clients) { + chain_client->setMockTime(time); + } + } return NullUniValue; }