이전글
2022.02.28 - [Cardano/staking pool 구축] - ADA Staking Pool 구축 #3
이번 글을 마지막으로 어느 정도 스테이킹 풀 구축이 끝날 것 같습니다.
이제부터의 나머지 과정은 블록을 100% 다운로드 받은 후 수행하시기 바랍니다.
블록생성 노드 키 만들기
블록 생성 노드는 3가지 종류의 키가 필요합니다.
이중에서 KES Key pair라는 것부터 생성해봅시다. KES 해커로부터 키를 손상시키는 것으로부터 스테이크 풀을 보호할 수 있는 키라고 설명하고 있습니다. 뭐 이렇게만 알고 넘어갑시다. 모든 것을 알고 지나갈 수는 없는 노릇이니까요. 확실한 것은 90일마다 한번씩 이 키를 교체해줘야 한다는 것입니다. 운영시 잊지 말아야겠네요.
아래를 실행해 KES 키를 생성합니다. 이 키는 hot key로 블록 생성 노드에서 생성하시면 됩니다.
<블록 생성 노드에서 실행>
cd $NODE_HOME
cardano-cli node key-gen-KES \
--verification-key-file kes.vkey \
--signing-key-file kes.skey
이제 cold-key들을 만들어 봅시다. cold-key는 저번 글에서 말씀드린데로 air-gapped machine, 그러니까 인터넷이 연결안되는 컴퓨터에서 생성하셔야 해요. 우선 폴더를 만들고
<air-gapped machine에서 수행>
mkdir $HOME/cold-keys
pushd $HOME/cold-keys
cold-key들을 생성합니다.
<air-gapped machine에서 수행>
cardano-cli node key-gen \
--cold-verification-key-file node.vkey \
--cold-signing-key-file $HOME/cold-keys/node.skey \
--operational-certificate-issue-counter node.counter
*** 이 키들은 여러 개의 복사본을 만들어 안전하게 보관하시기 바랍니다.
genesis 파일로부터 KES 주기 당 슬롯 갯수를 가져옵니다.
<블록 생성 노드에서 수행>
pushd +1
slotsPerKESPeriod=$(cat $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json | jq -r '.slotsPerKESPeriod')
echo slotsPerKESPeriod: ${slotsPerKESPeriod}
slotNo를 알아냅니다.
slotNo=$(cardano-cli query tip --mainnet | jq -r '.slot')
echo slotNo: ${slotNo}
kesPeriod를 알아냅니다.
kesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))
echo kesPeriod: ${kesPeriod}
startKesPeriod=${kesPeriod}
echo startKesPeriod: ${startKesPeriod}
위 계산에서 알아낸 정보들로 풀 인증서를 생성할 수 있습니다. 이제 계속 진행하기 전에 kes.vkey를 air-gapped machine으로 복사합니다.
<air gapped machine에서 수행>
cardano-cli node issue-op-cert \
--kes-verification-key-file kes.vkey \
--cold-signing-key-file $HOME/cold-keys/node.skey \
--operational-certificate-issue-counter $HOME/cold-keys/node.counter \
--kes-period <startKesPeriod> \
--out-file node.cert
생성된 node.cert 파일을 블록 생성 노드로 복사합니다.
블록 생성 노드에서 VRF key pair를 생성합니다. (VRF: Verifiable Random Function)
<블록 생성 노드에서 수행>
cardano-cli node key-gen-VRF \
--verification-key-file vrf.vkey \
--signing-key-file vrf.skey
readonly로 파일 권한을 변경합니다.
chmod 400 vrf.skey
실행중인 노드를 잠시 멈추고
sudo systemctl stop cardano-node
실행 스크립트에 KES, VRF, CERT 경로를 추가합니다.
cat > $NODE_HOME/startBlockProducingNode.sh << EOF
DIRECTORY=$NODE_HOME
PORT=6000
HOSTADDR=0.0.0.0
TOPOLOGY=\${DIRECTORY}/${NODE_CONFIG}-topology.json
DB_PATH=\${DIRECTORY}/db
SOCKET_PATH=\${DIRECTORY}/db/socket
CONFIG=\${DIRECTORY}/${NODE_CONFIG}-config.json
KES=\${DIRECTORY}/kes.skey
VRF=\${DIRECTORY}/vrf.skey
CERT=\${DIRECTORY}/node.cert
cardano-node run --topology \${TOPOLOGY} --database-path \${DB_PATH} --socket-path \${SOCKET_PATH} --host-addr \${HOSTADDR} --port \${PORT} --config \${CONFIG} --shelley-kes-key \${KES} --shelley-vrf-key \${VRF} --shelley-operational-certificate \${CERT}
EOF
노드를 재시작하고 .gLiveView로 모니터링합니다.
sudo systemctl start cardano-node
# Monitor with gLiveView
./gLiveView.sh
Payment 키와 Stake 키 만들기
첫번째로 protocol-parameter를 얻어옵니다. 카르다노 노드가 완벽하게 동작할 때 수행해야 합니다.
<블록 생성노드에서 수행>
cardano-cli query protocol-parameters \
--mainnet \
--out-file params.json
이제 payment와 stake key pair르 생성해야 하는데 두가지 방법이 있습니다. 하나는 지금까지 해온 CLI 방식이고 다른 하나는 다이달로스나 요로이 지갑을 통해 생성하는 방식입니다. 해온 방식(CLI)대로 합시다.
이 키들을 이용해 에이다를 지불할 수 있으니 보안에 각별히 유의하시기 바랍니다.
<air gapped offline machine에서 수행>
payment key pair를 생성합니다.
cd $NODE_HOME
cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey
stake key pair를 생성합니다.
cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey
생성된 키를 이용해 payment address를 만듭니다.
cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--mainnet
payment.addr 파일을 블록 생성 노드로 복사합니다.
이제 payment address로 에이다를 보내야 합니다. 처음에 말씀드렸다시피 스테이크 키 보증금이 2 에이다, 스테이크 풀 보증금이 500 에이다입니다. 그리고 거기에 더해 자신이 원하는 pledge 금액이 필요합니다. pledge를 0으로 할지라도 전송 수수료 등이 포함되므로 505에이다는 있어야 합니다. 아래를 실행해 자신의 주소를 확인할 수 있습니다.
cat payment.addr
보내고 나서 계좌를 확인해 봅시다. https://explorer.cardano.org/en 와 같은 사이트에서도 확인하실 수 있습니다.
<블록 생성 노드에서 수행>
cardano-cli query utxo \
--address $(cat payment.addr) \
--mainnet
아래와 같이 lovelace 단위로 표현되는 것을 확인하실 수 있습니다. 1 ADA = 1,000,000 lovelace입니다.
스테이크 주소 등록
먼저 stake.vkey를 이용하여 stake.cert 인증서를 생성합니다.
<air-gapped offline machine에서 수행>
cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert
생성된 stake.cert를 블록 생성 노드로 복사합니다.
그리고 invalid-hereafter 파라미터에 활용할 현재 slop 번호를 찾아야 합니다.
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
echo Current Slot: $currentSlot
그리고 나서는 UTXO를 검색합니다. 아래는 복잡하게 생겼지만 사실은 단순히 UTXO가 여러개의 라인일 수 있어 편하게 계산하기 위함입니다.
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
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}
param.json으로부터 stakeAddresssDeposit이 얼마인지 확인해 봅시다. 편하게 cat param.json으로 확인하셔도 됩니다.
stakeAddressDeposit=$(cat $NODE_HOME/params.json | jq -r '.stakeAddressDeposit')
echo stakeAddressDeposit : $stakeAddressDeposit
"stakeAddressDeposit": 2000000, 2,000,000 lovalace 즉 2 에이다 입니다.
build-raw를 작성합니다. 아까 계산해 두었던 currentSlot에 더하기 10,000을 해주어 invalid-hereafter 파라미터에 입력해줍니다. 이 의미는 현재 슬롯에서 10,000 슬롯이 지나면 invalid 된다는 의미입니다.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+0 \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee 0 \
--out-file tx.tmp \
--certificate stake.cert
위에서 작성한 build-raw를 이용해 스테이크 주소 보증금 납부를 위한 최소 수수료를 계산합니다.
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
보증금과 수수료 전송 후 변경될 output(잔고)을 계산합니다.
txOut=$((${total_balance}-${stakeAddressDeposit}-${fee}))
echo Change Output: ${txOut}
이제 실제 납부하기 위한 build-raw를 작성하여 생성된 tx.raw를 air-gapped offline machine으로 복사해 둡니다.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${txOut} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee ${fee} \
--certificate-file stake.cert \
--out-file tx.raw
이제 해당 거래를 payment 키와 stake키로 서명합니다. 새로 생성된 tx.signed도 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
해당 거래를 제출하면 거래가 이루어집니다. 내 계좌에서 stake 보증금과 수수료가 출금된 것을 확인해보시기 바랍니다.
cardano-cli transaction submit \
--tx-file tx.signed \
--mainnet
스테이크 풀 등록
스테이크 풀을 등록하려면 먼저 pool의 메타 데이터 json 파일을 만들고 이를 업데이트 해야 합니다.
cat > poolMetaData.json << EOF
{
"name": "MyPoolName",
"description": "My pool description",
"ticker": "MPN",
"homepage": "https://myadapoolnamerocks.com"
}
EOF
name: 내 스테이크 풀 이름입니다.
desciprtion: 내 스테이크 풀 설명입니다. 255자를 넘을 수 없습니다.
ticker: 내 스테이크 풀의 약어입니다. 3-5글자여야 하고 알파뱃과 0~9까지의 숫자만 허용됩니다.
homepage: 내 스테이크 풀에 대한 설명이나 홍보 자료가 있는 홈페이지 주소입니다. 본격적으로 하시려면 예쁘게 만드셔야겠죠?
파일을 생성했으면 해쉬를 계산해야 합니다. 생성된 poolMetaDataHash.txt를 air-gapped offline machine으로 복사해 둡니다.
cardano-cli stake-pool metadata-hash --pool-metadata-file poolMetaData.json > poolMetaDataHash.txt
poolMetaData.json은 웹에 업로드되어 있어야 합니다. 자신의 웹사이트를 사용하시거나 없다면 github page 같은 곳을 활용하세요. 다운로드 된 json 파일의 해시와 위에서 만들어준 해시를 비교하여 일치해야 합니다. 즉, 똑같아야 합니다.
저는 nextjs와 aws amplify를 이용하여 웹사이트를 구축 후 json파일을 업로드 했습니다. 구축하는 방법은 아래 글을 참고해 주세요.
2021.09.16 - [Next.js] - Next.JS + AWS Amplify 맛만 보자 ㅎㅎ
위의 과정에서 nextjs public folder에 poolMetaData.json 복사해 넣어주시고 배포하시면 간단하게 됩니다.
** github page를 이용해 poolMetaData.json파일을 업로드 하는 방법은 이 글에는 따로 언급하지 않겠습니다. 원하시면 댓글을 남겨주세요. 그러면 별도로 글을 올리도록 하겠습니다.
이제 params.json 파일로부터 minPoolCost를 추출합니다. minPoolCost는 1에포크(5일)당 풀을 운영하는데 드는 최소 금액입니다. 예를 들면 내 인건비 컴퓨터 사용료, 인터넷 사용도 등이 포함되어야 하겠지요. 이 금액이 높으면 위임한 사람들의 배당이 줄어들기 때문에 풀이 인기가 없겠죠. 그래서 보통 최소로 설정해 둡니다.
minPoolCost=$(cat $NODE_HOME/params.json | jq -r .minPoolCost)
echo minPoolCost: ${minPoolCost}
현재 minPoolCost는 340 ADA입니다.
이제 스테이크 풀 인증서를 만들어봅시다. 아래에서 몇가지 신경쓸 점이 있습니다. 첫번째는 pledge 금액입니다. 이는 스테이크 풀이 항상 가지고 있을 금액을 이야기합니다. 이 금액은 클수록 좋으며 보상에 영향을 미칩니다. 두 번째는 pool-cost는 거의 모든 풀이 최소 금액(340 ADA)을 사용합니다. lovelace단위로 적어주시면 됩니다. 세번째는 pool-margin입니다. 1이 100%이고 0.01이 1%입니다. 풀 마진을 크게 하면 위임한 사람들에게 돌아갈 보상이 줄어들어 인기가 없어집니다. 그래서 0%으로 설정해 둔 풀들이 많습니다. 나머지 릴레이 ip 주소, poolMetaData.json URL 등은 정확하게 입력하시기 바랍니다.
<air-gapped offline machine에서 수행>
cardano-cli stake-pool registration-certificate \
--cold-verification-key-file $HOME/cold-keys/node.vkey \
--vrf-verification-key-file vrf.vkey \
--pool-pledge <원하는 pledge금액> \
--pool-cost 340000000 \
--pool-margin 0.00 \
--pool-reward-account-verification-key-file stake.vkey \
--pool-owner-stake-verification-key-file stake.vkey \
--mainnet \
--pool-relay-ipv4 <릴레이 IP 주소>\
--pool-relay-port 6000 \
--metadata-url <poolMetaData.json가 업로드되어 있는 URL> \
--metadata-hash $(cat poolMetaDataHash.txt) \
--out-file pool.cert
스테이크 풀을 더 안정적으로 운영하기 위해 릴레이 노드를 2개 이상 두시려면 위의 옵션에서 릴레이 노드를 추가하시기 바랍니다.
--pool-relay-port 6000 \
--pool-relay-ipv4 <첫번째 릴레이 노드 ip address> \
--pool-relay-port 6000 \
--pool-relay-ipv4 <두번째 릴레이 노드 ip address> \
생성된 pool.cert 인증서를 블록 생성 노드에 복사합니다.
이제 delegation certificate를 만듭니다.
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
생성된 deleg.cert 인증서를 블록 생성 노드에 복사합니다.
다음으로 이 인증서들을 등록하고 보증금을 납부하기 위한 과정을 진행합니다. invalid-hereafter에 사용할 slot 번호를 얻어옵니다.
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
echo Current Slot: $currentSlot
UTXO Query를 통해 현재 잔액 등을 얻어옵니다.
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
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}
스테이크 풀 보증금이 얼마인지 params.json으로부터 읽어옵니다. 여러번 말씀드렸다시피 500에이다 입니다.
stakePoolDeposit=$(cat $NODE_HOME/params.json | jq -r '.stakePoolDeposit')
echo stakePoolDeposit: $stakePoolDeposit
"stakePoolDeposit": 500000000,
수수료 계산을 위한 build-raw를 작성하고
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+$(( ${total_balance} - ${stakePoolDeposit})) \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee 0 \
--certificate-file pool.cert \
--certificate-file deleg.cert \
--out-file tx.tmp
생성된 tx.tmp 파일을 이용해 수수료를 알아냅니다.
fee=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx.tmp \
--tx-in-count ${txcnt} \
--tx-out-count 1 \
--mainnet \
--witness-count 3 \
--byron-witness-count 0 \
--protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee
보증금과 수수료가 납부된 이후의 계좌 잔고를 계산합니다.
txOut=$((${total_balance}-${stakePoolDeposit}-${fee}))
echo txOut: ${txOut}
새로 build-raw를 작성하고 생성된 tx.raw를 air-gapped offline machine으로 복사합니다. (영수증 같은 개념인가 봅니다.)
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 \
--out-file tx.raw
거래에 서명합니다.
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
거래를 제출하면 실제로 거래가 일어나서 내 계좌로부터 보증금 500 ADA와 수수료가 빠져나갑니다.
cardano-cli transaction submit \
--tx-file tx.signed \
--mainnet
query utxo 명령을 통해 내 계좌를 확인해 볼 수 있습니다.
cardano-cli query utxo \
--address $(cat payment.addr) \
--mainnet
이제 스테이크 풀이 카르다노 네트워크에 등록되었습니다.
스테이크 풀 동작 확인
보통스테이크 풀이 잘 동작하는지 여부는 https://pooltool.io/ 에서 자신의 TICKER 이름으로 검색해보는 것으로 쉽게 확인하실 수 있습니다. 아니면 아래와 같이 CLI로 Stake pool id를 얻어낸 후 query하는 방법으로 확인도 가능합니다.
<air-gapped offline machine에서 수행>
cardano-cli stake-pool id --cold-verification-key-file $HOME/cold-keys/node.vkey --output-format hex > stakepoolid.txt
cat stakepoolid.txt
<블록 생성 노드에서 수행>
cardano-cli query stake-snapshot --stake-pool-id $(cat stakepoolid.txt) --mainnet
non-empty string이 리턴되면 잘 등록되었다는 의미라도 되어 있으나 제가 수행했을 때는 메모리 부족으로 에러가 발생하였습니다. 저만 그런가요? 암튼 pooltool.io에서 확인이 되어 위 방법은 더 이상 시도해보지 않았습니다.
Topology file 설정
릴레이 노드의 topology 파일에 다른 신뢰할 수 있는 릴레이 노드들을 수동으로 추가해 주셔야 합니다. 하지만 수동으로 일일이 살았다 죽었다 하는 노드를 수동으로 추가하는 일은 쉽지 않습니다. 그래서 누군가 만들어놓은 topologyUpdater라는 스크립트를 사용하는 것을 추천합니다.
이 과정은 릴레이 노드에 접속하여 수행합니다.
아래를 수행하여 topologyUpdater.sh를 생성합니다. 이 파일은 내 릴레이 정보를 topology fetch 리스트에 배포합니다.
cat > $NODE_HOME/topologyUpdater.sh << EOF
#!/bin/bash
# shellcheck disable=SC2086,SC2034
USERNAME=$(whoami)
CNODE_PORT=6000 # must match your relay node port as set in the startup command
CNODE_HOSTNAME="릴레이 노드 IP를 입력해주세요."
CNODE_BIN="/usr/local/bin"
CNODE_HOME=$NODE_HOME
CNODE_LOG_DIR="\${CNODE_HOME}/logs"
GENESIS_JSON="\${CNODE_HOME}/${NODE_CONFIG}-shelley-genesis.json"
NETWORKID=\$(jq -r .networkId \$GENESIS_JSON)
CNODE_VALENCY=1 # optional for multi-IP hostnames
NWMAGIC=\$(jq -r .networkMagic < \$GENESIS_JSON)
[[ "\${NETWORKID}" = "Mainnet" ]] && HASH_IDENTIFIER="--mainnet" || HASH_IDENTIFIER="--testnet-magic \${NWMAGIC}"
[[ "\${NWMAGIC}" = "764824073" ]] && NETWORK_IDENTIFIER="--mainnet" || NETWORK_IDENTIFIER="--testnet-magic \${NWMAGIC}"
export PATH="\${CNODE_BIN}:\${PATH}"
export CARDANO_NODE_SOCKET_PATH="\${CNODE_HOME}/db/socket"
blockNo=\$(/usr/local/bin/cardano-cli query tip \${NETWORK_IDENTIFIER} | jq -r .block )
# Note:
# if you run your node in IPv4/IPv6 dual stack network configuration and want announced the
# IPv4 address only please add the -4 parameter to the curl command below (curl -4 -s ...)
if [ "\${CNODE_HOSTNAME}" != "CHANGE ME" ]; then
T_HOSTNAME="&hostname=\${CNODE_HOSTNAME}"
else
T_HOSTNAME=''
fi
if [ ! -d \${CNODE_LOG_DIR} ]; then
mkdir -p \${CNODE_LOG_DIR};
fi
curl -s "https://api.clio.one/htopology/v1/?port=\${CNODE_PORT}&blockNo=\${blockNo}&valency=\${CNODE_VALENCY}&magic=\${NWMAGIC}\${T_HOSTNAME}" | tee -a \$CNODE_LOG_DIR/topologyUpdater_lastresult.json
EOF
권한을 주고 토폴로지 업데이터를 실행합니다.
cd $NODE_HOME
chmod +x topologyUpdater.sh
./topologyUpdater.sh
토폴로지 업데이터가 잘 수행되면 아래와 같은 메세지가 출력됩니다.
{ "resultcode": "201", "datetime":"2020-07-28 01:23:45", "clientIp": "1.2.3.4", "iptype": 4, "msg": "nice to meet you" }
일정 시간마다 반복하기 위해서 크론탭에 등록합니다. 33 * * * * 은 매 시간 33분마다 실행하라는 소리입니다. 1시 33분, 2시 33분 이런식으로 실행이 반복됩니다.
cat > $NODE_HOME/crontab-fragment.txt << EOF
33 * * * * ${NODE_HOME}/topologyUpdater.sh
EOF
crontab -l | cat - ${NODE_HOME}/crontab-fragment.txt > ${NODE_HOME}/crontab.txt && crontab ${NODE_HOME}/crontab.txt
rm ${NODE_HOME}/crontab-fragment.txt
4시간 후에 릴레이 노드가 topology fetch list에 등록됩니다.
다음으로는 릴레이 노드의 mainnet-topology.json 파일을 업데이트하기 위한 relay-topology_pull.sh를 작성합니다.
cat > $NODE_HOME/relay-topology_pull.sh << EOF
#!/bin/bash
BLOCKPRODUCING_IP=자신의 블록 생성 노드 IP 주소
BLOCKPRODUCING_PORT=자신의 블록 생성 노드 포트번호
curl -s -o $NODE_HOME/${NODE_CONFIG}-topology.json "https://api.clio.one/htopology/v1/fetch/?max=20&customPeers=\${BLOCKPRODUCING_IP}:\${BLOCKPRODUCING_PORT}:1|relays-new.cardano-mainnet.iohk.io:3001:2"
EOF
실행권한을 주고 실행합니다. 실행을 완료하면 mainnet-topology.json이 업데이트 된 것을 확인할 수 있습니다.
chmod +x relay-topology_pull.sh
./relay-topology_pull.sh
업데이트 된 topology를 적용하기 위해 릴레이 노드를 재시작합니다.
sudo systemctl restart cardano-node
정상적으로 동작한다면 gLiveView에서 Processed TX와 mempool Tx/Bytes가 증가하는 것을 보실 수 있습니다. Peer들도 잘 등록되어 있는지 확인하시면 됩니다.
여기까지 완료하셨다면 pool.vet에 방문하신 후 자신의 TICKER를 입력하셔서 스테이크 풀의 상태를 확인해보시기 바랍니다. topology updater가 정상적으로 동작하는지도 확인하실 수 있습니다.
위는 제가 만든 테스트하며 제작해본 SCCP 스테이크 풀입니다. 다행이도 정상적으로 동작하고 있군요.
휴... 겨우 끝이 났습니다. 자 이제 자신의 풀에 요로이나 다이달로스 지갑으로 위임을 테스트 해보시기 바랍니다.
*** 다이달로스 지갑은 스테이크 풀 업데이트가 조금 늦는 것 같습니다. 참고하시기 바랍니다.
이제는 본격적으로 운영을 해야 하겠죠? 홍보도 하고 90일마다 KES 키도 바꿔주고, 하드웨어 모니터링하면서 메모리는 부족하지 않은지 디스크 용량은 부족하지 않은지 여러 가지 해야 할 일들이 많습니다. 이런 운영에 관한 내용은 저도 운영해나가면서 추가 글로 계속하도록 하겠습니다. 현재 운영하고 있지 않습니다.
안녕~!
'Cardano > staking pool 구축' 카테고리의 다른 글
ADA Staking Pool 운영에 대해... (0) | 2022.02.28 |
---|---|
ADA Staking Pool 구축 #3 (0) | 2022.02.28 |
ADA Staking Pool 구축 #2 (0) | 2022.02.28 |
ADA Staking Pool 구축 #1 (0) | 2022.02.28 |