Concept
A KIRA account is considered a Councilor if it has at least one whitelisted Permission or Role that allows the creation of proposals or voting. Accounts with no Permissions/Roles or blacklisted Permissions/Roles are not considered Councilors. It is essential to note that having permissions or a role does not automatically imply being a councilor. Councilors are governance members who can collude to raise proposals or vote on said proposals. Sudo users (users with sudo permissions such as 2 or 3) are not considered councilors in this context.
Councilor seat
Sending a MsgClaimCouncilor transaction is only allowed if the status of the Councilor is waiting (see next section).
Before any governance member can execute their right to create proposals or vote, they must first "claim" their Councilor Seat, similar to how consensus nodes claim their Validator Seat. This action acknowledges the network Code of Conduct and allows registering a KIRA user in the governance registrar. When submitting a MsgClaimCouncilor transaction using the claim-councilor-seat CLI, the user must supply the following information, which will be persisted in the Identity Registrar:
username - (required) friendly governance member name with minimum 4 non-whitespace characters. It is globally unique and cannot be deleted (just like consensus nodes’ moniker).
description - (optional) a longer description of the councilor
social - (optional) comma-separated URL list of any social profiles such as Twitter, Telegram, etc…
contact - (optional) email address, URL, or another emergency contact
avatar - (optional) URL to .SVG image or gif
Councilor statuses
Councilors have statuses that implies their ability to perform their role in creating proposals and voting.
Ranking system
The councilor's status automatically transitions to jailed if they are a consensus node and their node's status changes to jailed due to being detected double signing.
The Councilor ranking system is used to apply changes to statuses and collect statistics that can be utilized by the governance to determine which network actors fulfill their assigned roles. Note that the ranking of Councilors and Consensus nodes is totally independent and has separate logic. The ranking system is based on proposal creation and proposal votes counters. If the Councilor participates in voting or creates a proposal, their rank increases by 1 and the abstention counter is set to 0. If the Councilor fails to vote, their rank is decreased by abstention_rank_decrease_amount (defined in Network Properties), and abstention is increased by 1.
If the abstention counter reaches a value equal to or greater than max_abstention (defined in Network Properties), the Councilor's status changes to inactive. While in the inactive state, a Councilor cannot vote or create proposals, and their rank is reset to 0. However, abstention is not reset. To regain the ability to vote, a councilor in the inactive state must submit a MsgCouncilorActivate transaction, which resets the abstention to 0.
To prevent the status from becoming inactive while being absent for prolonged periods of time, Councilors can submit a MsgCouncilorPause transaction, which changes their status to paused. In the paused state, the abstention counter does not change, and the rank is not automatically reset, but the Councilor cannot vote or create proposals. To exit the paused status, a Councilor must submit a MsgCouncilorUnpause transaction, but the abstention is not reset as a result.
The rank is reset to 0 if the Councilor's status changes to jailed. In the jailed status, a Councilor cannot vote and create proposals unless the Validator is unjailed by the governance, in which case the Councilor's status changes to inactive.
Ranking Reset
It may be useful for the governance to have the ability to reset all ranks and abstention counters of all governance members simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission.
Parameters
CLI syntax & examples
Governance
Note
If it makes things simpler we can register all governance members in the Councilors data structure by giving them status undefined
Transactions
sekaid tx customgov
councilor
claim-seat
pause - Signals an absence as a councilor
unpause - Signals re-availability as a councilor
activate - Activates councilor status previously deactivated due to excessive abstention
Claim Councilor Seat
Claim a councilor seat using the claim-seat command.
Flags
$ADDRESS: The address of the councilor.
$MONIKER: The moniker of the councilor.
$USERNAME: The username of the councilor.
$DESCRIPTION: The description of the councilor.
$SOCIAL: The social media handle of the councilor.
$CONTACT: The contact details of the councilor.
$AVATAR: The avatar of the councilor.
Bash
Copy
sekaid tx customgov councilor claim-seat \
--from=$SIGNER $FLAGS_TX \
--address=$ADDRESS --moniker=$MONIKER --username=$USERNAME \
--description=$DESCRIPTION --social=$SOCIAL --contact=$CONTACT --avatar=$AVATAR
Pause Councilor
Signal to the network that you will not be present for a prolonged period of time using the pause command.
Bash
Copy
sekaid tx customgov councilor pause \
--from=$SIGNER $FLAGS_TX
Unpause Councilor
Signal to the network that you wish to regain voting ability after planned absence using the unpause command.
Bash
Copy
sekaid tx customgov councilor unpause \
--from=$SIGNER $FLAGS_TX
Activate Councilor
Signal to the network that Councilor wishes to regain voting ability using the activate command.
Bash
Copy
sekaid tx customgov councilor activate \
--from=$SIGNER $FLAGS_TX
Queries
sekaid query customgov
councilors - Queries all councilors, their statuses, ranks & abstention counters.
non-councilors - Queries all governance members that are not councilors.
council-registry - Queries the governance registry by address or moniker.
proposer-voters-count - Queries separate counts for proposers and voters who have the ability to create at least one type of proposal
Query Councilors
Query all councilors, waiting or not, including their corresponding statuses, ranks & abstention counters.
Bash
Copy
sekaid query customgov councilors $FLAGS_QR | jq
Query Non-Councilors
Query all governance members that are not councilors.
Bash
Copy
sekaid query customgov non-councilors $FLAGS_QR | jq
Query Council Registry
Query the governance registry. The registry can be queried by either address or moniker.
Flags
$ADDRESS: The address you want to query information.
$MONIKER: The moniker you want to query information.
Bash
Copy
sekaid query customgov council-registry \
--addr=$ADDRESS --moniker=$MONIKER \
$FLAGS_QR | jq
Query Proposer and Voters Count
Query the number of account that can create or vote at least one type of proposal.
Bash
Copy
sekaid query customgov proposer_voters_count $FLAGS_QR | jq