Delegating to a Stake Pool

Prerequisites

  • Both a payment and a stake key pair. Payment key should contain some ADA.

👩‍💻 Registering Your Stake Address

Create a certificate, stake.cert, using the stake.vkey

cardano-cli conway stake-address registration-certificate \
    --stake-verification-key-file stake.vkey \
	--key-reg-deposit-amt 2000000 \
    --out-file stake.cert

You need to find the slot tip of the blockchain.

currentSlot=$(cardano-cli conway query tip --mainnet | jq -r '.slot')
echo Current Slot: $currentSlot

Retrieve the UTXOs available for your payment address and calculate the balance.

# Retrieve the list of UTXOs available for your payment address
utxo_json=$(cardano-cli conway query utxo --address $(cat payment.addr) --mainnet)

# Initialize variables
tx_in=""
total_balance=0
txcnt=0

# Loop through the list of UTXOs
while read -r utxo; do
    # Retrieve the values for the current UTXO
    values=$(jq -r --arg k "${utxo}" '.[$k]' <<< "${utxo_json}")
    # Retrieve datum associated with the UTXO
    datum=$(jq -r '.datum' <<< "${values}")
    # Retrieve the reference script associated with the UTXO
    script=$(jq -r '.referenceScript' <<< "${values}")
	# If limits on spending the UTXO may exist, then skip the UTXO
    if [[ ${datum} == 'null' && ${script} == 'null' ]]
    then
        hash=${utxo%%#*}
        idx=${utxo#*#}
        utxo_balance=$(jq -r '.value.lovelace' <<< "${values}")
        total_balance=$((${total_balance}+${utxo_balance}))
        echo "TxHash: ${hash}#${idx}"
        echo "ADA: ${utxo_balance}"
        tx_in="${tx_in} --tx-in ${hash}#${idx}"
		txcnt=$((txcnt + 1))
    fi
done <<< "$(jq -r 'keys[]' <<< "${utxo_json}")"

echo
echo "Total available ADA balance: ${total_balance}"
echo "Number of UTXOs: ${txcnt}"
echo "Final --tx-in string:${tx_in}"

Find the stakeAddressDeposit value.

Registration of a stake address certificate (stakeAddressDeposit) costs 2000000 lovelace.

Run the build-raw transaction command

The invalid-hereafter value must be greater than the current tip. In this example, we use current slot + 10000.

Calculate the current minimum fee:

Ensure your balance is greater than cost of fee + stakeAddressDeposit or this will not work.

Calculate your change output.

Build your transaction which will register your stake address.

Sign the transaction with both the payment and stake secret keys.

Send the signed transaction.

📄 Creating a Delegation Certificate

Given its stake pool verification key file node.vkey , from your stakepool should have generated (and published) a stake pool ID:

Given the stake pool ID from your stakepool, run the following:

You need to find the tip of the blockchain to set the ttl parameter properly.

Retrieve the UTXOs available for your payment address and calculate the balance.

Run the build-raw transaction command.

Calculate the minimum fee:

Calculate your change output.

Build the transaction.

Sign the transaction.

Send the transaction.

Last updated