[52]比特币的运营机构是谁?

作为一个稳定运行10年(2009-2019),市值超过1800亿美元的世界级金融系统,“比特币”正在逐步扩张其影响力。很难想象这一切是在没有任何实体机构负责运维的情况下完成的。

“中本聪”是比特币爱好者耳熟能详的比特币创始人,他最先以论文的形式将比特币的核心思想传播到一个加密邮件群,并很快推出了比特币的初始软件,当比特币网络正常运行之后,中本聪逐渐淡出大众视野。在那之后,比特币项目由开源社区领导,不断发展壮大。

在这种背景下,“比特币的运营机构是谁?”很难找到确切的答案。

从几个角度来回答这个问题。

比特币的创始人:中本聪
比特币的服务器运营机构:遍布全世界的志愿者。比特币的服务器是指运营了比特币core程序,能够提供比特币网络服务的节点。根据https://bitnodes.earn.com/网站的数据,目前全球的比特币节点是9729个(20190715),遍布在全球97个国家。这些志愿者之间没有明显的组织关系,只是运行了相同的比特币core程序,在互联网上构建了比特币系统的核心网络。
比特币的技术运营机构:比特币core核心开发团队。此团队负责比特币算法的升级和比特币core代码的更新。虽然称为开发团队,实际上由遍布世界各地的爱好者组成的松散群体。

关于比特币core核心开发团队,下面这篇文章介绍的比较清晰。
https://www.8btc.com/article/330348

以下内容是对这篇文章的摘要:

Bitcoin Core的历史
Bitcoin Core是比特币协议开发的焦点,它并不是命令和控制点。如果它因为任何原因而停止存在,那么一个新的焦点将会出现,它基于的技术通信平台(当前为GitHub存储库)是源于方便问题,而不是定义/项目完整性的问题。事实上,我们已看到比特币的开发曾发生过平台转移,甚至是名字的更改!
-在2009年初,比特币项目的源代码只是一个托管在SourceForge上的.rar文件。 早期开发人员实际上会通过电子邮件与中本聪交流代码补丁。
-2009年10月30日,Sirius(Martti Malmi)在SourceForge上为比特币项目创建了一个subversion存储库;
-2011年,比特币项目从SourceForge迁移到GitHub;
-2014年,比特币项目被更名为Bitcoin Core;

目前比特币项目的源代码托管在github平台,但是github平台并不能定义项目完整性。这句话的意思是,假如github平台被攻击,篡改了比特币项目的源代码,比特币社区有能力重建源代码,而不会受制于github平台。
如果有机会,希望能够找到网络上公开的比特币源码镜像网站。

不信任任何人
虽然这个组织存在一些GitHub“维护者”帐户,它们能够将代码合并到主分支中,但这更像是一种清洁功能,而不是意味着权力地位。如果任何人都可以把代码合并到主分支当中,那么很快比特币代码库就会沦为“太多厨师涌入厨房”的场景。Bitcoin Core遵循的是最小特权原则,即如果被滥用,任何赋予个人的权力都很容易被颠覆。
从对抗的角度来看,GitHub是不可去信任的。任何数量的GitHub员工都可以使用他们的管理权限将代码注入比特币存储库,而无需维护人员的同意。但GitHub攻击者也不太可能破坏Bitcoin Core维护者的PGP密钥。
Bitcoin Core没有将代码的完整性建立在GitHub帐户之外,而是具有一个连续的集成系统,它执行对可信PGP密钥的检查,每个合并提交都必须要有签名。虽然这些密钥与已知身份相关联,但仍然不能安全地认为它总是如此,密钥可能会受到损害,除非原始密钥所有者通知其他维护者,否则我们就不会知道。因此,提交密钥也不能提供完美的安全性,它们只会使攻击者更难以注入任意代码。

“不信任任何人”是一个可靠的开源项目必须遵守的原则。开源项目的可靠性建立在代码由社区共同决定,而不是由个别人随意篡改。
在实际运作时,为了避免提交者太多导致混乱,社区选择了一些人作为“维护者”负责代码合并。这些维护者是否合格,则由社区共同评判。(社区的评判来自twitter、邮件列表的沟通、争执)。本质上,大部分比特币的用户是不关心这些细节的,比特币社区的运作依然属于精英沟通的层面。但是,只要精英沟通的过程是公开的、理性的,社区的参与者就会对这种民主沟通产生信赖,并将这种信赖传递到更广泛的用户群体。

GitHub只是比特币项目的承载平台。比特币项目团队和github团队仅仅是用户和服务提供商的关系。从技术能力的角度,Github的员工能够篡改Github平台上存储的比特币代码,甚至可以关闭比特币项目(例如,美国政府出于监管目的,要求Github平台所属公司对平台上的比特币项目进行限制)。但是从商业运营的角度,Github团队没有必要对平台上的个别项目进行无意义的干涩。

