22#include <system_error> 
   34        std::error_code error;
 
   38        fs::path canonical_wallet_dir = fs::canonical(wallet_dir, error);
 
   39        if (error || !
fs::exists(canonical_wallet_dir)) {
 
   42        } 
else if (!fs::is_directory(canonical_wallet_dir)) {
 
   46        } 
else if (!wallet_dir.is_absolute()) {
 
   79    std::set<fs::path> wallet_paths;
 
   83            chain.
initError(
_(
"Invalid value detected for '-wallet' or '-nowallet'. " 
   84                              "'-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets"));
 
   87        const auto& wallet_file = 
wallet.get_str();
 
   90        if (!wallet_paths.insert(path).second) {
 
  122        std::set<fs::path> wallet_paths;
 
  125                chain.
initError(
_(
"Invalid value detected for '-wallet' or '-nowallet'. " 
  126                                  "'-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets"));
 
  139            std::vector<bilingual_str> warnings;
 
  161    } 
catch (
const std::runtime_error& e) {
 
  169    for (
const std::shared_ptr<CWallet>& pwallet : 
GetWallets(context)) {
 
  170        pwallet->postInitProcess();
 
  179    while (!wallets.empty()) {
 
  180        auto wallet = wallets.back();
 
  182        std::vector<bilingual_str> warnings;
 
#define Assert(val)
Identity function.
 
void ForceSetArg(const std::string &strArg, const std::string &strValue)
 
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
 
fs::path GetPathArg(std::string arg, const fs::path &default_value={}) const
Return path argument or default value.
 
void scheduleEvery(Function f, std::chrono::milliseconds delta) EXCLUSIVE_LOCKS_REQUIRED(!newTaskMutex)
Repeat f until the scheduler is stopped.
 
void push_back(UniValue val)
 
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
 
virtual bool overwriteRwSetting(const std::string &name, common::SettingsValue value, SettingsAction action=SettingsAction::WRITE)=0
Replace a setting in <datadir>/settings.json with a new value.
 
virtual void initMessage(const std::string &message)=0
Send init message.
 
virtual std::vector< common::SettingsValue > getSettingsList(const std::string &arg)=0
Get list of settings values.
 
virtual void initError(const bilingual_str &message)=0
Send init error.
 
virtual void initWarning(const bilingual_str &message)=0
Send init warning.
 
static std::shared_ptr< 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)
 
static bool exists(const path &p)
 
static std::string PathToString(const path &path)
Convert path object to a byte string.
 
static path PathFromString(const std::string &string)
Convert byte string to path object.
 
fs::path AbsPathJoin(const fs::path &base, const fs::path &path)
Helper function for joining two paths.
 
auto Join(const C &container, const S &separator, UnaryOp unary_op)
Join all container items.
 
void StartWallets(WalletContext &context)
Complete startup of wallets.
 
void ReadDatabaseArgs(const ArgsManager &args, DatabaseOptions &options)
 
void MaybeResendWalletTxs(WalletContext &context)
Called periodically by the schedule thread.
 
std::vector< std::shared_ptr< CWallet > > GetWallets(WalletContext &context)
 
bool VerifyWallets(WalletContext &context)
Responsible for reading and validating the -wallet arguments and verifying the wallet database.
 
fs::path GetWalletDir()
Get the path of the wallet directory.
 
std::unique_ptr< WalletDatabase > MakeWalletDatabase(const std::string &name, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error_string)
 
void NotifyWalletLoaded(WalletContext &context, const std::shared_ptr< CWallet > &wallet)
 
bool AddWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet)
 
void UnloadWallets(WalletContext &context)
 
bool LoadWallets(WalletContext &context)
Load wallet databases.
 
void WaitForDeleteWallet(std::shared_ptr< CWallet > &&wallet)
Explicitly delete the wallet.
 
bool RemoveWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
 
bool verify
Check data integrity on load.
 
WalletContext struct containing references to state shared between CWallet instances,...
 
interfaces::Chain * chain
 
consteval auto _(util::TranslatedLiteral str)
 
bilingual_str Untranslated(std::string original)
Mark a bilingual_str as untranslated.