Stake pool을 register 하기 위한 과정입니다.
Block producer node로 가서 아래 명령어를 입력합니다.
Ticker는 3-5 개의 영문자 또는 숫자로 입력합니다.
description은 255 문자를 넘어선 안됩니다.
cat > poolMetaData.json << EOF
{
"name": "MyPoolName",
"description": "My pool description",
"ticker": "MPN",
"homepage": "https://myadapoolnamerocks.com"
}
EOF
metadata file의 hash를 계산합니다.
cardano-cli stake-pool metadata-hash --pool-metadata-file poolMetaData.json > poolMetaDataHash.txt
이제 이 metaData file을 업로드 합니다.
metadata file의 url 문자열 길이가 제한되어 있으므로, github과 같은 사이트에 올린 후 git.io 에서 url 압축하여 줍니다.
이제 아래의 Step은 이전의 원장 작성과 동일하게 진행 됩니다.
minPoolCost=$(cat $NODE_HOME/params.json | jq -r .minPoolCost)
echo minPoolCost: ${minPoolCost}
relay 를 구성하는 방법은 domain, public ip를 사용하는 두가지 방법이 있는데, domain을 이용할 경우 ip가 변경되더라도 따로 업데이트를 해주지 않아도 되는 장점이 있습니다. domain이 있다면 domain을 쓰고 없다면 public ip로 적용하여 줍니다.
cold 에서 아래 명령어를 수행합니다.
cardano-cli stake-pool registration-certificate \
--cold-verification-key-file $HOME/cold-keys/node.vkey \
--vrf-verification-key-file vrf.vkey \
--pool-pledge 100000000 \
--pool-cost 345000000 \
--pool-margin 0.15 \
--pool-reward-account-verification-key-file stake.vkey \
--pool-owner-stake-verification-key-file stake.vkey \
--mainnet \
--single-host-pool-relay <dns based relay, example ~ relaynode1.myadapoolnamerocks.com> \
--pool-relay-port 6000 \
--pool-relay-ipv4 <your first relay node public IP address> \
--pool-relay-port 6000 \
--pool-relay-ipv4 <your second relay node public IP address> \
--metadata-url <url where you uploaded poolMetaData.json> \
--metadata-hash $(cat poolMetaDataHash.txt) \
--out-file pool.cert
위 명령어를 해석하면
key file의 위치, pool-pledge(기본으로 pool 운영자가 맡기게 되는 ada)
pool-margin : pool의 마진
mainnet : testnet인지 mainnet인지 여부
relay의 ip와 port
metadata-url : meta data에 접근할 수 있는 url
metadata hash : 이전에 계산한 meta data file의 hash 값
out-file : 위 계산으로 나오는 pool의 cert file 이름
pool.cert file을 block producer에 복사해 줍니다.
cold 에서 아래 작업을 수행합니다. pool.cert에 서약한 pledge 만큼의 값을 옮기게 됩니다.
이 과정에서 pledge된 금액은 이동하지 않습니다. pool의 payment.addr에 남아있게 됩니다.
cardano-cli stake-address delegation-certificate \
--stake-verification-key-file stake.vkey \
--cold-verification-key-file $HOME/cold-keys/node.vkey \
--out-file deleg.cert
block producer 로 돌아와 아래 작업을 수행합니다. 이전과 같이 원장을 작성하는 작업입니다.
내용은 금액 이체등이 아닌, stake pool을 register 하는 원장입니다.
cardano-cli query utxo \
--address $(cat payment.addr) \
--mary-era \
--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
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 < balance.out
txcnt=$(cat balance.out | wc -l)
echo Total ADA balance: ${total_balance}
echo Number of UTXOs: ${txcnt}
fee를 계산하고.
poolDeposit=$(cat $NODE_HOME/params.json | jq -r '.poolDeposit')
echo poolDeposit: $poolDeposit
tx.tmp 를 작성합니다.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+$(( ${total_balance} - ${poolDeposit})) \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee 0 \
--certificate-file pool.cert \
--certificate-file deleg.cert \
--mary-era \
--out-file tx.tmp
txOut값을 계산하고, raw 원장을 만듭니다.
txOut=$((${total_balance}-${poolDeposit}-${fee}))
echo txOut: ${txOut}
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${txOut} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee ${fee} \
--certificate-file pool.cert \
--certificate-file deleg.cert \
--mary-era \
--out-file tx.raw
Cold에 tx.raw 원장을 복사한 뒤 signning을 진행합니다.
cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--signing-key-file $HOME/cold-keys/node.skey \
--signing-key-file stake.skey \
--mainnet \
--out-file tx.signed
tx.singed << signning된 원장을 block producer로 복사한 후
block producer 로 돌아와 원장을 제출합니다.
원장을 제출하면 500 ADA가 소모 됩니다. POOL을 retire 시킬때 찾을 수 있지만 주의깊게 작업하시기 바랍니다.
cardano-cli transaction submit \
--tx-file tx.signed \
--mainnet
이제 여러분의 풀을 검색할 수 있도록 등록하는 작업이 완료되었습니다.
pooltool.io 또는 daedalus 지갑, yoroi 지갑에서 pool ticker를 통해 검색할 수 있습니다.