Bitcoin core团队将项目部署在Github上,主要是为了利用Github平台实现简单、高效的代码管理,便于更多用户参与到比特币代码维护的社区。从易用性角度出发,Bitcoin core团队选择相信Github平台的商业信誉,认为在一般情况下,Github上存储的bitcoin core代码是安全的。
此外,Bitcoin core团队选择使用PGP密钥技术对每一次代码合并进行签名,从而保证非法用户(没有持有对应密钥的用户)无法伪造合并数据。PGP是一种能够进行加密、验证的密码解决方案。PGP通过采用非对称加密技术实现数字签名和认证,从而保证数据的真实性。简单来说,Bitcoin core团队的核心成员通过公开自己的公钥进行身份绑定,通过利用自己的私钥对代码合并进行签名提供可被验证的证据,其他用户利用核心成员的公钥验证签名的正确性,从而判定此次代码合并是合法的。基于非对称加密算法的安全性,任何通过签名验证的数据是无法被非法用户(没有对应私钥的用户)伪造的。这种基于PGP的方案,能够确保即使Github的员工篡改Github平台上的代码,比特币爱好者也可以利用PGP技术识别这种伪造活动,从而保证比特币代码的安全性。

比特币王国的钥匙
在撰写本文时,这些是值得信赖的PGP指纹:
1、71A3B167355025D447E8F274810B012346C9A6
2、133EAC179436F14A5CF1B794860FEB804E669320
3、32EE5C4C3FA15CCADB46ABE529D4B6416F53EC
4、B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B
5、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

这些是目前比特币core核心开发团队成员的公钥信息,使用这些公钥签名的数据可以被认为是合法的比特币代码。
希望能够找到这些信息的出处。

分层安全性
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作为一个开源项目,能够安全的运行。

谁是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拒绝某些人想要的更改建议,开发人员可以分叉并添加这些更改。这种情况已经发生过很多次了,例如:
-Mike Hearn 分叉了Core,并创建了Bitcoin XT;
-Andrew Stone分叉了Core,并创建了Bitcoin Unlimited;
-Jeff Garzik分叉了Core,并创建了BTC1;
分叉代码是很容易的,但转移比特币开发的焦点却是非常难的,你必须说服贡献者,让他们把时间花到不同的项目上去。

为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软件当中。

这一段用作者的亲身经历描述了如何参与比特币项目的更新维护工作。一个基本的流程是:
1、发现问题,并提出pull请求(github平台上一种提交更新的指令)。
2、等待其他人员的建议,并作出相应反馈。
3、提交新的pull请求。
4、维护人员根据审查结果,决定是否标记为新版本的内容。
5、等待社区检查,没有异议之后,维护人员将代码合并到core软件中。
6、其他用户下载的新版本中将包含此次修改。

谁在控制比特币?
正如我多年来广泛争论的那样,完全将比特币作为一个系统来理解几乎是不可能的。比特币的定义就像语言的定义。语言是自发产生的,关于词语意义的共识是有机的,而不是字典所决定的。就像字典描述语言现象而不是定义它一样,比特币实现也用代码描述比特币的语言。没有人被迫同意字典中给定单词的定义,也没有人通过运行比特币而被强制同意给定比特币实现中的代码。
语言不受民主支配,比特币也不受支配,虽然你可能听到人们引用矿工、节点、开发者或用户“投票”,但是没有机制可使任何形式的多数投票能够强迫少数反对者接受他们不同意的变更。比特币是没有统治者的,但其并非没有规则,其规则是由网络上的各个参与者定义和实施的。
虽然比特币协议本身的更改,通常是通过比特币改进提案流程进行的,但即使它是推荐的最佳做法,也不会强迫任何人遵循它。它只是一种更为正式的方式,试图通过同行评审和建立共识的过程来引导变革。
尽管这很难解释和理解,但如果存在一个单一的控制点,那么它也将是比特币反脆弱性的一个关键方面,它也将是一个单一的失败点,会被受比特币威胁的强大实体所利用。最终,每个节点运营商通过确保网络上没有其他人违反他们同意的规则来管理自己。这种安全模式是比特币自下而上治理的基础。
没有人控制比特币。
也没有人控制比特币开发的焦点。
最后,感谢John Newbery。

这里作者回答了一个大众关注的问题“谁在控制比特币?”
依靠比特币社区设定的各种机制,可以得出结论“
没有人控制比特币。
也没有人控制比特币开发的焦点。

但是没有机制可使任何形式的多数投票能够强迫少数反对者接受他们不同意的变更。
这句话的含义是,虽然比特币系统从底层链结构运行机制到上层代码更新机制都采用的是多数决策机制(根据社区的意见来决定核心问题),但是比特币系统不强迫少数人服从多数人的决定。少数人可以沿着自己选择的方向继续前进,例如比特币系统已经出现多次分叉,产生了BCH等多种衍生加密系统。虽然bitcoin core开发团队不赞成这些衍生项目,但是也无法消灭这些项目。最终一个加密系统是否能够被市场接受,仍然是靠社区的选择。

这篇文章比较详细的介绍了比特币的”运营机构“。比特币的运行机制具有比较典型的代表意义,其他加密货币系统虽然有各种微小改变,但是大体上参考了比特币的架构。