http://www.7klian.com

P2SH之争:比特币鲜为人知的第一次软件战争

“把日期往后推两个月,OP_EVAL还没有准备好。”这是Gavin Andresen竭力想避免的意见,随着Russell O’Connor通过键盘打出一段指责语后,长达数月之久的比特币升级努力(在比特币创始人中本聪退出后),在实施前突然陷入停滞。

正如O’Connor所揭示的那样,这个提议的命令(被Andresen称为通向更安全的比特币钱包的“最快路径”),可被用来创建恶意交易,其将软件发送到无限的计算循环中,以对其进行验证。简而言之,OP_EVAL可能会被滥用,破坏比特币节点,进而破坏比特币网络。

O'Connor写道:“我花了整整70分钟,才找到这个漏洞。你们需要停止现在的行为,并真正理解比特币。”这是比特币项目的新带头人Andresen第一次严重受挫,他很快就提出申辩。在他看来,放弃OP_EVAL不仅浪费了数月的编码和审查工作,还会让用户没有工具去防范木马和病毒,进而掠夺他们的数字钱包。

这正是OP_EVAL吸引力的核心所在 —— 简单的多签名钱包将允许用户恢复比特币,即使其备份丢失;可以构建服务来发送类似银行的警报,以阻止欺诈和盗窃,而且更好的是,这一切都可以通过行为类似于用户所了解和理解的交易来实现的。

但是,对于那些看到这一升级所带来的潜在负面影响的人来说,O’Connor的警告之言足够了。

开发者Alan Reiner写道:“我想提醒大家,我们正在搞乱一个价值2000万美元以上的项目,这不仅仅是一个软件问题,任何进展都需要像钻石一样坚硬。”OP_EVAL的失败将产生更大的影响,的确,中本聪推出了世界上第一个去中心化的数字货币,但它的承诺远未实现。在2011年末,很少有人能理解它的代码,而拥有保护它的技能的人显然更少。

这些开发人员应如何组织?他们对用户负有什么责任?当不清楚谁(如果有的话)应该拥有最终决定权时,他们将如何制定变更?

在比特币软件的第一场大战中,这些问题很快就被推到最前面。

bitcoin-magazine-1stwar

非正统的继承

自由和开源项目通常是由创始人领导,而创始人又必须使他们的工作与贡献者保持一致。尽管如此,在出现方向性纠纷的时候,创始人仍拥有着自然的权力,可以担任其创作的决策者。

在早期,比特币也不例外。在比特币存在的头两年里,中本聪扮演着首席开发者和仁慈独裁者的角色。作为比特币无可争议的带头人,中本聪制定了多达8项协议更改,而没有涉及更广泛的讨论[1]。再后来,中本聪就逐渐退出了比特币项目的维护。

到了2010年底,中本聪删除了他在Bitcoin.org网站上留下的笔名,并让资深3D图形开发人员Gavin Andresen宣称他是比特币项目“事实上的领导者”[2]。

围绕这次过渡的情况很不寻常,包括简短的公共消息,私下传递职责以及密钥交换。

不过,当时这对于规模虽小,但不断在增长的比特币编码人员来说,这几乎没有什么困难。大多数人都在担心关键问题,而Andresen,一位终身教授的配偶,有时间和热情来领导这项工作[3]。

事实上,当时有许多迫切的需求(更快的同步,更好的测试等),但“钱包被盗报告”的增加以及盗窃造成的不良影响,很快成了一个首要问题。

曾有一段时间,比特币的新贡献者似乎都同意这个目标[4]。

最基本的多重签名

幸运的是,中本聪提供了解决方案的蓝图,正如Andresen所了解到的,比特币的代码已允许用户创建安全的交易,这些交易只有在使用多个私钥签名时才能使用[5]。

有了多重签名(multisig),私钥可以存储在多个设备上,或者存储在世界的另一端,或者在用户和钱包服务之间共享,这意味着黑客将不得不攻击多个目标才能盗取比特币。

