Skip to content

Latest commit

 

History

History
191 lines (159 loc) · 4.45 KB

File metadata and controls

191 lines (159 loc) · 4.45 KB

Claiming Stake Pool Rewards

Let's walk through an example to claim your stake pools rewards.

{% hint style="info" %} Rewards are accumulated in the stake.addr address. {% endhint %}

First, find the tip of the blockchain to set the invalid-hereafter parameter properly.

{% tabs %} {% tab title="block producer node" %}

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

{% endtab %} {% endtabs %}

Set the amount to send in lovelaces. ✨ Remember 1 ADA = 1,000,000 lovelaces.

{% tabs %} {% tab title="block producer node" %}

rewardBalance=$(cardano-cli query stake-address-info \
    --mainnet \
    --address $(cat stake.addr) | jq -r ".[0].rewardAccountBalance")
echo rewardBalance: $rewardBalance

{% endtab %} {% endtabs %}

Set the destination address which is where you're moving your reward to. This address must have a positive balance to pay for transaction fees.

{% tabs %} {% tab title="block producer node" %}

destinationAddress=$(cat payment.addr)
echo destinationAddress: $destinationAddress

{% endtab %} {% endtabs %}

Find your payment.addr balance, utxos and build the withdrawal string.

{% tabs %} {% tab title="block producer node" %}

cardano-cli query utxo \
    --address $(cat payment.addr) \
    --mainnet > fullUtxo.out

tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out

cat balance.out

tx_in=""
total_balance=0
while read -r utxo; do
    type=$(awk '{ print $6 }' <<< "${utxo}")
    if [[ ${type} == 'TxOutDatumNone' ]]
    then
        in_addr=$(awk '{ print $1 }' <<< "${utxo}")
        idx=$(awk '{ print $2 }' <<< "${utxo}")
        utxo_balance=$(awk '{ print $3 }' <<< "${utxo}")
        total_balance=$((${total_balance}+${utxo_balance}))
        echo TxHash: ${in_addr}#${idx}
        echo ADA: ${utxo_balance}
        tx_in="${tx_in} --tx-in ${in_addr}#${idx}"
    fi
done < balance.out
txcnt=$(cat balance.out | wc -l)
echo Total available ADA balance: ${total_balance}
echo Number of UTXOs: ${txcnt}

withdrawalString="$(cat stake.addr)+${rewardBalance}"

{% endtab %} {% endtabs %}

Run the build-raw transaction command.

{% tabs %} {% tab title="block producer node" %}

cardano-cli transaction build-raw \
    ${tx_in} \
    --tx-out $(cat payment.addr)+0 \
    --invalid-hereafter $(( ${currentSlot} + 10000)) \
    --fee 0 \
    --withdrawal ${withdrawalString} \
    --out-file tx.tmp

{% endtab %} {% endtabs %}

Calculate the current minimum fee:

{% tabs %} {% tab title="block producer node" %}

fee=$(cardano-cli transaction calculate-min-fee \
    --tx-body-file tx.tmp \
    --tx-in-count ${txcnt} \
    --tx-out-count 1 \
    --mainnet \
    --witness-count 2 \
    --byron-witness-count 0 \
    --protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee

{% endtab %} {% endtabs %}

Calculate your change output.

{% tabs %} {% tab title="block producer node" %}

txOut=$((${total_balance}-${fee}+${rewardBalance}))
echo Change Output: ${txOut}

{% endtab %} {% endtabs %}

Build your transaction.

{% tabs %} {% tab title="block producer node" %}

cardano-cli transaction build-raw \
    ${tx_in} \
    --tx-out $(cat payment.addr)+${txOut} \
    --invalid-hereafter $(( ${currentSlot} + 10000)) \
    --fee ${fee} \
    --withdrawal ${withdrawalString} \
    --out-file tx.raw

{% endtab %} {% endtabs %}

Copy tx.raw to your cold environment.

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

{% tabs %} {% tab title="air-gapped offline machine" %}

cardano-cli transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file stake.skey \
    --mainnet \
    --out-file tx.signed

{% endtab %} {% endtabs %}

Copy tx.signed to your hot environment.

Send the signed transaction.

{% tabs %} {% tab title="block producer node" %}

cardano-cli transaction submit \
    --tx-file tx.signed \
    --mainnet

{% endtab %} {% endtabs %}

Check if the funds arrived.

{% tabs %} {% tab title="block producer node" %}

cardano-cli query utxo \
    --address ${destinationAddress} \
    --mainnet

{% endtab %} {% endtabs %}

You should see output similar to this showing your updated Lovelace balance with rewards.

                           TxHash                                 TxIx        Lovelace
----------------------------------------------------------------------------------------
100322a39d02c2ead....