4141#endif
4242#include < wallet/coincontrol.h>
4343#include < wallet/coinselection.h>
44+ #include < wallet/context.h>
4445#include < wallet/fees.h>
4546#include < warnings.h>
4647
@@ -230,7 +231,7 @@ void UnloadWallet(std::shared_ptr<CWallet>&& wallet)
230231}
231232
232233namespace {
233- std::shared_ptr<CWallet> LoadWalletInternal (interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader , const std::string& name, std::optional<bool > load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
234+ std::shared_ptr<CWallet> LoadWalletInternal (WalletContext& context , const std::string& name, std::optional<bool > load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
234235{
235236 try {
236237 std::unique_ptr<WalletDatabase> database = MakeWalletDatabase (name, options, status, error);
@@ -239,8 +240,8 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
239240 return nullptr ;
240241 }
241242
242- chain. initMessage (_ (" Loading wallet…" ).translated );
243- const std::shared_ptr<CWallet> wallet = CWallet::Create (&chain, &coinjoin_loader , name, std::move (database), options.create_flags , error, warnings);
243+ context. chain -> initMessage (_ (" Loading wallet…" ).translated );
244+ const std::shared_ptr<CWallet> wallet = CWallet::Create (context , name, std::move (database), options.create_flags , error, warnings);
244245 if (!wallet) {
245246 error = Untranslated (" Wallet loading failed." ) + Untranslated (" " ) + error;
246247 status = DatabaseStatus::FAILED_LOAD;
@@ -250,7 +251,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
250251 wallet->postInitProcess ();
251252
252253 // Write the wallet setting
253- UpdateWalletSetting (chain, name, load_on_start, warnings);
254+ UpdateWalletSetting (*context. chain , name, load_on_start, warnings);
254255
255256 return wallet;
256257 } catch (const std::runtime_error& e) {
@@ -261,20 +262,20 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
261262}
262263} // namespace
263264
264- std::shared_ptr<CWallet> LoadWallet (interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader , const std::string& name, std::optional<bool > load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
265+ std::shared_ptr<CWallet> LoadWallet (WalletContext& context , const std::string& name, std::optional<bool > load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
265266{
266267 auto result = WITH_LOCK (g_loading_wallet_mutex, return g_loading_wallet_set.insert (name));
267268 if (!result.second ) {
268269 error = Untranslated (" Wallet already loading." );
269270 status = DatabaseStatus::FAILED_LOAD;
270271 return nullptr ;
271272 }
272- auto wallet = LoadWalletInternal (chain, coinjoin_loader , name, load_on_start, options, status, error, warnings);
273+ auto wallet = LoadWalletInternal (context , name, load_on_start, options, status, error, warnings);
273274 WITH_LOCK (g_loading_wallet_mutex, g_loading_wallet_set.erase (result.first ));
274275 return wallet;
275276}
276277
277- std::shared_ptr<CWallet> CreateWallet (interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader , const std::string& name, std::optional<bool > load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
278+ std::shared_ptr<CWallet> CreateWallet (WalletContext& context , const std::string& name, std::optional<bool > load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
278279{
279280 uint64_t wallet_creation_flags = options.create_flags ;
280281 const SecureString& passphrase = options.create_passphrase ;
@@ -305,8 +306,8 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, interfaces::Coin
305306 }
306307
307308 // Make the wallet
308- chain. initMessage (_ (" Loading wallet…" ).translated );
309- const std::shared_ptr<CWallet> wallet = CWallet::Create (&chain, &coinjoin_loader , name, std::move (database), wallet_creation_flags, error, warnings);
309+ context. chain -> initMessage (_ (" Loading wallet…" ).translated );
310+ const std::shared_ptr<CWallet> wallet = CWallet::Create (context , name, std::move (database), wallet_creation_flags, error, warnings);
310311 if (!wallet) {
311312 error = Untranslated (" Wallet creation failed." ) + Untranslated (" " ) + error;
312313 status = DatabaseStatus::FAILED_CREATE;
@@ -362,13 +363,13 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, interfaces::Coin
362363 wallet->postInitProcess ();
363364
364365 // Write the wallet settings
365- UpdateWalletSetting (chain, name, load_on_start, warnings);
366+ UpdateWalletSetting (*context. chain , name, load_on_start, warnings);
366367
367368 status = DatabaseStatus::SUCCESS;
368369 return wallet;
369370}
370371
371- std::shared_ptr<CWallet> RestoreWallet (interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader , const fs::path& backup_file, const std::string& wallet_name, std::optional<bool > load_on_start, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
372+ std::shared_ptr<CWallet> RestoreWallet (WalletContext& context , const fs::path& backup_file, const std::string& wallet_name, std::optional<bool > load_on_start, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
372373{
373374 DatabaseOptions options;
374375 options.require_existing = true ;
@@ -390,7 +391,7 @@ std::shared_ptr<CWallet> RestoreWallet(interfaces::Chain& chain, interfaces::Coi
390391 auto wallet_file = wallet_path / " wallet.dat" ;
391392 fs::copy_file (backup_file, wallet_file, fs::copy_options::none);
392393
393- auto wallet = LoadWallet (chain, coinjoin_loader , wallet_name, load_on_start, options, status, error, warnings);
394+ auto wallet = LoadWallet (context , wallet_name, load_on_start, options, status, error, warnings);
394395
395396 if (!wallet) {
396397 fs::remove (wallet_file);
@@ -3253,8 +3254,10 @@ std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, cons
32533254 return MakeDatabase (wallet_path, options, status, error_string);
32543255}
32553256
3256- std::shared_ptr<CWallet> CWallet::Create (interfaces::Chain* chain, interfaces::CoinJoin::Loader* coinjoin_loader , const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings)
3257+ std::shared_ptr<CWallet> CWallet::Create (WalletContext& context , const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings)
32573258{
3259+ interfaces::Chain* chain = context.chain ;
3260+ interfaces::CoinJoin::Loader* coinjoin_loader = context.coinjoin_loader ;
32583261 const std::string& walletFile = database->Filename ();
32593262
32603263 const auto start{SteadyClock::now ()};
0 commit comments