Andresen被这个想法迷住了,他成为了该想法的第一个拥护者,在开发者邮件列表上,Andresen写下了一封慷慨激昂的呼吁书,鼓励贡献者采取行动。

他写道:“我最担心的是,我们会说,‘当然,我们只需要几天时间就可以就如何做好这件事达成共识’,六个月后共识仍然没有达成,人们的钱包(将)继续丢失或被盗。”担心并非没有重担,正如中本聪所实施的,多重签名具有明显的缺点。其中最紧迫的是交易与比特币的标准地址格式不兼容,这需要更长的地址。

因此,多重签名交易更大,费用也要更高。更重要的是,这些费用不是由使用多重签名钱包接收比特币的人支付的,而是由向他们发送比特币的人支付的。

由于这些属性,多重签名交易在软件中被指定为“非标准”交易,这意味着它们不一定会广播到网络上的节点。如果一个节点接收到一笔多重签名交易,它将直接忽视它。同样,不能保证矿工将这些交易纳入到区块。

如果将它们包括在内,则节点将接受它们(多重签名交易最终有效)。但在实践中,这些交易几乎不可能得到确认。

进入 OP_EVAL

Andresen为了释放他所看到的多重签名的潜力,他继续倡导了一种新的“操作码op-code”,这是一种命令,节点可以使用该命令来确定新型交易是否有效以及何时有效。

OP_EVAL旨在容纳诸如多重签名之类的更高级的交易,其主要依靠哈希,这是一种密码学技巧,可以确定地对数据进行压缩,但不可逆地压缩成一个唯一的数字字符串。

这个想法最初是由匿名开发者ByteCoin提出的,其基本思想是用户可通过将哈希包含在交易中,来详细说明比特币日后花费条件的指令。

多重签名用户在花费币时会为增加的交易大小付费,而所需的额外数据对网络的负担变小了。

由于该提议得到了积极反馈,Andresen没有浪费任何时间,他希望尽早部署OP_EVAL。

他写道:“安全性在优先级列表上确实很高,我希望在一年之内在论坛签名中看到安全的比特币地址。” [7]。但是,并非所有人都认同Andresen的紧迫感,对于一个已拥有数千万美元价值的项目而言,OP_EVAL意味着一次重大升级。而在大洋彼岸,年轻的Amir Taaki建议开发者花些时间来审查该提案。

Taaki写道:“乍一看,这个提案似乎不错,但快速将其纳入区块链可能不是一个明智的想法……比特币不会在明天爆炸式增长,因此推迟此类重大更改不会造成重大损失。”使问题进一步复杂化的是,开发人员假设将OP_EVAL添加到协议中将带来巨大的协调挑战。从本质上讲,实施它需要冒风险,有可能会分裂成不兼容的网络。

这意味着一旦OP_EVAL上线,每个用户都必须切换到新版本的软件和新的区块链,这就是所谓的“硬分叉”升级。

如果不能统一升级,矿工可能会在不知不觉中产生“无效”区块。更糟糕的是,用户可能在不知不觉中接受了“无效”交易。

一种新的软分叉

但很快,Andresen就意识到可以安抚他的批评者。

他发现,通过一个巧妙的技巧,通过重新定义中本聪最初包含的几个不活动的操作码中的一个,作为未来命令的占位符来部署OP_EVAL。

出乎所有人的意料(包括Andresen自己),这也将兼容那些没有升级到接受OP_EVAL的节点。这些节点将检查哈希是否与新指令匹配,但不会强制执行它们,而是默认接受交易。

只要大多数矿工执行新规则,这意味着新区块链将被升级节点和未升级节点都视为有效。升级后的节点将接受区块链,因为它们正在执行新规则,而没能升级的节点也将接受新的区块链,因为它们都不关心新规则。

中本聪已部署过这种向后兼容的升级或“软分叉”,但是随着网络规模的扩大,开发者们开始产生了一些担心。

