changeset 29688:c344cec39fe2

Remove cpp test for wallet-utility
author Chethan Krishna <chethan@bitpay.com>
date Mon, 18 Jul 2016 18:31:21 -0400
parents 521c8602e897
children af3ad32a39db
files src/Makefile.test.include src/test/test_bitcoin.h src/test/wallet-utility.py src/test/walletutil_tests.cpp src/wallet-utility.cpp
diffstat 5 files changed, 275 insertions(+), 321 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile.test.include	Mon Jul 18 18:03:01 2016 -0400
+++ b/src/Makefile.test.include	Mon Jul 18 18:31:21 2016 -0400
@@ -17,7 +17,9 @@
 	test/data/txcreate2.hex \
 	test/data/txcreatedata1.hex \
 	test/data/txcreatedata2.hex \
-	test/data/txcreatesign.hex
+	test/data/txcreatesign.hex \
+	test/wallet-utility.py \
+	test/data/wallet.dat
 
 JSON_TEST_FILES = \
   test/data/script_valid.json \
@@ -92,8 +94,7 @@
 BITCOIN_TESTS += \
   test/accounting_tests.cpp \
   wallet/test/wallet_tests.cpp \
-  test/rpc_wallet_tests.cpp \
-  test/walletutil_tests.cpp
+  test/rpc_wallet_tests.cpp
 endif
 
 test_test_bitcoin_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)
