Introduce `zcsamplejoinsplit` for creating a raw joinsplit description, and use it to construct the joinsplit for the performance tests that verify joinsplits.
This commit is contained in:
parent
d20d866d89
commit
1737627c4e
|
@ -52,6 +52,17 @@ function zcashd_valgrind_stop {
|
||||||
cat valgrind.out
|
cat valgrind.out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Precomputation
|
||||||
|
case "$1" in
|
||||||
|
*)
|
||||||
|
case "$2" in
|
||||||
|
verifyjoinsplit)
|
||||||
|
zcashd_start
|
||||||
|
RAWJOINSPLIT=$(zcash_rpc zcsamplejoinsplit)
|
||||||
|
zcashd_stop
|
||||||
|
esac
|
||||||
|
esac
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
time)
|
time)
|
||||||
zcashd_start
|
zcashd_start
|
||||||
|
@ -66,7 +77,7 @@ case "$1" in
|
||||||
zcash_rpc zcbenchmark createjoinsplit 10
|
zcash_rpc zcbenchmark createjoinsplit 10
|
||||||
;;
|
;;
|
||||||
verifyjoinsplit)
|
verifyjoinsplit)
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1000
|
zcash_rpc zcbenchmark verifyjoinsplit 1000 "$RAWJOINSPLIT"
|
||||||
;;
|
;;
|
||||||
solveequihash)
|
solveequihash)
|
||||||
zcash_rpc zcbenchmark solveequihash 10
|
zcash_rpc zcbenchmark solveequihash 10
|
||||||
|
@ -97,7 +108,7 @@ case "$1" in
|
||||||
zcash_rpc zcbenchmark createjoinsplit 1
|
zcash_rpc zcbenchmark createjoinsplit 1
|
||||||
;;
|
;;
|
||||||
verifyjoinsplit)
|
verifyjoinsplit)
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1
|
zcash_rpc zcbenchmark verifyjoinsplit 1 "$RAWJOINSPLIT"
|
||||||
;;
|
;;
|
||||||
solveequihash)
|
solveequihash)
|
||||||
zcash_rpc zcbenchmark solveequihash 1
|
zcash_rpc zcbenchmark solveequihash 1
|
||||||
|
@ -126,7 +137,7 @@ case "$1" in
|
||||||
zcash_rpc zcbenchmark createjoinsplit 1
|
zcash_rpc zcbenchmark createjoinsplit 1
|
||||||
;;
|
;;
|
||||||
verifyjoinsplit)
|
verifyjoinsplit)
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1
|
zcash_rpc zcbenchmark verifyjoinsplit 1 "$RAWJOINSPLIT"
|
||||||
;;
|
;;
|
||||||
solveequihash)
|
solveequihash)
|
||||||
zcash_rpc zcbenchmark solveequihash 1
|
zcash_rpc zcbenchmark solveequihash 1
|
||||||
|
|
|
@ -380,7 +380,8 @@ static const CRPCCommand vRPCCommands[] =
|
||||||
{ "wallet", "zcbenchmark", &zc_benchmark, true },
|
{ "wallet", "zcbenchmark", &zc_benchmark, true },
|
||||||
{ "wallet", "zcrawkeygen", &zc_raw_keygen, true },
|
{ "wallet", "zcrawkeygen", &zc_raw_keygen, true },
|
||||||
{ "wallet", "zcrawjoinsplit", &zc_raw_joinsplit, true },
|
{ "wallet", "zcrawjoinsplit", &zc_raw_joinsplit, true },
|
||||||
{ "wallet", "zcrawreceive", &zc_raw_receive, true }
|
{ "wallet", "zcrawreceive", &zc_raw_receive, true },
|
||||||
|
{ "wallet", "zcsamplejoinsplit", &zc_sample_joinsplit, true }
|
||||||
#endif // ENABLE_WALLET
|
#endif // ENABLE_WALLET
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -212,6 +212,7 @@ extern json_spirit::Value zc_benchmark(const json_spirit::Array& params, bool fH
|
||||||
extern json_spirit::Value zc_raw_keygen(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value zc_raw_keygen(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value zc_raw_joinsplit(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value zc_raw_joinsplit(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value zc_raw_receive(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value zc_raw_receive(const json_spirit::Array& params, bool fHelp);
|
||||||
|
extern json_spirit::Value zc_sample_joinsplit(const json_spirit::Array& params, bool fHelp);
|
||||||
|
|
||||||
extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp
|
extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp
|
||||||
extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp);
|
||||||
|
|
|
@ -2351,6 +2351,34 @@ Value listunspent(const Array& params, bool fHelp)
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value zc_sample_joinsplit(const json_spirit::Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp) {
|
||||||
|
throw runtime_error(
|
||||||
|
"zcsamplejoinsplit\n"
|
||||||
|
"\n"
|
||||||
|
"Perform a joinsplit and return the JSDescription.\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCK(cs_main);
|
||||||
|
|
||||||
|
uint256 pubKeyHash;
|
||||||
|
uint256 anchor = ZCIncrementalMerkleTree().root();
|
||||||
|
JSDescription samplejoinsplit(*pzcashParams,
|
||||||
|
pubKeyHash,
|
||||||
|
anchor,
|
||||||
|
{JSInput(), JSInput()},
|
||||||
|
{JSOutput(), JSOutput()},
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
|
||||||
|
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
ss << samplejoinsplit;
|
||||||
|
|
||||||
|
return HexStr(ss.begin(), ss.end());
|
||||||
|
}
|
||||||
|
|
||||||
Value zc_benchmark(const json_spirit::Array& params, bool fHelp)
|
Value zc_benchmark(const json_spirit::Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (!EnsureWalletIsAvailable(fHelp)) {
|
if (!EnsureWalletIsAvailable(fHelp)) {
|
||||||
|
@ -2393,18 +2421,11 @@ Value zc_benchmark(const json_spirit::Array& params, bool fHelp)
|
||||||
pzcashParams->loadProvingKey();
|
pzcashParams->loadProvingKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
JSDescription* samplejoinsplit = NULL;
|
JSDescription samplejoinsplit;
|
||||||
|
|
||||||
if (benchmarktype == "verifyjoinsplit") {
|
if (benchmarktype == "verifyjoinsplit") {
|
||||||
uint256 pubKeyHash;
|
CDataStream ss(ParseHexV(params[2].get_str(), "js"), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
uint256 anchor = ZCIncrementalMerkleTree().root();
|
ss >> samplejoinsplit;
|
||||||
samplejoinsplit = new JSDescription(*pzcashParams,
|
|
||||||
pubKeyHash,
|
|
||||||
anchor,
|
|
||||||
{JSInput(), JSInput()},
|
|
||||||
{JSOutput(), JSOutput()},
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < samplecount; i++) {
|
for (int i = 0; i < samplecount; i++) {
|
||||||
|
@ -2415,7 +2436,7 @@ Value zc_benchmark(const json_spirit::Array& params, bool fHelp)
|
||||||
} else if (benchmarktype == "createjoinsplit") {
|
} else if (benchmarktype == "createjoinsplit") {
|
||||||
sample_times.push_back(benchmark_create_joinsplit());
|
sample_times.push_back(benchmark_create_joinsplit());
|
||||||
} else if (benchmarktype == "verifyjoinsplit") {
|
} else if (benchmarktype == "verifyjoinsplit") {
|
||||||
sample_times.push_back(benchmark_verify_joinsplit(*samplejoinsplit));
|
sample_times.push_back(benchmark_verify_joinsplit(samplejoinsplit));
|
||||||
} else if (benchmarktype == "solveequihash") {
|
} else if (benchmarktype == "solveequihash") {
|
||||||
sample_times.push_back(benchmark_solve_equihash());
|
sample_times.push_back(benchmark_solve_equihash());
|
||||||
} else if (benchmarktype == "verifyequihash") {
|
} else if (benchmarktype == "verifyequihash") {
|
||||||
|
@ -2423,13 +2444,10 @@ Value zc_benchmark(const json_spirit::Array& params, bool fHelp)
|
||||||
} else if (benchmarktype == "validatelargetx") {
|
} else if (benchmarktype == "validatelargetx") {
|
||||||
sample_times.push_back(benchmark_large_tx());
|
sample_times.push_back(benchmark_large_tx());
|
||||||
} else {
|
} else {
|
||||||
delete samplejoinsplit;
|
|
||||||
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid benchmarktype");
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid benchmarktype");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete samplejoinsplit;
|
|
||||||
|
|
||||||
Array results;
|
Array results;
|
||||||
for (int i = 0; i < samplecount; i++) {
|
for (int i = 0; i < samplecount; i++) {
|
||||||
Object result;
|
Object result;
|
||||||
|
|
Loading…
Reference in New Issue