From 0fbab55b1b85224f6267b81d74c395acbf35e663 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 17 Nov 2016 19:09:45 +1300 Subject: [PATCH] Add benchmark for attempting decryption of notes --- qa/zcash/performance-measurements.sh | 11 ++++++++++- src/wallet/rpcwallet.cpp | 5 ++++- src/zcbenchmarks.cpp | 20 ++++++++++++++++++++ src/zcbenchmarks.h | 1 + 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/qa/zcash/performance-measurements.sh b/qa/zcash/performance-measurements.sh index 2e99ab2d6..84d3e4cf3 100755 --- a/qa/zcash/performance-measurements.sh +++ b/qa/zcash/performance-measurements.sh @@ -56,7 +56,7 @@ function zcashd_valgrind_stop { case "$1" in *) case "$2" in - verifyjoinsplit) + verifyjoinsplit|trydecryptnotes) zcashd_start RAWJOINSPLIT=$(zcash_rpc zcsamplejoinsplit) zcashd_stop @@ -88,6 +88,9 @@ case "$1" in validatelargetx) zcash_rpc zcbenchmark validatelargetx 5 ;; + trydecryptnotes) + zcash_rpc zcbenchmark trydecryptnotes 1000 "\"$RAWJOINSPLIT\"" + ;; *) zcashd_stop echo "Bad arguments." @@ -116,6 +119,9 @@ case "$1" in verifyequihash) zcash_rpc zcbenchmark verifyequihash 1 ;; + trydecryptnotes) + zcash_rpc zcbenchmark trydecryptnotes 1 "\"$RAWJOINSPLIT\"" + ;; *) zcashd_massif_stop echo "Bad arguments." @@ -145,6 +151,9 @@ case "$1" in verifyequihash) zcash_rpc zcbenchmark verifyequihash 1 ;; + trydecryptnotes) + zcash_rpc zcbenchmark trydecryptnotes 1 "\"$RAWJOINSPLIT\"" + ;; *) zcashd_valgrind_stop echo "Bad arguments." diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index b10a08efe..d33c35781 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2454,7 +2454,8 @@ Value zc_benchmark(const json_spirit::Array& params, bool fHelp) JSDescription samplejoinsplit; - if (benchmarktype == "verifyjoinsplit") { + if (benchmarktype == "verifyjoinsplit" || + benchmarktype == "trydecryptnotes") { CDataStream ss(ParseHexV(params[2].get_str(), "js"), SER_NETWORK, PROTOCOL_VERSION); ss >> samplejoinsplit; } @@ -2480,6 +2481,8 @@ Value zc_benchmark(const json_spirit::Array& params, bool fHelp) sample_times.push_back(benchmark_verify_equihash()); } else if (benchmarktype == "validatelargetx") { sample_times.push_back(benchmark_large_tx()); + } else if (benchmarktype == "trydecryptnotes") { + sample_times.push_back(benchmark_try_decrypt_notes(samplejoinsplit)); } else { throw JSONRPCError(RPC_TYPE_ERROR, "Invalid benchmarktype"); } diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 1d60fdde7..6374141b8 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -223,3 +223,23 @@ double benchmark_large_tx() return timer_stop(tv_start); } +double benchmark_try_decrypt_notes(const JSDescription &joinsplit) +{ + const size_t NUM_ADDRS = 10; + + CWallet wallet; + for (int i = 0; i < NUM_ADDRS; i++) { + auto sk = libzcash::SpendingKey::random(); + wallet.AddSpendingKey(sk); + } + + CMutableTransaction mtx; + mtx.vjoinsplit.push_back(joinsplit); + CTransaction tx(mtx); + + struct timeval tv_start; + timer_start(tv_start); + auto nd = wallet.FindMyNotes(tx); + return timer_stop(tv_start); +} + diff --git a/src/zcbenchmarks.h b/src/zcbenchmarks.h index b81d4a707..9a99783ad 100644 --- a/src/zcbenchmarks.h +++ b/src/zcbenchmarks.h @@ -12,5 +12,6 @@ extern std::vector benchmark_solve_equihash_threaded(int nThreads); extern double benchmark_verify_joinsplit(const JSDescription &joinsplit); extern double benchmark_verify_equihash(); extern double benchmark_large_tx(); +extern double benchmark_try_decrypt_notes(const JSDescription &joinsplit); #endif