SPO JAPAN GUILD
ステークプール構築

ステークアドレス登録

1. ステーク証明書の作成

cd $NODE_HOME
cardano-cli latest stake-address registration-certificate \
  --stake-verification-key-file stake.vkey \
  --key-reg-deposit-amt 2000000 \
  --out-file stake.cert

ステークアドレスの登録には2000000 lovelace (2ADA)が必要です。

ファイル転送

エアギャップのstake.cert をBPのcnodeディレクトリにコピーします。

stake.cert エアギャップ BP

2. ステークアドレスの登録

最新のスロット番号を取得します。

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

payment.addrの残高を出力します。

cardano-cli latest query utxo \
  --address $(cat payment.addr) \
  $NODE_NETWORK \
  --output-text \
  --out-file fullUtxo.out

tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out

cat balance.out

UTXOを算出します。

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}

keyDepositの値を出力します。

keyDeposit=$(cat $NODE_HOME/params.json | jq -r '.stakeAddressDeposit')
echo keyDeposit: $keyDeposit

トランザクション仮ファイルを作成します。

cardano-cli latest transaction build-raw \
  ${tx_in} \
  --tx-out $(cat payment.addr)+$(( ${total_balance} - ${keyDeposit} )) \
  --invalid-hereafter $(( ${currentSlot} + 10000)) \
  --fee 200000 \
  --out-file tx.tmp \
  --certificate stake.cert

現在の最低手数料を計算します。

fee=$(cardano-cli latest transaction calculate-min-fee \
  --tx-body-file tx.tmp \
  --witness-count 2 \
  --output-text \
  --protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee

計算結果をtxOutに出力します。

txOut=$((${total_balance}-${keyDeposit}-${fee}))
echo Change Output: ${txOut}

ステークアドレスを登録するトランザクションファイルを作成します。

cardano-cli latest 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

ファイル転送

BPのtx.rawをエアギャップのcnodeディレクトリにコピーします。

tx.raw BP エアギャップ

payment.skeystake.skeyの秘密鍵でトランザクションファイルに署名します。

cd $NODE_HOME
cardano-cli latest transaction sign \
  --tx-body-file tx.raw \
  --signing-key-file payment.skey \
  --signing-key-file stake.skey \
  $NODE_NETWORK \
  --out-file tx.signed

ファイル転送

エアギャップのtx.signedをBPのcnodeディレクトリにコピーします。

tx.signed エアギャップ BP

署名されたトランザクションを送信します。

cardano-cli latest transaction submit \
  --tx-file tx.signed \
  $NODE_NETWORK
期待される表示例:
Transacsion Successfully submitted
Transaction hash is:
{
  "txhash": "****************************************************************"
}

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。