41
41
#endif
42
42
#include < wallet/coincontrol.h>
43
43
#include < wallet/coinselection.h>
44
+ #include < wallet/context.h>
44
45
#include < wallet/fees.h>
45
46
#include < warnings.h>
46
47
@@ -230,7 +231,7 @@ void UnloadWallet(std::shared_ptr<CWallet>&& wallet)
230
231
}
231
232
232
233
namespace {
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)
234
235
{
235
236
try {
236
237
std::unique_ptr<WalletDatabase> database = MakeWalletDatabase (name, options, status, error);
@@ -239,8 +240,8 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
239
240
return nullptr ;
240
241
}
241
242
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);
244
245
if (!wallet) {
245
246
error = Untranslated (" Wallet loading failed." ) + Untranslated (" " ) + error;
246
247
status = DatabaseStatus::FAILED_LOAD;
@@ -250,7 +251,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
250
251
wallet->postInitProcess ();
251
252
252
253
// Write the wallet setting
253
- UpdateWalletSetting (chain, name, load_on_start, warnings);
254
+ UpdateWalletSetting (*context. chain , name, load_on_start, warnings);
254
255
255
256
return wallet;
256
257
} catch (const std::runtime_error& e) {
@@ -261,20 +262,20 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, interfaces
261
262
}
262
263
} // namespace
263
264
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)
265
266
{
266
267
auto result = WITH_LOCK (g_loading_wallet_mutex, return g_loading_wallet_set.insert (name));
267
268
if (!result.second ) {
268
269
error = Untranslated (" Wallet already loading." );
269
270
status = DatabaseStatus::FAILED_LOAD;
270
271
return nullptr ;
271
272
}
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);
273
274
WITH_LOCK (g_loading_wallet_mutex, g_loading_wallet_set.erase (result.first ));
274
275
return wallet;
275
276
}
276
277
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)
278
279
{
279
280
uint64_t wallet_creation_flags = options.create_flags ;
280
281
const SecureString& passphrase = options.create_passphrase ;
@@ -305,8 +306,8 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, interfaces::Coin
305
306
}
306
307
307
308
// 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);
310
311
if (!wallet) {
311
312
error = Untranslated (" Wallet creation failed." ) + Untranslated (" " ) + error;
312
313
status = DatabaseStatus::FAILED_CREATE;
@@ -362,13 +363,13 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, interfaces::Coin
362
363
wallet->postInitProcess ();
363
364
364
365
// Write the wallet settings
365
- UpdateWalletSetting (chain, name, load_on_start, warnings);
366
+ UpdateWalletSetting (*context. chain , name, load_on_start, warnings);
366
367
367
368
status = DatabaseStatus::SUCCESS;
368
369
return wallet;
369
370
}
370
371
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)
372
373
{
373
374
DatabaseOptions options;
374
375
options.require_existing = true ;
@@ -390,7 +391,7 @@ std::shared_ptr<CWallet> RestoreWallet(interfaces::Chain& chain, interfaces::Coi
390
391
auto wallet_file = wallet_path / " wallet.dat" ;
391
392
fs::copy_file (backup_file, wallet_file, fs::copy_options::none);
392
393
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);
394
395
395
396
if (!wallet) {
396
397
fs::remove (wallet_file);
@@ -3253,8 +3254,10 @@ std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, cons
3253
3254
return MakeDatabase (wallet_path, options, status, error_string);
3254
3255
}
3255
3256
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)
3257
3258
{
3259
+ interfaces::Chain* chain = context.chain ;
3260
+ interfaces::CoinJoin::Loader* coinjoin_loader = context.coinjoin_loader ;
3258
3261
const std::string& walletFile = database->Filename ();
3259
3262
3260
3263
const auto start{SteadyClock::now ()};
0 commit comments