SPO JAPAN GUILD
ステークプール運用

ガバナンスアクション(SPO投票)

概要

  • この投票手順はガバナンスアクションのSPO投票のみに使用できます。

  • SJG Toolに実装しているコマンドとは異なりますが実行結果は同じです。

  • 投票にはトランザクション手数料が必要です。

  • トランザクション手数料はpayment.addrから引き落とされます。プール誓約を下回らないようご注意ください。

ガバナンスアクション確認サイト

https://adastat.net/governances

https://beta.cexplorer.io/gov/action

https://cardanoscan.io/govActions

https://gov.tools/governance_actions

SPO Governance

Cardanoでは、Conway EraからCIP-1694に基づくオンチェーンガバナンスが導入され、Constitutional Committee(CC)・DRep・SPOの3つのガバナンス機関が、それぞれ対象となるGovernance Actionに投票します。

SPOが投票するGovernance Action

SPOはCold Keyを使用して投票し、Governance Actionごとに設定されたSPOの批准閾値を満たす必要があります。

Governance Action批准閾値内容
Motion of no-confidence>51%現在の憲法委員会を解任
Update committee / threshold>51%憲法委員会メンバーの追加・削除、または承認閾値を変更
Hard Fork Initiation>51%ハードフォークによるプロトコルのアップグレードを実行
Protocol Parameter Changes(セキュリティ関連)
maxBlockBodySize
maxTxSize
maxBlockHeaderSize
maxValueSize
maxBlockExecutionUnits
txFeePerByte
txFeeFixed
utxoCostPerByte
govActionDeposit
minFeeRefScriptCostPerByte
>51%セキュリティに関連するプロトコルパラメータを変更
Info100%情報提供を目的とし、オンチェーンへの直接的な効果はなし

SPOはTreasury Withdrawal(トレジャリーの引き出し)やConstitutional Amendment(憲法改正)には投票しません。

また、Protocol Parameter Changesについても、SPOが投票するのは上記のセキュリティに関連するParameterが対象です。

Hard Fork Initiation

Hard Fork Initiationでは、ノードをアップグレードするだけでは投票したことにはなりません。

SPOがCold Keyを使用して、Yes / No / Abstainのいずれかを明示的にオンチェーン投票する必要があります。


初めて作業する場合はガバナンス作業用ディレクトリを作成

mkdir -p $NODE_HOME/governance

1. 投票ファイル作成

エアギャップで投票ファイルを作成

投票例

1つのGovernance Actionに投票する場合

  1. gov_id変数に投票するガバナンスアクションのトランザクションIDを指定する(Bech32 IDは指定できない)

  2. 投票スタンスは次の3つのいずれかを指定 --yes --no --abstain

gov_id=

この提案に対する投票スタンスを入力してください。

賛成の場合:

voting_stance=--yes

反対の場合:

voting_stance=--no

棄権の場合:

voting_stance=--abstain
chmod u+rwx $HOME/cold-keys

cd $NODE_HOME

cardano-cli latest governance vote create \
  ${voting_stance} \
  --governance-action-tx-id $gov_id \
  --governance-action-index "0" \
  --cold-verification-key-file $HOME/cold-keys/node.vkey \
  --out-file $NODE_HOME/governance/vote.file

基本的に--governance-action-indexは0ですが、具体的には対象Governance ActionのIndexを確認して指定してください。

投票例

複数のGovernance Actionに1つのトランザクションで投票する場合

Governance Actionごとに1つの投票ファイルを作成します。
それぞれYes / No / Abstainを個別に指定できます。

  1. gov_id_1、gov_id_2に投票するガバナンスアクションのトランザクションIDを指定する(Bech32 IDは指定できない)

  2. Governance Actionごとに投票スタンス --yes --no --abstain のいずれかを指定

gov_id_1=

この提案に対する投票スタンスを入力してください。

賛成の場合:

voting_stance_1=--yes

反対の場合:

voting_stance_1=--no

棄権の場合:

voting_stance_1=--abstain

Governance Action 1の投票ファイルを作成

chmod u+rwx $HOME/cold-keys

cd $NODE_HOME

