From de05c9ecbb3ed60b39e281518846c508d07255e2 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Wed, 13 Jul 2016 18:38:04 -0400 Subject: [PATCH 01/13] db: add options to configure block index database There was a previous assumption that blockindex would be quite small. With addressindex and spentindex enabled the blockindex is much larger and the amount of cache allocated for it should also increase. Furthermore, enabling compression should decrease the amount of disk space required and less data to write/read. The default leveldb max_open_files is set to 1000, for the blockindex the default is set to 1000 with compression. The 64 value that is current is kept for the utxo database and does not enable compression. Two additional options are added here to be able to configure the values for leveldb and the block index: - `-dbmaxopenfiles` A number of files for leveldb to keep open - `-dbcompression` Boolean 0 or 1 to enable snappy leveldb compression --- src/dbwrapper.cpp | 10 +++++----- src/dbwrapper.h | 16 +++++++++------- src/init.cpp | 21 ++++++++++++++++++--- src/main.h | 2 ++ src/txdb.cpp | 4 ++-- src/txdb.h | 2 +- 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index 1907e2fa7843..5f1f175b836c 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -29,14 +29,14 @@ void HandleError(const leveldb::Status& status) throw(dbwrapper_error) throw dbwrapper_error("Unknown database error"); } -static leveldb::Options GetOptions(size_t nCacheSize) +static leveldb::Options GetOptions(size_t nCacheSize, bool compression, int maxOpenFiles) { leveldb::Options options; options.block_cache = leveldb::NewLRUCache(nCacheSize / 2); options.write_buffer_size = nCacheSize / 4; // up to two write buffers may be held in memory simultaneously options.filter_policy = leveldb::NewBloomFilterPolicy(10); - options.compression = leveldb::kNoCompression; - options.max_open_files = 64; + options.compression = compression ? leveldb::kSnappyCompression : leveldb::kNoCompression; + options.max_open_files = maxOpenFiles; if (leveldb::kMajorVersion > 1 || (leveldb::kMajorVersion == 1 && leveldb::kMinorVersion >= 16)) { // LevelDB versions before 1.16 consider short writes to be corruption. Only trigger error // on corruption in later versions. @@ -45,14 +45,14 @@ static leveldb::Options GetOptions(size_t nCacheSize) return options; } -CDBWrapper::CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate) +CDBWrapper::CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate, bool compression, int maxOpenFiles) { penv = NULL; readoptions.verify_checksums = true; iteroptions.verify_checksums = true; iteroptions.fill_cache = false; syncoptions.sync = true; - options = GetOptions(nCacheSize); + options = GetOptions(nCacheSize, compression, maxOpenFiles); options.create_if_missing = true; if (fMemory) { penv = leveldb::NewMemEnv(leveldb::Env::Default()); diff --git a/src/dbwrapper.h b/src/dbwrapper.h index 5e7313f7eb54..2acd5fc05e07 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -169,14 +169,16 @@ class CDBWrapper public: /** - * @param[in] path Location in the filesystem where leveldb data will be stored. - * @param[in] nCacheSize Configures various leveldb cache settings. - * @param[in] fMemory If true, use leveldb's memory environment. - * @param[in] fWipe If true, remove all existing data. - * @param[in] obfuscate If true, store data obfuscated via simple XOR. If false, XOR - * with a zero'd byte array. + * @param[in] path Location in the filesystem where leveldb data will be stored. + * @param[in] nCacheSize Configures various leveldb cache settings. + * @param[in] fMemory If true, use leveldb's memory environment. + * @param[in] fWipe If true, remove all existing data. + * @param[in] obfuscate If true, store data obfuscated via simple XOR. If false, XOR + * with a zero'd byte array. + * @param[in] compression Enable snappy compression for the database + * @param[in] maxOpenFiles The maximum number of open files for the database */ - CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false); + CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false, bool compression = false, int maxOpenFiles = 64); ~CDBWrapper(); template diff --git a/src/init.cpp b/src/init.cpp index 3893500926d6..4d952ada0639 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1294,18 +1294,33 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } } + // block tree db settings + int dbMaxOpenFiles = GetArg("-dbmaxopenfiles", DEFAULT_DB_MAX_OPEN_FILES); + bool dbCompression = GetBoolArg("-dbcompression", DEFAULT_DB_COMPRESSION); + + LogPrintf("Block index database configuration:\n"); + LogPrintf("* Using %d max open files\n", dbMaxOpenFiles); + LogPrintf("* Compression is %s\n", dbCompression ? "enabled" : "disabled"); + // cache size calculations int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20); nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greated than nMaxDbcache int64_t nBlockTreeDBCache = nTotalCache / 8; - if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", DEFAULT_TXINDEX)) - nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB + if (GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX) || GetBoolArg("-spentindex", DEFAULT_SPENTINDEX)) { + // enable 3/4 of the cache if addressindex and/or spentindex is enabled + nBlockTreeDBCache = nTotalCache * 3 / 4; + } else { + if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", DEFAULT_TXINDEX)) { + nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB + } + } nTotalCache -= nBlockTreeDBCache; int64_t nCoinDBCache = std::min(nTotalCache / 2, (nTotalCache / 4) + (1 << 23)); // use 25%-50% of the remainder for disk cache nTotalCache -= nCoinDBCache; nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache LogPrintf("Cache configuration:\n"); + LogPrintf("* Max cache setting possible %.1fMiB\n", nMaxDbCache); LogPrintf("* Using %.1fMiB for block index database\n", nBlockTreeDBCache * (1.0 / 1024 / 1024)); LogPrintf("* Using %.1fMiB for chain state database\n", nCoinDBCache * (1.0 / 1024 / 1024)); LogPrintf("* Using %.1fMiB for in-memory UTXO set\n", nCoinCacheUsage * (1.0 / 1024 / 1024)); @@ -1326,7 +1341,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) delete pcoinscatcher; delete pblocktree; - pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex); + pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex, dbCompression, dbMaxOpenFiles); pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); pcoinsTip = new CCoinsViewCache(pcoinscatcher); diff --git a/src/main.h b/src/main.h index 3f8a3fb32a21..1361a75f0e66 100644 --- a/src/main.h +++ b/src/main.h @@ -115,6 +115,8 @@ static const bool DEFAULT_TXINDEX = false; static const bool DEFAULT_ADDRESSINDEX = false; static const bool DEFAULT_TIMESTAMPINDEX = false; static const bool DEFAULT_SPENTINDEX = false; +static const unsigned int DEFAULT_DB_MAX_OPEN_FILES = 1000; +static const bool DEFAULT_DB_COMPRESSION = true; static const unsigned int DEFAULT_BANSCORE_THRESHOLD = 100; static const bool DEFAULT_TESTSAFEMODE = false; diff --git a/src/txdb.cpp b/src/txdb.cpp index 48150198f3a3..f204989f1260 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -33,7 +33,7 @@ static const char DB_REINDEX_FLAG = 'R'; static const char DB_LAST_BLOCK = 'l'; -CCoinsViewDB::CCoinsViewDB(size_t nCacheSize, bool fMemory, bool fWipe) : db(GetDataDir() / "chainstate", nCacheSize, fMemory, fWipe, true) +CCoinsViewDB::CCoinsViewDB(size_t nCacheSize, bool fMemory, bool fWipe) : db(GetDataDir() / "chainstate", nCacheSize, fMemory, fWipe, true, false, 64) { } @@ -75,7 +75,7 @@ bool CCoinsViewDB::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) { return db.WriteBatch(batch); } -CBlockTreeDB::CBlockTreeDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "blocks" / "index", nCacheSize, fMemory, fWipe) { +CBlockTreeDB::CBlockTreeDB(size_t nCacheSize, bool fMemory, bool fWipe, bool compression, int maxOpenFiles) : CDBWrapper(GetDataDir() / "blocks" / "index", nCacheSize, fMemory, fWipe, false, compression, maxOpenFiles) { } bool CBlockTreeDB::ReadBlockFileInfo(int nFile, CBlockFileInfo &info) { diff --git a/src/txdb.h b/src/txdb.h index 14d501278f23..b2a99e0b3eeb 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -54,7 +54,7 @@ class CCoinsViewDB : public CCoinsView class CBlockTreeDB : public CDBWrapper { public: - CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); + CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool compression = true, int maxOpenFiles = 1000); private: CBlockTreeDB(const CBlockTreeDB&); void operator=(const CBlockTreeDB&); From 1b36e2c62686fa88dc6a0f1f4917ab61913f0766 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Sat, 9 Jul 2016 02:46:52 +0000 Subject: [PATCH 02/13] rpc: minimize locking in getrawtransaction since there is i/o that can happen when retrieving extended input and output information, limiting the duration of the lock in getrawtransaction can help improve concurrency --- src/rpcrawtransaction.cpp | 92 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 86 insertions(+), 6 deletions(-) diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index ee39fbefd625..64050694e546 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -59,8 +59,10 @@ void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fInclud out.push_back(Pair("addresses", a)); } -void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) +void TxToJSONExpanded(const CTransaction& tx, const uint256 hashBlock, UniValue& entry, + int nHeight = 0, int nConfirmations = 0, int nBlockTime = 0) { + uint256 txid = tx.GetHash(); entry.push_back(Pair("txid", txid.GetHex())); entry.push_back(Pair("size", (int)::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION))); @@ -121,6 +123,63 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) } entry.push_back(Pair("vout", vout)); + if (!hashBlock.IsNull()) { + entry.push_back(Pair("blockhash", hashBlock.GetHex())); + + if (nConfirmations > 0) { + entry.push_back(Pair("height", nHeight)); + entry.push_back(Pair("confirmations", nConfirmations)); + entry.push_back(Pair("time", nBlockTime)); + entry.push_back(Pair("blocktime", nBlockTime)); + } else { + entry.push_back(Pair("height", -1)); + entry.push_back(Pair("confirmations", 0)); + } + } + +} + +void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) +{ + + uint256 txid = tx.GetHash(); + entry.push_back(Pair("txid", txid.GetHex())); + entry.push_back(Pair("size", (int)::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION))); + entry.push_back(Pair("version", tx.nVersion)); + entry.push_back(Pair("locktime", (int64_t)tx.nLockTime)); + + UniValue vin(UniValue::VARR); + BOOST_FOREACH(const CTxIn& txin, tx.vin) { + UniValue in(UniValue::VOBJ); + if (tx.IsCoinBase()) + in.push_back(Pair("coinbase", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); + else { + in.push_back(Pair("txid", txin.prevout.hash.GetHex())); + in.push_back(Pair("vout", (int64_t)txin.prevout.n)); + UniValue o(UniValue::VOBJ); + o.push_back(Pair("asm", ScriptToAsmStr(txin.scriptSig, true))); + o.push_back(Pair("hex", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); + in.push_back(Pair("scriptSig", o)); + } + in.push_back(Pair("sequence", (int64_t)txin.nSequence)); + vin.push_back(in); + } + entry.push_back(Pair("vin", vin)); + + UniValue vout(UniValue::VARR); + for (unsigned int i = 0; i < tx.vout.size(); i++) { + const CTxOut& txout = tx.vout[i]; + UniValue out(UniValue::VOBJ); + out.push_back(Pair("value", ValueFromAmount(txout.nValue))); + out.push_back(Pair("valueSat", txout.nValue)); + out.push_back(Pair("n", (int64_t)i)); + UniValue o(UniValue::VOBJ); + ScriptPubKeyToJSON(txout.scriptPubKey, o, true); + out.push_back(Pair("scriptPubKey", o)); + vout.push_back(out); + } + entry.push_back(Pair("vout", vout)); + if (!hashBlock.IsNull()) { entry.push_back(Pair("blockhash", hashBlock.GetHex())); BlockMap::iterator mi = mapBlockIndex.find(hashBlock); @@ -206,8 +265,6 @@ UniValue getrawtransaction(const UniValue& params, bool fHelp) + HelpExampleRpc("getrawtransaction", "\"mytxid\", 1") ); - LOCK(cs_main); - uint256 hash = ParseHashV(params[0], "parameter 1"); bool fVerbose = false; @@ -215,9 +272,31 @@ UniValue getrawtransaction(const UniValue& params, bool fHelp) fVerbose = (params[1].get_int() != 0); CTransaction tx; + uint256 hashBlock; - if (!GetTransaction(hash, tx, Params().GetConsensus(), hashBlock, true)) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "No information available about transaction"); + int nHeight = 0; + int nConfirmations = 0; + int nBlockTime = 0; + + { + LOCK(cs_main); + if (!GetTransaction(hash, tx, Params().GetConsensus(), hashBlock, true)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "No information available about transaction"); + + BlockMap::iterator mi = mapBlockIndex.find(hashBlock); + if (mi != mapBlockIndex.end() && (*mi).second) { + CBlockIndex* pindex = (*mi).second; + if (chainActive.Contains(pindex)) { + nHeight = pindex->nHeight; + nConfirmations = 1 + chainActive.Height() - pindex->nHeight; + nBlockTime = pindex->GetBlockTime(); + } else { + nHeight = -1; + nConfirmations = 0; + nBlockTime = pindex->GetBlockTime(); + } + } + } string strHex = EncodeHexTx(tx); @@ -226,7 +305,8 @@ UniValue getrawtransaction(const UniValue& params, bool fHelp) UniValue result(UniValue::VOBJ); result.push_back(Pair("hex", strHex)); - TxToJSON(tx, hashBlock, result); + TxToJSONExpanded(tx, hashBlock, result, nHeight, nConfirmations, nBlockTime); + return result; } From 69ea12c6897465362c211dab15a4c93e4f8a7db7 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Thu, 14 Jul 2016 16:30:31 -0400 Subject: [PATCH 03/13] tests: test dbwrapper options compression and maxopenfiles --- src/test/dbwrapper_tests.cpp | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/test/dbwrapper_tests.cpp b/src/test/dbwrapper_tests.cpp index e399315870e7..466a0f4de4ed 100644 --- a/src/test/dbwrapper_tests.cpp +++ b/src/test/dbwrapper_tests.cpp @@ -47,6 +47,49 @@ BOOST_AUTO_TEST_CASE(dbwrapper) } } +BOOST_AUTO_TEST_CASE(dbwrapper_compression) +{ + // Perform tests both with compression and without + for (int i = 0; i < 2; i++) { + bool compression = (bool)i; + path ph = temp_directory_path() / unique_path(); + CDBWrapper dbw(ph, (1 << 20), true, false, false, compression); + char key = 'k'; + uint256 in = GetRandHash(); + uint256 res; + + BOOST_CHECK(dbw.Write(key, in)); + BOOST_CHECK(dbw.Read(key, res)); + BOOST_CHECK_EQUAL(res.ToString(), in.ToString()); + } +} + +BOOST_AUTO_TEST_CASE(dbwrapper_maxopenfiles_64) +{ + path ph = temp_directory_path() / unique_path(); + CDBWrapper dbw(ph, (1 << 20), true, false, false, false, 64); + char key = 'k'; + uint256 in = GetRandHash(); + uint256 res; + + BOOST_CHECK(dbw.Write(key, in)); + BOOST_CHECK(dbw.Read(key, res)); + BOOST_CHECK_EQUAL(res.ToString(), in.ToString()); +} + +BOOST_AUTO_TEST_CASE(dbwrapper_maxopenfiles_1000) +{ + path ph = temp_directory_path() / unique_path(); + CDBWrapper dbw(ph, (1 << 20), true, false, false, false, 1000); + char key = 'k'; + uint256 in = GetRandHash(); + uint256 res; + + BOOST_CHECK(dbw.Write(key, in)); + BOOST_CHECK(dbw.Read(key, res)); + BOOST_CHECK_EQUAL(res.ToString(), in.ToString()); +} + // Test batch operations BOOST_AUTO_TEST_CASE(dbwrapper_batch) { From 31f56e2f5d2a134e8f4798f7f1928d651979c703 Mon Sep 17 00:00:00 2001 From: Chethan Krishna Date: Thu, 30 Jun 2016 18:00:50 -0400 Subject: [PATCH 04/13] wallet-utility: extract addresses and private keys usage: ./wallet-utility -datadir= help: ./wallet-utility -h --- .gitignore | 1 + Makefile.am | 5 + configure.ac | 4 +- src/Makefile.am | 15 ++ src/Makefile.test.include | 3 +- src/test/data/wallet.dat | Bin 0 -> 16384 bytes src/test/test_bitcoin.h | 11 ++ src/test/walletutil_tests.cpp | 73 ++++++++ src/wallet-utility.cpp | 339 ++++++++++++++++++++++++++++++++++ 9 files changed, 448 insertions(+), 3 deletions(-) create mode 100644 src/test/data/wallet.dat create mode 100644 src/test/walletutil_tests.cpp create mode 100644 src/wallet-utility.cpp diff --git a/.gitignore b/.gitignore index a8722aa593ac..d9f334a0eb6e 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,4 @@ share/BitcoindComparisonTool.jar /doc/doxygen/ libbitcoinconsensus.pc +wallet-utility diff --git a/Makefile.am b/Makefile.am index 0a3b00bcc706..3d81263e9797 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,6 +12,7 @@ endif BITCOIND_BIN=$(top_builddir)/src/bitcoind$(EXEEXT) BITCOIN_QT_BIN=$(top_builddir)/src/qt/bitcoin-qt$(EXEEXT) BITCOIN_CLI_BIN=$(top_builddir)/src/bitcoin-cli$(EXEEXT) +WALLET_UTILITY_BIN=$(top_builddir)/src/wallet-utility$(EXEEXT) BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) OSX_APP=Bitcoin-Qt.app @@ -63,6 +64,7 @@ $(BITCOIN_WIN_INSTALLER): all-recursive STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(WALLET_UTILITY_BIN) $(top_builddir)/release @test -f $(MAKENSIS) && $(MAKENSIS) -V2 $(top_builddir)/share/setup.nsi || \ echo error: could not build $@ @echo built $@ @@ -145,6 +147,9 @@ $(BITCOIND_BIN): FORCE $(BITCOIN_CLI_BIN): FORCE $(MAKE) -C src $(@F) +$(WALLET_UTILITY_BIN): FORCE + $(MAKE) -C src $(@F) + if USE_LCOV baseline.info: diff --git a/configure.ac b/configure.ac index e2056ee7539f..0e9e64fb3d01 100644 --- a/configure.ac +++ b/configure.ac @@ -191,7 +191,7 @@ CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" AC_ARG_WITH([utils], [AS_HELP_STRING([--with-utils], - [build bitcoin-cli bitcoin-tx (default=yes)])], + [build bitcoin-cli bitcoin-tx wallet-utility (default=yes)])], [build_bitcoin_utils=$withval], [build_bitcoin_utils=yes]) @@ -766,7 +766,7 @@ AC_MSG_CHECKING([whether to build bitcoind]) AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) AC_MSG_RESULT($build_bitcoind) -AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)]) +AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx wallet-utility)]) AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes]) AC_MSG_RESULT($build_bitcoin_utils) diff --git a/src/Makefile.am b/src/Makefile.am index c52371bea91c..efe7e028d616 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -74,6 +74,9 @@ endif if BUILD_BITCOIN_UTILS bin_PROGRAMS += bitcoin-cli bitcoin-tx +if ENABLE_WALLET + bin_PROGRAMS += wallet-utility +endif endif .PHONY: FORCE check-symbols check-security @@ -367,6 +370,14 @@ bitcoin_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) bitcoin_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) bitcoin_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +# wallet-utility binary # +if ENABLE_WALLET +wallet_utility_SOURCES = wallet-utility.cpp +wallet_utility_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAG) +wallet_utility_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +wallet_utility_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +endif + if TARGET_WINDOWS bitcoin_cli_SOURCES += bitcoin-cli-res.rc endif @@ -377,6 +388,10 @@ bitcoin_cli_LDADD = \ $(LIBBITCOIN_UTIL) bitcoin_cli_LDADD += $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(EVENT_LIBS) +if ENABLE_WALLET +wallet_utility_LDADD = libbitcoin_wallet.a $(LIBBITCOIN_COMMON) $(LIBBITCOIN_CRYPTO) $(LIBSECP256K1) $(LIBBITCOIN_UTIL) $(BOOST_LIBS) $(BDB_LIBS) $(CRYPTO_LIBS) +endif + # # bitcoin-tx binary # diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 4ea09116c2d1..6813f85c007c 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -92,7 +92,8 @@ if ENABLE_WALLET BITCOIN_TESTS += \ test/accounting_tests.cpp \ wallet/test/wallet_tests.cpp \ - test/rpc_wallet_tests.cpp + test/rpc_wallet_tests.cpp \ + test/walletutil_tests.cpp endif test_test_bitcoin_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES) diff --git a/src/test/data/wallet.dat b/src/test/data/wallet.dat new file mode 100644 index 0000000000000000000000000000000000000000..d1352c06731a3b74b642eeef2dc5acaaa8a7b025 GIT binary patch literal 16384 zcmeI&cT5vu6aet=JFb+{CAi}%N(@23Dg=q*s0=}kiA+&Zsi~oYR4ZsCYOEq6;;5wo z!~p^SaDfwKh%-@3z&!{xYDE+2 zg%0Ti7UIx@e$>)AK*)-I&Il1TPLyv%1ht#pVU=J+{Eru@ZJi;a9?dzwZ-GY;009sH z0T2KI5C8!X009sH0T2Lz-WH&Hb!NX#Afpho+J#2p&)ezq6j2NG|Fi@I2!H?xfB*=9 z00@8p2!H?xfB*>eT>-MQ(pW4q_owIX|1|$^p3^sfA`vy{PXGVweFNtG zVGRNx00JNY0w4eaAOHd&00JNY0wB;k0(Ae+?AHgNTO7=C;=0(*5c&!{_+C5@!3(|< z?;&@%?JZ6cH=cV?m?qrE-@^YOd`I0Q009CZ00JNY0w4eaAn^YM<{|9(2&0D6$>H?D zC8S-%`hg+j^Rv0{vR$QGt6W{#be1yr>3Pr5>+OQ4b$70n30%KB?)mS3kE6a9%9Z|4sSlk(d z&%`HLlJ{eVmWJI3+!;3cWsYjQShbaUtJuYw?VKD?Jr!fZ0h#_DUrnZt@nUNdBNDSo z2Vz6Tip`(&WhX;(q}u8oTsD#2QR`amR1?vvS~RGAaOUsXzLpl~>k9*Nrd+fs|;VPi&VZ36z`ezSbySvTFs7Byy6(ifw zBd$Dz=}YdnUEdX&jWC~L6 zcE-=mpf)^D*014|HQf_1YQa*fZn$>U!ka(VLJ#Ecss(d?2{|CZ`hr8~>}7-8jKk;H zD_s&QPDQmSy<(#09KYt)UvAtz?#jin!AU3h&Z)6;7i1W)oxbT@VSgS!k26HO@@WdA z7U&|TgINpgu&kzM+h%_D{PIC3$QbLLp7K=F$ZB=4ZXKCibU0*T->L;m7?B6Zg}cVK zor|u>`@~UBsW>)2KW3ZEeb=R`OM5#i7rbTEf~8d5aQ$a3^gw=U&Y%8|KsMCx%{rNK Jty~d@z5y4K>5BjW literal 0 HcmV?d00001 diff --git a/src/test/test_bitcoin.h b/src/test/test_bitcoin.h index 37bcb9b57c86..ce3aa3283d5e 100644 --- a/src/test/test_bitcoin.h +++ b/src/test/test_bitcoin.h @@ -33,6 +33,17 @@ struct TestingSetup: public BasicTestingSetup { ~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; diff --git a/src/test/walletutil_tests.cpp b/src/test/walletutil_tests.cpp new file mode 100644 index 000000000000..f0d14cafb018 --- /dev/null +++ b/src/test/walletutil_tests.cpp @@ -0,0 +1,73 @@ +#include "main.h" +#include "test/test_bitcoin.h" +#include +#include + +#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() diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp new file mode 100644 index 000000000000..9eef52c3b711 --- /dev/null +++ b/src/wallet-utility.cpp @@ -0,0 +1,339 @@ +#include +#include + +// Include local headers +#include "wallet/walletdb.h" +#include "util.h" +#include "base58.h" +#include "wallet/crypter.h" +#include + + +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= to tell the program where your wallet is" + << std::endl + << " -wallet= (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= if you have encrypted private keys stored in your wallet" + << std::endl; +} + + +class WalletUtilityDB : public CDB +{ + private: + typedef std::map MasterKeyMap; + MasterKeyMap mapMasterKeys; + unsigned int nMasterKeyMaxID; + SecureString mPass; + std::vector vMKeys; + + 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); + + bool DecryptSecret(const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext); + bool Unlock(); + bool DecryptKey(const std::vector& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key); +}; + + +/* + * Address from a public key in base58 + */ +std::string WalletUtilityDB::getAddress(CDataStream ssKey) +{ + CPubKey vchPubKey; + ssKey >> vchPubKey; + CKeyID id = vchPubKey.GetID(); + std::string strAddr = CBitcoinAddress(id).ToString(); + + return strAddr; +} + + +/* + * Non encrypted private key in WIF + */ +std::string WalletUtilityDB::getKey(CDataStream ssKey, CDataStream ssValue) +{ + std::string strKey; + CPubKey vchPubKey; + ssKey >> vchPubKey; + CPrivKey pkey; + CKey key; + + ssValue >> pkey; + if (key.Load(pkey, vchPubKey, true)) + strKey = CBitcoinSecret(key).ToString(); + + return strKey; +} + + +bool WalletUtilityDB::DecryptSecret(const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext) +{ + CCrypter cKeyCrypter; + std::vector 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; +} + + +bool WalletUtilityDB::Unlock() +{ + 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; +} + + +bool WalletUtilityDB::DecryptKey(const std::vector& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key) +{ + CKeyingMaterial vchSecret; + if(!DecryptSecret(vchCryptedSecret, vchPubKey.GetHash(), vchSecret)) + return false; + + if (vchSecret.size() != 32) + return false; + + key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed()); + return true; +} + + +/* + * Encrypted private key in WIF format + */ +std::string WalletUtilityDB::getCryptedKey(CDataStream ssKey, CDataStream ssValue, std::string masterPass) +{ + mPass = masterPass.c_str(); + CPubKey vchPubKey; + ssKey >> vchPubKey; + CKey key; + + std::vector vKey; + ssValue >> vKey; + + if (!Unlock()) + return ""; + + if(!DecryptKey(vKey, vchPubKey, key)) + return ""; + + std::string strKey = CBitcoinSecret(key).ToString(); + return strKey; +} + + +/* + * Master key derivation + */ +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; + + if (nMasterKeyMaxID < nID) + nMasterKeyMaxID = nID; + + return true; +} + + +/* + * Look at all the records and parse keys for addresses and private keys + */ +bool WalletUtilityDB::parseKeys(bool dumppriv, std::string masterPass) +{ + 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; + } + + 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; + } + + 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); + + 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; + + 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 (strAddr != "") + { + if (first) + std::cout << "[ "; + else + std::cout << ", "; + } + + if (dumppriv) + { + std::cout << "{\"addr\" : \"" + strAddr + "\", " + << "\"pkey\" : \"" + strKey + "\"}" + << std::flush; + } + else + { + std::cout << "\"" + strAddr + "\""; + } + + 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; + } + + 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; + + 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; + } + + if (result) + return 0; + else + return -1; +} From efb0d557a55ffe6a5bae0378ffb03dac7ed0da14 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 18 Jul 2016 18:03:01 -0400 Subject: [PATCH 05/13] test: wallet utility python test --- src/Makefile.test.include | 2 ++ src/test/wallet-utility.py | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100755 src/test/wallet-utility.py diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 6813f85c007c..dc84dc831476 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -131,6 +131,8 @@ bitcoin_test_clean : FORCE check-local: @echo "Running test/bitcoin-util-test.py..." $(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(srcdir)/test/bitcoin-util-test.py + @echo "Running test/wallet-utility.py..." + $(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(srcdir)/test/wallet-utility.py $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check diff --git a/src/test/wallet-utility.py b/src/test/wallet-utility.py new file mode 100755 index 000000000000..f583ace74aa7 --- /dev/null +++ b/src/test/wallet-utility.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +# Copyright 2014 BitPay, Inc. +# 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 json + +import os + +def assert_equal(thing1, thing2): + if thing1 != thing2: + raise AssertionError("%s != %s"%(str(thing1),str(thing2))) + +if __name__ == '__main__': + datadir = os.environ["srcdir"] + "/test/data" + command = os.environ["srcdir"] + "/wallet-utility" + + output = json.loads(check_output([command, "-datadir=" + datadir])) + + assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av"); + assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8"); + assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F"); + + + From 365802634b6f1a5ef11081e18c4ee624fc1e150a Mon Sep 17 00:00:00 2001 From: Chethan Krishna Date: Mon, 18 Jul 2016 18:31:21 -0400 Subject: [PATCH 06/13] Remove cpp test for wallet-utility --- src/Makefile.test.include | 9 +- src/test/test_bitcoin.h | 11 - src/test/wallet-utility.py | 61 ++++- src/test/walletutil_tests.cpp | 73 ----- src/wallet-utility.cpp | 502 +++++++++++++++++----------------- 5 files changed, 305 insertions(+), 351 deletions(-) delete mode 100644 src/test/walletutil_tests.cpp diff --git a/src/Makefile.test.include b/src/Makefile.test.include index dc84dc831476..f030a5b353f0 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -17,7 +17,9 @@ EXTRA_DIST += \ 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 @@ if ENABLE_WALLET 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 @@ bitcoin_test_clean : FORCE 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 diff --git a/src/test/test_bitcoin.h b/src/test/test_bitcoin.h index ce3aa3283d5e..37bcb9b57c86 100644 --- a/src/test/test_bitcoin.h +++ b/src/test/test_bitcoin.h @@ -33,17 +33,6 @@ struct TestingSetup: public BasicTestingSetup { ~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; diff --git a/src/test/wallet-utility.py b/src/test/wallet-utility.py index f583ace74aa7..b853a227e984 100755 --- a/src/test/wallet-utility.py +++ b/src/test/wallet-utility.py @@ -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 json - +import subprocess import os +import json +import sys +import buildenv +import shutil def assert_equal(thing1, thing2): if thing1 != thing2: @@ -14,13 +16,46 @@ def assert_equal(thing1, thing2): if __name__ == '__main__': datadir = os.environ["srcdir"] + "/test/data" - command = os.environ["srcdir"] + "/wallet-utility" - - output = json.loads(check_output([command, "-datadir=" + datadir])) - - assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av"); - assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8"); - assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F"); - - - + execprog = './wallet-utility' + buildenv.exeext + execargs = '-datadir=' + datadir + 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], "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) diff --git a/src/test/walletutil_tests.cpp b/src/test/walletutil_tests.cpp deleted file mode 100644 index f0d14cafb018..000000000000 --- a/src/test/walletutil_tests.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "main.h" -#include "test/test_bitcoin.h" -#include -#include - -#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() diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index 9eef52c3b711..b52e6634d257 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -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= to tell the program where your wallet is" - << std::endl - << " -wallet= (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= 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= to tell the program where your wallet is" + << std::endl + << " -wallet= (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= if you have encrypted private keys stored in your wallet" + << std::endl; } class WalletUtilityDB : public CDB { - private: - typedef std::map MasterKeyMap; - MasterKeyMap mapMasterKeys; - unsigned int nMasterKeyMaxID; - SecureString mPass; - std::vector vMKeys; - - 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); - - bool DecryptSecret(const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext); - bool Unlock(); - bool DecryptKey(const std::vector& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key); + private: + typedef std::map MasterKeyMap; + MasterKeyMap mapMasterKeys; + unsigned int nMasterKeyMaxID; + SecureString mPass; + std::vector vMKeys; + + 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); + + bool DecryptSecret(const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext); + bool Unlock(); + bool DecryptKey(const std::vector& vchCryptedSecret, const CPubKey& vchPubKey, CKey& key); }; @@ -62,12 +62,12 @@ class WalletUtilityDB : public CDB */ 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::getAddress(CDataStream ssKey) */ 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& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext) { - CCrypter cKeyCrypter; - std::vector 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; + CCrypter cKeyCrypter; + std::vector 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; } bool WalletUtilityDB::Unlock() { - 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; + 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; } bool WalletUtilityDB::DecryptKey(const std::vector& 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 @@ bool WalletUtilityDB::DecryptKey(const std::vector& vchCryptedSec */ 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 vKey; - ssValue >> vKey; + std::vector 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 @@ std::string WalletUtilityDB::getCryptedKey(CDataStream ssKey, CDataStream ssValu */ 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; - - if (nMasterKeyMaxID < nID) - nMasterKeyMaxID = nID; - - return true; + 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; + + return true; } @@ -190,150 +190,150 @@ bool WalletUtilityDB::updateMasterKeys(CDataStream ssKey, CDataStream ssValue) */ bool WalletUtilityDB::parseKeys(bool dumppriv, std::string masterPass) { - 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; - } - - 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; - } - - 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); - - 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; - - 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 (strAddr != "") - { - if (first) - std::cout << "[ "; - else - std::cout << ", "; - } - - if (dumppriv) - { - std::cout << "{\"addr\" : \"" + strAddr + "\", " - << "\"pkey\" : \"" + strKey + "\"}" - << std::flush; - } - else - { - std::cout << "\"" + strAddr + "\""; - } - - 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; - } - - if (result == DB_LOAD_OK) - return true; - else - return false; + 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; + } + + 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; + } + + 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); + + 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; + + 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 (strAddr != "") + { + if (first) + std::cout << "[ "; + else + std::cout << ", "; + } + + if (dumppriv) + { + std::cout << "{\"addr\" : \"" + strAddr + "\", " + << "\"pkey\" : \"" + strKey + "\"}" + << std::flush; + } + else + { + std::cout << "\"" + strAddr + "\""; + } + + 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; + } + + 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; - - 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; - } - - if (result) - return 0; - else - return -1; + 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; + } + + 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; } From 05cf410839dd48882768412d2637b53e6569a677 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Fri, 29 Jul 2016 15:32:34 -0400 Subject: [PATCH 07/13] test: fix determinism of address index test --- qa/rpc-tests/addressindex.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qa/rpc-tests/addressindex.py b/qa/rpc-tests/addressindex.py index 5c4dab85ae8f..14ab61ae3e3c 100755 --- a/qa/rpc-tests/addressindex.py +++ b/qa/rpc-tests/addressindex.py @@ -23,10 +23,10 @@ def setup_chain(self): def setup_network(self): self.nodes = [] # Nodes 0/1 are "wallet" nodes - self.nodes.append(start_node(0, self.options.tmpdir, ["-debug"])) + self.nodes.append(start_node(0, self.options.tmpdir, ["-debug", "-relaypriority=0"])) self.nodes.append(start_node(1, self.options.tmpdir, ["-debug", "-addressindex"])) # Nodes 2/3 are used for testing - self.nodes.append(start_node(2, self.options.tmpdir, ["-debug", "-addressindex"])) + self.nodes.append(start_node(2, self.options.tmpdir, ["-debug", "-addressindex", "-relaypriority=0"])) self.nodes.append(start_node(3, self.options.tmpdir, ["-debug", "-addressindex"])) connect_nodes(self.nodes[0], 1) connect_nodes(self.nodes[0], 2) @@ -208,7 +208,7 @@ def run_test(self): utxos2 = self.nodes[1].getaddressutxos({"addresses": [address2]}) assert_equal(len(utxos2), 1) - assert_equal(utxos2[0]["satoshis"], 5000000000) + assert_equal(utxos2[0]["satoshis"], amount) # Check sorting of utxos self.nodes[2].generate(150) From d14a77431575d48c84d66429d576ed95065c61e8 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Tue, 5 Jul 2016 18:02:58 -0400 Subject: [PATCH 08/13] Add method to get address deltas from a block --- qa/rpc-tests/spentindex.py | 22 +++++- src/rpcblockchain.cpp | 134 +++++++++++++++++++++++++++++++++++++ src/rpcserver.cpp | 1 + src/rpcserver.h | 1 + 4 files changed, 157 insertions(+), 1 deletion(-) diff --git a/qa/rpc-tests/spentindex.py b/qa/rpc-tests/spentindex.py index c233ca019789..1366dbe315e4 100755 --- a/qa/rpc-tests/spentindex.py +++ b/qa/rpc-tests/spentindex.py @@ -104,7 +104,7 @@ def run_test(self): assert_equal(txVerbose3["vin"][0]["valueSat"], amount) # Check the database index - self.nodes[0].generate(1) + block_hash = self.nodes[0].generate(1) self.sync_all() txVerbose4 = self.nodes[3].getrawtransaction(txid2, 1) @@ -112,6 +112,26 @@ def run_test(self): assert_equal(txVerbose4["vin"][0]["value"], Decimal(unspent[0]["amount"])) assert_equal(txVerbose4["vin"][0]["valueSat"], amount) + + # Check block deltas + print "Testing getblockdeltas..." + + block = self.nodes[3].getblockdeltas(block_hash[0]) + assert_equal(len(block["deltas"]), 2) + assert_equal(block["deltas"][0]["index"], 0) + assert_equal(len(block["deltas"][0]["inputs"]), 0) + assert_equal(len(block["deltas"][0]["outputs"]), 0) + assert_equal(block["deltas"][1]["index"], 1) + assert_equal(block["deltas"][1]["txid"], txid2) + assert_equal(block["deltas"][1]["inputs"][0]["index"], 0) + assert_equal(block["deltas"][1]["inputs"][0]["address"], "mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW") + assert_equal(block["deltas"][1]["inputs"][0]["satoshis"], amount * -1) + assert_equal(block["deltas"][1]["inputs"][0]["prevtxid"], txid) + assert_equal(block["deltas"][1]["inputs"][0]["prevout"], 0) + assert_equal(block["deltas"][1]["outputs"][0]["index"], 0) + assert_equal(block["deltas"][1]["outputs"][0]["address"], "mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW") + assert_equal(block["deltas"][1]["outputs"][0]["satoshis"], amount) + print "Passed\n" diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 70ab3a98eb74..bbef4ec5df4b 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -4,6 +4,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "amount.h" +#include "base58.h" #include "chain.h" #include "chainparams.h" #include "checkpoints.h" @@ -13,6 +14,10 @@ #include "policy/policy.h" #include "primitives/transaction.h" #include "rpcserver.h" +#include "script/script.h" +#include "script/script_error.h" +#include "script/sign.h" +#include "script/standard.h" #include "streams.h" #include "sync.h" #include "txmempool.h" @@ -86,6 +91,112 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex) return result; } +UniValue blockToDeltasJSON(const CBlock& block, const CBlockIndex* blockindex) +{ + UniValue result(UniValue::VOBJ); + result.push_back(Pair("hash", block.GetHash().GetHex())); + int confirmations = -1; + // Only report confirmations if the block is on the main chain + if (chainActive.Contains(blockindex)) { + confirmations = chainActive.Height() - blockindex->nHeight + 1; + } else { + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block is an orphan"); + } + result.push_back(Pair("confirmations", confirmations)); + result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION))); + result.push_back(Pair("height", blockindex->nHeight)); + result.push_back(Pair("version", block.nVersion)); + result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); + + UniValue deltas(UniValue::VARR); + + for (unsigned int i = 0; i < block.vtx.size(); i++) { + const CTransaction &tx = block.vtx[i]; + const uint256 txhash = tx.GetHash(); + + UniValue entry(UniValue::VOBJ); + entry.push_back(Pair("txid", txhash.GetHex())); + entry.push_back(Pair("index", (int)i)); + + UniValue inputs(UniValue::VARR); + + if (!tx.IsCoinBase()) { + + for (size_t j = 0; j < tx.vin.size(); j++) { + const CTxIn input = tx.vin[j]; + + UniValue delta(UniValue::VOBJ); + + CSpentIndexValue spentInfo; + CSpentIndexKey spentKey(input.prevout.hash, input.prevout.n); + + if (GetSpentIndex(spentKey, spentInfo)) { + if (spentInfo.addressType == 1) { + delta.push_back(Pair("address", CBitcoinAddress(CKeyID(spentInfo.addressHash)).ToString())); + } else if (spentInfo.addressType == 2) { + delta.push_back(Pair("address", CBitcoinAddress(CScriptID(spentInfo.addressHash)).ToString())); + } else { + continue; + } + delta.push_back(Pair("satoshis", -1 * spentInfo.satoshis)); + delta.push_back(Pair("index", (int)j)); + delta.push_back(Pair("prevtxid", input.prevout.hash.GetHex())); + delta.push_back(Pair("prevout", (int)input.prevout.n)); + + inputs.push_back(delta); + } else { + throw JSONRPCError(RPC_INTERNAL_ERROR, "Spent information not available"); + } + + } + } + + entry.push_back(Pair("inputs", inputs)); + + UniValue outputs(UniValue::VARR); + + for (unsigned int k = 0; k < tx.vout.size(); k++) { + const CTxOut &out = tx.vout[k]; + + UniValue delta(UniValue::VOBJ); + + if (out.scriptPubKey.IsPayToScriptHash()) { + vector hashBytes(out.scriptPubKey.begin()+2, out.scriptPubKey.begin()+22); + delta.push_back(Pair("address", CBitcoinAddress(CScriptID(uint160(hashBytes))).ToString())); + + } else if (out.scriptPubKey.IsPayToPublicKeyHash()) { + vector hashBytes(out.scriptPubKey.begin()+3, out.scriptPubKey.begin()+23); + delta.push_back(Pair("address", CBitcoinAddress(CKeyID(uint160(hashBytes))).ToString())); + } else { + continue; + } + + delta.push_back(Pair("satoshis", out.nValue)); + delta.push_back(Pair("index", (int)k)); + + outputs.push_back(delta); + } + + entry.push_back(Pair("outputs", outputs)); + deltas.push_back(entry); + + } + result.push_back(Pair("deltas", deltas)); + result.push_back(Pair("time", block.GetBlockTime())); + result.push_back(Pair("mediantime", (int64_t)blockindex->GetMedianTimePast())); + result.push_back(Pair("nonce", (uint64_t)block.nNonce)); + result.push_back(Pair("bits", strprintf("%08x", block.nBits))); + result.push_back(Pair("difficulty", GetDifficulty(blockindex))); + result.push_back(Pair("chainwork", blockindex->nChainWork.GetHex())); + + if (blockindex->pprev) + result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); + CBlockIndex *pnext = chainActive.Next(blockindex); + if (pnext) + result.push_back(Pair("nextblockhash", pnext->GetBlockHash().GetHex())); + return result; +} + UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails = false) { UniValue result(UniValue::VOBJ); @@ -275,6 +386,29 @@ UniValue getrawmempool(const UniValue& params, bool fHelp) return mempoolToJSON(fVerbose); } +UniValue getblockdeltas(const UniValue& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error(""); + + std::string strHash = params[0].get_str(); + uint256 hash(uint256S(strHash)); + + if (mapBlockIndex.count(hash) == 0) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); + + CBlock block; + CBlockIndex* pblockindex = mapBlockIndex[hash]; + + if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0) + throw JSONRPCError(RPC_INTERNAL_ERROR, "Block not available (pruned data)"); + + if(!ReadBlockFromDisk(block, pblockindex, Params().GetConsensus())) + throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk"); + + return blockToDeltasJSON(block, pblockindex); +} + UniValue getblockhashes(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 2) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index eb3060c51d96..207be5b5a0b0 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -278,6 +278,7 @@ static const CRPCCommand vRPCCommands[] = { "blockchain", "getbestblockhash", &getbestblockhash, true }, { "blockchain", "getblockcount", &getblockcount, true }, { "blockchain", "getblock", &getblock, true }, + { "blockchain", "getblockdeltas", &getblockdeltas, false }, { "blockchain", "getblockhashes", &getblockhashes, true }, { "blockchain", "getblockhash", &getblockhash, true }, { "blockchain", "getblockheader", &getblockheader, true }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 581370c26bf4..ab1604697d42 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -262,6 +262,7 @@ extern UniValue settxfee(const UniValue& params, bool fHelp); extern UniValue getmempoolinfo(const UniValue& params, bool fHelp); extern UniValue getrawmempool(const UniValue& params, bool fHelp); extern UniValue getblockhashes(const UniValue& params, bool fHelp); +extern UniValue getblockdeltas(const UniValue& params, bool fHelp); extern UniValue getblockhash(const UniValue& params, bool fHelp); extern UniValue getblockheader(const UniValue& params, bool fHelp); extern UniValue getblock(const UniValue& params, bool fHelp); From c8458bf963e2855ebd361b9caf82034cbd86ecdd Mon Sep 17 00:00:00 2001 From: Chethan Krishna Date: Thu, 21 Jul 2016 16:52:51 -0400 Subject: [PATCH 09/13] logical timestamp indexing of block hashes --- qa/rpc-tests/timestampindex.py | 22 ++++++++---- src/main.cpp | 25 +++++++++++--- src/main.h | 61 +++++++++++++++++++++++++++++++++- src/rpcblockchain.cpp | 52 +++++++++++++++++++++++++---- src/rpcclient.cpp | 1 + src/txdb.cpp | 40 ++++++++++++++++++++-- src/txdb.h | 7 +++- 7 files changed, 187 insertions(+), 21 deletions(-) diff --git a/qa/rpc-tests/timestampindex.py b/qa/rpc-tests/timestampindex.py index 46ff710bdf37..289c81b2a521 100755 --- a/qa/rpc-tests/timestampindex.py +++ b/qa/rpc-tests/timestampindex.py @@ -35,15 +35,25 @@ def setup_network(self): self.sync_all() def run_test(self): - print "Mining 5 blocks..." - blockhashes = self.nodes[0].generate(5) - low = self.nodes[0].getblock(blockhashes[0])["time"] - high = self.nodes[0].getblock(blockhashes[4])["time"] + print "Mining 25 blocks..." + blockhashes = self.nodes[0].generate(25) + time.sleep(3) + print "Mining 25 blocks..." + blockhashes.extend(self.nodes[0].generate(25)) + time.sleep(3) + print "Mining 25 blocks..." + blockhashes.extend(self.nodes[0].generate(25)) self.sync_all() + low = self.nodes[1].getblock(blockhashes[0])["time"] + high = low + 76 + print "Checking timestamp index..." hashes = self.nodes[1].getblockhashes(high, low) - assert_equal(len(hashes), 5) - assert_equal(sorted(blockhashes), sorted(hashes)) + + assert_equal(len(hashes), len(blockhashes)) + + assert_equal(hashes, blockhashes) + print "Passed\n" diff --git a/src/main.cpp b/src/main.cpp index 1092d3563054..5e5fbae2e371 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1451,12 +1451,12 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa return res; } -bool GetTimestampIndex(const unsigned int &high, const unsigned int &low, std::vector &hashes) +bool GetTimestampIndex(const unsigned int &high, const unsigned int &low, const bool fActiveOnly, std::vector > &hashes) { if (!fTimestampIndex) return error("Timestamp index not enabled"); - if (!pblocktree->ReadTimestampIndex(high, low, hashes)) + if (!pblocktree->ReadTimestampIndex(high, low, fActiveOnly, hashes)) return error("Unable to get hashes for timestamps"); return true; @@ -2648,10 +2648,27 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin if (!pblocktree->UpdateSpentIndex(spentIndex)) return AbortNode(state, "Failed to write transaction index"); - if (fTimestampIndex) - if (!pblocktree->WriteTimestampIndex(CTimestampIndexKey(pindex->nTime, pindex->GetBlockHash()))) + if (fTimestampIndex) { + unsigned int logicalTS = pindex->nTime; + unsigned int prevLogicalTS = 0; + + // retrieve logical timestamp of the previous block + if (pindex->pprev) + if (!pblocktree->ReadTimestampBlockIndex(pindex->pprev->GetBlockHash(), prevLogicalTS)) + LogPrintf("%s: Failed to read previous block's logical timestamp", __func__); + + if (logicalTS <= prevLogicalTS) { + logicalTS = prevLogicalTS + 1; + LogPrintf("%s: Previous logical timestamp is newer Actual[%d] prevLogical[%d] Logical[%d]\n", __func__, pindex->nTime, prevLogicalTS, logicalTS); + } + + if (!pblocktree->WriteTimestampIndex(CTimestampIndexKey(logicalTS, pindex->GetBlockHash()))) return AbortNode(state, "Failed to write timestamp index"); + if (!pblocktree->WriteTimestampBlockIndex(CTimestampBlockIndexKey(pindex->GetBlockHash()), CTimestampBlockIndexValue(logicalTS))) + return AbortNode(state, "Failed to write blockhash index"); + } + // add this block to the view's block chain view.SetBestBlock(pindex->GetBlockHash()); diff --git a/src/main.h b/src/main.h index 3f8a3fb32a21..8d1565a89769 100644 --- a/src/main.h +++ b/src/main.h @@ -355,6 +355,65 @@ struct CTimestampIndexKey { } }; +struct CTimestampBlockIndexKey { + uint256 blockHash; + + size_t GetSerializeSize(int nType, int nVersion) const { + return 32; + } + + template + void Serialize(Stream& s, int nType, int nVersion) const { + blockHash.Serialize(s, nType, nVersion); + } + + template + void Unserialize(Stream& s, int nType, int nVersion) { + blockHash.Unserialize(s, nType, nVersion); + } + + CTimestampBlockIndexKey(uint256 hash) { + blockHash = hash; + } + + CTimestampBlockIndexKey() { + SetNull(); + } + + void SetNull() { + blockHash.SetNull(); + } +}; + +struct CTimestampBlockIndexValue { + unsigned int ltimestamp; + size_t GetSerializeSize(int nType, int nVersion) const { + return 4; + } + + template + void Serialize(Stream& s, int nType, int nVersion) const { + ser_writedata32be(s, ltimestamp); + } + + template + void Unserialize(Stream& s, int nType, int nVersion) { + ltimestamp = ser_readdata32be(s); + } + + CTimestampBlockIndexValue (unsigned int time) { + ltimestamp = time; + } + + CTimestampBlockIndexValue() { + SetNull(); + } + + void SetNull() { + ltimestamp = 0; + } +}; + struct CAddressUnspentKey { unsigned int type; uint160 hashBytes; @@ -697,7 +756,7 @@ class CScriptCheck ScriptError GetScriptError() const { return error; } }; -bool GetTimestampIndex(const unsigned int &high, const unsigned int &low, std::vector &hashes); +bool GetTimestampIndex(const unsigned int &high, const unsigned int &low, const bool fActiveOnly, std::vector > &hashes); bool GetSpentIndex(CSpentIndexKey &key, CSpentIndexValue &value); bool GetAddressIndex(uint160 addressHash, int type, std::vector > &addressIndex, diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 70ab3a98eb74..1aa842778ff4 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -275,35 +275,75 @@ UniValue getrawmempool(const UniValue& params, bool fHelp) return mempoolToJSON(fVerbose); } + UniValue getblockhashes(const UniValue& params, bool fHelp) { - if (fHelp || params.size() != 2) + if (fHelp || params.size() < 2) throw runtime_error( "getblockhashes timestamp\n" "\nReturns array of hashes of blocks within the timestamp range provided.\n" "\nArguments:\n" "1. high (numeric, required) The newer block timestamp\n" "2. low (numeric, required) The older block timestamp\n" + "3. options (string, required) A json object\n" + " {\n" + " \"noOrphans\":true (boolean) will only include blocks on the main chain\n" + " \"logicalTimes\":true (boolean) will include logical timestamps with hashes\n" + " }\n" "\nResult:\n" "[\n" " \"hash\" (string) The block hash\n" "]\n" + "[\n" + " {\n" + " \"blockhash\": (string) The block hash\n" + " \"logicalts\": (numeric) The logical timestamp\n" + " }\n" + "]\n" "\nExamples:\n" + HelpExampleCli("getblockhashes", "1231614698 1231024505") + HelpExampleRpc("getblockhashes", "1231614698, 1231024505") - ); + + HelpExampleCli("getblockhashes", "1231614698 1231024505 '{\"noOrphans\":false, \"logicalTimes\":true}'") + ); unsigned int high = params[0].get_int(); unsigned int low = params[1].get_int(); - std::vector blockHashes; + bool fActiveOnly = false; + bool fLogicalTS = false; + + if (params.size() > 2) { + if (params[2].isObject()) { + UniValue noOrphans = find_value(params[2].get_obj(), "noOrphans"); + UniValue returnLogical = find_value(params[2].get_obj(), "logicalTimes"); - if (!GetTimestampIndex(high, low, blockHashes)) { + if (noOrphans.isBool()) + fActiveOnly = noOrphans.get_bool(); + + if (returnLogical.isBool()) + fLogicalTS = returnLogical.get_bool(); + } + } + + std::vector > blockHashes; + + if (fActiveOnly) + LOCK(cs_main); + + if (!GetTimestampIndex(high, low, fActiveOnly, blockHashes)) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "No information available for block hashes"); } UniValue result(UniValue::VARR); - for (std::vector::const_iterator it=blockHashes.begin(); it!=blockHashes.end(); it++) { - result.push_back(it->GetHex()); + + for (std::vector >::const_iterator it=blockHashes.begin(); it!=blockHashes.end(); it++) { + if (fLogicalTS) { + UniValue item(UniValue::VOBJ); + item.push_back(Pair("blockhash", it->first.GetHex())); + item.push_back(Pair("logicalts", (int)it->second)); + result.push_back(item); + } else { + result.push_back(it->first.GetHex()); + } } return result; diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp index 27a09c0fc4b6..d187163db27c 100644 --- a/src/rpcclient.cpp +++ b/src/rpcclient.cpp @@ -104,6 +104,7 @@ static const CRPCConvertParam vRPCConvertParams[] = { "setban", 3 }, { "getblockhashes", 0 }, { "getblockhashes", 1 }, + { "getblockhashes", 2 }, { "getspentinfo", 0}, { "getaddresstxids", 0}, { "getaddressbalance", 0}, diff --git a/src/txdb.cpp b/src/txdb.cpp index 48150198f3a3..f6104e0d07f1 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -24,6 +24,7 @@ static const char DB_TXINDEX = 't'; static const char DB_ADDRESSINDEX = 'a'; static const char DB_ADDRESSUNSPENTINDEX = 'u'; static const char DB_TIMESTAMPINDEX = 's'; +static const char DB_BLOCKHASHINDEX = 'z'; static const char DB_SPENTINDEX = 'p'; static const char DB_BLOCK_INDEX = 'b'; @@ -275,7 +276,7 @@ bool CBlockTreeDB::WriteTimestampIndex(const CTimestampIndexKey ×tampIndex) return WriteBatch(batch); } -bool CBlockTreeDB::ReadTimestampIndex(const unsigned int &high, const unsigned int &low, std::vector &hashes) { +bool CBlockTreeDB::ReadTimestampIndex(const unsigned int &high, const unsigned int &low, const bool fActiveOnly, std::vector > &hashes) { boost::scoped_ptr pcursor(NewIterator()); @@ -284,8 +285,15 @@ bool CBlockTreeDB::ReadTimestampIndex(const unsigned int &high, const unsigned i while (pcursor->Valid()) { boost::this_thread::interruption_point(); std::pair key; - if (pcursor->GetKey(key) && key.first == DB_TIMESTAMPINDEX && key.second.timestamp <= high) { - hashes.push_back(key.second.blockHash); + if (pcursor->GetKey(key) && key.first == DB_TIMESTAMPINDEX && key.second.timestamp < high) { + if (fActiveOnly) { + if (blockOnchainActive(key.second.blockHash)) { + hashes.push_back(std::make_pair(key.second.blockHash, key.second.timestamp)); + } + } else { + hashes.push_back(std::make_pair(key.second.blockHash, key.second.timestamp)); + } + pcursor->Next(); } else { break; @@ -295,6 +303,22 @@ bool CBlockTreeDB::ReadTimestampIndex(const unsigned int &high, const unsigned i return true; } +bool CBlockTreeDB::WriteTimestampBlockIndex(const CTimestampBlockIndexKey &blockhashIndex, const CTimestampBlockIndexValue &logicalts) { + CDBBatch batch(&GetObfuscateKey()); + batch.Write(make_pair(DB_BLOCKHASHINDEX, blockhashIndex), logicalts); + return WriteBatch(batch); +} + +bool CBlockTreeDB::ReadTimestampBlockIndex(const uint256 &hash, unsigned int <imestamp) { + + CTimestampBlockIndexValue(lts); + if (!Read(std::make_pair(DB_BLOCKHASHINDEX, hash), lts)) + return false; + + ltimestamp = lts.ltimestamp; + return true; +} + bool CBlockTreeDB::WriteFlag(const std::string &name, bool fValue) { return Write(std::make_pair(DB_FLAG, name), fValue ? '1' : '0'); } @@ -307,6 +331,16 @@ bool CBlockTreeDB::ReadFlag(const std::string &name, bool &fValue) { return true; } +bool CBlockTreeDB::blockOnchainActive(const uint256 &hash) { + CBlockIndex* pblockindex = mapBlockIndex[hash]; + + if (!chainActive.Contains(pblockindex)) { + return false; + } + + return true; +} + bool CBlockTreeDB::LoadBlockIndexGuts() { boost::scoped_ptr pcursor(NewIterator()); diff --git a/src/txdb.h b/src/txdb.h index 14d501278f23..223452c88a74 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -24,6 +24,8 @@ struct CAddressIndexIteratorKey; struct CAddressIndexIteratorHeightKey; struct CTimestampIndexKey; struct CTimestampIndexIteratorKey; +struct CTimestampBlockIndexKey; +struct CTimestampBlockIndexValue; struct CSpentIndexKey; struct CSpentIndexValue; class uint256; @@ -77,10 +79,13 @@ class CBlockTreeDB : public CDBWrapper std::vector > &addressIndex, int start = 0, int end = 0); bool WriteTimestampIndex(const CTimestampIndexKey ×tampIndex); - bool ReadTimestampIndex(const unsigned int &high, const unsigned int &low, std::vector &vect); + bool ReadTimestampIndex(const unsigned int &high, const unsigned int &low, const bool fActiveOnly, std::vector > &vect); + bool WriteTimestampBlockIndex(const CTimestampBlockIndexKey &blockhashIndex, const CTimestampBlockIndexValue &logicalts); + bool ReadTimestampBlockIndex(const uint256 &hash, unsigned int &logicalTS); bool WriteFlag(const std::string &name, bool fValue); bool ReadFlag(const std::string &name, bool &fValue); bool LoadBlockIndexGuts(); + bool blockOnchainActive(const uint256 &hash); }; #endif // BITCOIN_TXDB_H From 36f5ee5ff37c4b27f9d50db5ef975f792bf7c71a Mon Sep 17 00:00:00 2001 From: Chethan Krishna Date: Wed, 17 Aug 2016 10:32:34 -0400 Subject: [PATCH 10/13] Add a new line to print --- src/main.cpp | 2 +- src/rpcblockchain.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5e5fbae2e371..88905b2d5c38 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2655,7 +2655,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin // retrieve logical timestamp of the previous block if (pindex->pprev) if (!pblocktree->ReadTimestampBlockIndex(pindex->pprev->GetBlockHash(), prevLogicalTS)) - LogPrintf("%s: Failed to read previous block's logical timestamp", __func__); + LogPrintf("%s: Failed to read previous block's logical timestamp\n", __func__); if (logicalTS <= prevLogicalTS) { logicalTS = prevLogicalTS + 1; diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 1aa842778ff4..790555bddcaa 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -275,7 +275,6 @@ UniValue getrawmempool(const UniValue& params, bool fHelp) return mempoolToJSON(fVerbose); } - UniValue getblockhashes(const UniValue& params, bool fHelp) { if (fHelp || params.size() < 2) From 491d6eb053858f75c76e58aac5a0622dfe88aa74 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 22 Aug 2016 18:29:06 -0400 Subject: [PATCH 11/13] rpc: option to include chain info in address index results --- qa/rpc-tests/addressindex.py | 23 +++++++++++- src/rpcmisc.cpp | 73 ++++++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 9 deletions(-) diff --git a/qa/rpc-tests/addressindex.py b/qa/rpc-tests/addressindex.py index 14ab61ae3e3c..8b0b6d38af41 100755 --- a/qa/rpc-tests/addressindex.py +++ b/qa/rpc-tests/addressindex.py @@ -171,7 +171,7 @@ def run_test(self): assert_equal(balance2["balance"], change_amount) # Check that deltas are returned correctly - deltas = self.nodes[1].getaddressdeltas({"addresses": [address2], "start": 0, "end": 200}) + deltas = self.nodes[1].getaddressdeltas({"addresses": [address2], "start": 1, "end": 200}) balance3 = 0 for delta in deltas: balance3 += delta["satoshis"] @@ -321,6 +321,27 @@ def run_test(self): mempool_deltas = self.nodes[2].getaddressmempool({"addresses": [address1]}) assert_equal(len(mempool_deltas), 2) + # Include chaininfo in results + print "Testing results with chain info..." + + deltas_with_info = self.nodes[1].getaddressdeltas({ + "addresses": [address2], + "start": 1, + "end": 200, + "chainInfo": True + }) + start_block_hash = self.nodes[1].getblockhash(1); + end_block_hash = self.nodes[1].getblockhash(200); + assert_equal(deltas_with_info["start"]["height"], 1) + assert_equal(deltas_with_info["start"]["hash"], start_block_hash) + assert_equal(deltas_with_info["end"]["height"], 200) + assert_equal(deltas_with_info["end"]["hash"], end_block_hash) + + utxos_with_info = self.nodes[1].getaddressutxos({"addresses": [address2], "chainInfo": True}) + expected_tip_block_hash = self.nodes[1].getblockhash(267); + assert_equal(utxos_with_info["height"], 267) + assert_equal(utxos_with_info["hash"], expected_tip_block_hash) + print "Passed\n" diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 328e9eb29062..10477824a1d0 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -539,7 +539,8 @@ UniValue getaddressutxos(const UniValue& params, bool fHelp) " [\n" " \"address\" (string) The base58check encoded address\n" " ,...\n" - " ]\n" + " ],\n" + " \"chainInfo\" (boolean) Include chain info with results\n" "}\n" "\nResult\n" "[\n" @@ -555,7 +556,15 @@ UniValue getaddressutxos(const UniValue& params, bool fHelp) "\nExamples:\n" + HelpExampleCli("getaddressutxos", "'{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}'") + HelpExampleRpc("getaddressutxos", "{\"addresses\": [\"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX\"]}") - ); + ); + + bool includeChainInfo = false; + if (params[0].isObject()) { + UniValue chainInfo = find_value(params[0].get_obj(), "chainInfo"); + if (chainInfo.isBool()) { + includeChainInfo = chainInfo.get_bool(); + } + } std::vector > addresses; @@ -573,7 +582,7 @@ UniValue getaddressutxos(const UniValue& params, bool fHelp) std::sort(unspentOutputs.begin(), unspentOutputs.end(), heightSort); - UniValue result(UniValue::VARR); + UniValue utxos(UniValue::VARR); for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { UniValue output(UniValue::VOBJ); @@ -588,10 +597,20 @@ UniValue getaddressutxos(const UniValue& params, bool fHelp) output.push_back(Pair("script", HexStr(it->second.script.begin(), it->second.script.end()))); output.push_back(Pair("satoshis", it->second.satoshis)); output.push_back(Pair("height", it->second.blockHeight)); - result.push_back(output); + utxos.push_back(output); } - return result; + if (includeChainInfo) { + UniValue result(UniValue::VOBJ); + result.push_back(Pair("utxos", utxos)); + + LOCK(cs_main); + result.push_back(Pair("hash", chainActive.Tip()->GetBlockHash().GetHex())); + result.push_back(Pair("height", (int)chainActive.Height())); + return result; + } else { + return utxos; + } } UniValue getaddressdeltas(const UniValue& params, bool fHelp) @@ -609,6 +628,7 @@ UniValue getaddressdeltas(const UniValue& params, bool fHelp) " ]\n" " \"start\" (number) The start block height\n" " \"end\" (number) The end block height\n" + " \"chainInfo\" (boolean) Include chain info in results, only applies if start and end specified\n" "}\n" "\nResult:\n" "[\n" @@ -629,12 +649,21 @@ UniValue getaddressdeltas(const UniValue& params, bool fHelp) UniValue startValue = find_value(params[0].get_obj(), "start"); UniValue endValue = find_value(params[0].get_obj(), "end"); + UniValue chainInfo = find_value(params[0].get_obj(), "chainInfo"); + bool includeChainInfo = false; + if (chainInfo.isBool()) { + includeChainInfo = chainInfo.get_bool(); + } + int start = 0; int end = 0; if (startValue.isNum() && endValue.isNum()) { start = startValue.get_int(); end = endValue.get_int(); + if (start <= 0 || end <= 0) { + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Start and end is expected to be greater than zero"); + } if (end < start) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "End value is expected to be greater than start"); } @@ -660,7 +689,7 @@ UniValue getaddressdeltas(const UniValue& params, bool fHelp) } } - UniValue result(UniValue::VARR); + UniValue deltas(UniValue::VARR); for (std::vector >::const_iterator it=addressIndex.begin(); it!=addressIndex.end(); it++) { std::string address; @@ -675,10 +704,38 @@ UniValue getaddressdeltas(const UniValue& params, bool fHelp) delta.push_back(Pair("blockindex", (int)it->first.txindex)); delta.push_back(Pair("height", it->first.blockHeight)); delta.push_back(Pair("address", address)); - result.push_back(delta); + deltas.push_back(delta); } - return result; + UniValue result(UniValue::VOBJ); + + if (includeChainInfo && start > 0 && end > 0) { + LOCK(cs_main); + + if (start > chainActive.Height() || end > chainActive.Height()) { + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Start or end is outside chain range"); + } + + CBlockIndex* startIndex = chainActive[start]; + CBlockIndex* endIndex = chainActive[end]; + + UniValue startInfo(UniValue::VOBJ); + UniValue endInfo(UniValue::VOBJ); + + startInfo.push_back(Pair("hash", startIndex->GetBlockHash().GetHex())); + startInfo.push_back(Pair("height", start)); + + endInfo.push_back(Pair("hash", endIndex->GetBlockHash().GetHex())); + endInfo.push_back(Pair("height", end)); + + result.push_back(Pair("deltas", deltas)); + result.push_back(Pair("start", startInfo)); + result.push_back(Pair("end", endInfo)); + + return result; + } else { + return deltas; + } } UniValue getaddressbalance(const UniValue& params, bool fHelp) From b3e63c2d3d584f362288cc6b23e2dfc83d8b730e Mon Sep 17 00:00:00 2001 From: snogcel Date: Wed, 28 Dec 2016 17:53:20 -0700 Subject: [PATCH 12/13] fix tests --- qa/rpc-tests/spentindex.py | 4 ++-- src/test/data/wallet.dat | Bin 16384 -> 671744 bytes src/test/wallet-utility.py | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/qa/rpc-tests/spentindex.py b/qa/rpc-tests/spentindex.py index c6f9e9abe38a..bd945ec6e9a7 100755 --- a/qa/rpc-tests/spentindex.py +++ b/qa/rpc-tests/spentindex.py @@ -124,12 +124,12 @@ def run_test(self): assert_equal(block["deltas"][1]["index"], 1) assert_equal(block["deltas"][1]["txid"], txid2) assert_equal(block["deltas"][1]["inputs"][0]["index"], 0) - assert_equal(block["deltas"][1]["inputs"][0]["address"], "mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW") + assert_equal(block["deltas"][1]["inputs"][0]["address"], "yeMpGzMj3rhtnz48XsfpB8itPHhHtgxLc3") assert_equal(block["deltas"][1]["inputs"][0]["satoshis"], amount * -1) assert_equal(block["deltas"][1]["inputs"][0]["prevtxid"], txid) assert_equal(block["deltas"][1]["inputs"][0]["prevout"], 0) assert_equal(block["deltas"][1]["outputs"][0]["index"], 0) - assert_equal(block["deltas"][1]["outputs"][0]["address"], "mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW") + assert_equal(block["deltas"][1]["outputs"][0]["address"], "yeMpGzMj3rhtnz48XsfpB8itPHhHtgxLc3") assert_equal(block["deltas"][1]["outputs"][0]["satoshis"], amount) print "Passed\n" diff --git a/src/test/data/wallet.dat b/src/test/data/wallet.dat index d1352c06731a3b74b642eeef2dc5acaaa8a7b025..105d8923e800127c62ab6e6706e0b3009c1ac6db 100644 GIT binary patch literal 671744 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�jvAM2tq?g=Lc$qv7w=3IGa0JG3i;|R8rCM(bG}5 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

(0&Qrx4?Kv{b2;C_VbSp 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 literal 16384 zcmeI&cT5vu6aet=JFb+{CAi}%N(@23Dg=q*s0=}kiA+&Zsi~oYR4ZsCYOEq6;;5wo z!~p^SaDfwKh%-@3z&!{xYDE+2 zg%0Ti7UIx@e$>)AK*)-I&Il1TPLyv%1ht#pVU=J+{Eru@ZJi;a9?dzwZ-GY;009sH z0T2KI5C8!X009sH0T2Lz-WH&Hb!NX#Afpho+J#2p&)ezq6j2NG|Fi@I2!H?xfB*=9 z00@8p2!H?xfB*>eT>-MQ(pW4q_owIX|1|$^p3^sfA`vy{PXGVweFNtG zVGRNx00JNY0w4eaAOHd&00JNY0wB;k0(Ae+?AHgNTO7=C;=0(*5c&!{_+C5@!3(|< z?;&@%?JZ6cH=cV?m?qrE-@^YOd`I0Q009CZ00JNY0w4eaAn^YM<{|9(2&0D6$>H?D zC8S-%`hg+j^Rv0{vR$QGt6W{#be1yr>3Pr5>+OQ4b$70n30%KB?)mS3kE6a9%9Z|4sSlk(d z&%`HLlJ{eVmWJI3+!;3cWsYjQShbaUtJuYw?VKD?Jr!fZ0h#_DUrnZt@nUNdBNDSo z2Vz6Tip`(&WhX;(q}u8oTsD#2QR`amR1?vvS~RGAaOUsXzLpl~>k9*Nrd+fs|;VPi&VZ36z`ezSbySvTFs7Byy6(ifw zBd$Dz=}YdnUEdX&jWC~L6 zcE-=mpf)^D*014|HQf_1YQa*fZn$>U!ka(VLJ#Ecss(d?2{|CZ`hr8~>}7-8jKk;H zD_s&QPDQmSy<(#09KYt)UvAtz?#jin!AU3h&Z)6;7i1W)oxbT@VSgS!k26HO@@WdA z7U&|TgINpgu&kzM+h%_D{PIC3$QbLLp7K=F$ZB=4ZXKCibU0*T->L;m7?B6Zg}cVK zor|u>`@~UBsW>)2KW3ZEeb=R`OM5#i7rbTEf~8d5aQ$a3^gw=U&Y%8|KsMCx%{rNK Jty~d@z5y4K>5BjW diff --git a/src/test/wallet-utility.py b/src/test/wallet-utility.py index b853a227e984..50e11ecd79dc 100755 --- a/src/test/wallet-utility.py +++ b/src/test/wallet-utility.py @@ -29,9 +29,9 @@ def assert_equal(thing1, thing2): output = json.loads(outs[0]) - assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av") - assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8") - assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F") + assert_equal(output[0], "XwKHjUS2pS4inZT8nkqDSybMHi5hCYNSNx") + assert_equal(output[1], "XrihbS2Y29C3Gca72UWJiarUeaCHu7wumB") + assert_equal(output[2], "XqWwRpETvism6uSiAv2oHj4gxzUvtxSNkW") execargs = '-datadir=' + datadir + ' -dumppass' execrun = execprog + ' ' + execargs @@ -45,12 +45,12 @@ def assert_equal(thing1, thing2): 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") + assert_equal(output[0]['addr'], "XwKHjUS2pS4inZT8nkqDSybMHi5hCYNSNx") + assert_equal(output[0]['pkey'], "XKk4fT2aB1pW5sGa6pBF8MA4bUaAcVEpWUnZQWzDc2XKUBkvxDq1") + assert_equal(output[1]['addr'], "XrihbS2Y29C3Gca72UWJiarUeaCHu7wumB") + assert_equal(output[1]['pkey'], "XBMge2M9Fd9YvCw3JqSE1aWEw56xJeRxRcQvb3JztsR45yK12s1H") + assert_equal(output[2]['addr'], "XqWwRpETvism6uSiAv2oHj4gxzUvtxSNkW") + assert_equal(output[2]['pkey'], "XBL71uLhA2p8q3qtXRSaLuQ5rwRb9gxFAeuhSbofwNcr26bGexfG") if os.path.exists(datadir + '/database'): if os.path.isdir(datadir + '/database'): From 95535458382855d2a027f6325786bbb9bc2878f5 Mon Sep 17 00:00:00 2001 From: snogcel Date: Wed, 28 Dec 2016 18:24:14 -0700 Subject: [PATCH 13/13] dashify wallet utility --- src/wallet-utility.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index b52e6634d257..8771b67ed10f 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -12,7 +12,7 @@ void show_help() { std::cout << - "This program outputs Bitcoin addresses and private keys from a wallet.dat file" << std::endl + "This program outputs Dash addresses and private keys from a wallet.dat file" << std::endl << std::endl << "Usage and options: " << std::endl