Replies: 7 comments 10 replies
-
With this unification we could replicate the Gnosis multi-sig + Snapshot off-chain voting system. For example, representing the community pool, the "group" would be the set of all token-weighted accounts, the "group account" would then be a set of user accounts responsible for aggregating off-chain votes and submitting them on-chain, and the "decision policy" would replicate the escalation framework Gnosis uses, reality.eth (or something more naive to begin with). Snapshot voting largely was motivated by high gas fees on Ethereum, which is less of a concern for Cosmos, but there is also a large UX improvement in not needing funds in your wallet to participate, or potentially deal with the accounting. Fee grants attempts to solve a similar problem, however the trust assumptions and potential use-cases differ. |
Beta Was this translation helpful? Give feedback.
-
This is a very nice write up 👍 I've been looking over the governance module (with the aid of Sam) over the last couple of weeks trying to gain some context about it and definitely agree with the notion that the executional aspect of a proposal should just be represented as an array of messages. At a higher level, I think the scope of governance should not be to worry about execution so much but to focus on capturing the preferences/views of some arbitrary group of members (i.e. consensus). To me, this means fluidity in what people can vote for and the voting tally mechanism itself (I think this is what decision policy means right?) I have a few clarification questions that I want to ask.
Also, I have appended a few thoughts (I'm not sure how well constructed they may actually be)
|
Beta Was this translation helpful? Give feedback.
-
I spent some of the weekend looking over this and have came back with a few more thoughts that I would like to document here. Looking back at the changes proposed for
On top of this, it would be nice if:
|
Beta Was this translation helpful? Give feedback.
-
I'm curious as to the timeframe of this. This is not being considered for 0.43 is it? (As it will significantly delay that release) Is this part of 0.44 planning? I assume it goes along with replacing Keeper usage with Message passing (which seems to be a building block to allow the governance proposals to be used as normal messages) |
Beta Was this translation helpful? Give feedback.
-
Love to see this! @ValarDragon, @antstalepresh, and I have been thinking quite a bit about similar ideas as well. We wrote up 90% of a proposal actually for this a couple weeks ago, which I'll repost here. I think it's pretty aligned with a lot of these ideas. Account permissioning governanceCurrently all governance updates must be voted on by the entire staked token set. However its very easy to imagine situations where certain on-chain items that are being governed, should not be governed by the staked token holders.
The current answer for those situations is to engineer a new specialized governance system for those items. However it would be nice to make a unified permissioning approach for all of these. Module accounts enable us to do this. Dividing up the permissions for thisGovernance fundamentally is about managing who is allowed to update a given object. So we can frame the existing proposal types as TextProposals simply record some data to state, and parameter change proposals are mutating the This change then requires governance proposals to be "triggerable" from a given account. So every governable object in the SDK should have an associated list of owners field, which can trigger an update to the object. Permissioning Governance ParamsWe need a way to refer to these different governance sets. The address namespace enables us to do this, as it can refer to both module accounts and user accounts / multisigs. A module account We could design a new namespace to refer to different governance procedures, but we reckon there's already an existing namespace that can be re-used for this purpose: the account addresses. We suggest that each goverance procedure should be associated with an Address (a process for determining these addresses is already laid out in ADR-028). This is similar to what happens currently on Ethereum, in which both smart contracts and EOAs are accounts with indistinguishable addresses. Because of this, an application can assign governance control to a designated address, without caring whether said address is an EOA, DAO smart contract, multisig contract, etc. Along with combining the namespaces for "governance accounts" and "external accounts", we should also combine the interfaces of "governance-triggered actions" and "account-triggered actions". Currently the former uses gov. For example, the type ParameterChangeProposal struct {
Title string
Description string
Changes []ParamChange
} would be replaced by a type MsgParameterChange struct {
Changes []ParamChange
Sender sdk.AccAddress
} x/gov will then only need a single Content type that executes a Msg: type ExecuteMsgProposal struct {
Title string
Description string
Msg sdk.Msg
} This proposal would be voted on by the governance procedure whose address is proposal.Msg.Sender. And then the x/params module can choose which addresses are allowed to update particular parameters. But these addresses don't have to be what we typically think of normal accounts today. Instead, an address should be able to refer to think like a Groups Module account, a CosmWasm contract, etc. In Ethereum, smart contracts and EOAs both exist as types of accounts. This is nice, because you can assign permissions to an address, without caring whether it's an EOA or a DAO or a stateful multisig. So in this paradigm, even instantiations of the governance module would themselves become accounts. For example, we can have a special As an example, we could have a DAO in our chain that wants to upgrade its parameters via a governance proposal of its own token holders (which is distinct from the chain's staking token). It can permission these updates such that they're required to come from the address of the x/gov account that sends Msgs based on governance of the daotoken. These procedures for whose votes to tally and the logic for how to tally them is called a TallyStrategy. |
Beta Was this translation helpful? Give feedback.
-
So thinking further on how governance interacts with Path 1: Governance as an instance of groups (no
|
Beta Was this translation helpful? Give feedback.
-
Here are some updates from the gov/group WG. We talked about doing a two phase approach:
Also check out https://linktr.ee/cosmos_gov for more updates. |
Beta Was this translation helpful? Give feedback.
-
This is something that has been discussed a few times ad hoc but isn't properly documented. For reference,
x/group
refers to the group module currently in https://github.com/regen-network/regen-ledger/tree/master/proto/regen/group/v1alpha1 and https://github.com/regen-network/regen-ledger/tree/master/x/group, and soon to be upstreamed here to the SDK.Here are the changes I've had in mind that would align
x/gov
andx/group
x/gov
protocol changesMsgSubmitProposal
Proposed changes:
string account
field to refer to the governance account this proposal refers to, ex. staking governance, a group account or holders of a DAO tokenrepeated googlee.protobuf.Any messages
field to replacecontent
content
Create
root
accountSince
MsgSubmitProposal
always corresponds to some account, we would create aroot
module account that corresponds to the current staking governance. This has the advantage that theroot
account can now usex/authz
to delegate certain permissions of chain governance to working groups.Deprecate
gov.Content
and switch to regularMsg
sAll of the
gov.Content
types correspond to actions that can only be performed by chain governance and there is no way for chain governance to perform the simple operation of sending some regularMsg
s.x/group
just uses regularMsg
s and we can extend this reuse of theMsg
abstraction to theroot
chain governance by addingMsg
s for parameter change and software upgrade proposals that can only be executed byroot
.Tally or Decision Policy methods
Every
account
that can work withx/gov
would need to have some sort of tally handler orDecisionPolicy
(as inx/group
associated with it). We will need to figure out how each module registers itsDecisionPolicy
but I think it would basically be a pluggable system where modules supportingx/gov
would register policies for their account types.x/group
has its mechanism for associatingDecisionPolicy
s with group accounts and possiblyx/group
could be extended to support DAO token balances.Tallying and Proposal Execution details
Currently
x/gov
does tallying after the voting period has ended whereasx/group
does tallying with each vote. This is in part becausex/group
allowsDecisionPolicy
s that will execute the proposal before the voting window has voted if there is a quorum, and also due to gas considerations. It does introduce the complication that inx/group
, we need to deal with the case where the group membership changes. Currently this is handled by invalidating active proposals when group membership changes (because voting weights would become invalid). This would be hard to extend to token balances because token balances are in constant flux, so likely thex/gov
EndBlocker
approach is better suited for this. To support the group use case, it would be desirable to introduce a method tox/gov
such asMsgTryExec
which attempts to execute the proposal early with the msg sender paying the gas for tallying in this case.Also, the
EndBlocker
approach only works forx/gov
because the gas is paid for by the chain. We could potentially use the proposal deposit to pay for gas in theEndBlocker
and thenx/gov
’s approach could become more generic. This could maybe address the concerns that ledx/group
to prefer tallying with each vote. Currently group accounts don’t require deposits which makes sense if a group is just a few people who know each other, so to support groups,x/gov
deposits would need to be configurable.@sunnya97 I know you've been thinking about this a fair bit too and would love if you’d chime into whether this aligns with your thinking or not.
/cc @hxrts @marbar3778 @blushi
Beta Was this translation helpful? Give feedback.
All reactions