cosmos / cosmos-sdk

:chains: A Framework for Building High Value Public Blockchains :sparkles:
https://cosmos.network/
Apache License 2.0
6.1k stars 3.52k forks source link

Constitution #14065

Closed faddat closed 1 year ago

faddat commented 1 year ago

WIP here:

https://github.com/cosmos/cosmos-sdk/pull/14057

Constitution

In cosmos, the chain builders (eg: "team/devs") are responsible for making the initial blockchain software, and the genesis state. This is an expansion on that concept. Essentially, having a constitution that is immutable, and set by the developers allows for a clear statement of purpose.

Since the constitution field can also be an empty string, there is no requirement to add a constitution to new chains. Yeah, idea is, however, to be able to state with the change should become overtime, and defined the roles of the different participants in the community, because currently they are not well defined. Of course, excessive definition could lead to amendments, and it's my opinion that the constitution should be specific enough, so that amendments actually yield forks.

Summary/ Proposal

Add a new string field to the genesis state of x/gov called constitution. This isn't designed to be mutable, but is instead an immutable place for the originators of a chain to lay out its foundational purpose. This will allow for greater clarity for all ecosystem participants.

Questions so far

onivalidator commented 1 year ago

First of all - added a constitutional element to genesis is brilliant. Love this idea and implementation.

I feel very strongly that requiring chain migration/forks hinders the efficacy of this in a major way. Constitutions should be held very strongly, and yet remain possible to change.

Historical precedent for this is huge. Imagine if we had to reestablish our nation every time a constitutional amendment was made. It's a massive technical burden and an emotional toll on users.

I would propose very simply the same system which has worked well across the world, and which this seeks to emulate - require a supermajority of voters to approve of all constitutional amendments.

This removes the technical burden and risk of a fork while respecting the threshold required for change.

P.S. We have seen many times that the originator of a chain often does not have the foresight or ability to predict the future. To hamstring the chain's future due to the vision of its originating entity is to put users at risk. We have seen this on some Cosmos chains. The community should be able to amend the origins of the chain. Many of the originating documents of the Cosmos Hub for example contain ideas which were found not to be pragmatic or possible. (Things like validators being allowed to hack one another, slash each others stake, get slashed for lack of gov participation, etc.)

ZaradarBH commented 1 year ago

Personally I think its a great idea. Its imperative for public blockchain networks to have a basic EULA that everyone commits too in order to establish a level playing field. At TR we have been working on trying to draft a constitution proposal for Terra Classic based loosely on the EOS constitution @ https://eosauthority.com/constitution and I think it would make sense for Cosmos as a ecosystem to have a general purpose constitution embedded by default to ensure we provide a basic framework for fair governance and social behavior when new chains are born.

We also talked with a cool dude from HIVE a few months back who was kind enough to share this blog post: https://hive.blog/blockchain/@dan/why-every-blockchain-needs-a-constitution

faddat commented 1 year ago

Yeah I mean I think that we should have it I also think that it should be immutable because well you can always amend it in subsequent blocks, but I guess the idea is that you start with something that is hard and fixed and can be built upon.

From there, evolving the idea is probably fine, however I have not provided any tools in code to change the constitution because it's my belief that if a large enough portion of the user population really wants to do that it's probably best to fork.

@onivalidator I don't think it's a good idea for backward looking state mutations to be possible. It's possible that a system of amendments could actually be made, and with surprising ease, even. But forks don't actually cost. There's no cost to taking a snapshot and slapping it into a new state machine. So I don't really have the same sort of aversion to forks. I think that for example with the cosmos hub, a fork is most likely the most productive possible outcome.

In the digital space it is possible to explore two sets of ideas simultaneously, and the tool that we use to do that is a chain split or fork. Please keep in mind, the way that a so-called fork is done in cosmos is not really a fork in the traditional sense. We just start a new chain and there is no contention.

ZaradarBH commented 1 year ago

I recon a constitutional change could be implemented in a way that would require a super majority of say 90%? If that many people agree, I would argue that saving them the trouble of forking, might be worth the effort? :)

Miniminitrue commented 1 year ago

Agreed on the crucial role of constitutions. See Codex in Cosmosis: https://docs.google.com/document/d/1lLlXFSMNUNnIU8K2ltVpT3aROcIosbkhuupQQFBubag/edit#

glandua commented 1 year ago

Love the direction here. I think a Constitution in genesis is the right direction. I am not in the weeds on the technical details on this, but appreciate it being brought up, flagged on twitter and am amped for onchain constitutions in cosmos.

hashparty1 commented 1 year ago

I really like the idea of the original constitution being immutable and then having amendments as auditable changes going forward. I also agree that requiring a fork for every amendment seems like it might incur more work than is necessary and users might be put off by it.

peterbourgon commented 1 year ago

What is achieved by this proposal? Does it enable any concrete feature or capability which is not otherwise possible? What are the advantages of recording this string on-chain, versus e.g. putting it in the tweet or blog post or etc. that announces the creation of a new chain ID?

faddat commented 1 year ago

Hi there Peter, so you see the constitution is in the first block of the chain which means that you are supposed to take very great care of crafting crafting it because the constitution is only updated in the first block of the chain.

tac0turtle commented 1 year ago

I think this feature is fine and can be considered chain metadata. Are there any chains asking for such a feature?