不出所料, Andresen意识到这是可以避免的,这一点受到了其他知名代码贡献者的欢迎,他很快与他们分享了这一消息。对此,Gregory Maxwell评论道:“哇,Gavin认为 [OP_EVAL] 不需要分裂网络就可以完成的观点,让我大吃一惊,拿出香槟庆祝吧。”有了它,开发人员便继续设计出一种更加安全的方法来激活软分叉。他们的理论是,他们可以进行类似民意调查,以确定某个功能何时得到矿工们足够广泛的支持,然后他们可以利用这些支持来确保安全升级。

矿工将被要求在开采的区块中加入一点数据,以表明他们将执行新的规则。当大多数人准备好时,更改就可以激活了[10]。

致命的缺点

但所有的这些工作,都被O’Connor的发现所推翻[13]。

结果导致开发者们分裂成了不同的派别,一些人认为OP_EVAL被不必要地延迟了,另一些人则认为提议的快速修复会损害比特币基本脚本语言的某些所需属性[14]。

包括Luke Dashjr、Pieter Wuille以及Maxwell在内的开发人员提出了替代方案,其与 OP_EVAL类似,采用了将币发送至一个哈希的概念。但挑战仍然是如何将这种逻辑(他们最初称之为“Pay to Script Hash”或简称为“P2SH”)转化为比特币软分叉,以避免区块链分裂。

现有的操作码只能走到这一步:未升级的节点将需要接受从哈希中花费币的交易,而无需了解新规则。

是Andresen找到了前进的道路,而他特定的P2SH解决方案根本不需要新的操作码。相反,Andresen的想法是,可以对比特币进行编程以识别某种交易格式,然后以一种非常规的方式解释这种格式,以使用新的指令对其进行验证。

任何未升级的节点都将使用常规逻辑来解释非常规格式。与OP_EVAL一样,未升级的节点始终将交易视为有效。这意味着P2SH可以作为软分叉部署:只要大多数算力强制执行新规则,新旧节点都将在同一区块链上达成共识。

Andresen的提案对大多数人而言似乎令人满意的。O’Connor评论称[15]:““看起来,这似乎是可以接受的。”Taaki在谈到该代码的非常规方法时表示:“这个想法是一种黑客行为……但我喜欢它。”在随后的一次开发者会议上,与会者一致同意实施Andresen的P2SH提案。而矿工们将在2月1日之前的一周进行民意调查,如果大多数算力(超过55%)表示支持,那么两周后,就会释放一个客户端来激活软分叉。

但和平只持续了几天时间。

为什么不用美元?

打破共识的是Dashjr,他因为有事提早离开了会议,后来才得知Andresen的P2SH版本方案被公认为折衷方案。

而Andresen方案的非常规性质,激怒了Dashjr,他认为这会使协议变得复杂,并带来了不确定的后果。Dashjr向Andresen提出了这个问题,但后者认为Dashjr的担忧不值得改变计划[16]。

在遭到拒绝后,Dashjr于一月中旬在公开的BitcoinTalk论坛上爆发,他谴责P2SH提案并指控Andresen“独自”支持了这一改变[17]。

Dashjr写道:“Gavin强迫所有使用最新比特币代码的人投票支持[P2SH],如果你想反对这种疯狂的协议更改,那么你将需要修改你的BitcoinD源代码,或者在默认情况下投票赞成它。”由于Dashjr的反对意见并没有太有说服力,以及他对Andresen的谴责声,人们对这篇帖子的反应并不积极。一些人认为Dashjr并没有将技术辩论局限于开发人员,而是试图煽动大众。

Dashjr是比特币项目当中一位类似唐吉诃德的代码贡献者,一位论坛用户表示,Dashjr的言论让他看起来“精神不稳定”,另一位用户则表示,他根本不想为细节操心,他只是信任Andresen[19]。

作为回应,Dashjr从哲学的角度对P2SH提案提出了持续的反对意见,他不仅对P2SH的技术价值提出了质疑,还对其对治理的影响提出了质疑。

