Skip to main content

ステークプール情報の更新

ステークプール情報の更新

重要なお知らせ🔥

誓約額の変更などは、2エポック後に有効になります。
よくある間違いは、誓約額を下げて資金をすぐに取り消すことです。
これにより、現在の誓約額が満たされなくなるため、報酬がゼロになります。

warning

ティッカーの長さは3 ~ 5文字にする必要があります。文字はA ~ Z0 ~ 9のみにする必要があります。
説明の長さは255文字を超えることはできません。

  1. JSONファイルを使用してプールのメタデータを作成します。
name=''
description=''
ticker=''
homepage=''
extended=''
cat > $NODE_HOME/pool-metadata.json << EOF
{
"name": "${name}",
"description": "${description}",
"ticker": "${ticker}",
"homepage": "${homepage}",
"extended": "${extended}"
}
EOF

構文チェックをします。

jq . $NODE_HOME/pool-metadata.json
  1. pool-metadata.jsonをgithub(またはご自身のWebサイト)へアップロードします。
tip

ローカルマシンにダウンロードしてgithubへアップロードしてください。

  1. メタデータファイルのハッシュを計算します。これはpool-metadata-hash.txtに保存されます。
cd $NODE_HOME
cardano-cli latest stake-pool metadata-hash --pool-metadata-file pool-metadata.json > pool-metadata-hash.txt
  1. メタデータjsonのURLからメタデータハッシュを取得し、ローカルメタデータハッシュと等しいかを確認します。
metadata_url=""

""←の間にURLを入れてください。 例)metadata_url="https://xxx.github.io/xxx/pool-metadata.json"

cardano-cli latest stake-pool metadata-hash --pool-metadata-file <(curl -s -L --fail "${metadata_url}")
cd $NODE_HOME
echo $(cat pool-metadata-hash.txt)
ファイル転送

BPのpool-metadata-hash.txtをエアギャップのcnodeディレクトリにコピーします。

warning

ハッシュが一致しない場合は、アップロードされた.JSONファイルが切り捨てられたか、余分な空白によって問題が発生した可能性があります。.JSONを再度アップロードするか、別のWebホストにアップロードしてください。

  1. エアギャップにてハッシュ値を出力し、BPと比較します。
cd $NODE_HOME
echo $(cat pool-metadata-hash.txt)
  1. ステークプールの登録証明書を作成します。

メタデータURLとリレーノード情報を更新します。

tip

ノード管理を簡素化するには、DNSベースのリレーが推奨されます。
つまり、IPが変更されるたびにこの登録証明書トランザクションを再送信する必要はありません。
また、たとえばリレーノードを再配置または再構築する場合、DNS を簡単に更新して新しいIPを指すようにすることができます。

info

例)固定プールコスト170ADA、プールマージン3%100ADAを誓約する場合の設定値

100ADAを誓約する場合:--pool-pledge 100000000 \
固定プールコストの最小値は170ADA:--pool-cost 170000000 \
プールマージン:--pool-margin 0.03 \

プールマージンは、パブリックプールの場合大体0~5%が多いと感じます。

  • 以下の変数pledged_adaに誓約するADA数を入れます。
pledged_ada=

pledged_ada=100

pledged_lovelace=$((pledged_ada * 1000000))
echo "${pledged_ada} ADAは、${pledged_lovelace} Lovelaceです。"
  • 以下の変数pool_cost_adaに固定プールコストのADA数を入れます。
warning

minPoolCost は 170000000 Lovelaceまたは170ADA です。

pool_cost_ada=

pool_cost_ada=170

pool_cost_lovelace=$((pool_cost_ada * 1000000))
echo "${pool_cost_ada} ADAは、${pool_cost_lovelace} Lovelaceです。"
  • 以下の変数percentに設定したいマージン数(%)を入れてください。
percent=

例)percent=3

pool_margin=$(echo "scale=10; ${percent} / 100" | bc | sed 's/^\./0./;s/\.0*$//;s/\.\([0-9]*[1-9]\)0*$/.\1/')
echo "Margin: ${pool_margin}"
  • githubにアップロードされているpool-metadata.jsonのURLを""の間に入れてください。
