Created
December 13, 2020 14:28
-
-
Save rcmorano/5cb8a8f322a568e2c0b9792ab1e6c3e1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -e | |
# set -x | |
# This script creates, signs, and submits a transaction that creates some new tokens. | |
# It uses the output of the transaction from update-4.sh. | |
NETWORK_MAGIC=3 | |
SOURCE_ADDRESS=$(cat ../base.addr) | |
DESTINATION_ADDRESS=${SOURCE_ADDRESS} | |
PAYMENT_SKEY=../payment.skey | |
TOKEN_NAME=SPAM$$token | |
TOKEN_AMOUNT=666 | |
mkdir -p ${TOKEN_NAME} | |
POLICY_SCRIPT=${TOKEN_NAME}/policy.script | |
POLICY_VKEY=${TOKEN_NAME}/policy.vkey | |
POLICY_SKEY=${TOKEN_NAME}/policy.skey | |
cardano-cli address key-gen \ | |
--verification-key-file ${POLICY_VKEY} \ | |
--signing-key-file ${POLICY_SKEY} | |
KEYHASH=$(cardano-cli address key-hash --payment-verification-key-file ${POLICY_VKEY}) | |
cat > ${POLICY_SCRIPT} <<EOF | |
{ | |
"keyHash": "${KEYHASH}", | |
"type": "sig" | |
} | |
EOF | |
POLICY_ID=$(cardano-cli transaction policyid --script-file ${POLICY_SCRIPT}) | |
cardano-cli query protocol-parameters \ | |
--testnet-magic ${NETWORK_MAGIC} \ | |
--mary-era \ | |
--out-file /tmp/protparams.json | |
IN_UTXO=$(cardano-cli query utxo \ | |
--mary-era \ | |
--testnet-magic ${NETWORK_MAGIC} \ | |
--address ${SOURCE_ADDRESS} | grep -v "^ \|^-" | awk '{print "--tx-in "$1"#"$2}' | xargs) | |
UTXO_COUNT=$(cardano-cli query utxo \ | |
--mary-era \ | |
--testnet-magic ${NETWORK_MAGIC} \ | |
--address ${SOURCE_ADDRESS} | grep -v "^ \|^-" | wc -l) | |
# calc balances | |
rm -f /tmp/balance* | |
cardano-cli query utxo \ | |
--mary-era \ | |
--testnet-magic ${NETWORK_MAGIC} \ | |
--address ${SOURCE_ADDRESS} | grep -v "^ \|^-" | sed 's| + |\n|g' | sed 's|.* \([0-9].*lovelace\)|\1|g' > /tmp/balances | |
awk '{print $2}' /tmp/balances | uniq | while read token; do grep ${token} /tmp/balances | awk '{s+=$1} END {print s}' > /tmp/balance.${token}; done | |
OTHER_COINS=$(for balance_file in $(ls -1 /tmp/balance.* | grep -v lovelace); do BALANCE=$(cat ${balance_file}); TOKEN=$(echo $balance_file | sed 's|/tmp/balance.||g'); echo +${BALANCE} ${TOKEN}; done | xargs) | |
cardano-cli transaction build-raw \ | |
--mary-era \ | |
--fee 0 \ | |
${IN_UTXO} \ | |
--tx-out="${DESTINATION_ADDRESS}+$(cat /tmp/balance.lovelace) lovelace${OTHER_COINS}+${TOKEN_AMOUNT} ${POLICY_ID}.${TOKEN_NAME}" \ | |
--mint="${TOKEN_AMOUNT} ${POLICY_ID}.${TOKEN_NAME}" \ | |
--out-file ${TOKEN_NAME}.txbody | |
ACTUAL_MIN_FEE=$(cardano-cli transaction calculate-min-fee \ | |
--tx-body-file ${TOKEN_NAME}.txbody \ | |
--tx-in-count ${UTXO_COUNT} \ | |
--tx-out-count 1 \ | |
--witness-count 1 \ | |
--byron-witness-count 0 \ | |
--protocol-params-file /tmp/protparams.json | awk '{print $1}') | |
cardano-cli transaction build-raw \ | |
--mary-era \ | |
--fee ${ACTUAL_MIN_FEE} \ | |
${IN_UTXO} \ | |
--tx-out="${DESTINATION_ADDRESS}+$(( $(cat /tmp/balance.lovelace) - ${ACTUAL_MIN_FEE} )) lovelace${OTHER_COINS}+${TOKEN_AMOUNT} ${POLICY_ID}.${TOKEN_NAME}" \ | |
--mint="${TOKEN_AMOUNT} ${POLICY_ID}.${TOKEN_NAME}" \ | |
--out-file ${TOKEN_NAME}.txbody-ok-fee | |
cardano-cli transaction sign \ | |
--testnet-magic ${NETWORK_MAGIC} \ | |
--signing-key-file ${PAYMENT_SKEY} \ | |
--signing-key-file ${POLICY_SKEY} \ | |
--script-file ${POLICY_SCRIPT} \ | |
--tx-body-file ${TOKEN_NAME}.txbody-ok-fee \ | |
--out-file ${TOKEN_NAME}.tx.signed | |
cardano-cli transaction submit --tx-file ${TOKEN_NAME}.tx.signed --testnet-magic ${NETWORK_MAGIC} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment