最近有一项新的比特币改进提议(BIP)因其具有非常大的争议性而被社区广泛关注,它就是BIP 148
(隔离见证部署强制激活),其涉及到一种新的软分叉方式——UASF(用户激活软分叉)。根据这一提案的描述显示,如果现有的隔离见证部署在2017年8月1日之前无法激活,那么该BIP将在2017年8月1日至2017年11月15日午夜之间的一个时间点激活。但如果现有的隔离见证部署激活,那这个BIP将停止被激活。
对此,社区内就有人将其解读为:CORE已经放弃95%算力投票共识,将在8月1号无条件强制激活隔离验证。
这里就有一个误区,会有人把草案阶段的提案理解成CORE的共识,也就是Final(落地)阶段。
为了避免让大家产生不必要的误会,这里王司徒有必要科普一下BIP从提出到落地需要经历的步骤,以及当前究竟有哪些BIP。
想要提交BIP,首先应该把自己的想法或文件发布到邮件列表。在经过讨论之后,发起者需要通过电子邮件联系Luke Dashjr <[email protected]
>。经过Luke Dashjr的编辑和通过之后,BIP就会在 https://github.com/bitcoin/bips 发布了。
根据规则,任何人都是可以提交BIP的,注意,在https://github.com/bitcoin/bips 页面上发布一个BIP,并不代表它已被正式接受,当其状态变为激活(Active)时才算正式被接受。而想要让一个BIP正式激活,这需要经过开发者社区的协商同意。
而当前BIP的状态一共可分为9种,它们分别是Proposed
(提出)、Draft
(草案)、Active
(激活)、Final
(落地)、Replaced
(被替代)、Withdrawn
(撤掉)、Deferred
(推迟)、BIP number allocated
(BIP编号被分配)、Rejected
(拒绝)。
巴比特论坛版主玛雅则根据他自己的理解将这个过程分为了7步:
第1步:想法,任何一个人都可以通过任何途径渠道,如论坛,推特等等,提出自己改进初步想法,来争取更多人支持认同。
第2步:提案,可以汇总社区讨论的建议,以较规范的格式,详细地描述方案,形成一个BIP提案文件提交。
第3步:正式提案,对较重要或者认可的人较多的BIP提案分配序号。以便方便大家讨论区分这个提案,有序号的提案算是正式提案。
第4步:落实代码,一些开发者会依据BIP正式提案的构思,落实成具体的代码。并且在测试网络上进行严格的测试。以确保代码尽量没有Bug。
第5步:激活设定,代码没有问题后,根据《BIP9升级规范》,设定激活门槛,分配激活标记位,缓冲时间等。
第6步:发布版本,若足够多的人签名同意,那么会吸纳此BIP代码在最新版本中发布包含这个BIP代码的版本,但是处于未激活状态。
第7步:激活,等待达到BIP9设的激活门槛后,方案正式激活生效。实测是否方案成功。若出现问题可能回到上一版本。
而当前极具争议的BIP 148,目前只是处在草案阶段(Draft),并且根据多位开发者的反应,这一草案能够激活的可能性非常低。
附当前已落地(Final)应用的BIP列表:
BIP 支持软件版本 标题
9 v0.12.1 版本位超时与延迟(Version bits with timeout and delay)
作者:(Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell)
11 v0.6.0 M-of-N标准交易(M-of-N Standard Transactions)
作者:(Gavin Andresen)
13 v0.6.0 pay-to-script-hash 地址格式(Address Format for pay-to-script-hash)
作者:(Gavin Andresen)
14 v0.6.0 协议版本及用户代理(Protocol Version and User Agent)
作者:(Amir Taaki, Patrick Strateman)
16 v0.6.0 Pay To Script Hash
作者:(Gavin Andresen)
21 v0.6.0 URI计划(URI Scheme)
作者: (Nils Schneider, Matt Corallo)
22 v0.7.0 getblocktemplate
作者:(Luke Dashjr)
23 v0.10.0 getblocktemplate – Pooled Mining
作者:(Luke Dashjr)
30 v0.6.0 重复交易(Duplicate transactions)
作者:(Pieter Wuille)
31 v0.6.1 PONG消息(Pong message)
作者: (Mike Hearn)
34 v0.7.0 v2版区块,coinbase高度(Block v2, Height in coinbase)
作者: (Gavin Andresen)
35 v0.7.0 内存池消息(mempool message)
作者:(Jeff Garzik)
37 v0.8.0 布鲁姆过滤(Bloom filtering)
作者: (Mike Hearn, Matt Corallo)
42 v0.9.2 比特币有限货币供应(A finite monetary supply for Bitcoin)
作者: (Pieter Wuille)
61 v0.9.0 “拒绝”P2P消息(“reject” P2P message)
作者:(Gavin Andresen)
65 v0.10.4 OP_CHECKLOCKTIMEVERIFY
作者:(Peter Todd)
68 v0.12.1 使用共识执行序列号的相对锁定时间(Relative lock-time using consensus-enforced sequence numbers)
作者: (Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona)
66 v0.10.0 Strict DER签名(Strict DER signatures)
作者: (Pieter Wuille)
70 v0.9.0 支付协议(Payment protocol)
作者: (Gavin Andresen, Mike Hearn)
71 v0.9.0 支付协议MIME类型(Payment protocol MIME types)
作者: (Gavin Andresen)
72 v0.9.0 支付协议的URI扩展(URI extensions for Payment Protocol)
作者: (Gavin Andresen)
111 v0.12.0 节点_布鲁姆服务位(NODE_BLOOM service bit)
作者:(Matt Corallo, Peter Todd)
112 v0.12.1 OP_CHECKSEQUENCEVERIFY
作者:(BtcDrak, Mark Friedenbach, Eric Lombrozo)
113 v0.12.1 过去中位时间(Median Time Past)
作者:(Thomas Kerin, Mark Friedenbach)
125 v0.12.0 Opt-in Full 费用替代Opt-in Full Replace-by-Fee Signaling
作者:(David A. Harding, Peter Todd)
130 v0.12.0 Sendheaders消息(Sendheaders message)
作者: (Suhas Daftuar)
141 v0.13.0 隔离见证 (共识层)
作者: (Eric Lombrozo, Johnson Lau, Pieter Wuille)
143 v0.13.0 用于Version 0见证程序的交易签名验证(Transaction Signature Verification for Version 0 Witness Program)
作者: (Johnson Lau, Pieter Wuille)
144 v0.13.0 隔离见证(对等服务—— Peer Services)
作者:(Eric Lombrozo, Pieter Wuille)
145 v0.13.0 用于隔离见证的getblocktemplate更新 (getblocktemplate Updates for Segregated Witness)
作者: (Luke Dashjr)
147 v0.13.1 处理虚拟栈元素的可塑性 (Dealing with dummy stack element malleability)
作者:(Johnson Lau)
按开发者参与的BIP进入Final阶段次数从高到低进行排序,那么Top 5依次分别是 Gavin Andresen (8次)、Pieter Wuille(7次)、Peter Todd(4次)、Luke Dashjr(3次)以及Johnson Lau(3次)。
附当前所有BIP的列表:
BIP编号 | Layer | 标题 | 作者 | 类型 | 状态 |
1 | BIP Purpose and Guidelines | Amir Taaki | Process | Replaced | |
2 | BIP process, revised | Luke Dashjr | Process | Active | |
9 | Version bits with timeout and delay | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell | Informational | Final | |
10 | Applications | Multi-Sig Transaction Distribution | Alan Reiner | Informational | Withdrawn |
11 | Applications | M-of-N Standard Transactions | Gavin Andresen | Standard | Final |
12 | Consensus (soft fork) | OP_EVAL | Gavin Andresen | Standard | Withdrawn |
13 | Applications | Address Format for pay-to-script-hash | Gavin Andresen | Standard | Final |
14 | Peer Services | Protocol Version and User Agent | Amir Taaki, Patrick Strateman | Standard | Final |
15 | Applications | Aliases | Amir Taaki | Standard | Deferred |
16 | Consensus (soft fork) | Pay to Script Hash | Gavin Andresen | Standard | Final |
17 | Consensus (soft fork) | OP_CHECKHASHVERIFY (CHV) | Luke Dashjr | Standard | Withdrawn |
18 | Consensus (soft fork) | hashScriptCheck | Luke Dashjr | Standard | Proposed |
19 | Applications | M-of-N Standard Transactions (Low SigOp) | Luke Dashjr | Standard | Draft |
20 | Applications | URI Scheme | Luke Dashjr | Standard | Replaced |
21 | Applications | URI Scheme | Nils Schneider, Matt Corallo | Standard | Final |
22 | API/RPC | getblocktemplate – Fundamentals | Luke Dashjr | Standard | Final |
23 | API/RPC | getblocktemplate – Pooled Mining | Luke Dashjr | Standard | Final |
30 | Consensus (soft fork) | Duplicate transactions | Pieter Wuille | Standard | Final |
31 | Peer Services | Pong message | Mike Hearn | Standard | Final |
32 | Applications | Hierarchical Deterministic Wallets | Pieter Wuille | Informational | Final |
33 | Peer Services | Stratized Nodes | Amir Taaki | Standard | Draft |
34 | Consensus (soft fork) | Block v2, Height in Coinbase | Gavin Andresen | Standard | Final |
35 | Peer Services | mempool message | Jeff Garzik | Standard | Final |
36 | Peer Services | Custom Services | Stefan Thomas | Standard | Draft |
37 | Peer Services | Connection Bloom filtering | Mike Hearn, Matt Corallo | Standard | Final |
38 | Applications | Passphrase-protected private key | Mike Caldwell, Aaron Voisine | Standard | Draft |
39 | Applications | Mnemonic code for generating deterministic keys | Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe | Standard | Proposed |
40 | API/RPC | Stratum wire protocol | Marek Palatinus | Standard | BIP number allocated |
41 | API/RPC | Stratum mining protocol | Marek Palatinus | Standard | BIP number allocated |
42 | Consensus (soft fork) | A finite monetary supply for Bitcoin | Pieter Wuille | Standard | Draft |
43 | Applications | Purpose Field for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Informational | Draft |
44 | Applications | Multi-Account Hierarchy for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Standard | Proposed |
45 | Applications | Structure for Deterministic P2SH Multisignature Wallets | Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia | Standard | Proposed |
47 | Applications | Reusable Payment Codes for Hierarchical Deterministic Wallets | Justus Ranvier | Informational | Draft |
49 | Applications | Derivation scheme for P2WPKH-nested-in-P2SH based accounts | Daniel Weigl | Informational | Draft |
50 | March 2013 Chain Fork Post-Mortem | Gavin Andresen | Informational | Final | |
60 | Peer Services | Fixed Length “version” Message (Relay-Transactions Field) | Amir Taaki | Standard | Draft |
61 | Peer Services | Reject P2P message | Gavin Andresen | Standard | Final |
62 | Consensus (soft fork) | Dealing with malleability | Pieter Wuille | Standard | Withdrawn |
63 | Applications | Stealth Addresses | Peter Todd | Standard | BIP number allocated |
64 | Peer Services | getutxo message | Mike Hearn | Standard | Draft |
65 | Consensus (soft fork) | OP_CHECKLOCKTIMEVERIFY | Peter Todd | Standard | Final |
66 | Consensus (soft fork) | Strict DER signatures | Pieter Wuille | Standard | Final |
67 | Applications | Deterministic Pay-to-script-hash multi-signature addresses through public key sorting | Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries | Standard | Proposed |
68 | Consensus (soft fork) | Relative lock-time using consensus-enforced sequence numbers | Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona | Standard | Final |
69 | Applications | Lexicographical Indexing of Transaction Inputs and Outputs | Kristov Atlas | Informational | Proposed |
70 | Applications | Payment Protocol | Gavin Andresen, Mike Hearn | Standard | Final |
71 | Applications | Payment Protocol MIME types | Gavin Andresen | Standard | Final |
72 | Applications | bitcoin: uri extensions for Payment Protocol | Gavin Andresen | Standard | Final |
73 | Applications | Use “Accept” header for response type negotiation with Payment Request URLs | Stephen Pair | Standard | Final |
74 | Applications | Allow zero value OP_RETURN in Payment Protocol | Toby Padilla | Standard | Draft |
75 | Applications | Out of Band Address Exchange using Payment Protocol Encryption | Justin Newton, Matt David, Aaron Voisine, James MacWhyte | Standard | Draft |
80 | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational | Deferred | |
81 | Hierarchy for Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational | Deferred | |
83 | Applications | Dynamic Hierarchical Deterministic Key Trees | Eric Lombrozo | Standard | Draft |
90 | Consensus (hard fork) | Buried Deployments | Suhas Daftuar | Informational | Draft |
99 | Motivation and deployment of consensus rule changes ([soft/hard]forks) | Jorge Timón | Informational | Draft | |
101 | Consensus (hard fork) | Increase maximum block size | Gavin Andresen | Standard | Withdrawn |
102 | Consensus (hard fork) | Block size increase to 2MB | Jeff Garzik | Standard | Draft |
103 | Consensus (hard fork) | Block size following technological growth | Pieter Wuille | Standard | Draft |
104 | Consensus (hard fork) | ‘Block75′ – Max block size like difficulty | t.khan | Standard | Draft |
105 | Consensus (hard fork) | Consensus based block size retargeting algorithm | BtcDrak | Standard | Draft |
106 | Consensus (hard fork) | Dynamically Controlled Bitcoin Block Size Max Cap | Upal Chakraborty | Standard | Draft |
107 | Consensus (hard fork) | Dynamic limit on the block size | Washington Y. Sanchez | Standard | Draft |
109 | Consensus (hard fork) | Two million byte size limit with sigop and sighash limits | Gavin Andresen | Standard | Rejected |
111 | Peer Services | NODE_BLOOM service bit | Matt Corallo, Peter Todd | Standard | Proposed |
112 | Consensus (soft fork) | CHECKSEQUENCEVERIFY | BtcDrak, Mark Friedenbach, Eric Lombrozo | Standard | Final |
113 | Consensus (soft fork) | Median time-past as endpoint for lock-time calculations | Thomas Kerin, Mark Friedenbach | Standard | Final |
114 | Consensus (soft fork) | Merkelized Abstract Syntax Tree | Johnson Lau | Standard | Draft |
120 | Applications | Proof of Payment | Kalle Rosenbaum | Standard | Draft |
121 | Applications | Proof of Payment URI scheme | Kalle Rosenbaum | Standard | Draft |
122 | Applications | URI scheme for Blockchain references / exploration | Marco Pontello | Standard | Draft |
123 | BIP Classification | Eric Lombrozo | Process | Active | |
124 | Applications | Hierarchical Deterministic Script Templates | Eric Lombrozo, William Swanson | Informational | Draft |
125 | Applications | Opt-in Full Replace-by-Fee Signaling | David A. Harding, Peter Todd | Standard | Proposed |
126 | Best Practices for Heterogeneous Input Script Transactions | Kristov Atlas | Informational | Draft | |
130 | Peer Services | sendheaders message | Suhas Daftuar | Standard | Proposed |
131 | Consensus (hard fork) | “Coalescing Transaction” Specification (wildcard inputs) | Chris Priest | Standard | Draft |
132 | Committee-based BIP Acceptance Process | Andy Chase | Process | Withdrawn | |
133 | Peer Services | feefilter message | Alex Morcos | Standard | Draft |
134 | Consensus (hard fork) | Flexible Transactions | Tom Zander | Standard | Draft |
140 | Consensus (soft fork) | Normalized TXID | Christian Decker | Standard | Draft |
141 | Consensus (soft fork) | Segregated Witness (Consensus layer) | Eric Lombrozo, Johnson Lau, Pieter Wuille | Standard | Draft |
142 | Applications | Address Format for Segregated Witness | Johnson Lau | Standard | Deferred |
143 | Consensus (soft fork) | Transaction Signature Verification for Version 0 Witness Program | Johnson Lau, Pieter Wuille | Standard | Draft |
144 | Peer Services | Segregated Witness (Peer Services) | Eric Lombrozo, Pieter Wuille | Standard | Draft |
145 | API/RPC | getblocktemplate Updates for Segregated Witness | Luke Dashjr | Standard | Draft |
146 | Consensus (soft fork) | Dealing with signature encoding malleability | Johnson Lau, Pieter Wuille | Standard | Draft |
147 | Consensus (soft fork) | Dealing with dummy stack element malleability | Johnson Lau | Standard | Draft |
148 | Consensus (soft fork) | Mandatory activation of segwit deployment | Shaolin Fry | Standard | Draft |
150 | Peer Services | Peer Authentication | Jonas Schnelli | Standard | Draft |
151 | Peer Services | Peer-to-Peer Communication Encryption | Jonas Schnelli | Standard | Draft |
152 | Peer Services | Compact Block Relay | Matt Corallo | Standard | Draft |
171 | Applications | Currency/exchange rate information API | Luke Dashjr | Standard | Draft |
180 | Peer Services | Block size/weight fraud proof | Luke Dashjr | Standard | Draft |
199 | Applications | Hashed Time-Locked Contract transactions | Sean Bowe, Daira Hopwood | Standard | Draft |
有意思的是,在所有的BIP当中,唯一一个处于Rejected(拒绝)状态的BIP,就是Gavin Andresen提出的BIP109。
讲到这里,读者对BIP也应该有所了解了,关于BIP我们应该要理性对待,只有在进入Active
(激活)状态时,我们才认为它是被Core接受的。(本文纯科普,不代表个人立场)