danger

metadata-urlは、64文字未満にする必要があります。URLまたはファイル名を短くしてください。
文字数カウント / ラッコツールズ

metadata_url=""

例)metadata_url="https://xxx.github.io/xxx/pool-metadata.json"

Relay-1のIPを変数relay1_ipv4に代入します。

relay1_ipv4=
cd $NODE_HOME
chmod u+rwx $HOME/cold-keys
cardano-cli latest stake-pool registration-certificate \
--cold-verification-key-file $HOME/cold-keys/node.vkey \
--vrf-verification-key-file vrf.vkey \
--pool-pledge ${pledged_lovelace} \
--pool-cost ${pool_cost_lovelace} \
--pool-margin ${pool_margin} \
--pool-reward-account-verification-key-file stake.vkey \
--pool-owner-stake-verification-key-file stake.vkey \
${NODE_NETWORK} \
--pool-relay-ipv4 ${relay1_ipv4} \
--pool-relay-port 3001 \
--metadata-url ${metadata_url} \
--metadata-hash $(cat pool-metadata-hash.txt) \
--out-file pool.cert
  1. ステークプールにステークを誓約します。
cardano-cli latest stake-address stake-delegation-certificate \
--stake-verification-key-file stake.vkey \
--cold-verification-key-file $HOME/cold-keys/node.vkey \
--out-file deleg.cert
ファイル転送

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

tip

ステークプールの所有者が自分のプールに資金を提供する約束を「誓約」と呼びます。

  • 残高は誓約額より大きくなければなりません。
  • 誓約金はどこにも移動されません。このガイドの例では、誓約金はステークプールの所有者キー、具体的にはpayment.addrに残ります。
  • 誓約を履行できない場合、ブロック生成の機会を逃し、委任者は報酬を逃すことになります。
  • あなたの誓約はロックされません。資金を自由に移動できます。
  1. トランザクションをビルドします。
TX_FULL=$(
cardano-cli latest query utxo ${NODE_NETWORK} \
--address "$(cat "$NODE_HOME/payment.addr")" \
--out-file /dev/stdout \
| jq -r '
to_entries
| sort_by(.value.value.lovelace) | reverse
| if length > 0 then .[0].key else empty end
'
)

if [ -z "$TX_FULL" ]; then
echo "WARNING: UTxO が見つかりません。payment.addr を確認してください。"
else
TX_HASH=${TX_FULL%%#*}
TX_IX=${TX_FULL##*#}
echo "tx_in: $TX_HASH#$TX_IX"
fi
cd $NODE_HOME

cardano-cli latest transaction build \
--tx-in "$TX_HASH#$TX_IX" \
--change-address $(cat payment.addr) \
--certificate-file pool.cert \
--certificate-file deleg.cert \
--witness-override 3 \
${NODE_NETWORK} \
--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 $HOME/cold-keys/node.skey \
--signing-key-file stake.skey \
${NODE_NETWORK} \
--out-file tx.signed

chmod a-rwx $HOME/cold-keys
ファイル転送

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

  1. トランザクションを送信します。
cd $NODE_HOME

cardano-cli latest transaction submit \
--tx-file tx.signed \
${NODE_NETWORK}

Transaction Successfully submitted

一部の変更は 2 つのエポックでのみ有効になります。次のエポック遷移後に、プールの設定が正しいことを確認してください。

以下のコマンドはCPUが50%ほど上がります。

cardano-cli latest query ledger-state \
${NODE_NETWORK} \
--out-file $NODE_HOME/ledger-state.json
jq -r '.stateBefore.esSnapshots.pstakeMark.poolParams["'"$(cat $NODE_HOME/pool-hex.id)"'"] // empty' $NODE_HOME/ledger-state.json
SanchoNet
jq -r '.stateBefore.esLState.delegationState.pstate.stakePools["'"$(cat $NODE_HOME/pool-hex.id)"'"]' $NODE_HOME/ledger-state.json