이제부터는 신중하게 작업해야 합니다.
작업에 실수가 있을경우 ADA를 손실할 수 있습니다.
이전 POSTING에서 했던 일들을 절대로 재수행하지 마십시오.
Payment, Stake key 생성
block vm으로 들어갑니다.
cardano-cli query protocol-parameters \
--mainnet \
--mary-era \
--out-file params.json
params.json 파일을 생성 합니다.
이제 다시 cold vm으로 돌아갑니다.
cd $NODE_HOME
cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey
payment의 vkey, skey를 생성합니다.
cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey
stake의 vkey, skey를 생성합니다.
cardano-cli stake-address build \
--stake-verification-key-file stake.vkey \
--out-file stake.addr \
--mainnet
stake.addr을 생성합니다. stake의 주소 파일 입니다.
cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--mainnet
payment.addr을 생성합니다. 지갑 주소 파일 입니다.
payment.addr 파일을 block vm으로 복사합니다. payment.addr에 ada를 전송할 수 있게 되는 매우 중요한 주소입니다.
이제 block vm으로 돌아와서
cardano-cli query utxo \
--address $(cat payment.addr) \
--mary-era \
--mainnet
cardano에 내 payment.addr에 ada가 얼마나 있는지 확인해봅니다.
아직 하나도 보내지 않았기 때문에 당연히 아무것도 없습니다.
TxHash TxIx Amount
--------------------------------------------------------------------------------------
이제 4 ADA를 이 주소로 전송합니다. ada 전송방법은 이전 post에서 보실수도 있지만
거래소에서 구매한 이후에 거래소에서 전송하시는 방법이 제일 간편합니다.
전송한 이후 다시
cardano-cli query utxo \
--address $(cat payment.addr) \
--mary-era \
--mainnet
TxHash TxIx Amount
--------------------------------------------------------------------------------------
873e8ec3b5b715183c0654f5438fc77c4cdcb67f0c7e19a1c1fe7966bc0fac5a 0 4000000 lovelace
4 ADA가 온것을 볼 수 있습니다.
1 ADA = 1000000 lovelace 입니다.
stake address 등록
cold vm으로 돌아가서
cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert
stake.cert 파일을 생성합니다.
stake.cert 파일을 block vm으로 복사해줍니다.
block vm으로 돌아와서
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slotNo')
echo Current Slot: $currentSlot
currentSlot 환경변수를 설정하고
cardano-cli query utxo \
--address $(cat payment.addr) \
--mary-era \
--mainnet > fullUtxo.out
현재 지갑의 내용을 file로 만듭니다.
cat fullUtxo.out
출력해보면
아래의 내용이 파일에 저장되었음을 알 수 있습니다.
TxHash TxIx Amount
--------------------------------------------------------------------------------------
873e8ec3b5b715183c0654f5438fc77c4cdcb67f0c7e19a1c1fe7966bc0fac5a 0 4000000 lovelace
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}
각종 변수들을 setting 해주는 script 입니다. 이전 post의 원장 작성에서 필요한 값들을 미리 변수로 만드는 과정입니다.
keyDeposit=$(cat $NODE_HOME/params.json | jq -r '.keyDeposit')
echo keyDeposit: $keyDeposit
keyDeposit값 2000000이 나옵니다.(2 ADA) 등록하기 위해 사용될 ADA 입니다.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+0 \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee 0 \
--out-file tx.tmp \
--mary-era \
--certificate stake.cert
stake.cert를 등록하기 위한 원장 작성입니다. 이전 post의 원장작성과 비교해보시면 어떤 내용인지 이해가 쉽습니다.
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
fee값을 알아냅니다.
txOut=$((${total_balance}-${keyDeposit}-${fee}))
echo Change Output: ${txOut}
남게될 잔고값도 setting 합니다.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${txOut} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee ${fee} \
--certificate-file stake.cert \
--mary-era \
--out-file tx.raw
raw 원장 파일을 만들어 봅니다.
이제 tx.raw 파일을 cold vm에 복사해줍니다.
cold vm으로 돌아와서
cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--signing-key-file stake.skey \
--mainnet \
--out-file tx.signed
원장을 signing 해줍니다.
sigining된 원장을 다시 block vm으로 복사해줍니다.
여기서부터는 ADA가 소모됩니다.
원장을 제출하는 순간 2 ADA가 비용으로 지불되며 돌이킬 수 없습니다.
block vm으로 돌아와서
cardano-cli transaction submit \
--tx-file tx.signed \
--mainnet
원장을 제출합니다.