@@ -131,8 +132,10 @@
 check-local:
 	@echo "Running test/bitcoin-util-test.py..."
 	$(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(srcdir)/test/bitcoin-util-test.py
+if ENABLE_WALLET
 	@echo "Running test/wallet-utility.py..."
 	$(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(srcdir)/test/wallet-utility.py
+endif
 	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
 	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check
 
--- a/src/test/test_bitcoin.h	Mon Jul 18 18:03:01 2016 -0400
+++ b/src/test/test_bitcoin.h	Mon Jul 18 18:31:21 2016 -0400
@@ -33,17 +33,6 @@
     ~TestingSetup();
 };
 
-/** Wallet setup that configures a complete environment.
- * Included are data directory, coins database, script check threads
- * and wallet with 5 unused keys.
- */
-struct WalletSetup: public BasicTestingSetup {
-	boost::filesystem::path pathTemp;
-
-	WalletSetup(const std::string& chainName = CBaseChainParams::MAIN);
-	~WalletSetup();
-};
-
 class CBlock;
 struct CMutableTransaction;
 class CScript;
--- a/src/test/wallet-utility.py	Mon Jul 18 18:03:01 2016 -0400
+++ b/src/test/wallet-utility.py	Mon Jul 18 18:31:21 2016 -0400
@@ -3,10 +3,12 @@
 # Distributed under the MIT software license, see the accompanying
 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
 
-from subprocess import check_output
+import subprocess
+import os
 import json
-
-import os
+import sys
+import buildenv
+import shutil
 
 def assert_equal(thing1, thing2):
     if thing1 != thing2:
@@ -14,13 +16,46 @@
 
 if __name__ == '__main__':
     datadir = os.environ["srcdir"] + "/test/data"
-    command = os.environ["srcdir"] + "/wallet-utility"
+    execprog = './wallet-utility' + buildenv.exeext
+    execargs = '-datadir=' + datadir
+    execrun = execprog + ' ' + execargs
 
-    output = json.loads(check_output([command, "-datadir=" + datadir]))
+    proc = subprocess.Popen(execrun, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, shell=True)
+    try:
+        outs = proc.communicate()
+    except OSError:
+        print("OSError, Failed to execute " + execprog)
+        sys.exit(1)
 
-    assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av");
-    assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8");
-    assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F");
+    output = json.loads(outs[0])
 
+    assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av")
+    assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8")
+    assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F")
 
+    execargs = '-datadir=' + datadir + ' -dumppass'
+    execrun = execprog + ' ' + execargs
 
+    proc = subprocess.Popen(execrun, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, shell=True)
+    try:
+        outs = proc.communicate()
+    except OSError:
+        print("OSError, Failed to execute " + execprog)
+        sys.exit(1)
+
+    output = json.loads(outs[0])
+
+    assert_equal(output[0]['addr'], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av")
+    assert_equal(output[0]['pkey'], "5Jz5BWE2WQxp1hGqDZeisQFV1mRFR2AVBAgiXCbNcZyXNjD9aUd")
+    assert_equal(output[1]['addr'], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8")
+    assert_equal(output[1]['pkey'], "5HsX2b3v2GjngYQ5ZM4mLp2b2apw6aMNVaPELV1YmpiYR1S4jzc")
+    assert_equal(output[2]['addr'], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F")
+    assert_equal(output[2]['pkey'], "5KCWAs1wX2ESiL4PfDR8XYVSSETHFd2jaRGxt1QdanBFTit4XcH")
+
+    if os.path.exists(datadir + '/database'):
+        if os.path.isdir(datadir + '/database'):
+            shutil.rmtree(datadir + '/database')
+
+    if os.path.exists(datadir + '/db.log'):
+        os.remove(datadir + '/db.log')
+    sys.exit(0)
--- a/src/test/walletutil_tests.cpp	Mon Jul 18 18:03:01 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-#include "main.h"
-#include "test/test_bitcoin.h"
-#include <boost/test/unit_test.hpp>
-#include <boost/filesystem/fstream.hpp>
-
-#ifdef ENABLE_WALLET
-#include "wallet/db.h"
-#include "wallet/wallet.h"
-#endif
-
-using namespace std;
-
-BOOST_FIXTURE_TEST_SUITE(walletutil_tests, BasicTestingSetup)
-
-BOOST_AUTO_TEST_CASE(walletutil_test)
-{
-	/*
-	 * addresses and private keys in test/data/wallet.dat
-	 */
-	string expected_addr = "[ \"13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av\", \"1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8\", \"13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F\" ]\n";
-	string expected_addr_pkeys = "[ {\"addr\" : \"13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av\", \"pkey\" : \"5Jz5BWE2WQxp1hGqDZeisQFV1mRFR2AVBAgiXCbNcZyXNjD9aUd\"}, {\"addr\" : \"1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8\", \"pkey\" : \"5HsX2b3v2GjngYQ5ZM4mLp2b2apw6aMNVaPELV1YmpiYR1S4jzc\"}, {\"addr\" : \"13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F\", \"pkey\" : \"5KCWAs1wX2ESiL4PfDR8XYVSSETHFd2jaRGxt1QdanBFTit4XcH\"} ]\n";
-
-#ifdef WIN32
-	string strCmd = "wallet-utility -datadir=test/data/ > test/data/op.txt";
-#else
-	string strCmd = "./wallet-utility -datadir=test/data/ > test/data/op.txt";
-#endif
-	int ret = system(strCmd.c_str());
-	BOOST_CHECK(ret == 0);
-
-	boost::filesystem::path opPath = "test/data/op.txt";
-	boost::filesystem::ifstream fIn;
-	fIn.open(opPath, std::ios::in);
-
-	if (!fIn)
-	{
-		std::cerr << "Could not open the output file" << std::endl;
-	}
-
-	stringstream ss_addr;
-	ss_addr << fIn.rdbuf();
-	fIn.close();
-	boost::filesystem::remove(opPath);
-
-	string obtained = ss_addr.str();
-	BOOST_CHECK_EQUAL(obtained, expected_addr);
-
-#ifdef WIN32
-	strCmd = "wallet-utility -datadir=test/data/ -dumppass > test/data/op.txt";
-#else
-	strCmd = "./wallet-utility -datadir=test/data/ -dumppass > test/data/op.txt";
-#endif
-
-	ret = system(strCmd.c_str());
-	BOOST_CHECK(ret == 0);
-
-	fIn.open(opPath, std::ios::in);
-
-	if (!fIn)
-	{
-		std::cerr << "Could not open the output file" << std::endl;
-	}
-
-	stringstream ss_addr_pkeys;
-	ss_addr_pkeys << fIn.rdbuf();
-	fIn.close();
-	boost::filesystem::remove(opPath);
-
-	obtained = ss_addr_pkeys.str();
-	BOOST_CHECK_EQUAL(obtained, expected_addr_pkeys);
-}
-
-BOOST_AUTO_TEST_SUITE_END()
--- a/src/wallet-utility.cpp	Mon Jul 18 18:03:01 2016 -0400
+++ b/src/wallet-utility.cpp	Mon Jul 18 18:31:21 2016 -0400
@@ -11,49 +11,49 @@
 
 void show_help()
 {
-	std::cout <<
-		"This program outputs Bitcoin addresses and private keys from a wallet.dat file" << std::endl
-		<< std::endl
-		<< "Usage and options: "
-		<< std::endl
-		<< " -datadir=<directory> to tell the program where your wallet is"
-		<< std::endl
-		<< " -wallet=<name> (Optional) if your wallet is not named wallet.dat"
-		<< std::endl
-		<< " -regtest or -testnet (Optional) dumps addresses from regtest/testnet"
-		<< std::endl
-		<< " -dumppass (Optional)if you want to extract private keys associated with addresses"
-		<< std::endl
-		<< "    -pass=<walletpassphrase> if you have encrypted private keys stored in your wallet"
-		<< std::endl;
+    std::cout <<
+        "This program outputs Bitcoin addresses and private keys from a wallet.dat file" << std::endl
+        << std::endl
+        << "Usage and options: "
+        << std::endl
+        << " -datadir=<directory> to tell the program where your wallet is"
+        << std::endl
+        << " -wallet=<name> (Optional) if your wallet is not named wallet.dat"
+        << std::endl
+        << " -regtest or -testnet (Optional) dumps addresses from regtest/testnet"
+        << std::endl
+        << " -dumppass (Optional)if you want to extract private keys associated with addresses"
+        << std::endl
+        << "    -pass=<walletpassphrase> if you have encrypted private keys stored in your wallet"
+        << std::endl;
 }
 
 
 class WalletUtilityDB : public CDB
 {
-	private:
-		typedef std::map<unsigned int, CMasterKey> MasterKeyMap;
-		MasterKeyMap mapMasterKeys;
-		unsigned int nMasterKeyMaxID;
-		SecureString mPass;
-		std::vector<CKeyingMaterial> vMKeys;
+    private:
+        typedef std::map<unsigned int, CMasterKey> MasterKeyMap;
+        MasterKeyMap mapMasterKeys;
+        unsigned int nMasterKeyMaxID;
+        SecureString mPass;
+        std::vector<CKeyingMaterial> vMKeys;
 
-	public:
-		WalletUtilityDB(const std::string& strFilename, const char* pszMode = "r+", bool fFlushOnClose = true) : CDB(strFilename, pszMode, fFlushOnClose)
-	{
-		nMasterKeyMaxID = 0;
-		mPass.reserve(100);
-	}
+    public:
+        WalletUtilityDB(const std::string& strFilename, const char* pszMode = "r+", bool fFlushOnClose = true) : CDB(strFilename, pszMode, fFlushOnClose)
+    {
+        nMasterKeyMaxID = 0;
+        mPass.reserve(100);
+    }
 
-		std::string getAddress(CDataStream ssKey);
-		std::string getKey(CDataStream ssKey, CDataStream ssValue);
-		std::string getCryptedKey(CDataStream ssKey, CDataStream ssValue, std::string masterPass);
-		bool updateMasterKeys(CDataStream ssKey, CDataStream ssValue);
-		bool parseKeys(bool dumppriv, std::string masterPass);
+        std::string getAddress(CDataStream ssKey);
+        std::string getKey(CDataStream ssKey, CDataStream ssValue);
+        std::string getCryptedKey(CDataStream ssKey, CDataStream ssValue, std::string masterPass);
+        bool updateMasterKeys(CDataStream ssKey, CDataStream ssValue);
+        bool parseKeys(bool dumppriv, std::string masterPass);
 
-		bool DecryptSecret(const std::vector<unsigned char>& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext);
-		bool Unlock();
-		bool DecryptKey(const std::vector<unsigned char>& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key);
+        bool DecryptSecret(const std::vector<unsigned char>& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext);
+        bool Unlock();
+        bool DecryptKey(const std::vector<unsigned char>& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key);
 };
 
 
@@ -62,12 +62,12 @@
  */
 std::string WalletUtilityDB::getAddress(CDataStream ssKey)
 {
-	CPubKey vchPubKey;
-	ssKey >> vchPubKey;
-	CKeyID id = vchPubKey.GetID();
-	std::string strAddr = CBitcoinAddress(id).ToString();
+    CPubKey vchPubKey;
+    ssKey >> vchPubKey;
+    CKeyID id = vchPubKey.GetID();
+    std::string strAddr = CBitcoinAddress(id).ToString();
 
-	return strAddr;
+    return strAddr;
 }
 
 
@@ -76,65 +76,65 @@
  */
 std::string WalletUtilityDB::getKey(CDataStream ssKey, CDataStream ssValue)
 {
-	std::string strKey;
-	CPubKey vchPubKey;
-	ssKey >> vchPubKey;
-	CPrivKey pkey;
-	CKey key;
+    std::string strKey;
+    CPubKey vchPubKey;
+    ssKey >> vchPubKey;
+    CPrivKey pkey;
+    CKey key;
 
-	ssValue >> pkey;
-	if (key.Load(pkey, vchPubKey, true))
-		strKey = CBitcoinSecret(key).ToString();
+    ssValue >> pkey;
+    if (key.Load(pkey, vchPubKey, true))
+        strKey = CBitcoinSecret(key).ToString();
 
-	return strKey;
+    return strKey;
 }
 
 
 bool WalletUtilityDB::DecryptSecret(const std::vector<unsigned char>& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext)
 {
-	CCrypter cKeyCrypter;
-	std::vector<unsigned char> chIV(WALLET_CRYPTO_KEY_SIZE);
-	memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE);
+    CCrypter cKeyCrypter;
+    std::vector<unsigned char> chIV(WALLET_CRYPTO_KEY_SIZE);
+    memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE);
 
-	BOOST_FOREACH(const CKeyingMaterial vMKey, vMKeys)
-	{
-		if(!cKeyCrypter.SetKey(vMKey, chIV))
-			continue;
-		if (cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext)))
-			return true;
-	}
-	return false;
+    BOOST_FOREACH(const CKeyingMaterial vMKey, vMKeys)
+    {
+        if(!cKeyCrypter.SetKey(vMKey, chIV))
+            continue;
+        if (cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext)))
+            return true;
+    }
+    return false;
 }
 
 
 bool WalletUtilityDB::Unlock()
 {
-	CCrypter crypter;
-	CKeyingMaterial vMasterKey;
+    CCrypter crypter;
+    CKeyingMaterial vMasterKey;
 
-	BOOST_FOREACH(const MasterKeyMap::value_type& pMasterKey, mapMasterKeys)
-	{
-		if(!crypter.SetKeyFromPassphrase(mPass, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
-			return false;
-		if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, vMasterKey))
-			continue; // try another master key
-		vMKeys.push_back(vMasterKey);
-	}
-	return true;
+    BOOST_FOREACH(const MasterKeyMap::value_type& pMasterKey, mapMasterKeys)
+    {
+        if(!crypter.SetKeyFromPassphrase(mPass, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
+            return false;
+        if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, vMasterKey))
+            continue; // try another master key
+        vMKeys.push_back(vMasterKey);
+    }
+    return true;
 }
 
 
 bool WalletUtilityDB::DecryptKey(const std::vector<unsigned char>& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key)
 {
-	CKeyingMaterial vchSecret;
-	if(!DecryptSecret(vchCryptedSecret, vchPubKey.GetHash(), vchSecret))
-		return false;
+    CKeyingMaterial vchSecret;
+    if(!DecryptSecret(vchCryptedSecret, vchPubKey.GetHash(), vchSecret))
+        return false;
 
-	if (vchSecret.size() != 32)
-		return false;
+    if (vchSecret.size() != 32)
+        return false;
 
-	key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed());
-	return true;
+    key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed());
+    return true;
 }
 
 
