1
0
mirror of https://github.com/bitcoinbook/bitcoinbook synced 2024-11-27 02:18:25 +00:00
bitcoinbook/selected BIPs/bip-0001.asciidoc

371 lines
16 KiB
Plaintext
Raw Normal View History

-----------------------------------
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.