“如果你想要一种君主货币,为什么不直接使用美联储的美元呢?” Dashjr 用这样的话来回应那些攻击他的人,而结果自然是遭到了他人的围攻,他们认为Dashjr是在争夺权力[20]。

但Dashjr 并没有退缩,其编写了P2SH的替代版本,称为CheckHashVerify(CHV),本质上,CHV是P2SH的另一种实现方式,但是并不需要对交易输出进行非常规的解释。取而代之的是,,CHV添加了一个新的操作码,就像OP_EVAL一样,可“伪装”为占位符操作码。

但对Andresen而言,这已经太晚了[21],他认为不能再进行更多的辩论。而对于公众的愤怒,他以自己的方式回应道:“Luke,你在挑战我的耐心,在我做一些愚蠢的事情之前,我将离开代码几天,以冷静下来。”争论延伸

由于Andresen的P2SH设计在很大程度上被视为项目主要开发人员首选的足够好的解决方案,Dashjr发现自己处于孤立无援的境地。

只有Taaki有一些担心,但他并不是因为反对Andresen的解决方案,也没有说同意Dashjr的方案。

这也使得Taaki不信任该项目的加速开发过程,如果决策过程需要时间并且涉及到更广泛的用户群,那么他更喜欢这样做。

在他看来,一小撮开发者就决定比特币的路径是不妥的,Taaki强烈认为,任何对该项目感兴趣的人都应该意识到权衡,并尽可能参与决策。

他对其他开发者表示:“我希望人们对此事有发言权,即使这会使开发人员很难解释他们的决定。”即使Taaki同意Andresen的P2SH和Dashjr的CHV提案之间的差异很小,但他坚持认为,让用户参与开发过程是一项重要的工作,他表示:“我担心的是,有一天比特币会损坏,这种额外的审查可被视为建立开放文化的机会。”为此,Taaki撰写了一篇博客文章,其中列出了P2SH和CHV升级以及两者之间的差异[23]。

Taaki的讯息是,用户可以选择,并且投票是基于挖矿算力。

混乱的局面

Taaki的言论,造成了巨大影响。的确,中本聪已经制定了软分叉,但到2011年底,该网络已不再像早期那样运行。

中本聪在2008年发布白皮书时,他假设工作量证明(PoW)将由用户通过个人计算机贡献计算量来提供,他写道:“工作量证明实际上是一CPU一票。”

在这种设计下,任何用户都可以成为矿工,并通过提议区块、验证对等方发送的交易以及强制执行开发人员编写的代码来保护网络。

但在该软件推出后的几年里,这种模式已经被企业家们淘汰了。自从Lazlo Hanyesz(用比特币换披萨那位开发者)想出了如何用功能更强大的图形处理单元(GPU)来挖取比特币的方法,专家们一直在忙于将挖矿这件事从业余爱好变成企业式工作。

大约在同一时间,Marek “Slush” Palatinus提出了一种方法,其允许矿工汇集提议区块所需的算力,并分享利润。这实际上使得挖矿工作不再是一种彩票行为,而成为了一种稳定的收入来源。

到2011年底,当时全球只有三个矿池,DeepBit、Slush Pool以及BTC Guild,这些矿池控制了比特币网络一半以上的算力。彼时,大多数“选票”就集中在少数几个矿池运营商的手上,这不再是“一CPU一票”制,矿池成为了网络选民的代表。

对于一些人来说,这证明比特币网络出了一些问题。“我认为一个矿池来决定网络的变化是一场闹剧,”早期矿工Midnightmagic争辩说[24]。

而对其他人来说,挖矿中心化是一个不幸的依赖,这使得“软分叉”升级更易于管理,从而降低风险。(毕竟,现在安全推出只需要少数矿池运营商参与)

例如,Maxwell更愿意接受眼前不尽如人意的现实[25],他回答说:“如果面对较重大的更改,那么开发人员和矿池都将退缩,但现在似乎没有人反对它。这是一个很好的未来机制… 希望我们不会遭遇比特币不再去中心化的混乱局面。”投票还是不投票?

