Delete some KMD garbage
This commit is contained in:
@@ -1,341 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -u
|
|
||||||
|
|
||||||
|
|
||||||
DATADIR=./benchmark-datadir
|
|
||||||
SHA256CMD="$(command -v sha256sum || echo shasum)"
|
|
||||||
SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')"
|
|
||||||
|
|
||||||
function zcash_rpc {
|
|
||||||
./src/zcash-cli -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcash_rpc_slow {
|
|
||||||
# Timeout of 1 hour
|
|
||||||
zcash_rpc -rpcclienttimeout=3600 "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcash_rpc_veryslow {
|
|
||||||
# Timeout of 2.5 hours
|
|
||||||
zcash_rpc -rpcclienttimeout=9000 "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcash_rpc_wait_for_start {
|
|
||||||
zcash_rpc -rpcwait getinfo > /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_generate {
|
|
||||||
zcash_rpc generate 101 > /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function extract_benchmark_datadir {
|
|
||||||
if [ -f "$1.tar.xz" ]; then
|
|
||||||
# Check the hash of the archive:
|
|
||||||
"$SHA256CMD" $SHA256ARGS -c <<EOF
|
|
||||||
$2 $1.tar.xz
|
|
||||||
EOF
|
|
||||||
ARCHIVE_RESULT=$?
|
|
||||||
else
|
|
||||||
echo "$1.tar.xz not found."
|
|
||||||
ARCHIVE_RESULT=1
|
|
||||||
fi
|
|
||||||
if [ $ARCHIVE_RESULT -ne 0 ]; then
|
|
||||||
zcashd_stop
|
|
||||||
echo
|
|
||||||
echo "Please download it and place it in the base directory of the repository."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
xzcat "$1.tar.xz" | tar x
|
|
||||||
}
|
|
||||||
|
|
||||||
function use_200k_benchmark {
|
|
||||||
rm -rf benchmark-200k-UTXOs
|
|
||||||
extract_benchmark_datadir benchmark-200k-UTXOs dc8ab89eaa13730da57d9ac373c1f4e818a37181c1443f61fd11327e49fbcc5e
|
|
||||||
DATADIR="./benchmark-200k-UTXOs/node$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_start {
|
|
||||||
case "$1" in
|
|
||||||
sendtoaddress|loadwallet|listunspent)
|
|
||||||
case "$2" in
|
|
||||||
200k-recv)
|
|
||||||
use_200k_benchmark 0
|
|
||||||
;;
|
|
||||||
200k-send)
|
|
||||||
use_200k_benchmark 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Bad arguments to zcashd_start."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
rm -rf "$DATADIR"
|
|
||||||
mkdir -p "$DATADIR/regtest"
|
|
||||||
touch "$DATADIR/zcash.conf"
|
|
||||||
esac
|
|
||||||
./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 &
|
|
||||||
ZCASHD_PID=$!
|
|
||||||
zcash_rpc_wait_for_start
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_stop {
|
|
||||||
zcash_rpc stop > /dev/null
|
|
||||||
wait $ZCASHD_PID
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_massif_start {
|
|
||||||
case "$1" in
|
|
||||||
sendtoaddress|loadwallet|listunspent)
|
|
||||||
case "$2" in
|
|
||||||
200k-recv)
|
|
||||||
use_200k_benchmark 0
|
|
||||||
;;
|
|
||||||
200k-send)
|
|
||||||
use_200k_benchmark 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Bad arguments to zcashd_massif_start."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
rm -rf "$DATADIR"
|
|
||||||
mkdir -p "$DATADIR/regtest"
|
|
||||||
touch "$DATADIR/zcash.conf"
|
|
||||||
esac
|
|
||||||
rm -f massif.out
|
|
||||||
valgrind --tool=massif --time-unit=ms --massif-out-file=massif.out ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 &
|
|
||||||
ZCASHD_PID=$!
|
|
||||||
zcash_rpc_wait_for_start
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_massif_stop {
|
|
||||||
zcash_rpc stop > /dev/null
|
|
||||||
wait $ZCASHD_PID
|
|
||||||
ms_print massif.out
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_valgrind_start {
|
|
||||||
rm -rf "$DATADIR"
|
|
||||||
mkdir -p "$DATADIR/regtest"
|
|
||||||
touch "$DATADIR/zcash.conf"
|
|
||||||
rm -f valgrind.out
|
|
||||||
valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 &
|
|
||||||
ZCASHD_PID=$!
|
|
||||||
zcash_rpc_wait_for_start
|
|
||||||
}
|
|
||||||
|
|
||||||
function zcashd_valgrind_stop {
|
|
||||||
zcash_rpc stop > /dev/null
|
|
||||||
wait $ZCASHD_PID
|
|
||||||
cat valgrind.out
|
|
||||||
}
|
|
||||||
|
|
||||||
function extract_benchmark_data {
|
|
||||||
if [ -f "block-107134.tar.xz" ]; then
|
|
||||||
# Check the hash of the archive:
|
|
||||||
"$SHA256CMD" $SHA256ARGS -c <<EOF
|
|
||||||
4bd5ad1149714394e8895fa536725ed5d6c32c99812b962bfa73f03b5ffad4bb block-107134.tar.xz
|
|
||||||
EOF
|
|
||||||
ARCHIVE_RESULT=$?
|
|
||||||
else
|
|
||||||
echo "block-107134.tar.xz not found."
|
|
||||||
ARCHIVE_RESULT=1
|
|
||||||
fi
|
|
||||||
if [ $ARCHIVE_RESULT -ne 0 ]; then
|
|
||||||
zcashd_stop
|
|
||||||
echo
|
|
||||||
echo "Please generate it using qa/zcash/create_benchmark_archive.py"
|
|
||||||
echo "and place it in the base directory of the repository."
|
|
||||||
echo "Usage details are inside the Python script."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
xzcat block-107134.tar.xz | tar x -C "$DATADIR/regtest"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if [ $# -lt 2 ]
|
|
||||||
then
|
|
||||||
echo "$0 : At least two arguments are required!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Precomputation
|
|
||||||
case "$1" in
|
|
||||||
*)
|
|
||||||
case "$2" in
|
|
||||||
verifyjoinsplit)
|
|
||||||
zcashd_start "${@:2}"
|
|
||||||
RAWJOINSPLIT=$(zcash_rpc zcsamplejoinsplit)
|
|
||||||
zcashd_stop
|
|
||||||
esac
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
time)
|
|
||||||
zcashd_start "${@:2}"
|
|
||||||
case "$2" in
|
|
||||||
sleep)
|
|
||||||
zcash_rpc zcbenchmark sleep 10
|
|
||||||
;;
|
|
||||||
parameterloading)
|
|
||||||
zcash_rpc zcbenchmark parameterloading 10
|
|
||||||
;;
|
|
||||||
createjoinsplit)
|
|
||||||
zcash_rpc zcbenchmark createjoinsplit 10 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyjoinsplit)
|
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1000 "\"$RAWJOINSPLIT\""
|
|
||||||
;;
|
|
||||||
solveequihash)
|
|
||||||
zcash_rpc_slow zcbenchmark solveequihash 50 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyequihash)
|
|
||||||
zcash_rpc zcbenchmark verifyequihash 1000
|
|
||||||
;;
|
|
||||||
validatelargetx)
|
|
||||||
zcash_rpc zcbenchmark validatelargetx 10 "${@:3}"
|
|
||||||
;;
|
|
||||||
trydecryptnotes)
|
|
||||||
zcash_rpc zcbenchmark trydecryptnotes 1000 "${@:3}"
|
|
||||||
;;
|
|
||||||
incnotewitnesses)
|
|
||||||
zcash_rpc zcbenchmark incnotewitnesses 100 "${@:3}"
|
|
||||||
;;
|
|
||||||
connectblockslow)
|
|
||||||
extract_benchmark_data
|
|
||||||
zcash_rpc zcbenchmark connectblockslow 10
|
|
||||||
;;
|
|
||||||
sendtoaddress)
|
|
||||||
zcash_rpc zcbenchmark sendtoaddress 10 "${@:4}"
|
|
||||||
;;
|
|
||||||
loadwallet)
|
|
||||||
zcash_rpc zcbenchmark loadwallet 10
|
|
||||||
;;
|
|
||||||
listunspent)
|
|
||||||
zcash_rpc zcbenchmark listunspent 10
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
zcashd_stop
|
|
||||||
echo "Bad arguments to time."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
zcashd_stop
|
|
||||||
;;
|
|
||||||
memory)
|
|
||||||
zcashd_massif_start "${@:2}"
|
|
||||||
case "$2" in
|
|
||||||
sleep)
|
|
||||||
zcash_rpc zcbenchmark sleep 1
|
|
||||||
;;
|
|
||||||
parameterloading)
|
|
||||||
zcash_rpc zcbenchmark parameterloading 1
|
|
||||||
;;
|
|
||||||
createjoinsplit)
|
|
||||||
zcash_rpc_slow zcbenchmark createjoinsplit 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyjoinsplit)
|
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1 "\"$RAWJOINSPLIT\""
|
|
||||||
;;
|
|
||||||
solveequihash)
|
|
||||||
zcash_rpc_slow zcbenchmark solveequihash 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyequihash)
|
|
||||||
zcash_rpc zcbenchmark verifyequihash 1
|
|
||||||
;;
|
|
||||||
validatelargetx)
|
|
||||||
zcash_rpc zcbenchmark validatelargetx 1
|
|
||||||
;;
|
|
||||||
trydecryptnotes)
|
|
||||||
zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
incnotewitnesses)
|
|
||||||
zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
connectblockslow)
|
|
||||||
extract_benchmark_data
|
|
||||||
zcash_rpc zcbenchmark connectblockslow 1
|
|
||||||
;;
|
|
||||||
sendtoaddress)
|
|
||||||
zcash_rpc zcbenchmark sendtoaddress 1 "${@:4}"
|
|
||||||
;;
|
|
||||||
loadwallet)
|
|
||||||
# The initial load is sufficient for measurement
|
|
||||||
;;
|
|
||||||
listunspent)
|
|
||||||
zcash_rpc zcbenchmark listunspent 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
zcashd_massif_stop
|
|
||||||
echo "Bad arguments to memory."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
zcashd_massif_stop
|
|
||||||
rm -f massif.out
|
|
||||||
;;
|
|
||||||
valgrind)
|
|
||||||
zcashd_valgrind_start
|
|
||||||
case "$2" in
|
|
||||||
sleep)
|
|
||||||
zcash_rpc zcbenchmark sleep 1
|
|
||||||
;;
|
|
||||||
parameterloading)
|
|
||||||
zcash_rpc zcbenchmark parameterloading 1
|
|
||||||
;;
|
|
||||||
createjoinsplit)
|
|
||||||
zcash_rpc_veryslow zcbenchmark createjoinsplit 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyjoinsplit)
|
|
||||||
zcash_rpc zcbenchmark verifyjoinsplit 1 "\"$RAWJOINSPLIT\""
|
|
||||||
;;
|
|
||||||
solveequihash)
|
|
||||||
zcash_rpc_veryslow zcbenchmark solveequihash 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
verifyequihash)
|
|
||||||
zcash_rpc zcbenchmark verifyequihash 1
|
|
||||||
;;
|
|
||||||
trydecryptnotes)
|
|
||||||
zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
incnotewitnesses)
|
|
||||||
zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
|
|
||||||
;;
|
|
||||||
connectblockslow)
|
|
||||||
extract_benchmark_data
|
|
||||||
zcash_rpc zcbenchmark connectblockslow 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
zcashd_valgrind_stop
|
|
||||||
echo "Bad arguments to valgrind."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
zcashd_valgrind_stop
|
|
||||||
rm -f valgrind.out
|
|
||||||
;;
|
|
||||||
valgrind-tests)
|
|
||||||
case "$2" in
|
|
||||||
gtest)
|
|
||||||
rm -f valgrind.out
|
|
||||||
valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/zcash-gtest
|
|
||||||
cat valgrind.out
|
|
||||||
rm -f valgrind.out
|
|
||||||
;;
|
|
||||||
test_bitcoin)
|
|
||||||
rm -f valgrind.out
|
|
||||||
valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/test/test_bitcoin
|
|
||||||
cat valgrind.out
|
|
||||||
rm -f valgrind.out
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Bad arguments to valgrind-tests."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Invalid benchmark type."
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
rm -rf "$DATADIR"
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
// Copyright (c) 2016-2020 The Hush developers
|
|
||||||
// Distributed under the GPLv3 software license, see the accompanying
|
|
||||||
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
||||||
/*Descriptson and examples of COptCCParams class found in:
|
|
||||||
script/standard.h/cpp
|
|
||||||
class COptCCParams
|
|
||||||
|
|
||||||
structure of data in vData payload attached to end of CCvout:
|
|
||||||
param
|
|
||||||
OP_1
|
|
||||||
param
|
|
||||||
OP_2 ... etc until OP_16
|
|
||||||
OP_PUSHDATA4 is the last OP code to tell things its at the end.
|
|
||||||
|
|
||||||
taken from standard.cpp line 22: COptCCParams::COptCCParams(std::vector<unsigned char> &vch)
|
|
||||||
|
|
||||||
EXAMPLE taken from Verus how to create scriptPubKey from COptCCParams class:
|
|
||||||
EXAMPLE taken from Verus how to decode scriptPubKey from COptCCParams class:
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool MakeGuardedOutput(CAmount value, CPubKey &dest, CTransaction &stakeTx, CTxOut &vout)
|
|
||||||
{
|
|
||||||
CCcontract_info *cp, C;
|
|
||||||
cp = CCinit(&C,EVAL_STAKEGUARD);
|
|
||||||
|
|
||||||
CPubKey ccAddress = CPubKey(ParseHex(cp->CChexstr));
|
|
||||||
|
|
||||||
// return an output that is bound to the stake transaction and can be spent by presenting either a signed condition by the original
|
|
||||||
// destination address or a properly signed stake transaction of the same utxo on a fork
|
|
||||||
vout = MakeCC1of2vout(EVAL_STAKEGUARD, value, dest, ccAddress);
|
|
||||||
|
|
||||||
std::vector<CPubKey> vPubKeys = std::vector<CPubKey>();
|
|
||||||
vPubKeys.push_back(dest);
|
|
||||||
vPubKeys.push_back(ccAddress);
|
|
||||||
|
|
||||||
std::vector<std::vector<unsigned char>> vData = std::vector<std::vector<unsigned char>>();
|
|
||||||
|
|
||||||
CVerusHashWriter hw = CVerusHashWriter(SER_GETHASH, PROTOCOL_VERSION);
|
|
||||||
|
|
||||||
hw << stakeTx.vin[0].prevout.hash;
|
|
||||||
hw << stakeTx.vin[0].prevout.n;
|
|
||||||
|
|
||||||
uint256 utxo = hw.GetHash();
|
|
||||||
vData.push_back(std::vector<unsigned char>(utxo.begin(), utxo.end())); // Can we use any data here to construct vector?
|
|
||||||
|
|
||||||
CStakeParams p;
|
|
||||||
if (GetStakeParams(stakeTx, p))
|
|
||||||
{
|
|
||||||
// prev block hash and height is here to make validation easy
|
|
||||||
vData.push_back(std::vector<unsigned char>(p.prevHash.begin(), p.prevHash.end()));
|
|
||||||
std::vector<unsigned char> height = std::vector<unsigned char>(4);
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
height[i] = (p.blkHeight >> (8 * i)) & 0xff;
|
|
||||||
}
|
|
||||||
vData.push_back(height);
|
|
||||||
|
|
||||||
COptCCParams ccp = COptCCParams(COptCCParams::VERSION, EVAL_STAKEGUARD, 1, 2, vPubKeys, vData);
|
|
||||||
|
|
||||||
vout.scriptPubKey << ccp.AsVector() << OP_DROP;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating)
|
|
||||||
{
|
|
||||||
// an invalid or non-matching stake transaction cannot cheat
|
|
||||||
cheating = false;
|
|
||||||
|
|
||||||
//printf("ValidateMatchingStake: ccTx.vin[0].prevout.hash: %s, ccTx.vin[0].prevout.n: %d\n", ccTx.vin[0].prevout.hash.GetHex().c_str(), ccTx.vin[0].prevout.n);
|
|
||||||
|
|
||||||
if (ccTx.IsCoinBase())
|
|
||||||
{
|
|
||||||
CStakeParams p;
|
|
||||||
if (ValidateStakeTransaction(stakeTx, p))
|
|
||||||
{
|
|
||||||
std::vector<std::vector<unsigned char>> vParams = std::vector<std::vector<unsigned char>>();
|
|
||||||
CScript dummy;
|
|
||||||
|
|
||||||
if (ccTx.vout[voutNum].scriptPubKey.IsPayToCryptoCondition(&dummy, vParams) && vParams.size() > 0)
|
|
||||||
{
|
|
||||||
COptCCParams ccp = COptCCParams(vParams[0]);
|
|
||||||
if (ccp.IsValid() & ccp.vData.size() >= 3 && ccp.vData[2].size() <= 4)
|
|
||||||
{
|
|
||||||
CVerusHashWriter hw = CVerusHashWriter(SER_GETHASH, PROTOCOL_VERSION);
|
|
||||||
|
|
||||||
hw << stakeTx.vin[0].prevout.hash;
|
|
||||||
hw << stakeTx.vin[0].prevout.n;
|
|
||||||
uint256 utxo = hw.GetHash();
|
|
||||||
|
|
||||||
uint32_t height = 0;
|
|
||||||
int i, dataLen = ccp.vData[2].size();
|
|
||||||
for (i = dataLen - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
height = (height << 8) + ccp.vData[2][i];
|
|
||||||
}
|
|
||||||
// for debugging strange issue
|
|
||||||
// printf("iterator: %d, height: %d, datalen: %d\n", i, height, dataLen);
|
|
||||||
|
|
||||||
if (utxo == uint256(ccp.vData[0]))
|
|
||||||
{
|
|
||||||
if (p.prevHash != uint256(ccp.vData[1]) && p.blkHeight >= height)
|
|
||||||
{
|
|
||||||
cheating = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// if block height is equal and we are at the else, prevHash must have been equal
|
|
||||||
else if (p.blkHeight == height)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user