Field | Description |
---|---|
zip | ZIP:deeZNNutz-0001 |
title | Zenon Improvement Proposal Process |
author | @cryptocheshire @0x3639 @georgezgeorgez |
status | Final |
type | Informational ZIP |
acceptance | upon usage by the community |
activation | upon usage by the community |
created | 2022-09-17 |
license | GPL v3.0 |
link | https://forum2.zenon.org/t/zip-deeznnuts-0001-draft/991 |
Abstract
Inspired by Laanwj’s thoughts on decentralized Bitcoin core code maintenance and distribution, we are proposing a web of BIPs hosted by Pillars - the main validator nodes of the Zenon Network of Momentum.
Any Pillar can sponsor and host BIPs that should conform to certain standards. Unlike Bitcoin’s BIP Standard which gives that authority to one central entity, we are proposing to decentralize that central authority to every Pillar that wants to engage. And that web of BIPs is the Zenon Improvement Proposal - ZIP - process.
Motivation
Prior to this initiative,
- An AZ Project to research and present a ZIP process was submitted to the community.
- That work was completed and presented to the community for input.
- The process was iterated and presented to the Pillars for a vote.
- The Proposed ZIP Process was approved with 26 yes votes and the community asked Mr. Kaine to setup a ZIP repo in the Official Zenon Network repository. He was unresponsive.
We can only assume Mr. Kaine and his team
- want the community to own and manage the ZIP process independently
- want a ZIP format, but not to host the ZIP repo and/or provide centralized editor services
As a result, various community members iteratively developed this new ZIP framework which
- does not rely on the Founding Team in any way
- replaces most of the central editor role with decentralized Pillar ZIP sponsorships
- proposes Spork creation and activation through the AZ address to activate protocol changes, as suggested by the founding developers.
With that background, we propose a more fault-tolerant and decentralized ZIP Process.**
What is a ZIP?
A Zenon Improvement Proposal (ZIP) is a design document that intends to provide information and justification for a proposed change or improvement to the Network of Momentum (NoM). A ZIP should provide a clear and concise technical specification of the change or feature.
The ZIP process is the primary mechanism for proposing new features, collecting community input or consensus on an issue, and for documenting the design decisions that have gone into the development and growth of the Zenon Network. This document formalizes the standard ZIP process.
ZIP Principles
- ZIPs should not rely on any central editor or repository
- Indexing of ZIPs should be fault tolerant
- The ZIP process should be flexible enough to allow for continuous improvement
- ZIPs should aim to improve the Zenon Network of Momentum in line with its core principle of progressive decentralization
ZIP Types
Informational ZIPs
- describe procedural guidelines to the Zenon community, e.g. how to write and activate a ZIP (e.g. this ZIP:deeZNNutz-0001)
- propose a behavioral protocol (or change of such) but do not affect the technical protocol
- constitute best practices used by the community
Implementation ZIPs
- describe a change in a protocol implementation
- do not propose a protocol change
- are done to improve node efficiency or to extend supported programming languages
- do not require consensus to activate - any node can adopt the proposed change (or not)
Soft Forks
- describe backward-compatible network changes
- require a majority (>50%) of Pillars to enforce the new rules
- non-upgrading Pillars will not be forked out but Momentums violating new rules may become invalid
- do not require any nodes to upgrade to maintain consensus, since all Momentums with the new soft forked-in rules also follow the old rules
Spork Creation Threshold (= Pillar Acceptance Vote)
- Pillar Majority (>50%)
- Timeout: 4 weeks after voting begins
Spork Activation Threshold (= Pillar Activation Vote)
- Pillar Majority (>50%)
- Timeout: 4 weeks after voting begins
Hard Forks
- are non-backward compatible changes that can affect the network protocol, consensus mechanism, ledger architecture, or any change that affects the interoperability of applications using Zenon
- require a supermajority (67%-90%+) of consensus nodes to upgrade their software to activate
- non-upgrading Pillars will be forked out
Spork Creation Threshold (= Pillar Acceptance Vote)
- Low Pillar Majority (>67%)
- Timeout: 4 weeks after voting begins
Spork Activation Threshold (= Pillar Activation Vote)
- High Pillar Supermajority (>90%)
- Timeout: 8 weeks after voting begins
Miscellaneous ZIPs
- ZIPs that don’t fall in the above-mentioned categories
- e.g. a community-requested change in S Y R I U S to create and activate Sporks
- The community may signal consensus on a change request to maintainers of public repos
ZIP Activation
There are two ways to activate ZIPs
- Implicit consensus
Community members individually decide to adopt changes proposed by Informational, Implementation, or Miscellaneous ZIPs. - Explicit consensus
A majority of Pillars reach a consensus to enforce a protocol change (Soft or Hard Fork) through a Spork.
What is a Spork?
A Spork is an embedded on-chain contract that activates a protocol change (Soft or Hard Fork) based on a conditional trigger, e.g. a certain amount of Pillars vote (through an on-chain voting mechanism) to activate the Spork object contained in the upgraded node software.
Who can introduce a Spork?
Any community member will be able to create and contribute to the activation of a Spork. As of this date [September 16th 2022], however, only one address is allowed to create and activate Spork Objects. It is specified in the genesis file as a hardcoded user address assumed to belong to the founding developers.
Accelerator Z - The first Zenon Spork
The founding team used the hardcoded Spork address to create the first Zenon Spork to activate the Pillar-governed project funding mechanism “Accelerator Z” (AZ).
The founding developers waited until they were confident that a supermajority (>67%) of Pillars had upgraded their node software which contained the Spork object to introduce the following conditional logic to the network:
- Someone submits an AZ proposal in S Y R I U S
- Pillars vote on intermittently locking funds from the Zenon Fabric address as a potential grant for the AZ applicant. The consensus threshold is:
“if >33% of Pillars vote & >50% of the votes are yes, then accept the AZ grant submission and lock requested funds”
- Upon presenting his/her work, the applicant requests the release of the locked funds by the Pillars who again have to achieve the same consensus on the delivered work being satisfactory.
Creating & activating Sporks through the AZ address
Based on the founding developers’ indication that network changes could be voted on through AZ, ZIP co-author @georgezgeorgez outlined the following ZIP idea that would allow anyone in the community to create Spork-activated ZIPs:
Since the original Spork address to create and activate Sporks is hardcoded in the genesis file, it would have to be changed to a different address so that it can be used by the community to create and activate Sporks.
Accelerator Z already has some functionality to create transactions based on votes. Therefore, the community proposes to change that hardcoded Spork creation address to Accelerator Z contract address.
This would allow us to then change the Spork Contract so that only the AZ address can create and activate Sporks.
Then we can modify the conditional logic of the AZ contract to something like
“When Pillars vote and certain thresholds are met, then the contract sends a transaction to the spork contract to create or activate Sporks.”
This would give us community-activated Sporks that can be used for Soft and Hard Forks right from the S Y R I U S wallet through the Accelerator Z tab.
ZIP Process
Stage 1 - ZIP IDEA
Stage Content | Initial ZIP Proposal & Specification |
Exit Criteria | ZIP proposal including arguments outlining feasibility and logically explaining why it results in an objective improvement of Zenon NoM is published for community discussion. |
Stage Description
The ZIP process begins with a new idea for Zenon NoM. Each potential ZIP must have one or several authors who
- write the ZIP in a standard format
- recruit a sponsoring Pillar
- shepherd the discussions in the appropriate forums
- implement community feedback
- build community consensus around the idea.
The ZIP author(s) should first attempt to ascertain whether the idea is ZIP-able. Ideas should be proposed in the ZIP Category of the forum so they can be found and indexed easily. The author of the idea should solicit feedback from the community and refine the idea. Posting to the main Zenon telegram chat and the Development & Technical Discussion forum is the best way to go about this.
It is highly recommended that a single ZIP contain a single key proposal or new idea. The more focused the ZIP, the more successful it tends to be. If in doubt, split your ZIP into several well-focused ones.
Vetting an idea publicly before going as far as writing a detailed ZIP specification is meant to save both the potential author and the wider community time. Asking the Zenon community first if an idea is original helps prevent too much time from being spent on something that is guaranteed to be rejected.
Stage 2 - PUBLIC DEBATE & REVISION
Stage Content | Public discourse on the merit and feasibility of the ZIP proposal. |
Exit Criteria | Author has gauged community interest and support for the proposal has been sufficient to merit finding a sponsoring Pillar. |
Stage Description
The author(s) should gather community feedback to iteratively refine and flesh out their ZIP idea until it can be specified with a sufficiently high degree of conformity with opinions voiced in the community.
The community should reject a ZIP proposal for the following reasons:
- duplication of effort
- refusal to refine the ZIP idea based on critical community feedback
- being too unfocused or too broad
- being technically unsound
- not providing proper motivation or addressing backward compatibility
- not being feasible
- not in line with the principle of progressive decentralization
For a ZIP to be accepted it must meet certain minimum criteria:
- It must be a clear and complete description of the proposed enhancement
- The enhancement must represent a net improvement
- The proposed implementation, if applicable, must not complicate the protocol unduly
Before drafting an official ZIP, the author will have to identify a Pillar willing to sponsor the ZIP and add it to their ZIP repository for indexing by the Community Pointer repo.
Stage 3 - OFFICIAL ZIP PROPOSAL
Stage Content | - ZIP publication in sponsoring Pillar’s Git repository - ZIP indexing by Community Pointer Repo - Spork submission through AZ contract - ZIP Finalization in case of Informational (text) or Implementation (code) ZIP |
Exit Criteria | - Author has found a sponsoring Pillar that has publicly announced ZIP sponsorship by adding the draft ZIP to its public repo. - Informational / Implementation ZIP has been finalized, or Spork has been proposed through the modified AZ contract (the new Spork contract address) |
Stage Description
Once the author has gauged initial community interest, a Pillar must be found to endorse the ZIP through sponsorship by adding the ZIP to its public repository. This ensures the ZIP was critically reviewed by a Pillar holder who is willing to back it with its brand and reputation in the community.
Once a sponsoring Pillar has been found,
-
the author writes a properly formatted Draft ZIP. The Draft ZIP formatting standards used and outlined in this ZIP should be used as a reference.
-
the sponsoring Pillar publishes the Draft ZIP in its own public Git repository.
-
the author and sponsoring Pillar (the “Sponsors”) inform the community about the draft ZIP publication and endorsement through public channels (Github, IPFS, Gitlab, Telegram, Zenon Forum, etc.).
-
In case the ZIP proposes a protocol change requiring a Spork (for Soft or Hard Forks), the Sponsors must submit the ZIP proposal for an on-chain vote by Pillars through the (yet to be) modified AZ contract.
-
the Sponsors continue working with the community to solicit and implement feedback via pull requests or through public or private channels.
Decentralizing central editors with a Community Pointer Repo
We propose a repository structure that is fault-tolerant and resilient against censorship from central editors and/or hosting software providers. Pillars who want to sponsor ZIPs should set up a repository that can host the ZIP and accompanying code. Ideally, repositories are established across multiple service providers and sources: Github, Gitlab, Gitea, IPFS, and others.
Sponsoring Pillars must provide a Proof of Pillar (a signed message from the Pillar address) in the repo to prove participation and get indexed by the Central Pointer Repo that is established by the community and maintained at https://github.com/Zenon-Netowrk-ZIPs. This repo simply points to verified Pillar repos as a convenience to those searching for ZIPs.
The role of official editors in Zenon
- maintain an official pointer repository that indexes pillar repos and the ZIPs in there
- verify pillar ownership of their ZIP repositories (through signature file)
- add them as a submodule to the Zenon Community repo
- implement redundancy protocols or backups to replace a compromised pointer repo with another
The community pointer repo points to a ZIP folder hosted by each sponsoring Pillar. Anything added to it will appear in the pointer. It’s like a repo with shortcut folders to Pillar repositories.
Each sponsoring pillar maintains its own ZIP numbering while adhering to established formatting standards. The editor repo maintains standard format templates and best practice recommendations for sponsoring Pillars to use.
Note that individual Pillars can also choose to act as a pointer service by adding the repos of other Pillars as submodules to their own.
The Draft ZIP should be written in standard ZIP style as described below to ensure uniform ZIP proposal formatting across sponsoring Pillars. Sponsoring Pillars assign their own sequential numbering to ZIPs and maintain a list of ZIPs they sponsor(ed).
The ZIP naming and numbering convention must adhere to the following format:
[ZIP-PillarName-PillarZIPNumber]
e.g.
- “ZIP:deeZNNutz-0001"
- “ZIP:deeZNNutz-0002"
- “ZIP:ZenonORG-0001”
- “ZIP:ZenonORG-0002”
In addition, the sponsoring Pillar will assign a ZIP label “Informational ZIP”, “Implementation ZIP”, “Soft Fork”, “Hard Fork” etc., and give it the status “Draft”, “Accepted”, “Rejected”, “Withdrawn”, “Final”, “Replaced”, or “Active”.
The Community Pointer repo could thus look like this:
Name | Title | Label | Status |
---|---|---|---|
ZIP:deeZNNutz-0001 | ZIP Process | Informational ZIP | Draft |
ZIP:deeZNNutz-0002 | Bitcoin<>Zenon merge mining | Soft Fork | Active |
ZIP:ZenonORG-0002 | RPC data compression for nodes 2.0 | Implementation ZIP | Replaced |
There are different ZIP statuses.
For Informational ZIPs and Implementation ZIPs which only require implicit consensus:
For Sporks that require explicit consensus by Pillars to be accepted and activated:
Status | Description |
---|---|
Idea | ZIP idea is circulated in the community in no specific format |
Draft | ZIP idea is published in draft stage, adhering to formatting best practices |
Rejected | ZIP proposal was rejected by the community |
Withdrawn | ZIP proposal was withdrawn by the Sponsors |
Accepted | Spork proposal acceptance vote reached required Pillar quorum |
Final | Final ZIP implementation published and ready for activation |
Replaced | ZIP implementation has been replaced by a newer or alternative version |
Active | ZIP implementation has been activated |
ZIPs relying on implicit consensus are finalized in step 4
Once an Informational, Implementation or Miscellaneous ZIP has been iteratively refined, and a reference Implementation in form of text or code published, it can be marked as “Final”. Once they are actively used (e.g. this ZIP:deeZNNutz-0001) or a pull request to a public repo (e.g. for a change to the S Y R I U S wallet) has been performed, the ZIP can be marked as “Active”.
ZIPs relying on explicit consensus kick off in step 4
On the other hand, ZIPs which propose protocol changes that lead to Soft or Hard Forks, and have to be activated by Pillars via a Spork, should pass the Pillar Acceptance vote before the reference implementation is completed.
This ensures that
- all Pillars are informed about the proposed network change
- all Pillars are given the opportunity to signal their support for it
- ZIP sponsors can gauge Pillar support before engaging in significant implementation work
Reaching a majority quorum in the Pillar Acceptance vote marks a ZIP as “Accepted” and tells the authors there is significant interest for the Spork so that they may begin with the implementation work if it has not already started.
Any ZIP can also be “Rejected” or “Withdrawn” due to lack of community support or explicit opposition. It is important to have a record of this fact for future ZIP authors.
Some Informational ZIPs may also have a status of “Active” if they are never meant to be completed, E.g. this ZIP:deeZNNutz-0001.
The ZIP process for Informational, Implementation, and Miscellaneous ZIPs ends here. The following stages only apply for ZIPs leading to Sporks.
Stage 4 - SPORK CREATION
Stage Content | - Spork creation via AZ address - Community Acceptance signaling via signed messages - ZIP Acceptance Vote via modified AZ contract |
Exit Criteria | Pillar Acceptance quorum reached / not reached within voting timeframe |
Stage Description
Just like when someone submits a new Accelerator Z proposal, the ZIP author submits a Spork creation proposal through the modified AZ contract from within S Y R I U S.
Pillars can then vote on its Acceptance. If it passes, the Spork is created and “waits” for the ZIP authors to submit the Spork activation proposal (which is analogous to Pillars voting for an AZ phase, just with different activation criteria).
The point of the Acceptance vote is to
- “lock in” the creation of a Spork on-chain
- for a Spork ZIP to pass a first consensus filter
- give the ZIP supporters the confidence to commit to the Spork activation, start planning for it, and accept that validators who don’t follow might be forked out
By helping Pillars make a qualified decision during the on-chain Acceptance vote, ZIP authors can increase their chances for a successful Spork activation. For this, they should reach out to the community and ask any ZNN holder to sign a message in S Y R I U S, e.g.
“ACCEPT ZIP:deeZNNutz-0001”
Community-provided signaling trackers (similar to taproot.watch) can record all signed messages, and cross-reference them with the amount of ZNN held in the addresses from which the signatures originated and whether the addresses are used by a “Delegator”, “Staker”, “Sentinel”, or “Pillar”.
This technique allows the entire community to indicate their support for a Spork ZIP, thus helping Pillars make a better voting decision while allowing the ZIP Sponsors to get some polling data on the community-wide support of their proposed network change.
If the Acceptance vote fails due to a timeout or too many negative Pillar votes, the ZIP Sponsors are free to choose whether they should redraft or abandon it.
If the Acceptance vote passes, it is a signal to the community developers that Pillars support the initiative and they will run the code after proper vetting. Developers should feel confident in spending time writing code to support the ZIP at this stage.
Stage 5 - IMPLEMENTATION DISTRIBUTION
Stage Content | - Reference implementation - Downloadable binaries |
Exit Criteria | Reference implementation published on sponsoring Pillar Git repo |
Stage Description
Once the reference implementation has been built, the sponsoring Pillar
- publishes it on its Pillar Git repo
- merges the ZIP code into its mainline repo
- builds the binary and ensures other Pillars will be able to download and install it
The implementation contains the Spork Object whose activation is triggered by the Pillar Activation vote reaching the threshold defined in the paragraph ZIP TYPES.
Example: Spork Object for a Hard Fork would contain the following conditional activation trigger:
“activate if >90% of Pillars indicate they have updated their node software with the reference implementation of ZIP:deeZNNutz-0002 through the Activation vote”.
Anyone can also merge in the changes into their repo copies and build themselves. People can verify if it’s the same binary through hashes.
Stage 6 - COMMUNITY AUDIT
Stage Content | Audit timeframe & community feedback |
Exit Criteria | Timeout of audit timeframe |
Stage Description
Once the Sponsors announce the publication of the Final ZIP implementation they should include a soft deadline until community audits should be concluded.
Community members may comment on the implementation or directly push changes via pull request to the sponsoring Pillar’s ZIP repo. Once the code is complete and vetted by a process similar to the Bitcoin Contribution Criteria, the ZIP can be marked “Final”.
Stage 7 - PILLARS UPGRADE NODES & VOTE
Stage Content | Call to Pillars to signal ZIP implementation support |
Exit Criteria | ZIP activation lock-in by reaching the activation vote quorum threshold |
Stage Description
The ZIP Sponsors now submit an activation request for the proposed Spork in S Y R I U S. Pillars now have to upgrade their node software (if not already done so) and then vote on the activation of the Spork. Reaching the voting threshold will trigger the Spork activation transaction.
What happens if the Spork fails to activate in time? ZIP Sponsors will have to assess the reason for it and either extend the activation timeline or revise the ZIP if needed.
Stage 8 - SPORK ACTIVATION
Stage Content | Spork activation is triggered |
Exit Criteria | ZIP is activated |
Stage Description
Once sufficient Pillars have voted to reach the activation threshold the Spork is activated and non-supporting network participants may be forked out until they opt into the protocol change.
To prevent Pillars from voting on the activation without upgrading their node software, the following security mechanism will be implemented as a standard procedure as suggested by @georgezgeorgez:
When a Spork Acceptance vote passes, a Spork gets created with a unique ID. That unique ID gets added to a list in go-Zenon as part of the code change.
Now, when the Activation vote happens, a Pillar node won’t send the transaction to vote for Sporks unless it knows about it locally, by checking if its ID is in that hardcoded list of spork IDs in go-Zenon.
It’s like an account whitelisting. In general, the network allows you to send tx to whatever address but you can configure your wallet to only allow sending to preset addresses. Basically, we can do the same thing with spork IDs by configuring S Y R I U S to only allow voting for Sporks in its list. And the list gets updated when they download the new version.
This allows making sure a Pillar doesn’t sign the activation vote unless the upgrade happened.
Upon activation of the Spork, the sponsoring Pillar may now update the ZIP label to “Active” or “Replaced”.
Annex
Conditions for realization:
- Modification of Spork Contract and change of Spork Creation Address
- Spork ID whitelisting mechanism
Areas to improve and expand over time
- Emergency ZIPs
- Acceptance signaling tooling
- Prepare contribution criteria for code submission
ZIP Format Guideline
Pillars should try to adhere to the same ZIP format and metadata requirements. The outline below is a guideline and can be used if a Pillars has not established their own.
Header
Each ZIP should contain a header that contains metadata about the ZIP. The headers should appear in the following order.
Field | Description |
---|---|
zip | Pillar Name + ZIP number, or “?” when prior to Pillar involvement |
title | ZIP title |
author | A comma-separated list of the authors (anon is acceptable) |
status | Current status of the ZIP (draft, accepted, rejected, withdrawn, final, replaced, active) |
type | ZIP type (Informational, Minor, Major) |
acceptance | A minimum quorum threshold for acceptance signaling |
activation | A minimum quorum threshold for activation of a spork object |
created | Date created on, in ISO 8601 (yyyy-mm-dd) format |
license | Each new ZIP must identify at least one acceptable license |
link | URL to proposal discussion |
Abstract
A short description of the technical issue being addressed or feature to be added.
Motivation
The motivation should clearly explain why this change or improvement is required or why the existing protocol is inadequate to address the problem that the ZIP solves.
Specification
The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Zenon platforms
Rationale
The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work. The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion.
Implementation
The actual code implementing the ZIP’s specification or a link to the reference implementation of the ZIP’s specification.
License
The ZIP should be licensed under GNU General Public License v3.0 to match the Zenon.network license.
ZIP Comments
Comments on a ZIP should occur where the draft was posted. There should be no requirement to exchange ideas on a specified medium.
ZIP References
- Bitcoin’s longest-serving Lead Maintainer calls it quits, names no successor
- AZ ZIP Proposal
- BICH DAO ZIP Framework Comments
- https://forum2.zenon.org/t/zips-and-why-i-believe-pillars-should-sponsor-them/984
- ZIP Process Draft - Google Docs
ZIP License
This ZIP is licensed under GNU General Public License v3.0.