mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-04-23 19:31:00 +08:00
expand testlib for token transfers
This commit is contained in:
@@ -45,3 +45,169 @@ check_chain_quality() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# reads tx from stdin
|
||||
send_tx() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
|
||||
exec 3>&1
|
||||
|
||||
read TX
|
||||
TXID="$(printf "$TX" | \
|
||||
xxd -r -p | \
|
||||
curl -s -X POST --data-binary @- -w "%{http_code}" -o >(cat >&3) -H "content-type: application/octet-stream" "$STACKS_NODE_URL"/v2/transactions 2>&1 | ( \
|
||||
read HTTP_CODE
|
||||
read BODY
|
||||
if [ $HTTP_CODE -ne 200 ]; then
|
||||
logln "Failed to send to node $STACKS_NODE_URL: server replied $HTTP_CODE. Tx was $TX"
|
||||
logln "Error text: $BODY"
|
||||
return 1
|
||||
fi
|
||||
echo "$BODY"
|
||||
))"
|
||||
|
||||
local RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$TXID"
|
||||
return 0
|
||||
}
|
||||
|
||||
get_chain_tip() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
local TIP="$(curl -sf "$STACKS_NODE_URL"/v2/info | jq -r '.stacks_tip' 2>&1)"
|
||||
local RC=$?
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query chain tip on node $STACKS_NODE_URL: curl exited with code $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$TIP"
|
||||
return 0
|
||||
}
|
||||
|
||||
get_unconfirmed_chain_tip() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
local TIP="$(curl -sf "$STACKS_NODE_URL"/v2/info | jq -r '.unanchored_tip' 2>&1)"
|
||||
local RC=$?
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query unconfirmed chain tip on node $STACKS_NODE_URL: curl exited with code $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$TIP"
|
||||
return 0
|
||||
}
|
||||
|
||||
get_account_nonce() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
local ADDR="$2"
|
||||
local NONCE="$(curl -sf "$STACKS_NODE_URL"/v2/accounts/"$ADDR""?proof=0" | jq -r '.nonce')"
|
||||
local RC=$?
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query account $ADDR on node $STACKS_NODE_URL: curl exited with code $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$NONCE"
|
||||
return 0
|
||||
}
|
||||
|
||||
get_unconfirmed_account_nonce() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
local ADDR="$2"
|
||||
local UNCONFIRMED_TIP="$(get_unconfirmed_chain_tip "$STACKS_NODE_URL")"
|
||||
local RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query unconfirmed tip at $STACKS_NODE_URL: curl exited with code $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local URL="$STACKS_NODE_URL/v2/accounts/$ADDR?proof=0"
|
||||
if [[ "$UNCONFIRMED_TIP" != "0000000000000000000000000000000000000000000000000000000000000000" ]]; then
|
||||
# have microblocks applied
|
||||
URL="$URL&tip=$UNCONFIRMED_TIP"
|
||||
fi
|
||||
|
||||
local NONCE="$(curl -sf "$URL" | jq -r '.nonce')"
|
||||
RC=$?
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query account $ADDR on node $STACKS_NODE_URL: curl exited with code $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$NONCE"
|
||||
return 0
|
||||
}
|
||||
|
||||
wait_for_new_stacks_block() {
|
||||
local TIP="$1"
|
||||
local STACKS_NODE_URL="$2"
|
||||
while true; do
|
||||
local CUR_TIP="$(get_chain_tip "$STACKS_NODE_URL")"
|
||||
local RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ "$CUR_TIP" != "$TIP" ]]; then
|
||||
echo "$CUR_TIP"
|
||||
return 0
|
||||
fi
|
||||
|
||||
sleep 5
|
||||
done
|
||||
}
|
||||
|
||||
wait_for_confirmations() {
|
||||
local CONFS=$1
|
||||
local STACKS_NODE_URL="$2"
|
||||
local TIP="$(get_chain_tip "$STACKS_NODE_URL")"
|
||||
|
||||
local CONF=0
|
||||
for CONF in $(seq 0 $CONFS); do
|
||||
TIP="$(wait_for_new_stacks_block "$TIP" "$STACKS_NODE_URL")"
|
||||
RC=$?
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$TIP"
|
||||
return 0
|
||||
}
|
||||
|
||||
easy_token_transfer() {
|
||||
local STACKS_NODE_URL="$1"
|
||||
local PRIVKEY="$2"
|
||||
local DEST="$3"
|
||||
local AMOUNT="$4"
|
||||
shift 4
|
||||
local OPTS="$@"
|
||||
local FEE_RATE=300
|
||||
|
||||
local ADDR="$(blockstack-cli --testnet addresses "$PRIVKEY" | jq -r '.STX')"
|
||||
local NONCE="$(get_unconfirmed_account_nonce "$STACKS_NODE_URL" "$ADDR")"
|
||||
local RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to query unconfirmed account nonce: rc $RC"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local MEMO="test $NONCE"
|
||||
local TX="$(blockstack-cli --testnet token-transfer "$PRIVKEY" "$FEE_RATE" "$NONCE" "$DEST" "$AMOUNT" "$MEMO" "$OPTS" 2>&1)"
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
logln "Failed to generate tx: blockstack-cli --testnet token-transfer $PRIVKEY $FEE_RATE $NONCE $DEST $AMOUNT \"$MEMO\""
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf "$TX"
|
||||
return 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user