Andresen和Dashjr的敌对提议,体现出对比特币治理的对立观点,这只会使问题复杂化。

在此之前,开发者们一直把即将到来的软叉升级称为一种投票:矿工可以用多数算力执行P2SH(或OP_EVAL)的新规则,因此投票旨在衡量这一结果的可能性。

虽然这一术语开始慢慢被大家知道,但这忽略了一些技术上的细微差别。在进行一项民意调查时,开发者并没有问矿工们对他们的新提案的看法。相反,他们将其视为查看矿工是否准备确保安全升级的一种方法。

从这个角度来看,对于开发人员来说,只有一个提议会被添加到软件中,而用户和矿工将执行网络规则。

Maxwell对Taaki的投票定义感到恼火[26],他争辩道:“比特币系统不适合多数选举,这不是由多数算力决定,也不是由多数人决定,也不是由多数钱决定。”Maxwell强烈认为,矿工的“投票”应像在软件本身那样受到限制,以执行交易的顺序,而不是整个网络的规则。“如果现在的矿工中的绝大多数(甚至100%)决定区块补贴永远为50 BTC的话,会发生什么?什么都没有了,从比特币网络的角度来看,在软件中改变这一规则的矿工们就不再存在了。”Dashjr并不反对Maxwell,但实际上,他很难想象,如果开发者在没有矿工支持的情况下推动变革,比特币将如何保持安全。“矿工可以简单地拒绝P2SH交易,以免受‘开发团队变化’的影响,”他回应道[27],“如果开发者封锁了所有的矿工,猜猜会发生什么?网络很容易遭受50%攻击,它会变得不安全。”从这个角度来看,我们就更容易理解,为什么Dashjr会认为Andresen在滥用他首席开发者的角色,以试图单独推动P2SH。如果矿工使用标准软件挖取一个区块,它会自动投下赞成P2SH的“票”[28]。

作为回应,Dashjr编写了补丁,引入了矿工投票赞成和反对P2SH和CHV的选项。

尽管很少有矿工使用该代码,但Dashjr的反对产生了效果。DeepBit矿池的运营者Tycho开始对自己在评估竞争代码方面的角色感到不安。

很明显,开发者之间尚未达成共识,他写道:“我不想成为对此做出决定的单一实体。” [29]陷入僵局

在提出拒绝用矿池来影响升级决定的想法后,Tycho给当时的争论增加了一个转折点,如果没有他的支持,P2SH将很难被激活。

到了1月下旬,第一轮P2SH投票即将结束,而支持P2SH的算力并没有达到激活阈值。升级显然要被推迟了,这一现实不仅使Andresen感到沮丧,也使其他开发人员感到沮丧。

在IRC上,Maxwell公开表示,僵局似乎没有结束的迹象,他写道:“认为这是急着上线的说法是胡说八道,Gavin在去年10月份就开始了P2SH路线,据我所知,除非有人确定最后期限,否则这就没有结果,因为总会有一些人的好主意会在下一刻蹦出来。”Andresen并没有将延迟的责任归咎于矿池的出现,而是怪到了DeepBit运营者Tycho的身上,Andresen写道:“目前来看,似乎有人拥有足够的算力来否决任何变化。” [31]。这让Andresen感到不安,他认为Tycho的立场不道德,Andresen写道:“我认为,利用自己最大矿池运营商的权力违背普遍的共识是不对的。”[32]事实上,即使Andresen向公众施加压力,迫使用户要求他们的矿池升级,并提出在P2SH导致任何财务损失的情况下偿还DeepBit的所有资金时,Tycho 也不愿意“投票”通过这一提案[33]。

面对延迟,Andresen试图引起公众的关注,并坚持认为P2SH和CHV之间的选择对用户几乎没有影响。

