|
|
|
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2014 The Bitcoin Core developers
|
|
|
|
# Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
# Functions used by more than one test
|
|
|
|
|
|
|
|
function echoerr {
|
|
|
|
echo "$@" 1>&2;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Usage: ExtractKey <key> "<json_object_string>"
|
|
|
|
# Warning: this will only work for the very-well-behaved
|
|
|
|
# JSON produced by bitcoind, do NOT use it to try to
|
|
|
|
# parse arbitrary/nested/etc JSON.
|
|
|
|
function ExtractKey {
|
|
|
|
echo $2 | tr -d ' "{}\n' | awk -v RS=',' -F: "\$1 ~ /$1/ { print \$2}"
|
|
|
|
}
|
|
|
|
|
|
|
|
function CreateDataDir {
|
|
|
|
DIR=$1
|
|
|
|
mkdir -p $DIR
|
|
|
|
CONF=$DIR/bitcoin.conf
|
|
|
|
echo "regtest=1" >> $CONF
|
|
|
|
echo "keypool=2" >> $CONF
|
|
|
|
echo "rpcuser=rt" >> $CONF
|
|
|
|
echo "rpcpassword=rt" >> $CONF
|
|
|
|
echo "rpcwait=1" >> $CONF
|
|
|
|
echo "walletnotify=${SENDANDWAIT} -STOP" >> $CONF
|
|
|
|
shift
|
|
|
|
while (( "$#" )); do
|
|
|
|
echo $1 >> $CONF
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function AssertEqual {
|
|
|
|
if (( $( echo "$1 == $2" | bc ) == 0 ))
|
|
|
|
then
|
|
|
|
echoerr "AssertEqual: $1 != $2"
|
|
|
|
declare -f CleanUp > /dev/null 2>&1
|
|
|
|
if [[ $? -eq 0 ]] ; then
|
|
|
|
CleanUp
|
|
|
|
fi
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# CheckBalance -datadir=... amount account minconf
|
|
|
|
function CheckBalance {
|
|
|
|
declare -i EXPECT="$2"
|
|
|
|
B=$( $CLI $1 getbalance $3 $4 )
|
|
|
|
if (( $( echo "$B == $EXPECT" | bc ) == 0 ))
|
|
|
|
then
|
|
|
|
echoerr "bad balance: $B (expected $2)"
|
|
|
|
declare -f CleanUp > /dev/null 2>&1
|
|
|
|
if [[ $? -eq 0 ]] ; then
|
|
|
|
CleanUp
|
|
|
|
fi
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use: Address <datadir> [account]
|
|
|
|
function Address {
|
|
|
|
$CLI $1 getnewaddress $2
|
|
|
|
}
|
|
|
|
|
|
|
|
# Send from to amount
|
|
|
|
function Send {
|
|
|
|
from=$1
|
|
|
|
to=$2
|
|
|
|
amount=$3
|
|
|
|
address=$(Address $to)
|
|
|
|
txid=$( ${SENDANDWAIT} $CLI $from sendtoaddress $address $amount )
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use: Unspent <datadir> <n'th-last-unspent> <var>
|
|
|
|
function Unspent {
|
|
|
|
local r=$( $CLI $1 listunspent | awk -F'[ |:,"]+' "\$2 ~ /$3/ { print \$3 }" | tail -n $2 | head -n 1)
|
|
|
|
echo $r
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use: CreateTxn1 <datadir> <n'th-last-unspent> <destaddress>
|
|
|
|
# produces hex from signrawtransaction
|
|
|
|
function CreateTxn1 {
|
|
|
|
TXID=$(Unspent $1 $2 txid)
|
|
|
|
AMOUNT=$(Unspent $1 $2 amount)
|
|
|
|
VOUT=$(Unspent $1 $2 vout)
|
|
|
|
RAWTXN=$( $CLI $1 createrawtransaction "[{\"txid\":\"$TXID\",\"vout\":$VOUT}]" "{\"$3\":$AMOUNT}")
|
|
|
|
ExtractKey hex "$( $CLI $1 signrawtransaction $RAWTXN )"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use: SendRawTxn <datadir> <hex_txn_data>
|
|
|
|
function SendRawTxn {
|
|
|
|
${SENDANDWAIT} $CLI $1 sendrawtransaction $2
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use: GetBlocks <datadir>
|
|
|
|
# returns number of blocks from getinfo
|
|
|
|
function GetBlocks {
|
|
|
|
$CLI $1 getblockcount
|
|
|
|
}
|