cardano-cli latest governance vote create \
  ${voting_stance_1} \
  --governance-action-tx-id $gov_id_1 \
  --governance-action-index "0" \
  --cold-verification-key-file $HOME/cold-keys/node.vkey \
  --out-file $NODE_HOME/governance/vote-1.file

基本的に--governance-action-indexは0ですが、具体的には対象Governance ActionのIndexを確認して指定してください。

Governance Action 2の投票ファイルを作成

gov_id_2=

この提案に対する投票スタンスを入力してください。

賛成の場合:

voting_stance_2=--yes

反対の場合:

voting_stance_2=--no

棄権の場合:

voting_stance_2=--abstain
cardano-cli latest governance vote create \
  ${voting_stance_2} \
  --governance-action-tx-id $gov_id_2 \
  --governance-action-index "0" \
  --cold-verification-key-file $HOME/cold-keys/node.vkey \
  --out-file $NODE_HOME/governance/vote-2.file

基本的に--governance-action-indexは0ですが、具体的には対象Governance ActionのIndexを確認して指定してください。

注意

Governance Actionごとに異なる投票ファイル名を指定してください。

同じGovernance Actionに対する複数の投票ファイルを、同じトランザクションに含めることはできません。

ファイル転送

エアギャップのvote.fileをBPの~/cnode/governance/ディレクトリにコピーします。

vote.file エアギャップ BP

エアギャップのvote-1.file、vote-2.fileをBPの~/cnode/governance/ディレクトリにコピーします。

vote-1.file / vote-2.file エアギャップ BP

ハッシュ値確認

エアギャップとBPで投票ファイルのハッシュを比較します。

必ずハッシュ値が一致していることを確認してください

エアギャップ

sha256sum $NODE_HOME/governance/vote.file

BP

sha256sum $NODE_HOME/governance/vote.file

エアギャップ

sha256sum $NODE_HOME/governance/vote-1.file
sha256sum $NODE_HOME/governance/vote-2.file

BP

sha256sum $NODE_HOME/governance/vote-1.file
sha256sum $NODE_HOME/governance/vote-2.file

2. トランザクションファイル作成

payment.addrの残高を取得

cd $NODE_HOME

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 | sed -e '/lovelace + [0-9]/d' > 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}
cd $NODE_HOME

cardano-cli latest transaction build \
  $NODE_NETWORK \
  ${tx_in} \
  --change-address $(cat $NODE_HOME/payment.addr) \
  --vote-file $NODE_HOME/governance/vote.file \
  --witness-override 2 \
  --out-file $NODE_HOME/governance/vote-tx.raw
cd $NODE_HOME

cardano-cli latest transaction build \
  $NODE_NETWORK \
  ${tx_in} \
  --change-address $(cat $NODE_HOME/payment.addr) \
  --vote-file $NODE_HOME/governance/vote-1.file \
  --vote-file $NODE_HOME/governance/vote-2.file \
  --witness-override 2 \
  --out-file $NODE_HOME/governance/vote-tx.raw

ファイル転送

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

vote-tx.raw BP エアギャップ

ハッシュ値確認

BPとエアギャップでvote-tx.rawファイルハッシュを比較します。

必ずハッシュ値が一致していることを確認してください
sha256sum $NODE_HOME/governance/vote-tx.raw
sha256sum $NODE_HOME/governance/vote-tx.raw

3. 署名ファイル作成

cardano-cli latest transaction sign \
  --tx-body-file $NODE_HOME/governance/vote-tx.raw \
  --signing-key-file $HOME/cold-keys/node.skey \
  --signing-key-file $NODE_HOME/payment.skey \
  --out-file $NODE_HOME/governance/vote-tx.signed

chmod a-rwx $HOME/cold-keys

ファイル転送

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

vote-tx.signed エアギャップ BP

ハッシュ値確認

エアギャップとBPでvote-tx.signedファイルハッシュを比較します。

必ずハッシュ値が一致していることを確認してください
sha256sum $NODE_HOME/governance/vote-tx.signed
sha256sum $NODE_HOME/governance/vote-tx.signed

4. 投票トランザクション送信

cd $NODE_HOME

cardano-cli latest transaction submit \
  --tx-file $NODE_HOME/governance/vote-tx.signed \
  $NODE_NETWORK

Last updated on

Cookieの使用について

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

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