他写道:“ [P2SH/CHV]这两个提案,相当于工程师们在争论把两块木头拼在一起,是用钉子、螺丝钉还是胶水。任何解决方案都会奏效,普通用户不会注意到任何区别。”从回帖的情况来看,比特币用户们接受了Andresen的说法,指责Tycho阻碍了升级,并向他施压以使其激活提案。

而Tycho则反过来强烈反对Andresen的的说法。他说,即使自己掌握了30%的算力,其他的矿工也可以否决他,他不想成为决定因素。

第二轮投票

由于P2SH迟迟未能获得足够的算力支持,Andresen被迫公开讨论其提议的策略,并且他开始接受CHV作为打破僵局的潜在替代方案。

尽管如此,社区成员之间的反应,形成了一道界线。

BitcoinTalk用户dooglus认为:“最终,矿工是唯一对此类问题有发言权的人。他们是唯一决定哪些交易进入区块的人。”

但BitcoinTalk论坛的管理员Theymos完全拒绝了这个想法,他提出“非矿工也可以拒绝区块,如果有足够多的客户端这样做,矿工们挖取的币将一文不值。”

他们提出建议,应在内部进行为期两周的讨论,并在最后进行投票[37]。不管是出于建议还是偶然,Dashjr很快创建了一个Wiki页面,在那里,受人尊敬的开发人员可以表达他们的偏好。

在接下来的几天里,Maxwell、Thomas以及Wuille都表示,他们很乐意接受P2SH或CHV,尽管他们明确表示自己更喜欢P2SH。而O’Connor和Dashjr同意P2SH是可接受的,但他们更倾向于CHV[38]。

不足为奇的是,Andresen依旧投票支持了P2SH,并对CHV提案提出了强烈反对意见。

更重要的是,只有很少的矿工支持CHV提案,到2月中旬时,P2SH得到了30%的算力支持,而Dashjr的替代方案只停留在2%的算力支持。

在IRC会议上,Dashjr说他正在考虑是否完全撤出CHV,并勉强接受了P2SH的主导地位[39]。在同一次会议上,参会人员同意将第二次投票的截止日期定为3月1日。

随着新的截止日期的临近,更多的矿工支持了P2SH,算力支持率接近了55%的门槛。很快,Tycho和Dashjr别无选择,只能接受多数人的喜好[40]。

据此,Andresen宣布在10天之内部署并激活软分叉,并于2012年4月1日强制执行新规则[41]。

自中本聪退出以后,P2SH成为了首个得到实施的比特币提案升级。

茶壶里的风暴

P2SH艰难的政治进程,将继续在该提案之外产生持久影响。

最终,Andresen得以部署了他设计和喜欢的解决方案。如果可以说,Andresen的领导能力在危机中受到质疑,那么到最后,他的领导能力又得到了很好的巩固。

之后,Andresen甚至要求Dashjr完全停止对比特币进行贡献,尽管看起来他要么放弃了这种威胁,要么Dashjr干脆置之不理[43]。

与此同时,Maxwell成为了比特币的“核心开发者”之一,他与Andresen、Wladimir van der Laan以及Jeff Garzik分享了比特币项目的commit维护权限。

基调已经定好了:谈到比特币的开发时,务实的态度会得到回报,而相反的贡献者则会遭到解雇。

随着越来越多的用户涌向比特币,P2SH很快就得到了采用,尽管它会继续成为开发者之间分歧的*****。

回顾一年后在应对另一场危机时发生的事件,Andresen会夸口说,他相信P2SH验证了他对该项目的领导能力以及愿景[44]。

2013年初,开发者Peter Todd制作了一段视频,Andresen在回应这段视频时写道:“区块大小将会提高,你的视频只会让很多人对一些没有的事情感到担忧,就像去年Luke-Jr的 [CHV] 提案一样,只会在茶壶里引起一场风暴。”如何为第一个去中心化的数字货币做出决策?如果这个问题最终被问到,那将需要一场更广泛的战争,而这需要数年的时间,才能解决它 …

本文链接:https://www.8btc.com/article/678664转载请注明文章出处

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读