Calidusキー生成
概要
- ステークプールの所有権を証明するための署名技術
- 既存のCIP-22や少額送金による、プール秘密鍵やvrf秘密鍵を頻繁に使用することなく所有権を証明可能
- Cardano対応のライトウォレットにも復元可能でWebベースプラットフォームでも利用可能
- 今後Calidus Pool Keyに対応した多様なサービスがリリース予定
1. cardano-signerインストール
BP
ダウンロード
signer_release="$(curl -s https://api.github.com/repos/gitmachtl/cardano-signer/releases/latest | jq -r '.tag_name' | sed -e "s/^.\{1\}//")"
cd $HOME/git
wget -q https://github.com/gitmachtl/cardano-signer/releases/download/v${signer_release}/cardano-signer-${signer_release}_linux-x64.tar.gztar -xzvf cardano-signer-${signer_release}_linux-x64.tar.gz
rm cardano-signer-${signer_release}_linux-x64.tar.gzインストール
sudo cp cardano-signer /usr/local/bin/cardano-signerバージョン確認
cardano-signer --versionエアギャップ
ファイル転送
BPの$HOME/gitにあるcardano-signerをエアギャップの$HOME/gitにコピーします。
システムフォルダへコピー
cd $HOME/git
chmod 755 cardano-signer
sudo cp cardano-signer /usr/local/bin/cardano-signerバージョン確認
cardano-signer --version2. Calidusキー作成
Calidusキーとjsonファイルの取り扱いについて
- 通常のウォレットと同じ性質のペアキーとなります。
Calidus-MnemonicsKey.jsonにはライトウォレットに復元するためのMnemonics(復元シードフレーズ)が含まれています。- 万が一このキーを紛失した場合でも差し替え可能ですが、もしADAを保持している場合は出金が出来なくなりますのでご注意ください。
- 複数のデバイスにバックアップすることをオススメします。
- 一つのcalidusペアキーで複数のプールを登録できます。
myCalidusKeyペアキー発行
mkdir -p $NODE_HOME/calidus
cd $NODE_HOME/calidus
cardano-signer keygen --path calidus \
--out-skey myCalidusKey.skey \
--out-vkey myCalidusKey.vkey \
--json-extended \
--out-file Calidus-MnemonicsKey.json3. メタデータ作成
プール秘密鍵で署名したメタデータの作成
chmod u+rwx $HOME/cold-keys
cardano-signer sign --cip88 \
--calidus-public-key $NODE_HOME/calidus/myCalidusKey.vkey \
--secret-key $HOME/cold-keys/node.skey \
--json \
--out-file $NODE_HOME/calidus/myCalidusRegistrationMetadata.json
chmod a-rwx $HOME/cold-keys4. オンチェーン登録
最新のスロット番号を取得します。
cd $NODE_HOME
currentSlot=$(cardano-cli latest query tip $NODE_NETWORK | jq -r '.slot')
echo Current Slot: $currentSlotInfo
ご自身のプールウォレットアドレス宛に10ADAとメタデータを含んだTxを送信します。
amountToSend=10000000
echo "送金額: $amountToSend Lovelace"送金先のアドレスを設定します。
destinationAddress=$(echo $(cat $NODE_HOME/payment.addr))
echo 送金先: $destinationAddresspayment.addrの残高を算出します。
cardano-cli latest query utxo \
--address $(cat payment.addr) \
$NODE_NETWORK \
--output-text \
--out-file fullUtxo.outtail -n +3 fullUtxo.out | sort -k3 -nr | sed -e '/lovelace + [0-9]/d' > balance.out
cat balance.outUTXOを算出します。
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}
tempBalanceAmont=$(( ${total_balance}-${amountToSend} ))ウォレット残高情報ファイルの作成
cat > $NODE_HOME/wallet_balance.sh << EOF
#!/bin/bash
total_balance=$total_balance
tx_in="$tx_in"
tempBalanceAmont=$tempBalanceAmont
destinationAddress=$destinationAddress
amountToSend=$amountToSend
currentSlot=$currentSlot
EOFファイル転送
BPの$NODE_HOMEにあるwallet_balance.shとparams.jsonをエアギャップのcnodeディレクトリにコピーします。
エアギャップでウォレット残高を読み込みます。
source $NODE_HOME/wallet_balance.shトランザクションファイルの作成
cd $NODE_HOME
cardano-cli latest transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${tempBalanceAmont} \
--tx-out ${destinationAddress}+${amountToSend} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--metadata-json-file $NODE_HOME/calidus/myCalidusRegistrationMetadata.json \
--fee 200000 \
--out-file tx.tmp最低手数料を出力します。
fee=$(cardano-cli latest transaction calculate-min-fee \
--tx-body-file tx.tmp \
--witness-count 1 \
--output-text \
--protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee手数料を計算します。
txOut=$((${total_balance}-${fee}-${amountToSend}))
echo Change Output: ${txOut}トランザクションファイルを構築します。
cardano-cli latest transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${txOut} \
--tx-out ${destinationAddress}+${amountToSend} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--metadata-json-file $NODE_HOME/calidus/myCalidusRegistrationMetadata.json \
--fee ${fee} \
--out-file tx.rawトランザクションに署名します。
cd $NODE_HOME
cardano-cli latest transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
$NODE_NETWORK \
--out-file tx.signedtx.signed をBPのcnodeディレクトリにコピーします。
ファイル転送
エアギャップのtx.signed をBPのcnodeディレクトリにコピーします。
署名されたトランザクションを送信します。
ウォレット残高情報ファイルの削除
rm $NODE_HOME/wallet_balance.shトランザクションIDの確認
tx_id=$(cardano-cli latest transaction txid --tx-body-file $NODE_HOME/tx.signed)
echo TxID:$tx_idトランザクション送信
cardano-cli latest transaction submit \
--tx-file tx.signed \
$NODE_NETWORKTransacsion Successfully submittedと表示されれば成功
5. オンチェーン確認
curl -s "https://api.koios.rest/api/v1/pool_calidus_keys?pool_id_bech32=eq.$(cat $NODE_HOME/pool.id-bech32)" | jq .戻り値に、
"pool_status": "registered"の項目があれば登録成功
6. Calidusキー転送
mkdir -p $NODE_HOME/calidusエアギャップのmyCalidusKey.skey をBPのcnode/calidusディレクトリにコピーします。
ファイル転送
エアギャップのmyCalidusKey.skeyをBPのcnode/calidusディレクトリにコピーします。
7. ニーモニックフレーズを使い、Eternlでウォレット作成
エアギャップにて以下のコマンドを実行し、ニーモニックフレーズを紙などにメモします。
jq -r '.mnemonics' $NODE_HOME/calidus/Calidus-MnemonicsKey.jsonEternlウォレットにて復元します。
- 「
現在のウォレット」を選択 - 「
ウォレットを追加」を選択 - 「
シードフレーズを入力」を選択 - 「
24単語」を選択 - 先ほど控えた「
ニーモニックフレーズ」を入力 - 「
新規ウォレット名」を入力 - 「
送金パスワード」の設定 - 新規ウォレットに少額(10 ADA程度)投入
Last updated on