Namada Proposals

Proposal JSON

For online proposals, the fields of the proposal JSON are as follows:

{
    "proposal": {
        "id": 1, // The proposal id
        "content": content, // (see below),
        "author": "author", // The author's address
        "voting_start_epoch": 420, // The epoch at which voting starts
        "voting_end_epoch": 426, // The epoch at which voting ends
        "grace_epoch": 432, // The epoch at which the proposal will be executed (if it passes)
    },
    "data": data // The optional proposal data, depends on the type of proposal
}
  • The content value should follow a standard format. We leverage a similar format to what is described in the BIP2 (opens in a new tab) document:
{
    "title": "<text>",
    "authors": "<authors' email addresses> ",
    "discussions-to": "<email address / link>",
    "created": "<date created on, in ISO 8601 (yyyy-mm-dd) format>",
    "license": "<abbreviation for approved license(s)>",
    "abstract": "<text>",
    "motivation": "<text>",
    "details": "<Proposal Number> - optional field",
    "requires": "<proposal id of any proposals that need to occur before this proposal can be implemented> -optional field",
}

The proposal number is different from the proposal id. The id is a counter that does not include offline proposals. The proposal number is a counter that includes offline proposals. The proposal id is a unique identifier that is assigned to each proposal when it is submitted. The proposal id is used to reference a proposal in the Namada blockchain.

The Author address field will be used to credit the locked funds if the proposal is approved. The ProposalType imply different combinations of:

  • the optional wasm code attached to the proposal
  • which actors should be allowed to vote (delegators and validators or validators only)
  • the threshold to be used in the tally process
  • the optional payload (memo) attached to the vote

Supported proposal types

At the moment, Namada supports 3 types of governance proposals:

pub enum ProposalType {
  /// Carries the optional proposal code path
  Default(Option<String>),
  StewardProposal,
  PGFProposal,
}

Default represents a generic proposal with the following properties:

  • Can carry a WASM code to be executed in case the proposal passes
  • Allows both validators and delegators to vote
  • Requires 23\frac{2}{3} of the total voting power to succeed
  • Doesn't expect any memo attached to the votes

StewardProposal is a proposal to change the StewardSet for Public Goods Funding:

  • Doesn't carry any WASM code
  • Allows both validators and delegators to vote
  • Requires 13\frac{1}{3} of the total voting power to vote
  • Requires 12\frac{1}{2} of the non-abstain (either yea or nay) votes to be Yay

PGFProposal is a proposal to conduct Public Goods Funding:

  • Doesn't carry any WASM code
  • Allows both validators and delegators to vote
  • Has different properties depending on whether or not the submitter is a steward If the proposer is not a steward:
  • Requires 13\frac{1}{3} of the total voting power to vote
  • Requires 12\frac{1}{2} of the non-abstain votes to be Yay If the proposer is a steward, passes unless:
  • 13\frac{1}{3} of the total voting power votes on the proposal, AND out of the votes, at least 12\frac{1}{2} of the non-abstain votes are Nay
  • Causes the steward to lose steward status if 23\frac{2}{3} of the total voting power votes on the proposal AND out of the votes, at least 23\frac{2}{3} of the non-abstain votes are Nay