mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2024-11-09 17:09:52 +00:00
371 lines
16 KiB
Plaintext
371 lines
16 KiB
Plaintext
|
-----------------------------------
|
|||
|
BIP: 1
|
|||
|
Title: BIP Purpose and Guidelines
|
|||
|
Status: Accepted
|
|||
|
Type: Standards Track
|
|||
|
Created: 2011-08-19
|
|||
|
-----------------------------------
|
|||
|
|
|||
|
[[what-is-a-bip]]
|
|||
|
What is a BIP?
|
|||
|
~~~~~~~~~~~~~~
|
|||
|
|
|||
|
BIP stands for Bitcoin Improvement Proposal. A BIP is a design document
|
|||
|
providing information to the Bitcoin community, or describing a new
|
|||
|
feature for Bitcoin or its processes or environment. The BIP should
|
|||
|
provide a concise technical specification of the feature and a rationale
|
|||
|
for the feature.
|
|||
|
|
|||
|
We intend BIPs 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 Bitcoin. The BIP author is
|
|||
|
responsible for building consensus within the community and documenting
|
|||
|
dissenting opinions.
|
|||
|
|
|||
|
Because the BIPs are maintained as text files in a versioned repository,
|
|||
|
their revision history is the historical record of the feature proposal
|
|||
|
.
|
|||
|
|
|||
|
[[bip-types]]
|
|||
|
BIP Types
|
|||
|
~~~~~~~~~
|
|||
|
|
|||
|
There are three kinds of BIP:
|
|||
|
|
|||
|
* A Standards Track BIP describes any change that affects most or all
|
|||
|
Bitcoin 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 Bitcoin.
|
|||
|
* An Informational BIP describes a Bitcoin design issue, or provides
|
|||
|
general guidelines or information to the Bitcoin community, but does not
|
|||
|
propose a new feature. Informational BIPs do not necessarily represent a
|
|||
|
Bitcoin community consensus or recommendation, so users and implementors
|
|||
|
are free to ignore Informational BIPs or follow their advice.
|
|||
|
* A Process BIP describes a process surrounding Bitcoin, or proposes a
|
|||
|
change to (or an event in) a process. Process BIPs are like Standards
|
|||
|
Track BIPs but apply to areas other than the Bitcoin protocol itself.
|
|||
|
They may propose an implementation, but not to Bitcoin's codebase; they
|
|||
|
often require community consensus; unlike Informational BIPs, 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
|
|||
|
Bitcoin development. Any meta-BIP is also considered a Process BIP.
|
|||
|
|
|||
|
[[bip-work-flow]]
|
|||
|
BIP Work Flow
|
|||
|
~~~~~~~~~~~~~
|
|||
|
|
|||
|
The BIP editors assign BIP numbers and change their status. Please send
|
|||
|
all BIP-related email to the BIP editor, which is listed under
|
|||
|
link:#BIP_Editors[BIP Editors] below. Also see
|
|||
|
link:#BIP_Editor_Responsibilities__Workflow[BIP Editor Responsibilities
|
|||
|
& Workflow].
|
|||
|
|
|||
|
The BIP process begins with a new idea for Bitcoin. It is highly
|
|||
|
recommended that a single BIP contain a single key proposal or new idea.
|
|||
|
Small enhancements or patches often don't need a BIP and can be injected
|
|||
|
into the Bitcoin development work flow with a patch submission to the
|
|||
|
Bitcoin issue tracker. The more focused the BIP, the more successful it
|
|||
|
tends to be. The BIP editor reserves the right to reject BIP proposals
|
|||
|
if they appear too unfocused or too broad. If in doubt, split your BIP
|
|||
|
into several well-focused ones.
|
|||
|
|
|||
|
Each BIP must have a champion -- someone who writes the BIP using the
|
|||
|
style and format described below, shepherds the discussions in the
|
|||
|
appropriate forums, and attempts to build community consensus around the
|
|||
|
idea. The BIP champion (a.k.a. Author) should first attempt to ascertain
|
|||
|
whether the idea is BIP-able. Posting to the
|
|||
|
http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development[bitcoin-development@lists.sourceforge.net]
|
|||
|
mailing list (and maybe the
|
|||
|
https://bitcointalk.org/index.php?board=6.0[Development&Technical
|
|||
|
Discussion] forum) is the best way to go about this.
|
|||
|
|
|||
|
Vetting an idea publicly before going as far as writing a BIP is meant
|
|||
|
to save the potential author time. Many ideas have been brought forward
|
|||
|
for changing Bitcoin that have been rejected for various reasons. Asking
|
|||
|
the Bitcoin 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 Bitcoin is used.
|
|||
|
|
|||
|
Once the champion has asked the Bitcoin community as to whether an idea
|
|||
|
has any chance of acceptance, a draft BIP should be presented to
|
|||
|
http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development[bitcoin-development@lists.sourceforge.net].
|
|||
|
This gives the author a chance to flesh out the draft BIP to make
|
|||
|
properly formatted, of high quality, and to address initial concerns
|
|||
|
about the proposal.
|
|||
|
|
|||
|
Following a discussion, the proposal should be sent to the Bitcoin-dev
|
|||
|
list and the BIP editor with the draft BIP. This draft must be written
|
|||
|
in BIP style as described below, else it will be sent back without
|
|||
|
further regard until proper formatting rules are followed.
|
|||
|
|
|||
|
If the BIP editor approves, he will assign the BIP a number, label it as
|
|||
|
Standards Track, Informational, or Process, give it status "Draft", and
|
|||
|
add it to the git repository. The BIP editor will not unreasonably deny
|
|||
|
a BIP. Reasons for denying BIP status include duplication of effort,
|
|||
|
being technically unsound, not providing proper motivation or addressing
|
|||
|
backwards compatibility, or not in keeping with the Bitcoin philosophy.
|
|||
|
|
|||
|
The BIP author may update the Draft as necessary in the git repository.
|
|||
|
Updates to drafts may also be submitted by the author as pull requests.
|
|||
|
|
|||
|
Standards Track BIPs consist of two parts, a design document and a
|
|||
|
reference implementation. The BIP should be reviewed and accepted before
|
|||
|
a reference implementation is begun, unless a reference implementation
|
|||
|
will aid people in studying the BIP. Standards Track BIPs must include
|
|||
|
an implementation -- in the form of code, a patch, or a URL to same --
|
|||
|
before it can be considered Final.
|
|||
|
|
|||
|
BIP authors are responsible for collecting community feedback on a BIP
|
|||
|
before submitting it for review. However, wherever possible, long
|
|||
|
open-ended discussions on public mailing lists should be avoided.
|
|||
|
Strategies to keep the discussions efficient include: setting up a
|
|||
|
separate SIG mailing list for the topic, having the BIP author accept
|
|||
|
private comments in the early design phases, setting up a wiki page or
|
|||
|
git repository, etc. BIP authors should use their discretion here.
|
|||
|
|
|||
|
For a BIP 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.
|
|||
|
|
|||
|
Once a BIP has been accepted, the reference implementation must be
|
|||
|
completed. When the reference implementation is complete and accepted by
|
|||
|
the community, the status will be changed to "Final".
|
|||
|
|
|||
|
A BIP can also be assigned status "Deferred". The BIP author or editor
|
|||
|
can assign the BIP this status when no progress is being made on the
|
|||
|
BIP. Once a BIP is deferred, the BIP editor can re-assign it to draft
|
|||
|
status.
|
|||
|
|
|||
|
A BIP can also be "Rejected". Perhaps after all is said and done it was
|
|||
|
not a good idea. It is still important to have a record of this fact.
|
|||
|
|
|||
|
BIPs can also be superseded by a different BIP, rendering the original
|
|||
|
obsolete. This is intended for Informational BIPs, where version 2 of an
|
|||
|
API can replace version 1.
|
|||
|
|
|||
|
The possible paths of the status of BIPs are as follows:
|
|||
|
|
|||
|
Some Informational and Process BIPs may also have a status of "Active"
|
|||
|
if they are never meant to be completed. E.g. BIP 1 (this BIP).
|
|||
|
|
|||
|
[[what-belongs-in-a-successful-bip]]
|
|||
|
What belongs in a successful BIP?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Each BIP should have the following parts:
|
|||
|
|
|||
|
* Preamble -- RFC 822 style headers containing meta-data about the BIP,
|
|||
|
including the BIP number, a short descriptive title (limited to a
|
|||
|
maximum of 44 characters), the names, and optionally the contact info
|
|||
|
for each author, etc.
|
|||
|
|
|||
|
* Abstract -- a short (~200 word) description of the technical issue
|
|||
|
being addressed.
|
|||
|
|
|||
|
* Copyright/public domain -- Each BIP must either be explicitly labelled
|
|||
|
as placed in the public domain (see this BIP as an example) or licensed
|
|||
|
under the Open Publication License.
|
|||
|
|
|||
|
* 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 Bitcoin platforms (Satoshi, BitcoinJ, bitcoin-js,
|
|||
|
libbitcoin).
|
|||
|
|
|||
|
* Motivation -- The motivation is critical for BIPs that want to change
|
|||
|
the Bitcoin protocol. It should clearly explain why the existing
|
|||
|
protocol specification is inadequate to address the problem that the BIP
|
|||
|
solves. BIP submissions without sufficient motivation may be rejected
|
|||
|
outright.
|
|||
|
|
|||
|
* 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, e.g. how the feature is supported in other languages.
|
|||
|
|
|||
|
* The rationale should provide evidence of consensus within the
|
|||
|
community and discuss important objections or concerns raised during
|
|||
|
discussion.
|
|||
|
|
|||
|
* Backwards Compatibility -- All BIPs that introduce backwards
|
|||
|
incompatibilities must include a section describing these
|
|||
|
incompatibilities and their severity. The BIP must explain how the
|
|||
|
author proposes to deal with these incompatibilities. BIP submissions
|
|||
|
without a sufficient backwards compatibility treatise may be rejected
|
|||
|
outright.
|
|||
|
|
|||
|
* Reference Implementation -- The reference implementation must be
|
|||
|
completed before any BIP is given status "Final", but it need not be
|
|||
|
completed before the BIP is accepted. It is better to finish the
|
|||
|
specification and rationale first and reach consensus on it before
|
|||
|
writing code.
|
|||
|
|
|||
|
* The final implementation must include test code and documentation
|
|||
|
appropriate for the Bitcoin protocol.
|
|||
|
|
|||
|
[[bip-formats-and-templates]]
|
|||
|
BIP Formats and Templates
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
BIPs should be written in mediawiki or markdown format. Image files
|
|||
|
should be included in a subdirectory for that BIP.
|
|||
|
|
|||
|
[[bip-header-preamble]]
|
|||
|
BIP Header Preamble
|
|||
|
~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Each BIP 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.
|
|||
|
|
|||
|
-------------------------------------------------------------------
|
|||
|
BIP: <BIP number>
|
|||
|
Title: <BIP title>
|
|||
|
Author: <list of authors' real names and optionally, email addrs>
|
|||
|
* Discussions-To: <email address>
|
|||
|
Status: <Draft | Active | Accepted | Deferred | Rejected |
|
|||
|
Withdrawn | Final | Superseded>
|
|||
|
Type: <Standards Track | Informational | Process>
|
|||
|
Created: <date created on, in ISO 8601 (yyyy-mm-dd) format>
|
|||
|
* Post-History: <dates of postings to bitcoin mailing list>
|
|||
|
* Replaces: <BIP number>
|
|||
|
* Superseded-By: <BIP number>
|
|||
|
* Resolution: <url>
|
|||
|
-------------------------------------------------------------------
|
|||
|
|
|||
|
The Author header lists the names, and optionally the email addresses of
|
|||
|
all the authors/owners of the BIP. The format of the Author header value
|
|||
|
must be
|
|||
|
|
|||
|
` Random J. User `
|
|||
|
|
|||
|
if the email address is included, and just
|
|||
|
|
|||
|
` Random J. User`
|
|||
|
|
|||
|
if the address is not given.
|
|||
|
|
|||
|
If there are multiple authors, each should be on a separate line
|
|||
|
following RFC 2822 continuation line conventions.
|
|||
|
|
|||
|
Note: The Resolution header is required for Standards Track BIPs only.
|
|||
|
It contains a URL that should point to an email message or other web
|
|||
|
resource where the pronouncement about the BIP is made.
|
|||
|
|
|||
|
While a BIP is in private discussions (usually during the initial Draft
|
|||
|
phase), a Discussions-To header will indicate the mailing list or URL
|
|||
|
where the BIP is being discussed. No Discussions-To header is necessary
|
|||
|
if the BIP is being discussed privately with the author, or on the
|
|||
|
bitcoin email mailing lists.
|
|||
|
|
|||
|
The Type header specifies the type of BIP: Standards Track,
|
|||
|
Informational, or Process.
|
|||
|
|
|||
|
The Created header records the date that the BIP was assigned a number,
|
|||
|
while Post-History is used to record the dates of when new versions of
|
|||
|
the BIP are posted to bitcoin mailing lists. Both headers should be in
|
|||
|
yyyy-mm-dd format, e.g. 2001-08-14.
|
|||
|
|
|||
|
BIPs may have a Requires header, indicating the BIP numbers that this
|
|||
|
BIP depends on.
|
|||
|
|
|||
|
BIPs may also have a Superseded-By header indicating that a BIP has been
|
|||
|
rendered obsolete by a later document; the value is the number of the
|
|||
|
BIP that replaces the current document. The newer BIP must have a
|
|||
|
Replaces header containing the number of the BIP that it rendered
|
|||
|
obsolete. Auxiliary Files
|
|||
|
|
|||
|
BIPs may include auxiliary files such as diagrams. Such files must be
|
|||
|
named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial
|
|||
|
number (starting at 1), and "ext" is replaced by the actual file
|
|||
|
extension (e.g. "png").
|
|||
|
|
|||
|
[[transferring-bip-ownership]]
|
|||
|
Transferring BIP Ownership
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
It occasionally becomes necessary to transfer ownership of BIPs to a new
|
|||
|
champion. In general, we'd like to retain the original author as a
|
|||
|
co-author of the transferred BIP, 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 BIP 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
|
|||
|
BIP. We try to build consensus around a BIP, but if that's not possible,
|
|||
|
you can always submit a competing BIP.
|
|||
|
|
|||
|
If you are interested in assuming ownership of a BIP, send a message
|
|||
|
asking to take over, addressed to both the original author and the BIP
|
|||
|
editor. If the original author doesn't respond to email in a timely
|
|||
|
manner, the BIP editor will make a unilateral decision (it's not like
|
|||
|
such decisions can't be reversed :).
|
|||
|
|
|||
|
[[bip-editors]]
|
|||
|
BIP Editors
|
|||
|
~~~~~~~~~~~
|
|||
|
|
|||
|
The current BIP editor is Gregory Maxwell who can be contacted at
|
|||
|
gmaxwell@gmail.com.
|
|||
|
|
|||
|
[[bip-editor-responsibilities-workflow]]
|
|||
|
BIP Editor Responsibilities & Workflow
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
A BIP editor must subscribe to the Bitcoin development mailing list. All
|
|||
|
BIP-related correspondence should be sent (or CC'd) to
|
|||
|
gmaxwell@gmail.com.
|
|||
|
|
|||
|
For each new BIP that comes in an editor does the following:
|
|||
|
|
|||
|
* Read the BIP 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.
|
|||
|
* The title should accurately describe the content.
|
|||
|
* Edit the BIP for language (spelling, grammar, sentence structure,
|
|||
|
etc.), markup (for reST BIPs), code style (examples should match BIP 8 &
|
|||
|
7).
|
|||
|
|
|||
|
If the BIP isn't ready, the editor will send it back to the author for
|
|||
|
revision, with specific instructions.
|
|||
|
|
|||
|
Once the BIP is ready for the repository, the BIP editor will:
|
|||
|
|
|||
|
* Assign a BIP number (almost always just the next available number, but
|
|||
|
sometimes it's a special/joke number, like 666 or 3141).
|
|||
|
|
|||
|
* Add the BIP to the https://github.com/bitcoin/bips[bitcoin/bips]
|
|||
|
repository on GitHub.
|
|||
|
|
|||
|
* List the BIP in README.mediawiki
|
|||
|
|
|||
|
* Send email back to the BIP author with next steps (post to bitcoin
|
|||
|
mailing list).
|
|||
|
|
|||
|
Many BIPs are written and maintained by developers with write access to
|
|||
|
the Bitcoin codebase. The BIP editors monitor BIP changes, and correct
|
|||
|
any structure, grammar, spelling, or markup mistakes we see.
|
|||
|
|
|||
|
The editors don't pass judgement on BIPs. We merely do the
|
|||
|
administrative & editorial part. Except for times like this, there's
|
|||
|
relatively low volume.
|
|||
|
|
|||
|
[[history]]
|
|||
|
History
|
|||
|
~~~~~~~
|
|||
|
|
|||
|
This document was derived heavily from Python's PEP-0001. In many places
|
|||
|
text was simply copied and modified. Although the PEP-0001 text was
|
|||
|
written by Barry Warsaw, Jeremy Hylton, and David Goodger, they are not
|
|||
|
responsible for its use in the Bitcoin Improvement Process, and should
|
|||
|
not be bothered with technical questions specific to Bitcoin or the BIP
|
|||
|
process. Please direct all comments to the BIP editors or the Bitcoin
|
|||
|
development mailing list.
|