Skip to main content

ステークアドレスの登録

誓約とは、自分のプールに委任するステークです。トランザクションを使用して、誓約する資金を含む支払いアドレスに関連付けられたステークアドレスをブロックチェーンに登録する必要があります。

info

トランザクションの作成に関する一般的な説明については、「トランザクションの構築と署名」のトピックを参照してください。

ブロックチェーンにステークアドレスを登録する方法

  1. stake.vkeyを使用して証明書stake.certを作成します。

SanchoNetの場合は、以下のURLを確認し、コマンドを作成すること
Register the stake address

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
ファイル転送

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

  1. invalid-hereafterパラメータを適切に設定するには、ブロックチェーンのTipを見つける必要があります。
cd $NODE_HOME
current_slot=$(cardano-cli latest query tip ${NODE_NETWORK} | jq -r '.slot')
echo Current Slot: ${current_slot}
  1. 残高と UTXO を見つけます。
cardano-cli latest query utxo \
--address $(cat payment.addr) \
${NODE_NETWORK} > 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
type=$(awk '{ print $6 }' <<< "${utxo}")
if [[ ${type} == 'TxOutDatumNone' ]]
then
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}"
fi
done < balance.out
tx_count=$(cat balance.out | wc -l)
echo Total available ADA balance: ${total_balance}
echo Number of UTXOs: ${tx_count}
  1. ステークアドレスを登録するために必要な入金額を確認します。
stake_address_deposit=$(cat $NODE_HOME/params.json | jq -r '.stakeAddressDeposit')
echo stakeAddressDeposit : ${stake_address_deposit}
  1. build-rawトランザクションコマンドを実行します。
tip

invalid-hereafter値は現在のTipよりも大きくなければなりません。
この例では、現在のスロット + 10000を使用します。

ステークアドレスを登録するには、2000000 Lovelaceのデポジットが必要です。

cardano-cli latest transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+$(( ${total_balance} - ${stake_address_deposit} )) \
--invalid-hereafter $(( ${current_slot} + 10000 )) \
--fee 200000 \
--out-file tx.tmp \
--certificate stake.cert
  1. 現在の最低料金を計算します。
fee=$(cardano-cli latest transaction calculate-min-fee \
--tx-body-file tx.tmp \
--tx-in-count ${tx_count} \
--tx-out-count 1 \
${NODE_NETWORK} \
--witness-count 2 \
--byron-witness-count 0 \
--protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee
tip

トランザクションの手数料を計算する際、--witness-countオプションはトランザクションに署名するキーの数を示します。
入力を費やした支払いアドレスの秘密鍵 (プライベートキー) と、登録するステークアドレスの秘密鍵を使用して、ブロックチェーンにステークアドレス登録証明書を送信してトランザクションに署名する必要があります。

tip

トランザクションを作成するときは、入力に含まれる資金がトランザクション手数料とステークアドレスの入金の合計よりも大きいことを確認してください。
資金が不足している場合、トランザクションは失敗します。

  1. お釣りの量を計算します。
tx_out=$((${total_balance}-${stake_address_deposit}-${fee}))
echo Change Output: ${tx_out}
  1. ステークアドレスを登録するトランザクションを構築します。
cardano-cli latest transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${tx_out} \
--invalid-hereafter $(( ${current_slot} + 10000 )) \
--fee ${fee} \
--certificate-file stake.cert \
--out-file tx.raw
ファイル転送

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

  1. 支払いとステークの秘密鍵の両方を使用してトランザクションに署名します。
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ディレクトリにコピーします。

  1. 署名されたトランザクションを送信します。
cardano-cli latest transaction submit \
--tx-file tx.signed \
${NODE_NETWORK}