peterbourgon commented 1 year ago

Hi there Peter, so you see the constitution is in the first block of the chain which means that you are supposed to take very great care of crafting crafting it because the constitution is only updated in the first block of the chain.

It seems like this PR defines the constitution as an arbitrary string which is optional, has no schema, and is neither parsed nor validated by any consumer. Is that right?

Without validation or enforcement, I can't see any purpose to this change. What am I missing? It seems like a constitution string of "This network shall never defraud any user." is entirely equivalent to "This network shall require all validators to delegate all profits to Kanye West, and all users must wear only Nike shoes on the first Tuesday of every month." or any other conceivable thing. I guess this generalizes to: information which doesn't impact consensus shouldn't be in-protocol.

faddat commented 1 year ago

Hey Peter, it's a really good question. Let me dive into this a little bit. By the way your guide, how I start, for go, is probably why we're having this conversation and thank you for your guide once again.

Okay so the reason it's an arbitrary string that isn't consumed by anything is that it is entirely for the humans clustered around the chain. It is a statement of purpose, not something for consensus.

I have gone back and forth on this point for some time. I had a really good conversation with a new hire at stakecito, Ghanzi -- and I think that his point of view would align closely with yours. He expressed to me that there is no consensus other than social consensus and that therefore all rules must be enforced in the chain.

But I have a twist on this Colin there is no consensus other than social consensus and therefore we must inform the humans clustered around the chain.

If we look at the cosmos Hub today, it actually lacks guidance in terms of what it's purpose is. But the same can be said of osmosis or of Juno, it's really pretty much every chain in cosmos.

I'd like to give you an example for a project that notional built that has basically failed economically. Dig is a chain that allows users to trade in real estate on the blockchain, that invested heavily let's say 100%, in the Ukrainian market, before the war. So the economy died out and at some point we discussed pivoting the chain to some other purpose, but you know what?

I don't think that's actually the right move.

I think that the purpose of the chain should remain fixed. We created an application specific chain with a specific intent, the intent is still viable and the community clustered around that original intent. We don't actually have something that clearly states that intent.

Furthermore, your Kanye West example is frankly accurate. You could create a chain with that purpose. This addition to Genesis allows you to state that purpose.

Would love to hear your additional thoughts and thank you

peterbourgon commented 1 year ago

Okay so the reason it's an arbitrary string that isn't consumed by anything is that it is entirely for the humans clustered around the chain. It is a statement of purpose, not something for consensus.

The genesis block is not a place for arbitrary metadata like this, though, right? On-chain data is supposed to be meaningful to the protocol and programmatically verifiable. Statements of purpose are important but not part of the protocol.

faddat commented 1 year ago

So the statement of purpose is not an important part of the technical protocol, the thing is I think it is an important part of the social protocol that surrounds all this technology. As to whether or not it is appropriate to not provide tools to change the constitution over time, my jury remains out on that.

One of the best examples of this is Juno proposal 16, which stripped the Juno whale, of funds. You see, proposal 16 was governance acting properly. I currently, governance and cosmos is unbounded that is to say, totalitarian. This string field could be used to instruct the humans that operate the chain about the proper use of governance, and it could ban such moves. In the current state of affairs, that was fair play, even more so I can say as a supporter of proposal 16, that it was airplane by directionally. The lack of restraint on governance required these extreme measures because there was a very large and important piece of stake that was basically unaccounted for in terms of its participation.

Another way of putting it is that the current totalitarian state of Cosmos governance breeds well justified paranoia.

peterbourgon commented 1 year ago

This is all fine and good and I don't disagree that expressions like these are important. It's just that there is a categorical difference between the technical and social layers, so to speak. They abide different rules, and establish different invariants. So like

This string field . . . could ban [certain] moves.

How?? If the string isn't parseable or verifiable programmatically then all it does is establish a well-defined sequence of UTF codepoints, with no authority. How could that express a ban (or any other constraint) on anything at all?

If you're saying the authority would be established via governance then you're relying on (a) some subjective human interpretation of that sequence of codepoints, which is (b) generally accepted by the stakeholders in the domain of authority, (c) authoritatively expressed by some mechanism e.g. votes (or whatever) by those stakeholders, all of which must be (d) enforced by some (necessarily programmatic!) mechanism.

Given all of the trust (and other) assumptions required here, what value is there in putting this arbitrary string on-chain?

faddat commented 1 year ago

Blockchains are made of people So the genesis should instruct them on how to use the software, not only the machine.

These days we have been making judicial type decisions with the governance module and it's comfortable for nobody. Part of the reason that it's comfortable for nobody is that we have no constitution or guiding document so that's the idea here

faddat commented 1 year ago

Few updates:

@peterbourgon -- by the logic you expressed above, we should get rid of the governance module altogether, except maybe for software upgrades.... and in fact, I don't think you're alone in thinking that, but it's not how I'm looking at things.

@onivalidator -- there is no reason that chain communities cannot invent amendment procedures, but I'm of the opinion that amendments ought to be forks.

tac0turtle commented 1 year ago

https://twitter.com/zmanian/status/1622045491948142593?s=46&t=nmu4L5L8Ndh7QSbFWH5h2g

Generally agree with this statement. Adding this feature doesn't impose anything but a social contract that can be broken at anytime