How do I participate in governance?
Etherlink bakers can participate in the Etherlink governance process by submitting proposals and voting for them.
The voting power of a baker is the amount of tez that it has staked plus the tez that delegators have delegated to it, also called its staking balance.
Separate contracts manage the kernel updates, security updates, and the Sequencer Committee, so to interact with them, bakers send transactions to those contracts, such as with the Octez client. The addresses of the governance contracts are specified in Etherlink's kernel. For information about the Octez client, see Command Line Interface in the Octez documentation.
Governance contract addresses
You need the address of the correct governance contract to propose changes and vote on changes.
Mainnet address | Testnet address | |
---|---|---|
Smart Rollup | ||
Kernel governance | ||
Kernel security governance | ||
Sequencer committee |
Participating in kernel and security governance
Bakers can propose, vote on, and trigger kernel updates and security updates with these commands. The commands are the same for kernel upgrades and security upgrades but they target different governance contracts.
Getting information about the current period
You can get information about the current period at https://governance.etherlink.com.
To get information about the current state of the kernel or security governance contract directly from the contract, connect the Octez client to an active node and call the contract's get_voting_state
view.
For example, this Octez client command calls this view for the security governance contract on Mainnet:
octez-client -E https://mainnet.ecadinfra.com \
run view get_voting_state on contract KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J
The view returns information about the current governance period in this order:
- The index of the current period
- Whether the current period is Proposal (
Left Unit
) or Promotion (Right Unit
) - The number of blocks remaining in the period
- Information about voting during the period
For example, this response shows that the contract is currently in the Proposal period:
(Pair 1619 (Left Unit) 64 None)
Block explorers show this information in a more human-readable format.
You can also subscribe to the voting_finished
event to be notified when the Proposal period completes.
Proposing and upvoting upgrades
During a Proposal period, bakers can propose kernel or security updates by calling the new_proposal
entrypoint of the appropriate governance contract and passing the hash of their proposed kernel, as in this example, which uses 0x00927d...
as an example kernel hash:
octez-client transfer 0 from my_wallet to KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J \
--entrypoint "new_proposal" \
--arg "0x009279df4982e47cf101e2525b605fa06cd3ccc0f67d1c792a6a3ea56af9606abc"
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Etherlink kernel or security governance contract
- The hash of the upgraded kernel, which the proposer must generate from the code of the new kernel
The proposer must make the code of the new kernel available for people to evaluate. Proposers can make it easier for bakers to upgrade to the new kernel by providing the preimages for the kernel online so nodes can update from them directly.
To upvote a proposed kernel or security update during a Proposal period, call the upvote_proposal
entrypoint with the same parameters.
This example again uses 0x00927d...
as an example kernel hash:
octez-client transfer 0 from my_wallet to KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J \
--entrypoint "upvote_proposal" \
--arg "0x009279df4982e47cf101e2525b605fa06cd3ccc0f67d1c792a6a3ea56af9606abc"
It's not necessary to upvote a proposal that you submitted; submitting a proposal implies that your account upvotes it.
Voting for or against upgrades
When a proposal is in the Promotion period, you can vote for or against it or pass on voting by calling the vote
entrypoint of the appropriate governance contract:
octez-client transfer 0 from my_wallet to KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J \
--entrypoint "vote" --arg '"yea"'
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Etherlink kernel or security governance contract
"yea"
,"nay"
, or"pass"
, including the double quotes
The command does not need the hash of the kernel because only one kernel can be in the Promotion period at a time, so the options are to vote for or against that kernel or to abstain by voting "pass."
Triggering upgrades
After a proposal wins a vote, any user can trigger the kernel or security upgrade by calling the governance contract's trigger_kernel_upgrade
entrypoint:
octez-client transfer 0 from my_wallet to KT1N5MHQW5fkqXkW9GPjRYfn5KwbuYrvsY1g \
--entrypoint "trigger_kernel_upgrade" \
--arg '"sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf"'
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Etherlink kernel or security governance contract
- The address of the Etherlink Smart Rollup; the parameter must include the double quotes
After the new kernel becomes active, bakers must provide their nodes with the preimages for the new kernel to continue to participate in Etherlink. They can copy the new preimages into the node data directory without stopping or restarting the node. If a node uses a preimages endpoint as described in Running an Etherlink EVM node and Running an Etherlink Smart Rollup node, the node updates automatically.
Participating in Sequencer Committee governance
Bakers can propose a member for Etherlink's Sequencer Committee, vote for or against proposed members, and trigger the change to committee members.
Getting information about the current period
You can get information about the current period at https://governance.etherlink.com.
To get information about the current state of the Sequencer Committee governance contract directly from the contract, call its get_voting_state
view.
For example, this Octez client command calls this view for the kernel governance contract on Mainnet:
octez-client run view get_voting_state on contract KT1NcZQ3y9Wv32BGiUfD2ZciSUz9cY1DBDGF
The view returns information about the current governance period. Block explorers show this information in a more human-readable format.
You can also subscribe to the voting_finished
event to be notified when the Proposal period completes.
Proposing and voting for a new member
To propose a member for the Sequencer Committee, bakers can call the new_proposal
entrypoint of the governance contract during the Proposal period:
octez-client transfer 0 from my_wallet to KT1NcZQ3y9Wv32BGiUfD2ZciSUz9cY1DBDGF \
--entrypoint "new_proposal" \
--arg "Pair \"$PUBLIC_KEY\" $L2_ADDRESS"
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Sequencer Committee governance contract
- The public key (not the public key hash or account address) of the account to propose, including the double quotes
- The Etherlink address of the account to propose; the examples below use
0xb7a970
as the account address
For example:
octez-client transfer 0 from my_wallet to KT1NcZQ3y9Wv32BGiUfD2ZciSUz9cY1DBDGF \
--entrypoint "new_proposal" \
--arg 'Pair "edpkurcgafZ2URyB6zsm5d1YqmLt9r1Lk89J81N6KpyMaUzXWEsv1X" 0xb7a97043983f24991398e5a82f63f4c58a417185'
To upvote a proposed committee member during a Proposal period, call the upvote_proposal
entrypoint with the same parameters:
octez-client transfer 0 from my_wallet to KT1NcZQ3y9Wv32BGiUfD2ZciSUz9cY1DBDGF \
--entrypoint "upvote_proposal" \
--arg 'Pair "edpkurcgafZ2URyB6zsm5d1YqmLt9r1Lk89J81N6KpyMaUzXWEsv1X" 0xb7a97043983f24991398e5a82f63f4c58a417185'
It's not necessary to upvote a proposal that you submitted; submitting a proposal implies that your account upvotes it.
Voting for or against a new member
When a proposal is in the Promotion period, you can vote for or against it or pass on voting by calling the vote
entrypoint of the governance contract:
octez-client transfer 0 from my_wallet to KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J \
--entrypoint "vote" --arg '"yea"'
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Sequencer Committee governance contract
"yea"
,"nay"
, or"pass"
, including the double quotes
For example:
octez-client transfer 0 from tz1RLPEeMxbJYQBFbXYw8WHdXjeUjnG5ZXNq to KT1FRzozuzFMWLimpFeSdADHTMxzU8KtgCr9 \
--entrypoint "vote" --arg "\"yea\""
Triggering committee upgrades
After a proposed member wins a vote, any user can trigger the change to the committee by calling the governance contract's trigger_committee_upgrade
entrypoint:
octez-client transfer 0 from my_wallet to KT1H5pCmFuhAwRExzNNrPQFKpunJx1yEVa6J \
--entrypoint "trigger_committee_upgrade" \
--arg '"sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf"'
The command takes these parameters:
- The address or Octez client alias of your baker account
- The address of the Sequencer Committee governance contract
- The address of the Etherlink Smart Rollup; the parameter must include the double quotes