diff options
| author | Russell Yanofsky <[email protected]> | 2017-12-05 15:57:12 -0500 |
|---|---|---|
| committer | Russell Yanofsky <[email protected]> | 2020-02-25 05:50:39 -0500 |
| commit | 1dde238f2c21a0cc9bada10a2449cf9c6b2178ad (patch) | |
| tree | 26269cc1ac164d0ef0ebc442b334ad58fe7a2119 /src | |
| parent | Merge #17264: rpc: set default bip32derivs to true for psbt methods (diff) | |
| download | discoin-1dde238f2c21a0cc9bada10a2449cf9c6b2178ad.tar.xz discoin-1dde238f2c21a0cc9bada10a2449cf9c6b2178ad.zip | |
Add ChainClient setMockTime, getWallets methods
Needed to set mock times, and get wallet interface pointers correctly when
wallet code is running in a different process from node code.
Diffstat (limited to 'src')
| -rw-r--r-- | src/interfaces/chain.h | 6 | ||||
| -rw-r--r-- | src/interfaces/node.cpp | 5 | ||||
| -rw-r--r-- | src/interfaces/wallet.cpp | 9 | ||||
| -rw-r--r-- | src/rpc/misc.cpp | 9 |
4 files changed, 26 insertions, 3 deletions
diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h index 7304f8274..846966705 100644 --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -280,6 +280,12 @@ public: //! 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<std::unique_ptr<Wallet>> getWallets() = 0; }; //! Return implementation of Chain interface. diff --git a/src/interfaces/node.cpp b/src/interfaces/node.cpp index 8a64a9d26..c3cfc7131 100644 --- a/src/interfaces/node.cpp +++ b/src/interfaces/node.cpp @@ -251,8 +251,9 @@ public: std::vector<std::unique_ptr<Wallet>> getWallets() override { std::vector<std::unique_ptr<Wallet>> wallets; - for (const std::shared_ptr<CWallet>& 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 index baea71d0b..bec203b63 100644 --- a/src/interfaces/wallet.cpp +++ b/src/interfaces/wallet.cpp @@ -529,6 +529,15 @@ public: void start(CScheduler& scheduler) override { return StartWallets(scheduler); } void flush() override { return FlushWallets(); } void stop() override { return StopWallets(); } + void setMockTime(int64_t time) override { return SetMockTime(time); } + std::vector<std::unique_ptr<Wallet>> getWallets() override + { + std::vector<std::unique_ptr<Wallet>> 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 index 4279756f4..778bd05da 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -4,6 +4,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include <httpserver.h> +#include <interfaces/chain.h> #include <key_io.h> #include <node/context.h> #include <outputtype.h> @@ -356,7 +357,13 @@ static UniValue setmocktime(const JSONRPCRequest& request) LOCK(cs_main); RPCTypeCheck(request.params, {UniValue::VNUM}); - SetMockTime(request.params[0].get_int64()); + int64_t time = request.params[0].get_int64(); + SetMockTime(time); + if (g_rpc_node) { + for (const auto& chain_client : g_rpc_node->chain_clients) { + chain_client->setMockTime(time); + } + } return NullUniValue; } |