From fbeb5fb4835b9c58baec3e6331b0dd5bbdca67f1 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 30 Jun 2011 02:09:47 +0200 Subject: [PATCH] Add the walletlock RPC method to lock the wallet manually. --- src/rpc.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/rpc.cpp b/src/rpc.cpp index 5965fef4..fbed626a 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -1488,6 +1488,29 @@ Value walletpassphrasechange(const Array& params, bool fHelp) } +Value walletlock(const Array& params, bool fHelp) +{ + if (pwalletMain->IsCrypted() && (fHelp || params.size() != 0)) + throw runtime_error( + "walletlock\n" + "Removes the wallet encryption key from memory, locking the wallet.\n" + "After calling this method, you will need to call walletpassphrase again\n" + "before being able to call any methods which require the wallet to be unlocked."); + if (fHelp) + return true; + if (!pwalletMain->IsCrypted()) + throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletlock was called."); + + pwalletMain->Lock(); + CRITICAL_BLOCK(cs_nWalletUnlockTime) + { + nWalletUnlockTime = 0; + } + + return Value::null; +} + + Value encryptwallet(const Array& params, bool fHelp) { if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) @@ -1704,6 +1727,7 @@ pair pCallTable[] = make_pair("keypoolrefill", &keypoolrefill), make_pair("walletpassphrase", &walletpassphrase), make_pair("walletpassphrasechange", &walletpassphrasechange), + make_pair("walletlock", &walletlock), make_pair("encryptwallet", &encryptwallet), make_pair("validateaddress", &validateaddress), make_pair("getbalance", &getbalance), @@ -1740,6 +1764,7 @@ string pAllowInSafeMode[] = "backupwallet", "keypoolrefill", "walletpassphrase", + "walletlock", "validateaddress", "getwork", };