- A+
关于比特币Core软件,很多人因扩容之争便片面地认为其开发是中心化的,而core开发者Jameson Lopp则想通过这篇文章来解释Bitcoin Core的运作方式,并澄清比特币是没有控制者的,文中还提到了很多不为人知的秘辛。
以下为全文译文:
关于谁有能力将代码更改写入Bitcoin Core库的问题,时常会被提起。这些年来,各方都把此视作比特币协议的“中心控制点”,但我认为,这个问题本身就是一个源于专制观点的红色鲱鱼谬误,这种模式并不适用于比特币。 对于外行人来说,其中的原因当然不是显而易见的,因此本文的目的就是解释Bitcoin Core的运作方式,以及更高层次上的,关于比特币协议的发展方式。
Bitcoin Core的历史
Bitcoin Core是比特币协议开发的焦点,它并不是命令和控制点。如果它因为任何原因而停止存在,那么一个新的焦点将会出现,它基于的技术通信平台(当前为GitHub存储库)是源于方便问题,而不是定义/项目完整性的问题。事实上,我们已看到比特币的开发曾发生过平台转移,甚至是名字的更改!
1. 在2009年初,比特币项目的源代码只是一个托管在SourceForge上的.rar文件。 早期开发人员实际上会通过电子邮件与中本聪交流代码补丁。
2. 2009年10月30日,Sirius(Martti Malmi)在SourceForge上为比特币项目创建了一个subversion存储库;
3. 2011年,比特币项目从SourceForge迁移到GitHub;
4. 2014年,比特币项目被更名为Bitcoin Core;
不信任任何人
虽然这个组织存在一些GitHub“维护者”帐户,它们能够将代码合并到主分支中,但这更像是一种清洁功能,而不是意味着权力地位。如果任何人都可以把代码合并到主分支当中,那么很快比特币代码库就会沦为“太多厨师涌入厨房”的场景。Bitcoin Core遵循的是最小特权原则,即如果被滥用,任何赋予个人的权力都很容易被颠覆。
从对抗的角度来看,GitHub是不可去信任的。任何数量的GitHub员工都可以使用他们的管理权限将代码注入比特币存储库,而无需维护人员的同意。但GitHub攻击者也不太可能破坏Bitcoin Core维护者的PGP密钥。
Bitcoin Core没有将代码的完整性建立在GitHub帐户之外,而是具有一个连续的集成系统,它执行对可信PGP密钥的检查,每个合并提交都必须要有签名。虽然这些密钥与已知身份相关联,但仍然不能安全地认为它总是如此,密钥可能会受到损害,除非原始密钥所有者通知其他维护者,否则我们就不会知道。因此,提交密钥也不能提供完美的安全性,它们只会使攻击者更难以注入任意代码。
比特币王国的钥匙
在撰写本文时,这些是值得信赖的PGP指纹:
1、71A3B167355025D447E8F274810B012346C9A6 2、
133EAC179436F14A5CF1B794860FEB804E669320 3、
32EE5C4C3FA15CCADB46ABE529D4B6416F53EC 5、
B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B 6、
CA03882CB1FC067B5D3ACFE4D300116E1C875A3D
这些密钥对应着以下这5个人:
1. Wladimir J. van der Laan <laanwj@protonmail.com>
2. Pieter Wuille <pieter.wuille@gmail.com>
3. Jonas Schnelli <dev@jonasschnelli.ch>
4. Marco Falke <marco.falke@tum.de>
5. Samuel Dobson <dobsonsa68@gmail.com>
这是否意味着我们相信这五个人?不完全是。密钥不是身份证明,这些密钥可能落入其他人的手中。如果运行verify-commits python脚本,你真正得到的保证是什么?
python3 contrib / verify-commits / verify-commits.py 使用来自bitcoin / contrib / verify-commits的verify-commits数据 所有Tree-SHA512s都匹配到 309bf16257b2395ce502017be627186b749ee749 有一条从“HEAD”到82bcf405f6db1d55b684a1f63a4aabad376cdad7的有效路径,其中所有提交都已签名!
verify-commits脚本是一个完整性检查,任何开发人员都可以在他们的机器上运行。执行后,它会在2015年12月提交82bcf405之后检查每次合并提交时的PGP签名,在编写时有超过3,400次合并。如果脚本成功完成,它告诉我们自那时以来已经更改的每一行代码,都已通过比特币核心开发过程并由具有维护者密钥“签字”。虽然这不是一个完美保证(即确保没有人能注入恶意代码(维护人员可能会出现流氓行为或者他们的密钥被盗)),但它会大大减少攻击面。至于维护者是干什么的,以及他们是如何实现这一角色的?我们稍后会深入研究。
分层安全性
Bitcoin Core代码的完整性不能仅仅依赖于少数几个密码密钥,这就是为什么存在很多其他检查的原因。这里有很多安全层来提供深度防御:
Pull请求安全性
1. 任何人都可以通过在bitcoin/bitcoin上打开针对主分支的pull请求,并自由地提出代码更改以改进软件。
2. 开发人员审核pull请求,以确保它们无害。任何人都可自由地审查pull请求并提供反馈。在为Bitcoin Core做出贡献时,是没有看门人或入学考试的。如果一个pull请求,它的确是有用的,并且对其没有合理的反对意见,那么维护者就会将其合并到core软件。
3. Core维护者设置此预push钩,以确保它们不会将未签名的提交推送到存储库中。
4. 可选择通过OpenTimestamps对合并提交安全地添加时间戳;
5. Travis Continuous Integration系统定期运行此脚本以检查git树(历史)完整性,并验证master分支中的所有提交是否都使用其中一个可信PGP密钥进行签名;
6.任何想要运行此脚本以验证所有合并提交PGP签名的人,都可以追溯到2015年12月。我在撰写本文时运行了它,而在我的笔记本电脑上,这个过程需要25分钟。
发布安全性
1. Gitian确定性构建系统是由多个开发人员独立运行的,其目标是创建相同的二进制文件。如果有人设法创建与其他开发人员的构建不匹配的构建,则表明 引入了非确定 性,因此最终版本不会发生。如果存在非确定性,开发人员会找出出错的地方,修复它,然后构建另一个候选版本。一旦确定性构建成功,那么开发人员就会对生成的二进制文件进行签名,从而保证二进制文件和工具链不被篡改且使用了相同的源。此方法删除了构建和分发过程中的单点故障,任何具有技术技能的人都可以运行自己的构建系统,说明在这里。
2. 一旦Gitian构建完成,并得到了构建者签署,一位 Bitcoin Core 的维护者将PGP签署一个消息,其中包含每个构建的SHA256哈希值。如果您决定运行预先构建的二进制文件,则可以在下载后检查其哈希值,然后使用哈希值验证签名版本消息的真实性。这样做的说明可以在这里找到。
3. 以上所有内容都是开源的,并且任何具有技能和愿望的人都可对其进行审核。
4. 最后,即使在完成上述所有质量和完整性检查之后,提交到Bitcoin Core并最终进入版本的代码也不会被任何中心化的组织部署到节点网络上。相反,每个节点操作员必须有意识地决定更新他们运行的代码。Bitcoin Core故意没有设置自动更新功能,因此用户可自行决定需要运行什么版本的代码。
尽管Bitcoin Core项目实施了以上所有技术安全措施,但它们并不是完美的,理论上它们中的任何一个都可能受到损害。Bitcoin Core代码完整性的最后一道防线与任何其他开源项目相同,即开发者需时刻保持警惕,审查Bitcoin Core代码的眼睛越多,恶意或有缺陷代码进入发布版客户端的可能性就越小。
代码覆盖率
Bitcoin Core有很多测试代码,有一个针对每个PR运行的集成测试套件,以及一个每天晚上在master上运行的扩展测试套件。
你可以通过以下方式自行检查测试的代码覆盖率:
1. 克隆Bitcoin Core GitHub存储库;
2. 安装从源构建所需的依赖项;
3. 运行这些命令;
4. 在./total_coverage/index.html查看报告;
或者,你可以在此处查看Marco Falke主持的覆盖报告。
具有如此高的测试覆盖率,意味着代码按照预期工作具有更高的确定性。
当涉及到共识关键软件时,测试是一件大事。而对于特别复杂的更改,开发人员有时会执行艰苦的突变测试,也就是说,他们通过故意破坏代码并查看测试是否如预期那样失败来进行测试。Greg Maxwell在讨论0.15发行版时对这个过程给出了一些见解:
“测试是针对软件的测试,那测试的测试又是什么呢?要进行测试的测试,你必须去破坏软件。” - Greg Maxwell
自由市场竞争
BitMEX写了一篇关于比特币实现生态系统的优秀文章。当前有十多种不同的比特币兼容实现,甚至还有更多的“竞争网络”实现。这是开源的自由,任何对Bitcoin Core项目不满意的人,都可以自由地运行自己的软件。他们可以从零开始,也可以选择去分叉 Core软件。
在编写本文时,96%的比特币节点是运行Bitcoin Core软件的。为什么会是这样?如果切换到另一个软件实现所需的工作量最小,那么Bitcoin Core如何在节点网络上拥有近乎垄断的地位?毕竟,很多其他实现提供了与Bitcoin Core兼容或至少高度相似的RPC API。
我相信这是Bitcoin Core成为发展重点的结果,它拥有数量级更多的开发人才和开发时间的支持,这意味着Bitcoin Core 项目的代码往往是最具性能、最安全的。在资金管理方面,节点运营商不想要运行次好的软件。此外,考虑到这是一种共识软件,并且比特币协议不具有正式的规范,所以使用焦点实现会更为安全(因为假设你运行的是其他版本的软件,对于网络的大多数节点而言,你的节点可能就是一个bug)。从这个意义上来讲,开发焦点的代码与现有的规范是最接近的。
谁是Core开发者?
不熟悉 Bitcoin Core 开发过程的人,可能会从外部查看项目,并将Core视为一个整体实体。情况远非如此!Core贡献者之间经常存在着分歧,甚至最多产的贡献者也编写了大量从未被合并到项目中的代码。如果你阅读了关于贡献的指导方针,你可能会注意到它们相当宽松,这个过程最好被描述为“粗略的共识”。
“维护人员将考虑补丁是否符合项目的一般原则;是否满足包含的最低标准;以及将判断贡献者的一般共识。”
那Bitcoin Core的维护者是谁呢?他们是那些通过在一段时间内提供高质量贡献,并且在项目中建立了足够社会资本的贡献者。当现有的维护人员组认为,某个贡献者表现出的能力、可靠性和动机足以胜任,他们可授予该贡献者GitHub帐户的提交访问权。而首席维护者的角色是负责监督项目的所有方面,并负责协调发布的人。这些年来,一共有三位首席维护者,他们分别是:
1. 中本聪(Satoshi Nakamoto) 2009.1.3 - 2011.2.23
2. 加文.安德烈斯(Gavin Andresen) 2011.2.23 - 2014.4.7
3. Wladimir van der Laan 2014.4.7 至今
充当Bitcoin Core维护者通常被称为看门人,因为维护者实际上没有权力做出违背贡献者或用户共识的决策。然而,由于整个生态系统的额外关注,这个角色担负的压力可能非常繁重。例如,Gregory Maxwell在2017年由于其个人原因放弃了他的维护者角色,这很可能是因为他在扩容争论中经历的公众压力。
Wladimir撰写了一篇的文章,讲述了作为Core维护者的压力,以及为什么应该删除Gavin的提交访问权限,这让很多人感到不安。
类似地,当Jeff Garzik的维护者权限也被删除时,他和其他人对此也感到了不适,但实际上Garzik已经有两年没有为 Core提供贡献了。给他的GitHub帐户保留core的维护权不会给项目带来任何好处,这只会造成安全风险,并且违反了Wladimir在他的帖子中提到的最低特权原则。
其他人可能看到Core所发生的一些事,便认为这是一个技术官僚主义组织或象牙塔,这使得新进入者很难加入。但如果你与贡献者交谈,你会发现情况并非如此。虽然在过去的几年当中,只有十几个人拥有提交访问权,但有数百名开发人员为比特币做出了贡献。我自己也做了一些小的贡献,当然我自认为自己不是一名“核心开发者”,但我的确是一名Core软件开发者。没有人能阻止你为比特币做贡献!
虽然Bitcoin Core 具有一些结构(它使用中心化的通信通道来协调),但是项目本身不受任何参与者的控制(甚至是那些升级了GitHub存储库特权的人)。即使维护者组织的政变在技术上可能劫持GitHub存储库,审查持不同意见的开发人员,甚至可能争抢“Bitcoin Core”的品牌,但其结果是Bitcoin Core将不再是开发的焦点。不同意维护人员操作的开发人员只需分叉代码,并将他们的工作转移到不同的存储库,那么Bitcoin Core维护者就没有管理特权。
即使没有发生“政变”,如果一个有争议的改变确实以某种方式进入了Core软件,一些开发人员会分叉软件,删除有争议的改变,并使其可用于用户。您可能会争辩说,这正是Amaury Sechet分叉Bitcoin Core然后删除隔离见证(SW)功能,并创建Bitcoin ABC所发生的事啊。或者,如果Core拒绝某些人想要的更改建议,开发人员可以分叉并添加这些更改。这种情况已经发生过很多次了,例如:
1. Mike Hearn 分叉了Core,并创建了Bitcoin XT;
2. Andrew Stone分叉了Core,并创建了Bitcoin Unlimited;
3. Jeff Garzik分叉了Core,并创建了BTC1;
分叉代码是很容易的,但转移比特币开发的焦点却是非常难的,你必须说服贡献者,让他们把时间花到不同的项目上去。
你也很难去说服很多不盲目遵循Bitcoin Core变化的用户,这可能是一种自我加强的信念,因为如果用户不通过保持对选项的了解来参与共识的过程,他们就会把部分权力让给开发人员。然而,在2017年的UASF(用户激活的软叉)运动中,用户的权力得到了行使。匿名比特币开发者shaolinfry提出了BIP 148,它将迫使矿工在8月1日附近诞生的区块激活隔离见证功能。然而,BIP 148被证明太具争议,因此不能被Bitcoin Core所采用,所以shaolinfry分叉了Core软件,并创建了 “Bitcoin UASF” 软件,这个软件实现获得了非凡的牵引力,并似乎产生了足够的压力,以说服矿工采用BIP 91(在BIP 148截止日期之前)激活分叉。
在我看来,最好的Bitcoin Core贡献者是那些实践极端所有权的人。案例分析:尽管John Newbery并没有编写包含这个特定共识bug的代码,但他却因自己没有仔细审查而感到自责。
我们都是中本聪。
为Bitcoin Core做贡献
尽管有很多资源可以帮助有抱负的开发人员,但最开始为Core做贡献时,会让人感到畏惧。此处可以找到贡献的指导方针:https://bitcoincore.org/en/faq/contributing-code/
当然,你可能也希望从 Jimmy Song的介绍入手。
Core开发者Eric Lombrozo还撰写了一篇关于理解在Core存储库中如何进行更改的文章:
https://medium.com/@elombrozo/the-bitcoin-core-merge-process-74687a09d81d
在撰写本文时,为了审计GitHub提交历史的完整性,我在我的机器上运行verify-commit.py脚本时遇到了困难,一个特定的示例可能有用。为了防止未来的开发人员不得不处理这些问题,我打开了一个pull请求来改进文档。从PR历史中可以看出,4个不同的开发人员就如何改进我的pull请求提出了建议。这包括使用不同的wiki标记,简化的bash命令,以及可以在verify-commit.py脚本中使用的新参数。我同意所有的建议都是有道理的,所以我把它们合并到我的代码中,并推送了一个更新版的 pull 请求。此时,参与审查的开发人员承认,他们发现PR是可以接受的,维护人员Marco Falke将其标记为包含在0.18版本中。几天过去了,开发人员没有异议,代码被维护人员Samuel Dobson合并到了Core软件当中。
谁在控制比特币?
正如我多年来广泛争论的那样,完全将比特币作为一个系统来理解几乎是不可能的。比特币的定义就像语言的定义。语言是自发产生的,关于词语意义的共识是有机的,而不是字典所决定的。就像字典描述语言现象而不是定义它一样,比特币实现也用代码描述比特币的语言。没有人被迫同意字典中给定单词的定义,也没有人通过运行比特币而被强制同意给定比特币实现中的代码。
语言不受民主支配,比特币也不受支配,虽然你可能听到人们引用矿工、节点、开发者或用户“投票”,但是没有机制可使任何形式的多数投票能够强迫少数反对者接受他们不同意的变更。比特币是没有统治者的,但其并非没有规则,其规则是由网络上的各个参与者定义和实施的。
虽然比特币协议本身的更改,通常是通过比特币改进提案流程进行的,但即使它是推荐的最佳做法,也不会强迫任何人遵循它。它只是一种更为正式的方式,试图通过同行评审和建立共识的过程来引导变革。
尽管这很难解释和理解,但如果存在一个单一的控制点,那么它也将是比特币反脆弱性的一个关键方面,它也将是一个单一的失败点,会被受比特币威胁的强大实体所利用。最终,每个节点运营商通过确保网络上没有其他人违反他们同意的规则来管理自己。这种安全模式是比特币自下而上治理的基础。
没有人控制比特币。
也没有人控制比特币开发的焦点。
最后,感谢John Newbery。
好消息 MT棋牌室正式上线!牛牛,斗地主,炸金花,捕鱼,等等应有尽有
GG国际厅 全新百万靓牌头奖上线! 中奖概率更高奖金更大~
蜗牛扑克业界首家 1个账号通玩多个扑克平台
蜗牛扑克官方网址:http://www.allnew366.com
蜗牛扑克50%高额返水注册网址:http://www.tianlongqipai.com
以上资讯由蜗牛扑克中文网整理提供!