@@ -143,22 +143,22 @@
  */
 std::string WalletUtilityDB::getCryptedKey(CDataStream ssKey, CDataStream ssValue, std::string masterPass)
 {
-	mPass = masterPass.c_str();
-	CPubKey vchPubKey;
-	ssKey >> vchPubKey;
-	CKey key;
+    mPass = masterPass.c_str();
+    CPubKey vchPubKey;
+    ssKey >> vchPubKey;
+    CKey key;
 
-	std::vector<unsigned char> vKey;
-	ssValue >> vKey;
+    std::vector<unsigned char> vKey;
+    ssValue >> vKey;
 
-	if (!Unlock())
-		return "";
+    if (!Unlock())
+        return "";
 
-	if(!DecryptKey(vKey, vchPubKey, key))
-		return "";
+    if(!DecryptKey(vKey, vchPubKey, key))
+        return "";
 
-	std::string strKey = CBitcoinSecret(key).ToString();
-	return strKey;
+    std::string strKey = CBitcoinSecret(key).ToString();
+    return strKey;
 }
 
 
@@ -167,21 +167,21 @@
  */
 bool WalletUtilityDB::updateMasterKeys(CDataStream ssKey, CDataStream ssValue)
 {
-	unsigned int nID;
-	ssKey >> nID;
-	CMasterKey kMasterKey;
-	ssValue >> kMasterKey;
-	if (mapMasterKeys.count(nID) != 0)
-	{
-		std::cout << "Error reading wallet database: duplicate CMasterKey id " << nID << std::endl;
-		return false;
-	}
-	mapMasterKeys[nID] = kMasterKey;
+    unsigned int nID;
+    ssKey >> nID;
+    CMasterKey kMasterKey;
+    ssValue >> kMasterKey;
+    if (mapMasterKeys.count(nID) != 0)
+    {
+        std::cout << "Error reading wallet database: duplicate CMasterKey id " << nID << std::endl;
+        return false;
+    }
+    mapMasterKeys[nID] = kMasterKey;
 
-	if (nMasterKeyMaxID < nID)
-		nMasterKeyMaxID = nID;
+    if (nMasterKeyMaxID < nID)
+        nMasterKeyMaxID = nID;
 
-	return true;
+    return true;
 }
 
 
