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