wallet: Factor out LoadWallet
This commit is contained in:
parent
64127b3098
commit
17abc0fd52
4 changed files with 35 additions and 13 deletions
|
@ -8,6 +8,10 @@
|
||||||
|
|
||||||
class CWallet;
|
class CWallet;
|
||||||
|
|
||||||
|
namespace interfaces {
|
||||||
|
class Chain;
|
||||||
|
}
|
||||||
|
|
||||||
class DummyWalletInit : public WalletInitInterface {
|
class DummyWalletInit : public WalletInitInterface {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -43,6 +47,11 @@ std::vector<std::shared_ptr<CWallet>> GetWallets()
|
||||||
throw std::logic_error("Wallet function called in non-wallet build.");
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, std::string& error, std::string& warning)
|
||||||
|
{
|
||||||
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
||||||
|
}
|
||||||
|
|
||||||
namespace interfaces {
|
namespace interfaces {
|
||||||
|
|
||||||
class Wallet;
|
class Wallet;
|
||||||
|
|
|
@ -2544,7 +2544,6 @@ static UniValue loadwallet(const JSONRPCRequest& request)
|
||||||
}.ToString());
|
}.ToString());
|
||||||
|
|
||||||
WalletLocation location(request.params[0].get_str());
|
WalletLocation location(request.params[0].get_str());
|
||||||
std::string error;
|
|
||||||
|
|
||||||
if (!location.Exists()) {
|
if (!location.Exists()) {
|
||||||
throw JSONRPCError(RPC_WALLET_NOT_FOUND, "Wallet " + location.GetName() + " not found.");
|
throw JSONRPCError(RPC_WALLET_NOT_FOUND, "Wallet " + location.GetName() + " not found.");
|
||||||
|
@ -2556,18 +2555,9 @@ static UniValue loadwallet(const JSONRPCRequest& request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string warning;
|
std::string error, warning;
|
||||||
if (!CWallet::Verify(*g_rpc_interfaces->chain, location, false, error, warning)) {
|
std::shared_ptr<CWallet> const wallet = LoadWallet(*g_rpc_interfaces->chain, location, error, warning);
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Wallet file verification failed: " + error);
|
if (!wallet) throw JSONRPCError(RPC_WALLET_ERROR, error);
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<CWallet> const wallet = CWallet::CreateWalletFromFile(*g_rpc_interfaces->chain, location);
|
|
||||||
if (!wallet) {
|
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Wallet loading failed.");
|
|
||||||
}
|
|
||||||
AddWallet(wallet);
|
|
||||||
|
|
||||||
wallet->postInitProcess();
|
|
||||||
|
|
||||||
UniValue obj(UniValue::VOBJ);
|
UniValue obj(UniValue::VOBJ);
|
||||||
obj.pushKV("name", wallet->GetName());
|
obj.pushKV("name", wallet->GetName());
|
||||||
|
|
|
@ -130,6 +130,28 @@ void UnloadWallet(std::shared_ptr<CWallet>&& wallet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const WalletLocation& location, std::string& error, std::string& warning)
|
||||||
|
{
|
||||||
|
if (!CWallet::Verify(chain, location, false, error, warning)) {
|
||||||
|
error = "Wallet file verification failed: " + error;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> wallet = CWallet::CreateWalletFromFile(chain, location);
|
||||||
|
if (!wallet) {
|
||||||
|
error = "Wallet loading failed.";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
AddWallet(wallet);
|
||||||
|
wallet->postInitProcess();
|
||||||
|
return wallet;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, std::string& error, std::string& warning)
|
||||||
|
{
|
||||||
|
return LoadWallet(chain, WalletLocation(name), error, warning);
|
||||||
|
}
|
||||||
|
|
||||||
const uint32_t BIP32_HARDENED_KEY_LIMIT = 0x80000000;
|
const uint32_t BIP32_HARDENED_KEY_LIMIT = 0x80000000;
|
||||||
|
|
||||||
const uint256 CMerkleTx::ABANDON_HASH(uint256S("0000000000000000000000000000000000000000000000000000000000000001"));
|
const uint256 CMerkleTx::ABANDON_HASH(uint256S("0000000000000000000000000000000000000000000000000000000000000001"));
|
||||||
|
|
|
@ -66,6 +66,7 @@ bool RemoveWallet(const std::shared_ptr<CWallet>& wallet);
|
||||||
bool HasWallets();
|
bool HasWallets();
|
||||||
std::vector<std::shared_ptr<CWallet>> GetWallets();
|
std::vector<std::shared_ptr<CWallet>> GetWallets();
|
||||||
std::shared_ptr<CWallet> GetWallet(const std::string& name);
|
std::shared_ptr<CWallet> GetWallet(const std::string& name);
|
||||||
|
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const WalletLocation& location, std::string& error, std::string& warning);
|
||||||
|
|
||||||
//! Default for -keypool
|
//! Default for -keypool
|
||||||
static const unsigned int DEFAULT_KEYPOOL_SIZE = 1000;
|
static const unsigned int DEFAULT_KEYPOOL_SIZE = 1000;
|
||||||
|
|
Loading…
Reference in a new issue