KIP 201: KIP Process Upgrade
Author | Neo Yiu |
---|---|
Status | Draft |
Type | Meta |
Created | 2024-12-3 |
What is a KIP?
KIP stands for Kaia Improvement Proposal. A KIP is a design document providing information to the Kaia community, or describing a new feature for Kaia or its processes or environment. The KIP should provide a concise technical specification of the feature and a rationale for the feature. The KIP author is responsible for building consensus within the community via discussion on the developer forum and documenting dissenting opinions.
KIP Rationale
We intend KIPs to be the primary mechanisms for proposing new standards and features, for collecting community technical input on an issue, and for documenting the design decisions that have gone into Kaia protocol and ecosystem. Because the KIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. For Kaia’s builders and contributors, KIPs are a convenient way to track the progress of their implementation. Ideally each implementation maintainer would list the KIPs that they have implemented. This will give KIP users a convenient way to know the current status of a given implementation and its constituent libraries.
KIP Types
There are in total four types of KIP:
- A Core KIP describes any change that affects Kaia protocol implementations, such as a change to the network protocol, an improvement in block or transaction validity rules, an improvement in storage-layer mechanism, an improvement in interface around client API/RPC specifications and standards, and also certain language-level standards like method names and contract ABIs, any change in Kaia’s tokenomics-related settings and financial parameters, or any change in GC block reward mechanism, etc. Core KIP would be seen requiring a consensus fork as well as changes that are not necessarily consensus critical but may be relevant to any core-related development. Core KIPs consist of two parts, a design document and implementation.
- An Ecosystem KIP describes any change falling under the broad category of ecosystem features, tools or environment used in Kaia development, such as a change on application layer related to proposed application standards/conventions, or any change or addition that affects the interoperability of applications using Kaia, or a change in SDK layer related to application-level standards and conventions, such as name registries, URI schemes, library/package formats, and wallet formats, or an introduction of new ecosystem tool that could be integrated to the Kaia chain with implementation know-hows, or an introduction of contract standards that would introduce ecosystem features, etc.
- A Tokenization KIP describes any change or introduction related to Kaia compatible tokens, such as an introduction of purpose-driven fungible token or non-fungible token and its minting policies in general.
- A Meta KIP describes a process surrounding Kaia or proposes a change to (or an event in) a process. Meta KIPs apply to areas other than the KIPs listed above. Examples include procedures, guidelines, and changes to the decision-making process. Any Meta KIP is also considered a Process KIP.
It is highly recommended that a single KIP contains a single key proposal or new idea. The more focused the KIP, the more successful it tends to be. A change to one client doesn’t require a KIP; a change that affects multiple clients, or defines a standard for multiple apps to use, does.
A KIP 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 be solid and must not complicate the protocol unduly.
Special requirements for Core KIPs
If a Core KIP mentions or proposes changes to the KLVM (Kaia Virtual Machine, forked from Byzantium EVM), it should refer to the instructions by their mnemonics and define the opcodes of those mnemonics at least once. A preferred way is the following:
REVERT (0xfe)
KIP Work Flow
Shepherding a KIP
Parties involved in the process are you, the champion or KIP author, the KIP reviewers, and the Kaia dev team.
Before you begin writing a formal KIP, you should vet your idea. Ask the Kaia community first if an idea is original to avoid wasting time on something that will be rejected based on prior research. It is thus recommended to open a discussion thread on the Issues section of this repository or directly over to Kaia Dev Forum.
In addition to making sure your idea is original, it will be your role as the author to make your idea clear to reviewers and interested parties, as well as inviting reviewers, developers, and the community to give feedback on the aforementioned channels. You should try and gauge whether the interest in your KIP is commensurate with both the work involved in implementing it and how many parties will have to conform to it. For example, the work required for implementing a Core KIP will be much greater than for others and the KIP will need sufficient interest from the Kaia client teams. Negative community feedback will be taken into consideration and may prevent your KIP from moving past the Draft stage.
Core KIPs
For Core KIPs, given that they require client implementations to be considered Final (see “KIPs Process” below), you will need to either provide an implementation for clients or convince clients to implement your KIP.
In short, your role as the champion is to write the KIP using the style and format described below, shepherd the discussions in the appropriate forums, and build community consensus around the idea.
KIP Process
Following is the process that a successful KIP will move along:
[ IDEA ] -> [ DRAFT ] -> [ REVIEW ] -> [ LAST CALL ] -> [ ACCEPTED ] -> [ FINAL ]
Each status change is requested by the KIP author and reviewed by the KIP reviewers. Use a pull request to update the status. Please include a link to where people should continue discussing your KIP. The KIP reviewers will process these requests as per the conditions below.
- Idea – Once the champion has asked the Kaia community in Dev Forum whether an idea has any chance of support, they will write a draft KIP as a pull request. Consider including an implementation if this will aid people in studying the KIP.
- :arrow_right: Draft – If agreeable, a KIP reviewer will assign the KIP a number (generally the issue or PR number related to the KIP) and merge your pull request. The KIP reviewer will not unreasonably deny a KIP.
- :x: Draft – Reasons for denying draft status include being too unfocused, too broad, duplication of effort, being technically unsound, not providing proper motivation or addressing backwards compatibility.
- Draft – Once the first draft has been merged, you may submit follow-up pull requests with further changes to your draft until such point as you believe the KIP to be mature and ready to proceed to the next status. A KIP in draft status must be implemented to be considered for promotion to the next status.
- :arrow_right: Review – If agreeable, the KIP reviewer will assign the Review status and officially take the proposal under review.
- :x: An unsuccessful review would result in material changes or substantial unaddressed technical complaints will cause the KIP to revert to Draft, all would be based on the peer review feedback by KIP Reviewers.
- Review – A KIP Author marks a KIP as ready for and requesting Peer Review by Reviewers.
- :arrow_right: Last Call – If agreeable, the KIP reviewer will assign the Last Call status and set a review end date (
review-period-end
), normally 14 days later. - :x: – A request for Last Call status will be denied if material changes are still expected to be made to the draft. We expect that KIPs only enter Last Call once.
- :arrow_right: Last Call – If agreeable, the KIP reviewer will assign the Last Call status and set a review end date (
- Last Call – This KIP will be listed prominently as a pinned issue.
- :arrow_right: Accepted – A successful Last Call without material changes or unaddressed technical complaints will become Accepted.
- :x: – A Last Call which results in material changes or substantial unaddressed technical complaints will cause the KIP to revert to Draft, all would be based on the peer review feedback by KIP Reviewers.
- Accepted – This status signals that material changes are unlikely and the Kaia dev team should consider this KIP for inclusion. Their process for deciding whether to encode it into their core protocol as part of a hard fork or include the new ecosystem integration/feature is not part of the KIP process.
- :arrow_right: Draft – The KIP can be decided to move it back to the Draft status at the discretion. E.g. a major, but correctable, flaw was found in the KIP by the reviewer committee.
- :arrow_right: Rejected – The KIP can be decided to be marked as this KIP as Rejected at their discretion. E.g. a major, but uncorrectable, flaw was found in the KIP.
- :arrow_right: Final – Standard Track Core KIPs must be implemented in any of Kaia clients before it can be considered Final. When the implementation is complete and adopted by the community, the status will be changed to “Final”.
- Final – This KIP represents the current state-of-the-art. A Final KIP should only be updated to correct errata.
Other exceptional statuses include:
- Active – Some Informational and Process KIPs may also have a status of “Active” if they are never meant to be completed. E.g. KIP-201 (this KIP).
- Abandoned – This KIP is no longer pursued by the original authors or it may not be a (technically) preferred option anymore.
- :arrow_right: Draft – Authors or new champions wishing to pursue this KIP can ask for changing it to Draft status.
- Rejected – A KIP that is fundamentally broken or a Core KIP that was rejected by the Core Devs and will not be implemented. A KIP cannot move on from this state.
- Superseded – A KIP which was previously Final but is no longer considered state-of-the-art. Another KIP will be in Final status and reference the Superseded KIP. A KIP cannot move on from this state.
What belongs in a successful KIP?
Each KIP should include the following parts:
- Preamble - RFC 822 style headers containing metadata about the KIP, including the KIP number, a short descriptive title (limited to a maximum of 44 characters), and the author details. See below for details.
- Abstract - A short (~200 word) description of the technical issue being addressed.
- Motivation: Why is this KIP necessary? - The motivation is critical for KIPs that want to change the Kaia protocol. It should clearly explain why the existing protocol specification is inadequate to address the problem that the KIP solves. KIP submissions without sufficient motivation will be rejected outright.
- 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 Kaia platforms.
- Rationale: How does this KIP achieve its goals? - 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, e.g. how the feature is supported in other languages. The rationale may also provide evidence of consensus within the community, and should discuss important objections or concerns raised during discussion.
- Backwards Compatibility (if applicable) - All KIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The KIP must explain how the author proposes to deal with these incompatibilities. KIP submissions without a sufficient backwards compatibility treatise may be rejected outright.
- Test Cases (if applicable) - Test cases for an implementation are mandatory for KIPs that are affecting consensus changes. Other KIPs can choose to include links to test cases if applicable.
- Implementations - The implementations must be completed before any KIP is given status “Final”, but it need not be completed before the KIP is merged as draft. While there is merit to the approach of reaching consensus on the specification and rationale before writing code, the principle of “rough consensus and running code” is still useful when it comes to resolving many discussions of API details.
- Optional Sections (if applicable) - May appear in any order, or with custom titles, at author and reviewer discretion:
- Versioning: if Versioning is not addressed in Specification
- Appendices
- References
- Copyright Waiver - All KIPs must be in the public domain. See the bottom of this KIP for an example copyright waiver.
KIP Formats and Templates
KIPs should be written in markdown format. Image files should be included in a subdirectory of the assets
folder for that KIP as follows: assets/kip-N
(where N is to be replaced with the KIP number). When linking to an image in the KIP, use relative links such as ../assets/kip-201/image.png
.
KIP Header Preamble
Each KIP must begin with an RFC 822 style header preamble, preceded and followed by three hyphens (---
). This header is also termed “front matter” by Jekyll. The headers must appear in the following order. Headers marked with “*” are optional and are described below. All other headers are required.
` kip:` KIP number (this is determined by the KIP editor)
` title:` KIP title
` author:` a list of the author’s or authors’ name(s) and/or username(s), or name(s) and email(s). Details are below.
` * discussions-to:` an url pointing to the official discussion thread
` status:` *Draft | Review | Last Call | Accepted | Final | Active | Abandoned | Rejected | Superseded* |
` * review-period-end:` date review period ends
` type:` *Core | Ecosystem | Tokenization | Meta* |
` created:` date created on
` * updated:` comma separated list of dates
` * requires:` KIP number(s)
` * replaces:` KIP number(s)
` * superseded-by:` KIP number(s)
` * resolution:` an url pointing to the resolution of this KIP
Headers that permit lists must separate elements with commas.
Headers requiring dates will always do so in the format of ISO 8601 (yyyy-mm-dd).
author
header
The author
header optionally lists the names, email addresses or usernames of the authors/owners of the KIP. Those who prefer anonymity may use a username only, or a first name and a username. The format of the author header value must be:
Kaia A. User <address@kaia.io>
or
Kaia A. User (@username)
if the email address or GitHub username is included, and
Kaia A. User
if the email address is not given.
resolution
header
The resolution
header is required for Standards Track KIPs only. It contains a URL that should point to an email message or other web resource where the pronouncement about the KIP is made.
discussions-to
header
While a KIP is a draft, a discussions-to
header will indicate the mailing list or URL where the KIP is being discussed. As mentioned above, examples for places to discuss your KIP include an issue in this repo or in a fork of this repo.
No discussions-to
header is necessary if the KIP is being discussed privately with the author.
As a single exception, discussions-to
cannot point to GitHub pull requests.
type
header
The type
header specifies the type of KIP: Core, Ecosystem, Tokenization and Meta.
created
header
The created
header records the date that the KIP was assigned a number. Both headers should be in yyyy-mm-dd format, e.g. 2024-12-3.
updated
header
The updated
header records the date(s) when the KIP was updated with “substantial” changes. This header is only valid for KIPs of Draft and Active status.
requires
header
KIPs may have a requires
header, indicating the KIP numbers that this KIP depends on.
superseded-by
and replaces
headers
KIPs may also have a superseded-by
header indicating that a KIP has been rendered obsolete by a later document; the value is the number of the KIP that replaces the current document. The newer KIP must have a replaces
header containing the number of the KIP that it rendered obsolete.
Linking to other KIPs
References to other KIPs should follow the format KIP-N
where N is the KIP number you are referring to. Each KIP that is referenced in an KIP MUST be accompanied by a relative markdown link the first time it is referenced, and MAY be accompanied by a link on subsequent references. The link MUST always be done via relative paths so that the links work in this GitHub repository, forks of this repository, the main KIPs site, mirrors of the main KIP site, etc. For example, you would link to this KIP as ./kip-201.md
.
Auxiliary Files
KIPs may include auxiliary files such as diagrams. Such files must be named KIP-XXXX-Y.ext, where “XXXX” is the KIP number, “Y” is a serial number (starting at 1), and “ext” is replaced by the actual file extension (e.g. “png”).
Transferring KIP Ownership
It occasionally becomes necessary to transfer ownership of KIPs to a new champion. In general, we’d like to retain the original author as a co-author of the transferred KIP, but that’s really up to the original author. A good reason to transfer ownership is because the original author no longer has the time or interest in updating it or following through with the KIP process, or has fallen off the face of the ‘net (i.e. is unreachable or isn’t responding to email). A bad reason to transfer ownership is because you don’t agree with the direction of the KIP. We try to build consensus around a KIP, but if that’s not possible, you can always submit a competing KIP.
If you are interested in assuming ownership of a KIP, send a message asking to take over, addressed to both the original author and the KIP reviewer. If the original author doesn’t respond to email in a timely manner, the KIP reviewer will make a unilateral decision (it’s not like such decisions can’t be reversed :)).
KIP Roles
To encourage greater community participation with an effective KIP process framework as the foundation of open-source contribution to Kaia chain and ecosystem, we propose to have the following role structure:
- KIP Reviewer
- KIP Author
- Dev Team
KIP Reviewers
The current KIP reviewers are:
` * Aidan Kwon (@aidan-kwon)`
` * Ollie Jeong (@blukat29)`
` * Iron Cho (@ironcho)`
` * Jack Jin (@kjeom)`
` * Ashwani Modi (@modiashwani)`
` * Scott Lee (@scott-klaytn)`
` * Neo Yiu (@neoofkaia)`
KIP Reviewer Responsibilities
For each new KIP that comes in, a reviewer does the following:
- Read the KIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don’t seem likely to get to final status.
- The title should accurately describe the content.
- Check the KIP for language (spelling, grammar, sentence structure, etc.), markup (Github flavored Markdown), code style
If the KIP isn’t ready, the reviewer will send it back to the author for revision, with specific instructions.
Once the KIP is ready for the repository, the KIP reviewer will:
- Assign a KIP number (generally add “200” to the respective pull request number)
- Merge the corresponding pull request
- Send a message back to the KIP author with the next step
Many KIPs are written and maintained by developers with write access to the Kaia codebase. The KIP reviewers monitor KIP changes, and correct any structure, grammar, spelling, or markup mistakes identified.
KIP Author
KIP author is any community member of Kaia blockchain who can present a proposal and start the KIP process.
KIP Author Responsibilities
For each of the new KIPs that comes in, an author does the following:
- Articulating the proposed changes clearly and concisely starting from discussion threads on Kaia Dev Forum
- Explaining the expected effects of the proposed changes
- Encouraging community participation and engaging in discussions around the proposal
- Actively seeking feedback from other community members
- Checking alignment with the community and the strategic focuses of Kaia ecosystem
And any author of KIP is expected to:
- Draft, edit and refine the KIP using the provided template
- Follow the instructions provided in the GitHub/KIPs documentation
- Collect and incorporate feedback from the community and reviewers
- Document alternative opinions, the options considered and other discussed topics
- Champion the KIP through each stage of the KIP process
- Coordinate with Kaia’s Dev Team for a smooth KIP implementation, being included in protocol and ecosystem level
Dev Team
Dev Team refers to the Kaia’s core development team, ecosystem development team, contributors and any other active participants that are making updates, parameter changes, and upgrades to the Kaia protocol itself.
Dev Team Responsibilities
For each of the new KIPs that comes in, the dev team does the following:
- Reviewing KIP’s implementation plan
- Executing the implementation plan of approved KIPs
And any author of KIP is expected to:
- Assess the feasibility of the KIP’s implementation plan and provide feedback to the KIP Author
- Ensure correct execution of the implementation plan in a timely manner
- Communicate and explain any delays and other important decisions about the implementation with the KIP Author and community
KIP Numbers
When referring to KIP with any other category, it must be written in the hyphenated form KIP-X
where X is that KIP’s assigned number. A default KIP number would be starting with adding “200” to the respective pull request number.
History
This document was derived heavily from Ethereum’s EIP-1 written by Martin Becze, Hudson Jameson, et al, as the first version, later specified with the Kaia’s KIP framework and process for Kaia blockchain and ecosystem exclusively.
Ethereum’s EIP-1 was derived heavily from Bitcoin’s BIP-0001 written by Amir Taaki which in turn was derived from Python’s PEP-0001. In many places text was simply copied and modified.
The authors of the documents are not responsible for its use in the Kaia Improvement Proposal, and should not be bothered with technical questions specific to Kaia or the KIP. Please direct all comments to the KIP reviewers.
Copyright
Copyright and related rights waived via CC0.