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