Calidusキーの登録
Calidusキーの登録
まずはじめにcardano-signerのインストールをします。
cardano-signerインストール
- ダウンロード
BP
release_tag=$(curl -s https://api.github.com/repos/gitmachtl/cardano-signer/releases/latest \
| jq -r '.tag_name | sub("^v"; "")')
echo "Release tag : ${release_tag}"
cd $HOME/git
wget -q https://github.com/gitmachtl/cardano-signer/releases/download/v${release_tag}/cardano-signer-${release_tag}_linux-x64.tar.gz
- 解凍
tar -xzvf cardano-signer-${release_tag}_linux-x64.tar.gz
rm cardano-signer-${release_tag}_linux-x64.tar.gz
- インストール
sudo cp cardano-signer /usr/local/bin/cardano-signer
- バージョン確認
cardano-signer --version
cardano-signer 1.35.0
- ファイル移動
BPの$HOME/gitにあるcardano-signerをエアギャップマシンの$HOME/gitにコピーします。
エアギャップ
6. システムフォルダへコピ ー
mkdir -p $HOME/git
cd $HOME/git
chmod 755 cardano-signer
sudo cp cardano-signer /usr/local/bin/cardano-signer
- バージョン確認
cardano-signer --version
cardano-signer 1.35.0
Calidusキーの生成
エアギャップ
mkdir -p $NODE_HOME/calidus
cd $NODE_HOME/calidus
cardano-signer keygen \
--path calidus \
--out-skey my-calidus.skey \
--out-vkey my-calidus.vkey \
--json-extended \
--out-file calidus-mnemonics-key.json
Coldキーで署名された登録メタデータを生成
エアギャップ
chmod u+rwx $HOME/cold-keys
cardano-signer sign --cip88 \
--calidus-public-key $NODE_HOME/calidus/my-calidus.vkey \
--secret-key $HOME/cold-keys/node.skey \
--json \
--out-file $NODE_HOME/calidus/calidus-registration-metadata.json
chmod a-rwx $HOME/cold-keys
24単語のニーモニックを出力し、メモ帳などにコピーします。
jq -r '.mnemonics' calidus-mnemonics-key.json
オンチェーン登録
BPで$NODE_HOME/calidusディレクトリを生成し、エアギャップのcalidus-registration-metadata.jsonをファイル転送します。
BP
- ディレクトリの生成
mkdir -p $NODE_HOME/calidus
- 送金額、送金先の設定
amount_to_send=10000000
echo "Amount to send: ${amount_to_send} lovelace"
destination_address=$(cat $NODE_HOME/payment.addr)
echo "Destination: ${destination_address}"
- payment.addr のUTxOを取得し、入力(tx_in)の 作成
pledge を維持したまま、Calidus登録用の 10 ADA を安全に送れるか確認します。
can_build=true
fee_buffer_lovelace=2000000
# 現在の pledge を取得
pledge_lovelace=$(
cardano-cli latest query pool-state \
--stake-pool-id "$(cat "$NODE_HOME/pool-bech32.id")" \
${NODE_NETWORK} \
| jq -r 'to_entries[0].value.poolParams.pledge // empty'
)
# payment.addr の UTxO を取得
payment_utxo_json=$(
cardano-cli latest query utxo \
--address "$(cat "$NODE_HOME/payment.addr")" \
${NODE_NETWORK} \
--output-json
)
# datum / referenceScript を持たない UTxO の合計残高
total_balance_lovelace=$(
jq -r '
to_entries
| map(
select((.value.referenceScript // null) == null)
| select((.value.datum // null) == null)
| select((.value.inlineDatum // null) == null)
| select((.value.inlineDatumRaw // null) == null)
| select((.value.datumhash // null) == null)
| (
.value.lovelace
// .value.value.lovelace
// 0
)
)
| add // 0
' <<< "${payment_utxo_json}"
)
echo "pledge: ${pledge_lovelace}"
echo "total balance: ${total_balance_lovelace}"
if ! echo "${pledge_lovelace}" | grep -Eq '^[0-9]+$'; then
echo "ERROR: pledge_lovelace を取得できません。pool-bech32.id / NODE_NETWORK を確認してください。"
can_build=false
fi
if ! echo "${total_balance_lovelace}" | grep -Eq '^[0-9]+$'; then
echo "ERROR: total_balance_lovelace を取得できません。UTxO を確認してください。"
can_build=false
fi
if [ "${can_build}" = true ]; then
spendable_lovelace=$(( total_balance_lovelace - pledge_lovelace - fee_buffer_lovelace ))
echo "spendable_lovelace (pledge維持後): ${spendable_lovelace} lovelace"
echo "fee_buffer_lovelace: ${fee_buffer_lovelace} lovelace"
if [ "${spendable_lovelace}" -le 0 ]; then
echo "ERROR: pledge を維持すると送金可能残高がありません。"
can_build=false
elif [ "${amount_to_send}" -gt "${spendable_lovelace}" ]; then
echo "ERROR: pledge を割る可能性があります(送金額が大きすぎます)。"
can_build=false
fi
fi
if [ "${can_build}" = true ]; then
tx_in=$(
echo "${payment_utxo_json}" | jq -r '
to_entries
| map(
select((.value.referenceScript // null) == null)
| select((.value.datum // null) == null)
| select((.value.inlineDatum // null) == null)
| select((.value.inlineDatumRaw // null) == null)
| select((.value.datumhash // null) == null)
)
| sort_by((.value.lovelace // .value.value.lovelace // 0)) | reverse
| if length > 0 then .[0].key else empty end
'
)
if [ -z "${tx_in}" ]; then
echo "ERROR: 使用可能なUTxOが見つかりません(datum / referenceScript なし)。"
can_build=false
else
echo "tx_in: ${tx_in}"
fi
fi
if [ "${can_build}" = true ]; then
tx_in_lovelace=$(
jq -r --arg k "${tx_in}" '
.[$k].value.lovelace
// .[$k].value.value.lovelace
// 0
' <<< "${payment_utxo_json}"
)
echo "tx_in_lovelace: ${tx_in_lovelace}"
required_lovelace=$(( amount_to_send + fee_buffer_lovelace ))
echo "required_lovelace (amount + buffer): ${required_lovelace}"
if [ "${tx_in_lovelace}" -lt "${required_lovelace}" ]; then
echo "ERROR: 選択した tx_in の残高が不足しています(送金額 + 予備費を賄えません)。"
echo " tx_in_lovelace=${tx_in_lovelace}"
echo " required_lovelace=${required_lovelace}"
echo " UTxO を整理(consolidation)するか、複数 tx-in の手順にしてください。"
can_build=false
fi
fi
- トランザクションのビルド
手数料・お釣りは自動計算されます。
if [ "${can_build}" = true ]; then
echo "トランザクションをビルドします。"
cardano-cli latest transaction build \
${NODE_NETWORK} \
--tx-in "${tx_in}" \
--tx-out "${destination_address}+${amount_to_send}" \
--change-address "$(cat "$NODE_HOME/payment.addr")" \
--metadata-json-file $NODE_HOME/calidus/calidus-registration-metadata.json \
--witness-override 1 \
--out-file $NODE_HOME/calidus/tx.raw
else
echo "build は実行しません。条件を確認してください。"
fi
- ファイル転送
BPの$NODE_HOME/calidusにあるtx.rawをエアギャップの $NODE_HOME/calidusへコピー
- エアギャップで署名(tx.signed を作成)
エアギャップ
cd $NODE_HOME
cardano-cli latest transaction sign \
--tx-body-file $NODE_HOME/calidus/tx.raw \
--signing-key-file payment.skey \
${NODE_NETWORK} \
--out-file $NODE_HOME/calidus/tx.signed
- ファイル転送
エアギャップの$NODE_HOME/calidus/にあるtx.signedをBPの$NODE_HOME/calidusへコピー
- TxID確認と submit
BP
TxID を確認
tx_id=$(cardano-cli latest transaction txid --tx-file "$NODE_HOME/calidus/tx.signed")
echo "TxID: ${tx_id}"
送信
cardano-cli latest transaction submit \
--tx-file $NODE_HOME/calidus/tx.signed \
${NODE_NETWORK}
adastatでアクティブであることを確認します。
https://adastat.net/pools/940d6893606290dc6b7705a8aa56a857793a8ae0a3906d4e2afd2119
ニーモニックフレーズを使い、ウォレットの作成
- 現在のウォレットを選択
- ウォレットを追加を選択
- 「シードフレーズを入力」を選択
- 24単語を選択
- 先ほど出力したニーモニックを入力
- 新しいウォレットに名前を付けます。(CalidusKey-AKYO)
- 支出パスワードの設定
- 新しいウォレットに資金を投入(10 ADA)