Skip to content

Commit 99d6a5b

Browse files
author
MarcoFalke
committed
Merge #17999: refactor: Add ChainClient setMockTime, getWallets methods
3ce16ad refactor: Use psbt forward declaration (Russell Yanofsky) 1dde238 Add ChainClient setMockTime, getWallets methods (Russell Yanofsky) Pull request description: This PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/projects/10). These changes are needed to set mock times, and get wallet interface pointers correctly when wallet code is running in a different process from node code in #10102 ACKs for top commit: MarcoFalke: re-ACK 3ce16ad 🔙 promag: Code review ACK 3ce16ad. Tree-SHA512: 6c093bfcd68adf5858a1aade4361cdb7fb015496673504ac7a93d0bd2595215047184551d6fd526baa27782331cd2819ce45c4cf923b205ce93ac29e485b5dd8
2 parents 1b30761 + 3ce16ad commit 99d6a5b

File tree

6 files changed

+31
-7
lines changed

6 files changed

+31
-7
lines changed

src/interfaces/chain.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,12 @@ class ChainClient
283283

284284
//! Shut down client.
285285
virtual void stop() = 0;
286+
287+
//! Set mock time.
288+
virtual void setMockTime(int64_t time) = 0;
289+
290+
//! Return interfaces for accessing wallets (if any).
291+
virtual std::vector<std::unique_ptr<Wallet>> getWallets() = 0;
286292
};
287293

288294
//! Return implementation of Chain interface.

src/interfaces/node.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,9 @@ class NodeImpl : public Node
253253
std::vector<std::unique_ptr<Wallet>> getWallets() override
254254
{
255255
std::vector<std::unique_ptr<Wallet>> wallets;
256-
for (const std::shared_ptr<CWallet>& wallet : GetWallets()) {
257-
wallets.emplace_back(MakeWallet(wallet));
256+
for (auto& client : m_context.chain_clients) {
257+
auto client_wallets = client->getWallets();
258+
std::move(client_wallets.begin(), client_wallets.end(), std::back_inserter(wallets));
258259
}
259260
return wallets;
260261
}

src/interfaces/wallet.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,15 @@ class WalletClientImpl : public ChainClient
519519
void start(CScheduler& scheduler) override { return StartWallets(scheduler); }
520520
void flush() override { return FlushWallets(); }
521521
void stop() override { return StopWallets(); }
522+
void setMockTime(int64_t time) override { return SetMockTime(time); }
523+
std::vector<std::unique_ptr<Wallet>> getWallets() override
524+
{
525+
std::vector<std::unique_ptr<Wallet>> wallets;
526+
for (const auto& wallet : GetWallets()) {
527+
wallets.emplace_back(MakeWallet(wallet));
528+
}
529+
return wallets;
530+
}
522531
~WalletClientImpl() override { UnloadWallets(); }
523532

524533
Chain& m_chain;

src/interfaces/wallet.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include <functional>
1616
#include <map>
1717
#include <memory>
18-
#include <psbt.h>
1918
#include <stdint.h>
2019
#include <string>
2120
#include <tuple>
@@ -26,12 +25,13 @@ class CCoinControl;
2625
class CFeeRate;
2726
class CKey;
2827
class CWallet;
29-
enum isminetype : unsigned int;
3028
enum class FeeReason;
31-
typedef uint8_t isminefilter;
32-
3329
enum class OutputType;
30+
enum class TransactionError;
31+
enum isminetype : unsigned int;
3432
struct CRecipient;
33+
struct PartiallySignedTransaction;
34+
typedef uint8_t isminefilter;
3535

3636
namespace interfaces {
3737

src/qt/walletmodel.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <interfaces/handler.h>
2121
#include <interfaces/node.h>
2222
#include <key_io.h>
23+
#include <psbt.h>
2324
#include <ui_interface.h>
2425
#include <util/system.h> // for GetBoolArg
2526
#include <wallet/coincontrol.h>

src/rpc/misc.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
55

66
#include <httpserver.h>
7+
#include <interfaces/chain.h>
78
#include <key_io.h>
89
#include <node/context.h>
910
#include <outputtype.h>
@@ -363,7 +364,13 @@ static UniValue setmocktime(const JSONRPCRequest& request)
363364
LOCK(cs_main);
364365

365366
RPCTypeCheck(request.params, {UniValue::VNUM});
366-
SetMockTime(request.params[0].get_int64());
367+
int64_t time = request.params[0].get_int64();
368+
SetMockTime(time);
369+
if (g_rpc_node) {
370+
for (const auto& chain_client : g_rpc_node->chain_clients) {
371+
chain_client->setMockTime(time);
372+
}
373+
}
367374

368375
return NullUniValue;
369376
}

0 commit comments

Comments
 (0)