ガバナンスアクション(SPO投票)
概要
-
この投票手順はガバナンスアクションのSPO投票のみに使用できます。
-
SJG Toolに実装しているコマンドとは異なりますが実行結果は同じです。
-
投票にはトランザクション手数料が必要です。
-
トランザクション手数料はpayment.addrから引き落とされます。プール誓約を下回らないようご注意ください。
ガバナンスアクション確認サイト
https://adastat.net/governances
https://beta.cexplorer.io/gov/action
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(セキュリティ関連)maxBlockBodySizemaxTxSizemaxBlockHeaderSizemaxValueSizemaxBlockExecutionUnitstxFeePerBytetxFeeFixedutxoCostPerBytegovActionDepositminFeeRefScriptCostPerByte | >51% | セキュリティに関連するプロトコルパラメータを変更 |
| Info | 100% | 情報提供を目的とし、オンチェーンへの直接的な効果はなし |
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/governance1. 投票ファイル作成
エアギャップで投票ファイルを作成
投票例
1つのGovernance Actionに投票する場合
-
gov_id変数に投票するガバナンスアクションのトランザクションIDを指定する(Bech32 IDは指定できない) -
投票スタンスは次の3つのいずれかを指定
--yes--no--abstain
gov_id=この提案に対する投票スタンスを入力してください。
賛成の場合:
voting_stance=--yes反対の場合:
voting_stance=--no棄権の場合:
voting_stance=--abstainchmod 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を個別に指定できます。
-
gov_id_1、gov_id_2に投票するガバナンスアクションのトランザクションIDを指定する(Bech32 IDは指定できない) -
Governance Actionごとに投票スタンス
--yes--no--abstainのいずれかを指定
gov_id_1=この提案に対する投票スタンスを入力してください。
賛成の場合:
voting_stance_1=--yes反対の場合:
voting_stance_1=--no棄権の場合:
voting_stance_1=--abstainGovernance 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=--abstaincardano-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-1.file、vote-2.fileをBPの~/cnode/governance/ディレクトリにコピーします。
ハッシュ値確認
エアギャップとBPで投票ファイルのハッシュを比較します。
必ずハッシュ値が一致していることを確認してくださいエアギャップ
sha256sum $NODE_HOME/governance/vote.fileBP
sha256sum $NODE_HOME/governance/vote.fileエアギャップ
sha256sum $NODE_HOME/governance/vote-1.file
sha256sum $NODE_HOME/governance/vote-2.fileBP
sha256sum $NODE_HOME/governance/vote-1.file
sha256sum $NODE_HOME/governance/vote-2.file2. トランザクションファイル作成
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.rawcd $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/ディレクトリにコピーします。
ハッシュ値確認
BPとエアギャップでvote-tx.rawファイルハッシュを比較します。
sha256sum $NODE_HOME/governance/vote-tx.rawsha256sum $NODE_HOME/governance/vote-tx.raw3. 署名ファイル作成
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/ディレクトリにコピーします。
ハッシュ値確認
エアギャップとBPでvote-tx.signedファイルハッシュを比較します。
sha256sum $NODE_HOME/governance/vote-tx.signedsha256sum $NODE_HOME/governance/vote-tx.signed4. 投票トランザクション送信
cd $NODE_HOME
cardano-cli latest transaction submit \
--tx-file $NODE_HOME/governance/vote-tx.signed \
$NODE_NETWORKLast updated on