You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.5 KiB
103 lines
2.5 KiB
#!/usr/bin/env bash |
|
# Copyright (c) 2014 The Bitcoin Core developers |
|
# Distributed under the MIT 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 |
|
}
|
|
|