forked from anoma/namada-docs
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a2f6ce3
commit d528dab
Showing
8 changed files
with
252 additions
and
209 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"[markdown]": { | ||
"editor.wordWrap": "on" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
packages/specs/pages/economics/public-goods-funding/_meta.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"public-goods-stewards" : "Public Goods Stewards", | ||
"becoming-a-steward" : "Becoming a steward", | ||
"electing" : "Electing the stewards", | ||
"funding" : "Mechanism for funding", | ||
"storage" : "Storage" | ||
} |
64 changes: 64 additions & 0 deletions
64
packages/specs/pages/economics/public-goods-funding/becoming-a-steward.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import { Callout } from 'nextra-theme-docs' | ||
|
||
# Becoming a steward | ||
The first step towards becoming a Steward is to instantiate a multisignature account. | ||
|
||
In order to propose candidacy as a PGF Steward, the steward must initiate a custom governance proposal. At the cost | ||
of deposited NAM, the governance proposal is broadcast on-chain and governance is able to vote on whether the steward-applicant | ||
will be accepted or not. Together with this proposal, the applicant is encouraged to provide a motivational statement as to why | ||
they should be entrusted with the responsibility of proposing public goods candidates. This will also include a commitment to at | ||
least one of the categories of public goods funding that social consensus has established (or propose their own category, which | ||
would inherently introduce a new category into social consensus, should the proposal be accepted). | ||
|
||
Nominating oneself as a PGF steward may be done at any time. | ||
|
||
|
||
## Losing stewardship status | ||
|
||
There are 3 ways that a Steward may be removed from the steward set: | ||
|
||
1. Resign as a steward | ||
2. Have a failed funding proposal | ||
3. Become voted out through a governance proposal | ||
|
||
Resigning as a Steward is straight-forward. A simple interface is implemented to allow for the established account | ||
representing the Steward to lose their priveleges as a PGF Steward. | ||
|
||
If a steward's PGF proposal receives a significant number of `Nay` votes ($\frac{2}{3}$ as a fraction of voting-power), | ||
they will be removed from the steward set. It is likely that there would only be such wide-speread disagreement if the | ||
proposal was misaligned with the users the stewards is attempting to cater to. This is described in more detail under | ||
[its section](#proposing-funding). | ||
|
||
Finally, the steward can be "voted-out" from its responsibility through a custom governance proposal similar to the one | ||
used to elect the steward in the first place! | ||
|
||
### "Voting-out" the steward | ||
|
||
In the same way that a steward can be voted in by Namada governance through a custom proposal, the equal and opposite force exists. | ||
Hence, any governance member (validator or delegate), is able to initiate a vote (for the relevant cost) in order to remove an arbitrary | ||
number of current PGF stewards. If this proposal passes, it signals that the Steward(s) has/have not fulfilled their duty to the public, | ||
which the stewards are meant to serve (hence the name). | ||
|
||
## Initiating the vote | ||
|
||
Before a new PGF steward can either be elected or removed, a governance proposal that specifies this objective must pass. The voting on this proposal is handled by the governance proposal type `StewardProposal`, which is a custom proposal type. | ||
|
||
|
||
The struct of `StewardProposal` is constructed as follows, and is explained in more detail in the [governance specs](../base-ledger/governance.md) | ||
|
||
```rust | ||
struct StewardProposal{ | ||
id: u64 | ||
content: Vec<u8>, | ||
author: Address, | ||
r#type: PGFSteward, | ||
votingStartEpoch: Epoch, | ||
votingEndEpoch: Epoch, | ||
graceEpoch: Epoch, | ||
} | ||
``` | ||
|
||
In order for a new PGF steward to be elected (or removed), $\frac{2}{3}$ of validating power must vote on the `StewardProposal` and more than half of the votes must be in favor. If more than half of the votes are against the proposal, the steward set is kept the same, and the proposer of the proposal loses their escrowed funds. | ||
|
||
|
||
See the example below for more detail, as it may serve as the best medium for explaining the mechanism. |
77 changes: 77 additions & 0 deletions
77
packages/specs/pages/economics/public-goods-funding/electing.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import { Callout } from 'nextra-theme-docs' | ||
|
||
# Electing the stewards | ||
|
||
## Voting for the stewards | ||
|
||
After the `StewardProposal` has been submitted, and once the steward's address has been constructed and broadcasted, the steward address can be voted on by governance participants. All voting must occur between `votingStartEpoch` and `votingEndEpoch`. | ||
|
||
|
||
The vote for a new steward nomination will be constructed as follows: | ||
|
||
|
||
Each participant submits a vote through governance: | ||
```rust | ||
struct OnChainVote { | ||
id: u64, | ||
voter: Address, | ||
yay: proposalVote, | ||
} | ||
``` | ||
|
||
Where the proposalVote is simply an enum dictating whether the voter voted `Yay` or `Nay` to the proposed candidate change. | ||
|
||
|
||
#### Dealing with ties | ||
In the rare occurance of a tie, the steward retains membership by default. | ||
|
||
|
||
## Electing stewards | ||
|
||
Once the decision has been made on whether to elect (or remove) the intended steward, the established address corresponding to the multisig is added to (removed from) the `PGF` internal address. | ||
|
||
### Example | ||
|
||
The below example hopefully demonstrates the mechanism more clearly. | ||
|
||
<Callout type="info" emoji="🧑🏫"> | ||
The governance set consists of Alice, Bob, Charlie, Dave, and Elsa. Each member has 20% voting power. | ||
|
||
The current PGF stewards are Dave and Elsa. | ||
|
||
- At epoch 42, Bob and Charlie decide to put themselves forward as a joint PGF Steward. They construct a multisig with address `0xBobCharlieMultisig`. | ||
- At epoch 42, Bob proposes his and Charlie's candidacy through a `StewardProposal`: | ||
|
||
```rust | ||
struct StewardProposal{ | ||
id: 2 | ||
content: Vec<32,54,01,24,13,37>, // (Just the byte representation of the content (description) of the proposal) | ||
author: 0xCharlie, | ||
r#type: StewardProposal, | ||
votingStartEpoch: Epoch(45), | ||
votingEndEpoch: Epoch(54), | ||
graceEpoch: Epoch(57), | ||
} | ||
``` | ||
|
||
This proposal proposes the candidate 0xBobCharlieMultisig as a Steward. | ||
|
||
- At epoch 49, Alice submits the vote: | ||
|
||
```rust | ||
struct OnChainVote { | ||
id: 2, | ||
voter: 0xalice, | ||
yay: proposalVote, | ||
} | ||
``` | ||
Where the proposalVote is simply the enum `Yay` with an empty memo field. | ||
|
||
- At epoch 49, Bob and Elsa submit an identical transaction. | ||
|
||
- At epoch 50, Dave votes `Nay` on the proposal. | ||
|
||
- At epoch 54, the voting period ends and the votes are tallied. Since 80% > 66% of the voting power voted on this proposal (everyone except Charlie, who forgot to vote on her own proposal), the intitial condition is passed and the Proposal is active. Further, because out of the total votes, most were `Yay`, (75% > 50% threshold), the new Steward consisting of Bob and Charlie will be added to the Steward set. | ||
|
||
- At epoch 57, Bob and Charlie have the effective power to propose Public Goods Funding transactions (that may or may not be vetoed). | ||
</Callout> |
Oops, something went wrong.