LIP: 0001
Title: LIP purpose and guidelines
Author: Lisk Foundation <[email protected]>
Status: Active
Type: Process
Created: 2018-06-14
Updated: 2021-03-03
A Lisk Improvement Proposal (LIP) is a design document providing information to the Lisk community, or describing a new feature for Lisk or its processes or environment. The LIP should provide a concise technical specification of the feature and a rationale for the feature.
We intend LIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Lisk. The LIP author is responsible for building consensus within the community and documenting dissenting opinions.
Because the LIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal.
The LIP process begins with a new idea for Lisk. Each potential LIP must have a champion—someone who writes the LIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The LIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is LIP-able.
Small enhancements or patches to a particular piece of software often don't require standardisation between multiple projects; these don't need a LIP and should be injected into the relevant project-specific development workflow with a patch submission to the applicable issue tracker. Additionally, many ideas have been brought forward for changing Lisk that have been rejected for various reasons. The first step should be to search past discussions to see if an idea has been considered before, and if so, what issues arose in its progression. After investigating past work, the best way to proceed is by posting about the new idea on Lisk Research.
Vetting an idea publicly before going as far as writing a LIP is meant to save both the potential author and the wider community time. Asking the Lisk community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick). It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Lisk is used.
Once the champion has asked the Lisk community as to whether an idea has any chance of acceptance, a draft LIP should be presented on Lisk Research. This gives the author a chance to flesh out the draft LIP to make it properly formatted, of high quality, and to address additional concerns about the proposal. Following a discussion, the proposal should be submitted to the LIPs git repository as a pull request. This draft must be written in LIP style as described below, and named with an alias such as "lip-johndoe-infinitelisks" until the editor has assigned it a LIP number (authors MUST NOT self-assign LIP numbers).
LIP authors are responsible for collecting community feedback on both the initial idea and the LIP before submitting it for review.
It is highly recommended that a single LIP contain a single key proposal or new idea. The more focused the LIP, the more successful it tends to be. If in doubt, split your LIP into several well-focused ones.
When the LIP draft is complete, the LIP editor will assign the LIP a number, label it as Standards Track, Informational, or Process, and merge the pull request to the LIPs git repository. The LIP editor will not unreasonably reject a LIP. Reasons for rejecting LIPs include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Lisk philosophy. For a LIP 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 be solid and must not complicate the protocol unduly.
The LIP author may update the draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests. In particular, unless there is a specific dependency on another LIP, LIPs should be written without assuming the success of any other outstanding LIP. Therefore updates to certain LIPs may be required in the event that another LIP progresses to Final or Active status.
It occasionally becomes necessary to transfer ownership of LIPs to a new champion. In general, we'd like to retain the original author as a co-author of the transferred LIP, 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 LIP process, or has fallen off the face of the 'net (i.e. is unreachable or not responding to email). A bad reason to transfer ownership is because you don't agree with the direction of the LIP. We try to build consensus around a LIP, but if that's not possible, you can always submit a competing LIP.
If you are interested in assuming ownership of a LIP, send a message asking to take over, addressed to both the original author and the LIP editor. If the original author doesn't respond to email in a timely manner, the LIP editor will make a unilateral decision (it's not like such decisions can't be reversed :).
The current LIP editor is the Lisk Foundation, who can be contacted at [email protected].
For each new LIP submitted as a "pull request" to the LIPs git repository an editor does the following:
- Reads the LIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted.
- Edits the LIP for language (spelling, grammar, sentence structure, etc.), as well as markup and code style.
- Checks the LIP title accurately describes the content.
- Checks the LIP draft has been published on Lisk Research for discussion.
- Checks the motivation and backward compatibility (when applicable) has been addressed.
- Checks the licensing terms are acceptable for a LIP.
If the LIP isn't ready, the editor will request changes from the author with specific instructions.
If the LIP is ready, the editor will:
-
Assign a LIP number in the pull request.
-
Merge the pull request when it is ready.
-
List the LIP in the README.
The LIP editors are intended to fulfil administrative and editorial responsibilities. The LIP editors monitor LIP changes, and update LIP headers as appropriate.
LIPs should be written in Markdown format. A template LIP is provided here as the basis for all new proposals. As necessary, code examples may be used. These should be written in JavaScript or simple pseudocode depending on the needs of the particular situation.
Each LIP should have the following parts:
-
Preamble—Headers containing metadata about the LIP.
-
Abstract—A short (~200 word) description of the technical issue being addressed.
-
Copyright—Each LIP must be licensed under the Creative Commons Zero 1.0 Universal.
-
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 Lisk platforms. In the special case where the choice of a library is critical (e.g. security), a recommendation about libraries and reasoning should be included.
-
Motivation—The motivation is critical for LIPs that want to change the Lisk protocol. It should clearly explain why the existing protocol is inadequate to address the problem that the LIP solves.
-
Rationale—The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternative 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.
-
Backwards compatibility—All LIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The LIP must explain how the author proposes to deal with these incompatibilities.
-
Reference implementation—The reference implementation must be completed before any LIP is given status "Final", but it need not be completed before the LIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. As long as the reference implementation is not finished, the reference implementation section can simply state “TBD”. Once the reference implementation has been completed, the corresponding pull request, issue or a milestone should be linked from the reference implementation section.
Each LIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "?" are optional and are described below. All other headers are required.
LIP: <LIP number>
Title: <LIP title>
Author: <List of authors' real names including email address>
? Discussions-To: <Link to discussion in Lisk Research>
? Comments-Summary: <Summary tone>
? Comments-URI: <Link(s) to wiki page for comments>
? Status: <Draft | Active | Proposed | Deferred | Rejected | Withdrawn | Final | Replaced | Obsolete>
Type: <Standards Track | Informational | Process>
Created: <YYYY-MM-DD>
Updated: <YYYY-MM-DD>
? Requires: <LIP number(s)>
? Replaces: <LIP number>
? Superseded-By: <LIP number>
The LIP header contains the unique identifier of the LIP. Assigned by the LIP editor.
The Title header gives a brief and precise description of the proposal. An example of a good title is “Change to byte based block size limit”. Generic titles such as “Improve P2P Layer” should be avoided as there could be multiple improvements of this aspect of the protocol in the future and it is unclear which specific aspect of the protocol the proposal suggests changing. Note that once a pull request is opened on GitHub, the LIP editor will also confirm that the title of a LIP satisfies these guidelines and adjust it at his/her discretion.
The Author header lists the names, and optionally the email addresses of all the authors/owners of the LIP. The format of the Author header value must be Random J. User <[email protected]>
If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions.
The Discussions-To header contains a link to the discussion of the LIP on Lisk Research.
The Comments-Summary header gives a summary tone of the comments the LIP has received from the community. (See the Specification section for LIP Comments below for possible summary tones.)
The Comments-URI contains one or more links to a wiki page where comments on the LIP have been made.
The Status header indicates the current state of the LIP. Assigned by the LIP editor.
The Type header specifies the type of LIP: Standards Track, Informational, or Process.
The Created header records the date that the LIP was assigned a number, while the Updated header is used to record the date of the last modification. Both headers should be in YYYY-MM-DD format, e.g. 2001-08-14.
LIPs may have a Requires header, indicating the LIP numbers that this LIP depends on.
LIPs may have a Replaces header, indicating the LIP number that this LIP renders obsolete.
LIPs may also have a Superseded-By header indicating that a LIP has been rendered obsolete by a later document; the value is the number of the LIP that replaces the current document. The newer LIP must have a Replaces header containing the number of the LIP that it rendered obsolete.
LIPs may include auxiliary files such as diagrams. Image files should be included in a subdirectory for that LIP. Auxiliary files must be named LIP-XXXX-Y.ext, where "XXXX" is the LIP champion's name, or the LIP's number (once it has been assigned), "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png").
There are three kinds of LIP:
- A Standards Track LIP describes any change that affects most or all Lisk implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Lisk. Standards Track LIPs consist of two parts, a design document and a reference implementation.
- An Informational LIP describes a Lisk design issue, or provides general guidelines or information to the Lisk community, but does not propose a new feature. Informational LIPs do not necessarily represent a Lisk community consensus or recommendation, so users and implementors are free to ignore Informational LIPs or follow their advice. Information LIPs are typically concerned with decisions specific to an implementation.
- A Process LIP describes a process surrounding Lisk, or proposes a change to (or an event in) a process. Process LIPs are like Standards Track LIPs but apply to areas other than the Lisk protocol itself. They may propose an implementation, but not to Lisk's codebase; they often require community consensus; unlike Informational LIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Lisk development. Any meta-LIP is also considered a Process LIP.
The typical paths of the status of LIPs are as follows:
Champions of a LIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. The LIP editor may also change the status to Deferred when no progress is being made on the LIP.
A LIP may only change status from Draft (or Rejected) to Proposed, when the author deems it is complete and has a working implementation (where applicable). The implementation may be provided by any party, including the LIP champion. The Lisk Foundation may also instruct a third party to implement the proposal. The Lisk Foundation takes such a decision based on technical and scientific arguments (e.g., provided on Lisk Research), feasibility and in accordance with the objectives of the Lisk Foundation.
Anyone, including the LIP champion and the Lisk Foundation, can propose the network to adopt an implementation of a LIP. If some nodes adopt this implementation, it may result in a fork of the network depending on the nature of the implied changes. In the case of such a fork, the Lisk Foundation will announce which chain they consider to be the Lisk blockchain. All other chains will be treated as forks of the Lisk blockchain. A LIP that results in a fork progresses to Final once the Lisk Foundation declared the resulting chain to be the Lisk blockchain. The Lisk Foundation is making this decision based on several factors, including the acceptance of nodes, delegates and exchanges.
A LIP of type Process does not imply any implementation that needs to be adopted by the nodes. Therefore, the requirement for changing the status to Final is different: A LIP of type Process may change status from Draft to Final when has been open to discussion on Lisk Research for at least one month, and no person maintains any unaddressed substantiated objections to it.
LIPs should be changed from Draft or Proposed status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a LIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Proposed status if it meets the criteria required as described in the previous paragraph.
When a Final LIP is no longer relevant, its status should be changed to Replaced. This change must also be objectively verifiable and/or discussed.
Each LIP may, in its preamble, link to a public wiki page with a summary tone of the comments on that page (see below for possible summary tones). Reviewers of the LIP who consider themselves qualified, can post their own comments on this wiki page. The comments page should generally only be used to post final comments for a completed LIP. If a LIP is not yet completed, reviewers should instead post on the applicable discussion on Lisk Research to allow the LIP author(s) to address any concerns or problems pointed out by the review.
Pages must be named after the full LIP number (e.g., "LIP 0001") and placed in the "Comments" namespace. For example, the link for LIP 1 would be https://github.com/LiskHQ/lips/wiki/Comments:LIP-0001.
Comments posted to this wiki should use the following format:
<Your opinion> —<Your name>, <Date of posting, as YYYY-MM-DD>
LIPs may also choose to list a second forum for LIP comments, in addition to the LIPs wiki. In this case, the second forum's URI should be listed below the primary wiki's URI.
After some time, the LIP itself may be updated with a summary tone of the comments. Summary tones may be chosen from the following, but this LIP does not intend to cover all possible nuances and other summaries may be used as needed:
- No comments yet
- Unanimously Recommended for implementation
- Unanimously Discouraged for implementation
- Mostly Recommended for implementation, with some Discouragement
- Mostly Discouraged for implementation, with some Recommendation
For example, the preamble to LIP 0001 might be updated to include the line:
Comments-Summary: No comments yet.
Comments-URI: https://github.com/LiskHQ/lips/wiki/Comments:LIP-0001
https://some-other-wiki.org/LIP_0001_Comments
To avoid doubt: comments and status are unrelated metrics to judge a LIP, and neither should directly influence the other.
What is the purpose of LIP comments?
- There is a danger that some people will regard LIPs as a "good idea" simply by virtue of them being assigned a LIP number. Due to the low barrier of entry for submission of new LIPs, it seems advisable for a way for reviewers to express their opinions on them in a way that is consumable to the public without needing to review the entire development discussion.
Will LIP comments be censored or limited to particular participants/"experts"?
- Participants should freely refrain from commenting outside of their area of knowledge or expertise. However, comments should not be censored, and participation should be open to the public.
This document was derived heavily from Bitcoin's BIP-0001 and BIP-0002. In many places text was simply copied and modified to fit the purposes of the Lisk project.[1]
[1] BIP-0002 is licensed under BSD-2-Clause and OPL. In this respect, the BIP-0002 states the following: “...anyone may modify and redistribute the text provided they comply with the terms of either license. In other words, the license list is an "OR choice", not an "AND also" requirement.” Even though we assume that it is not necessary for our LIP-0001 to state, we would like to present the BSD-2-Clause-License used for BIP-0002 in accordance with https://opensource.org/licenses/BSD-2-Clause as followed:
Copyright, Title: BIP process, revised, Author: Luke Dashjr [email protected], Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0002, Created: 2016-02-03, License: BSD-2-Clause and OPL
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.