@@ -214,7 +214,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std:
214214 }
215215
216216 chain.initMessage (_ (" Loading wallet..." ).translated );
217- std::shared_ptr<CWallet> wallet = CWallet::Create (chain, name, std::move (database), options.create_flags , error, warnings);
217+ std::shared_ptr<CWallet> wallet = CWallet::Create (& chain, name, std::move (database), options.create_flags , error, warnings);
218218 if (!wallet) {
219219 error = Untranslated (" Wallet loading failed." ) + Untranslated (" " ) + error;
220220 status = DatabaseStatus::FAILED_LOAD;
@@ -294,7 +294,7 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::strin
294294
295295 // Make the wallet
296296 chain.initMessage (_ (" Loading wallet..." ).translated );
297- std::shared_ptr<CWallet> wallet = CWallet::Create (chain, name, std::move (database), wallet_creation_flags, error, warnings);
297+ std::shared_ptr<CWallet> wallet = CWallet::Create (& chain, name, std::move (database), wallet_creation_flags, error, warnings);
298298 if (!wallet) {
299299 error = Untranslated (" Wallet creation failed." ) + Untranslated (" " ) + error;
300300 status = DatabaseStatus::FAILED_CREATE;
@@ -3885,14 +3885,14 @@ std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, cons
38853885 return MakeDatabase (wallet_path, options, status, error_string);
38863886}
38873887
3888- std::shared_ptr<CWallet> CWallet::Create (interfaces::Chain& chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings)
3888+ std::shared_ptr<CWallet> CWallet::Create (interfaces::Chain* chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings)
38893889{
38903890 const std::string& walletFile = database->Filename ();
38913891
38923892 int64_t nStart = GetTimeMillis ();
38933893 // TODO: Can't use std::make_shared because we need a custom deleter but
38943894 // should be possible to use std::allocate_shared.
3895- std::shared_ptr<CWallet> walletInstance (new CWallet (& chain, name, std::move (database)), ReleaseWallet);
3895+ std::shared_ptr<CWallet> walletInstance (new CWallet (chain, name, std::move (database)), ReleaseWallet);
38963896 DBErrors nLoadWalletRet = walletInstance->LoadWallet ();
38973897 if (nLoadWalletRet != DBErrors::LOAD_OK) {
38983898 if (nLoadWalletRet == DBErrors::CORRUPT) {
@@ -3952,7 +3952,9 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
39523952 }
39533953 }
39543954
3955- walletInstance->chainStateFlushed (chain.getTipLocator ());
3955+ if (chain) {
3956+ walletInstance->chainStateFlushed (chain->getTipLocator ());
3957+ }
39563958 } else if (wallet_creation_flags & WALLET_FLAG_DISABLE_PRIVATE_KEYS) {
39573959 // Make it impossible to disable private keys after creation
39583960 error = strprintf (_ (" Error loading %s: Private keys can only be disabled during creation" ), walletFile);
@@ -4049,9 +4051,9 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
40494051 _ (" This is the transaction fee you will pay if you send a transaction." ));
40504052 }
40514053 walletInstance->m_pay_tx_fee = CFeeRate (nFeePerK, 1000 );
4052- if (walletInstance->m_pay_tx_fee < chain. relayMinFee ()) {
4054+ if (chain && walletInstance->m_pay_tx_fee < chain-> relayMinFee ()) {
40534055 error = strprintf (_ (" Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)" ),
4054- gArgs .GetArg (" -paytxfee" , " " ), chain. relayMinFee ().ToString ());
4056+ gArgs .GetArg (" -paytxfee" , " " ), chain-> relayMinFee ().ToString ());
40554057 return nullptr ;
40564058 }
40574059 }
@@ -4065,15 +4067,15 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
40654067 if (nMaxFee > HIGH_MAX_TX_FEE) {
40664068 warnings.push_back (_ (" -maxtxfee is set very high! Fees this large could be paid on a single transaction." ));
40674069 }
4068- if (CFeeRate (nMaxFee, 1000 ) < chain. relayMinFee ()) {
4070+ if (chain && CFeeRate (nMaxFee, 1000 ) < chain-> relayMinFee ()) {
40694071 error = strprintf (_ (" Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)" ),
4070- gArgs .GetArg (" -maxtxfee" , " " ), chain. relayMinFee ().ToString ());
4072+ gArgs .GetArg (" -maxtxfee" , " " ), chain-> relayMinFee ().ToString ());
40714073 return nullptr ;
40724074 }
40734075 walletInstance->m_default_max_tx_fee = nMaxFee;
40744076 }
40754077
4076- if (chain. relayMinFee ().GetFeePerK () > HIGH_TX_FEE_PER_KB) {
4078+ if (chain && chain-> relayMinFee ().GetFeePerK () > HIGH_TX_FEE_PER_KB) {
40774079 warnings.push_back (AmountHighWarn (" -minrelaytxfee" ) + Untranslated (" " ) +
40784080 _ (" The wallet will avoid paying less than the minimum relay fee." ));
40794081 }
@@ -4089,7 +4091,7 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
40894091
40904092 LOCK (walletInstance->cs_wallet );
40914093
4092- if (!AttachChain (walletInstance, chain, error, warnings)) {
4094+ if (chain && !AttachChain (walletInstance, * chain, error, warnings)) {
40934095 return nullptr ;
40944096 }
40954097
0 commit comments