Register Stake Pool - solidsnakedev/cardano_commands GitHub Wiki

Requirements

NODE_HOME=...
POOL_KEYS=${NODE_HOME}/pool-keys
DATA=${POOL_KEYS}/data

Download last "pool metadata"

URL_METADATA=https://solidsnakedev.github.io/poolMetadata.json
wget ${URL_METADATA} -O ${DATA}/pool_Metadata.json

Calculate the hash of your metadata file

cardano-cli stake-pool metadata-hash --pool-metadata-file ${DATA}/pool_Metadata.json > ${DATA}/pool_MetadataHash.txt

Air-gapped machine

Update the below registration-certificate

PLEDGE=100000000000
COST=340000000
MARGIN=0.019
RELAY=194.163.164.5
cardano-cli stake-pool registration-certificate \
--cold-verification-key-file ${POOL_KEYS}/cold.vkey \
--vrf-verification-key-file ${POOL_KEYS}/vrf.vkey \
--pool-pledge ${PLEDGE} \
--pool-cost ${COST} \
--pool-margin ${MARGIN} \
--pool-reward-account-verification-key-file ${POOL_KEYS}/stake.vkey \
--pool-owner-stake-verification-key-file ${POOL_KEYS}/stake.vkey \
--mainnet \
--pool-relay-ipv4 ${RELAY} \
--pool-relay-port 6000 \
--metadata-url ${URL_METADATA} \
--metadata-hash $(cat ${DATA}/pool_MetadataHash.txt) \
--out-file ${DATA}/pool-registration.cert

To honor your pledge, create a delegation certificate:

cardano-cli stake-address delegation-certificate \
--stake-verification-key-file ${POOL_KEYS}/stake.vkey \
--cold-verification-key-file ${POOL_KEYS}/cold.vkey \
--out-file ${DATA}/delegation.cert

Block producer

Find the tip of the blockchain

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

Find your balance and UTXOs.

cardano-cli query utxo \
    --address $(cat ${POOL_KEYS}/payment.addr) \
    --mainnet > ${DATA}/fullUtxo.out

tail -n +3 ${DATA}/fullUtxo.out | sort -k3 -nr > ${DATA}/balance.out

cat ${DATA}/balance.out

tx_in=""
total_balance=0
while read -r utxo; do
    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}"
done < ${DATA}/balance.out
txcnt=$(cat ${DATA}/balance.out | wc -l)
echo Total ADA balance: ${total_balance}
echo Number of UTXOs: ${txcnt}

Get protocol parameters

cardano-cli query protocol-parameters \
  --mainnet \
  --out-file ${DATA}/protocol.json
stakePoolDeposit=$(cat ${DATA}/protocol.json | jq -r '.stakePoolDeposit')
echo stakePoolDeposit: $stakePoolDeposit

Draft the transaction

cardano-cli transaction build-raw \
    ${tx_in} \
    --tx-out $(cat ${POOL_KEYS}/payment.addr)+$(( ${total_balance} - ${stakePoolDeposit}))  \
    --invalid-hereafter $(( ${currentSlot} + 10000)) \
    --fee 0 \
    --certificate-file ${DATA}/pool-registration.cert \
    --certificate-file ${DATA}/delegation.cert \
    --out-file ${DATA}/tx.tmp

Calculate the minimum fee:

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

Add a bit more to the fees ++

fee=$((fee + 100000))
echo fee: $fee

Calculate your change output.

txOut=$((${total_balance}-${stakePoolDeposit}-${fee}))
echo txOut: ${txOut}

Build the transaction.

cardano-cli transaction build-raw \
    ${tx_in} \
    --tx-out $(cat ${POOL_KEYS}/payment.addr)+${txOut} \
    --invalid-hereafter $(( ${currentSlot} + 10000)) \
    --fee ${fee} \
    --certificate-file ${DATA}/pool-registration.cert \
    --certificate-file ${DATA}/delegation.cert \
    --out-file ${DATA}/tx.raw

Air-gapped machine

Sign the transaction.

cardano-cli transaction sign \
    --tx-body-file ${DATA}/tx.raw \
    --signing-key-file ${POOL_KEYS}/payment.skey \
    --signing-key-file ${POOL_KEYS}/stake.skey \
    --signing-key-file ${POOL_KEYS}/cold.skey \
    --mainnet \
    --out-file ${DATA}/tx.signed

Block producer

Send the transaction.

cardano-cli transaction submit \
    --tx-file ${DATA}/tx.signed \
    --mainnet