Skip to content

Instantly share code, notes, and snippets.

Created March 26, 2021 12:29
Show Gist options
  • Save ElGatoLoco/2f25a7eb1d9de45d8c54abad6e1158fd to your computer and use it in GitHub Desktop.
Save ElGatoLoco/2f25a7eb1d9de45d8c54abad6e1158fd to your computer and use it in GitHub Desktop.
Mint native tokens on Cardano testnet using the node and cli that come with Daedalus
# This guide assumes that you're running MacOS and already have a fully synced Daedalus testnet wallet
# For mainnet some minor tweaks are required
# The line below assumes the default location for the testnet wallet at the time of writing this guide
# If your node socket is located somewhere else, you should be able to finding by inspecting the running processes on your machine
export CARDANO_NODE_SOCKET_PATH=~/Library/Application\ Support/Daedalus\ Testnet/cardano-node.socket
# Make testnet id available as environment variable; not needed for the mainnet
# This one is active at the time of writing this guide
export TESTNET_ID=1097911063
# If we’re already using Daedalus’ node, why not use the cli as well? :)
# This line is just to make an alias and have a simple command available globally
# If you wish, you could put it into your bash profile, so it stays available for the future sessions
alias cardano-cli="/Applications/Daedalus\"
# Save your token name and amount you want to mint as environment variables
export TOKEN_NAME=NeonCat
# Check that everything is working so far
# This command should return you a list of all transaction on the network
cardano-cli query utxo \
--testnet-magic $TESTNET_ID \
# Generate stake keys
cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey
# Generate payment keys
cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey
# Use payment and stake verification keys to generate a payment address
cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--testnet-magic $TESTNET_ID
# Request test funds to be sent to your address - obviously not working on the mainnet (:
# Check address balance
cardano-cli query utxo --address $(< payment.addr) \
--testnet-magic $TESTNET_ID \
# Export the protocol parameters to a file for later use
cardano-cli query protocol-parameters \
--testnet-magic $TESTNET_ID \
--mary-era \
--out-file protocol.json
# Create directory for policy files
mkdir policy
# Generate policy signing and verification keys
cardano-cli address key-gen \
--verification-key-file policy/policy.vkey \
--signing-key-file policy/policy.skey
# Create policy script file
touch policy/policy.script && echo "" > policy/policy.script
# Generate policy script and put it into the newly created file
echo "{" >> policy/policy.script
echo " \"keyHash\": \"$(cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey)\"," >> policy/policy.script
echo " \"type\": \"sig\"" >> policy/policy.script
echo "}" >> policy/policy.script
# Generate policy ID
cardano-cli transaction policyid --script-file ./policy/policy.script >> policy/policyId
# Use the command for checking the address balance (defined above) to see transaction hash and index and the lovelace amount you have available
# If you were successful in funding your address, it should return something like this:
# TxHash TxIx Amount
# --------------------------------------------------------------------------------------
# a8a166c59f8753a01f4e57d8aea2427b5c7de50147e058ba6c0f8e5bfb785094 0 1000000000 lovelace
# Save this data as environment variables
export TX_HASH=a8a166c59f8753a01f4e57d8aea2427b5c7de50147e058ba6c0f8e5bfb785094
export TX_IX=0
export AVAILABLE_LOVELACE=1000000000
# Build raw transaction using this data
cardano-cli transaction build-raw \
--mary-era \
--fee 0 \
--tx-in $TX_HASH#$TX_IX \
--tx-out $(< payment.addr)+$AVAILABLE_LOVELACE+"$TOKEN_AMOUNT $(< policy/policyId).$TOKEN_NAME" \
--mint="$TOKEN_AMOUNT $(< policy/policyId).$TOKEN_NAME" \
--out-file matx.raw
# Calculate the minimum fee
cardano-cli transaction calculate-min-fee \
--tx-body-file matx.raw \
--tx-in-count 1 \
--tx-out-count 1 \
--witness-count 1 \
--testnet-magic $TESTNET_ID \
--protocol-params-file protocol.json
# Make your fee available as an environment variable
export TX_FEE=174961 # Replace with value returned by running the previous command
# Use the calculated fee to build the transaction with proper fee amount
cardano-cli transaction build-raw \
--mary-era \
--fee $TX_FEE \
--tx-in $TX_HASH#$TX_IX \
--tx-out $(< payment.addr)+$(($AVAILABLE_LOVELACE - $TX_FEE))+"$TOKEN_AMOUNT $(< policy/policyId).$TOKEN_NAME" \
--mint="$TOKEN_AMOUNT $(< policy/policyId).$TOKEN_NAME" \
--out-file matx.raw
# Sign the transaction
cardano-cli transaction sign \
--signing-key-file payment.skey \
--signing-key-file policy/policy.skey \
--script-file policy/policy.script \
--testnet-magic $TESTNET_ID \
--tx-body-file matx.raw \
--out-file matx.signed
# Submit the transaction
cardano-cli transaction submit --tx-file matx.signed --testnet-magic $TESTNET_ID
# If you don’t see anything in the terminal it means everything went smoothly
# So, you should now be able to query your address and see your token there
cardano-cli query utxo --address $(< payment.addr) \
--testnet-magic $TESTNET_ID \
# If you don’t see it immediately, don’t panic, it might take a bit for the transaction to be confirmed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment