diff --git a/qa/zcash/performance-measurements.sh b/qa/zcash/performance-measurements.sh index 76f41c0ab..15f3077b5 100755 --- a/qa/zcash/performance-measurements.sh +++ b/qa/zcash/performance-measurements.sh @@ -195,7 +195,7 @@ case "$1" in zcash_rpc zcbenchmark verifyequihash 1000 ;; validatelargetx) - zcash_rpc zcbenchmark validatelargetx 5 + zcash_rpc zcbenchmark validatelargetx 10 "${@:3}" ;; trydecryptnotes) zcash_rpc zcbenchmark trydecryptnotes 1000 "${@:3}" diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 90651ea74..3e63c3689 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2581,7 +2581,12 @@ UniValue zc_benchmark(const UniValue& params, bool fHelp) } else if (benchmarktype == "verifyequihash") { sample_times.push_back(benchmark_verify_equihash()); } else if (benchmarktype == "validatelargetx") { - sample_times.push_back(benchmark_large_tx()); + // Number of inputs in the spending transaction that we will simulate + int nInputs = 555; + if (params.size() >= 3) { + nInputs = params[2].get_int(); + } + sample_times.push_back(benchmark_large_tx(nInputs)); } else if (benchmarktype == "trydecryptnotes") { int nAddrs = params[2].get_int(); sample_times.push_back(benchmark_try_decrypt_notes(nAddrs)); diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 4b17e57bf..9f9c1120d 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -222,11 +222,8 @@ double benchmark_verify_equihash() return timer_stop(tv_start); } -double benchmark_large_tx() +double benchmark_large_tx(size_t nInputs) { - // Number of inputs in the spending transaction that we will simulate - const size_t NUM_INPUTS = 555; - // Create priv/pub key CKey priv; priv.MakeNewKey(false); @@ -246,35 +243,24 @@ double benchmark_large_tx() CMutableTransaction spending_tx; auto input_hash = orig_tx.GetHash(); - // Add NUM_INPUTS inputs - for (size_t i = 0; i < NUM_INPUTS; i++) { + // Add nInputs inputs + for (size_t i = 0; i < nInputs; i++) { spending_tx.vin.emplace_back(input_hash, 0); } // Sign for all the inputs auto consensusBranchId = NetworkUpgradeInfo[Consensus::UPGRADE_OVERWINTER].nBranchId; - for (size_t i = 0; i < NUM_INPUTS; i++) { + for (size_t i = 0; i < nInputs; i++) { SignSignature(tempKeystore, prevPubKey, spending_tx, i, 1000000, SIGHASH_ALL, consensusBranchId); } - // Serialize: - { - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss << spending_tx; - //std::cout << "SIZE OF SPENDING TX: " << ss.size() << std::endl; - - auto error = MAX_TX_SIZE / 20; // 5% error - assert(ss.size() < MAX_TX_SIZE + error); - assert(ss.size() > MAX_TX_SIZE - error); - } - // Spending tx has all its inputs signed and does not need to be mutated anymore CTransaction final_spending_tx(spending_tx); // Benchmark signature verification costs: struct timeval tv_start; timer_start(tv_start); - for (size_t i = 0; i < NUM_INPUTS; i++) { + for (size_t i = 0; i < nInputs; i++) { ScriptError serror = SCRIPT_ERR_OK; assert(VerifyScript(final_spending_tx.vin[i].scriptSig, prevPubKey, diff --git a/src/zcbenchmarks.h b/src/zcbenchmarks.h index ac87d0326..60a0be848 100644 --- a/src/zcbenchmarks.h +++ b/src/zcbenchmarks.h @@ -12,7 +12,7 @@ extern double benchmark_solve_equihash(); 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_large_tx(size_t nInputs); extern double benchmark_try_decrypt_notes(size_t nAddrs); extern double benchmark_increment_note_witnesses(size_t nTxs); extern double benchmark_connectblock_slow();