@@ -190,150 +190,150 @@
  */
 bool WalletUtilityDB::parseKeys(bool dumppriv, std::string masterPass)
 {
-	DBErrors result = DB_LOAD_OK;
-	std::string strType;
-	bool first = true;
+    DBErrors result = DB_LOAD_OK;
+    std::string strType;
+    bool first = true;
 
-	try {
-		Dbc* pcursor = GetCursor();
-		if (!pcursor)
-		{
-			LogPrintf("Error getting wallet database cursor\n");
-			result = DB_CORRUPT;
-		}
+    try {
+        Dbc* pcursor = GetCursor();
+        if (!pcursor)
+        {
+            LogPrintf("Error getting wallet database cursor\n");
+            result = DB_CORRUPT;
+        }
 
-		if (dumppriv)
-		{
-			while (result == DB_LOAD_OK && true)
-			{
-				CDataStream ssKey(SER_DISK, CLIENT_VERSION);
-				CDataStream ssValue(SER_DISK, CLIENT_VERSION);
-				int result = ReadAtCursor(pcursor, ssKey, ssValue);
+        if (dumppriv)
+        {
+            while (result == DB_LOAD_OK && true)
+            {
+                CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+                CDataStream ssValue(SER_DISK, CLIENT_VERSION);
+                int result = ReadAtCursor(pcursor, ssKey, ssValue);
 
-				if (result == DB_NOTFOUND) {
-					break;
-				}
-				else if (result != 0)
-				{
-					LogPrintf("Error reading next record from wallet database\n");
-					result = DB_CORRUPT;
-					break;
-				}
+                if (result == DB_NOTFOUND) {
+                    break;
+                }
+                else if (result != 0)
+                {
+                    LogPrintf("Error reading next record from wallet database\n");
+                    result = DB_CORRUPT;
+                    break;
+                }
 
-				ssKey >> strType;
-				if (strType == "mkey")
-				{
-					updateMasterKeys(ssKey, ssValue);
-				}
-			}
-			pcursor->close();
-			pcursor = GetCursor();
-		}
+                ssKey >> strType;
+                if (strType == "mkey")
+                {
+                    updateMasterKeys(ssKey, ssValue);
+                }
+            }
+            pcursor->close();
+            pcursor = GetCursor();
+        }
 
-		while (result == DB_LOAD_OK && true)
-		{
-			CDataStream ssKey(SER_DISK, CLIENT_VERSION);
-			CDataStream ssValue(SER_DISK, CLIENT_VERSION);
-			int ret = ReadAtCursor(pcursor, ssKey, ssValue);
+        while (result == DB_LOAD_OK && true)
+        {
+            CDataStream ssKey(SER_DISK, CLIENT_VERSION);
+            CDataStream ssValue(SER_DISK, CLIENT_VERSION);
+            int ret = ReadAtCursor(pcursor, ssKey, ssValue);
 
-			if (ret == DB_NOTFOUND)
-			{
-				std::cout << " ]" << std::endl;
-				first = true;
-				break;
-			}
-			else if (ret != DB_LOAD_OK)
-			{
-				LogPrintf("Error reading next record from wallet database\n");
-				result = DB_CORRUPT;
-				break;
-			}
+            if (ret == DB_NOTFOUND)
+            {
+                std::cout << " ]" << std::endl;
+                first = true;
+                break;
+            }
+            else if (ret != DB_LOAD_OK)
+            {
+                LogPrintf("Error reading next record from wallet database\n");
+                result = DB_CORRUPT;
+                break;
+            }
 
-			ssKey >> strType;
+            ssKey >> strType;
 
-			if (strType == "key" || strType == "ckey")
-			{
-				std::string strAddr = getAddress(ssKey);
-				std::string strKey = "";
+            if (strType == "key" || strType == "ckey")
+            {
+                std::string strAddr = getAddress(ssKey);
+                std::string strKey = "";
 
 
-				if (dumppriv && strType == "key")
-					strKey = getKey(ssKey, ssValue);
-				if (dumppriv && strType == "ckey")
-				{
-					if (masterPass == "")
-					{
-						std::cout << "Encrypted wallet, please provide a password. See help below" << std::endl;
-						show_help();
-						result = DB_LOAD_FAIL;
-						break;
-					}
-					strKey = getCryptedKey(ssKey, ssValue, masterPass);
-				}
+                if (dumppriv && strType == "key")
+                    strKey = getKey(ssKey, ssValue);
+                if (dumppriv && strType == "ckey")
+                {
+                    if (masterPass == "")
+                    {
+                        std::cout << "Encrypted wallet, please provide a password. See help below" << std::endl;
+                        show_help();
+                        result = DB_LOAD_FAIL;
+                        break;
+                    }
+                    strKey = getCryptedKey(ssKey, ssValue, masterPass);
+                }
 
-				if (strAddr != "")
-				{
-					if (first)
-						std::cout << "[ ";
-					else
-						std::cout << ", ";
-				}
+                if (strAddr != "")
+                {
+                    if (first)
+                        std::cout << "[ ";
+                    else
+                        std::cout << ", ";
+                }
 
-				if (dumppriv)
-				{
-					std::cout << "{\"addr\" : \"" + strAddr + "\", "
-						<< "\"pkey\" : \"" + strKey + "\"}"
-						<< std::flush;
-				}
-				else
-				{
-					std::cout << "\"" + strAddr + "\"";
-				}
+                if (dumppriv)
+                {
+                    std::cout << "{\"addr\" : \"" + strAddr + "\", "
+                        << "\"pkey\" : \"" + strKey + "\"}"
+                        << std::flush;
+                }
+                else
+                {
+                    std::cout << "\"" + strAddr + "\"";
+                }
 
-				first = false;
-			}
-		}
+                first = false;
+            }
+        }
 
-		pcursor->close();
-	} catch (DbException &e) {
-		std::cout << "DBException caught " << e.get_errno() << std::endl;
-	} catch (std::exception &e) {
-		std::cout << "Exception caught " << std::endl;
-	}
+        pcursor->close();
+    } catch (DbException &e) {
+        std::cout << "DBException caught " << e.get_errno() << std::endl;
+    } catch (std::exception &e) {
+        std::cout << "Exception caught " << std::endl;
+    }
 
-	if (result == DB_LOAD_OK)
-		return true;
-	else
-		return false;
+    if (result == DB_LOAD_OK)
+        return true;
+    else
+        return false;
 }
 
 
 int main(int argc, char* argv[])
 {
-	ParseParameters(argc, argv);
-	std::string walletFile = GetArg("-wallet", "wallet.dat");
-	std::string masterPass = GetArg("-pass", "");
-	bool fDumpPass = GetBoolArg("-dumppass", false);
-	bool help = GetBoolArg("-h", false);
-	bool result = false;
+    ParseParameters(argc, argv);
+    std::string walletFile = GetArg("-wallet", "wallet.dat");
+    std::string masterPass = GetArg("-pass", "");
+    bool fDumpPass = GetBoolArg("-dumppass", false);
+    bool help = GetBoolArg("-h", false);
+    bool result = false;
 
-	if (help)
-	{
-		show_help();
-		return 0;
-	}
+    if (help)
+    {
+        show_help();
+        return 0;
+    }
 
-	try {
-		SelectParams(ChainNameFromCommandLine());
-		result = WalletUtilityDB(walletFile, "r").parseKeys(fDumpPass, masterPass);
-	}
-	catch (const std::exception& e) {
-		std::cout << "Error opening wallet file " << walletFile << std::endl;
-		std::cout << e.what() << std::endl;
-	}
+    try {
+        SelectParams(ChainNameFromCommandLine());
+        result = WalletUtilityDB(walletFile, "r").parseKeys(fDumpPass, masterPass);
+    }
+    catch (const std::exception& e) {
+        std::cout << "Error opening wallet file " << walletFile << std::endl;
+        std::cout << e.what() << std::endl;
+    }
 
-	if (result)
-		return 0;
-	else
-		return -1;
+    if (result)
+        return 0;
+    else
+        return -1;
 }