Grasberg DAA不为人知的问题

10 536
Avatar for jtoomim
3 years ago

中文版前言

Bitcoin Cash的英文社区对于Bitcoin ABC在处理DAA升级这件事上的行为已经非常地不满了。Grasberg的宣布直接致使很多英文社区的成员完全丧失了他们对ABC领导风格以及合作能力的信心。本文中的批判不只是针对Grasberg本身,也是对Bitcoin ABC行事的批判,这些内容现在依然成立。

本文最初于2020-08-03发表。英文原文请参见:https://read.cash/@jtoomim/dark-secrets-of-the-grasberg-daa-a9239fb6

0. 介绍

2020年3月27日Bitcoin ABC高调发布了一种用于Bitcoin Cash网络的新的难度调整算法,并命名为Grasberg。这次发布中提及了Grasberg的诸多优势,听起来让人不免有些激动。然而更令人十分在意的是这次的发布里被省略了的内容,其中包括几点ABC没有提及但是很重要的关键之处。在我们选择接受Grasberg或者其他的DAA之前, Bitcoin Cash社区的大家同样需要得知这些没有提到的事实

在本文中, 我会从四个方面讲解Grasberg存在的问题:

• Grasberg 会降低 Bitcoin Cash的应用价值(第1-2部分)

• Grasberg 会危害Bitcoin Cash 的经济准则(第2-3部分)

• Grasberg 作为 Bitcoin ABC 政治化工具很有危害(第3-6部分)

• Grasberg 是解决DAA问题的不佳选择(第7-10部分)

本文会包含一系列认真反驳Bitcoin ABC的观点,它们中的有些仍需要更多的验证。不过大量严肃的反对声音正证明了我们应该采取更加谨慎和严格的行动。 因为即使其中只有一小部分是准确的, Bitcoin Cash都应该迅速而且有力地去应对这些风险。

首先存疑的是Grasberg 历史漂移矫正(historical drift)的机制 , Bitcoin ABC没有说明Grasberg会消耗多少资源,而实际上这会是一个不小的负担。

1. Grasberg 会导致在接下来的6.5年里出块速度为11.25分钟

直到2027年的四月之前Grasberg会导致挖矿速度慢12.5%,导致各种延迟和安全问题:

  • 交易确认会慢12.5%

  • 向平台转账会慢12.5%

  • 待确认交易链会更拥堵12.5%

  • BCH的矿工将少11.1%的收入

  • BCH的算力和安全保障会少11.1%

  • 需要一定出块数量确认的转账会需要更多12.5%的时间来释放

11.25分钟,这个出块时间不是什么计算错误, 它正是Grasberg代码中computeTargetBlockTime(…) 函数的固有特性。这一点Bitcoin ABC是知晓的,然而他们选择不提。

我们现行的DAA,也就是cw-144, 是2017年十一月开始使用的,一直维持著出块时间在600秒附近,并且没有漂移。 ASERT 算法也至少可以达到cw-144的水平;而 Grasberg会在2027年以前固定出块时间为675秒。图中显示了8064个块平均出块间隔的历史和模拟数据,其中对cw-144算法的模拟是基于此前50000块的记录得出。可交互图表参见http://toom.im/bch/grasberg_block_interval.html

2. Grasberg 会改变BCH发行的既定计划(emission schedule)

根据Bitcoin ABC的说法, 执行Grasberg算法的主要原因就是要避免重新定义BCH发行的计划,这也是他们认为ASERT不能用的理由,原文如下:

Choosing a reference point other than the genesis block is effectively equivalent to redefining the coin emission policy, which is a big NO.

选择除了创设块之外的任何基准点都是改变发币计划的行为,是大写的NO

然而,他们自己却在开倒车。如果要避免重新定义BCH发行计划,就需要使用最新无分叉块(pre-fork)来作为参考基准,也就是ASERT所采用的方法。但是Grasberg并没有这样做。

如果还不太熟悉各种DAA算法(比如ASERT尤其尚不广泛为人所知),这些术语听起来会有些费解,要去跟进最新技术讨论的难度也不小。不过还是有办法用简单的方法来解释这个问题的:用数据说话(实话)。我们可以看到Grasberg算法实际上会改变BCH的发行计划,而ASERT则和现行的cw-144保持一致。

在2020年十一月的硬分叉之后直到2027年,Grasberg下的BCH的发行量会下降12.5%;同时现行DAA和ASERT非常接近,它们之间的差别小到需要放大来看,有兴趣可以参见这里的交互式图表:http://toom.im/bch/grasberg_coin_issuance.html

到下次减半前,现行的发行计划是每日900 BCH (6.25 BCH * 144)

ASERT在下次分叉前的发行计划也是同样的每日900 BCH,维持了现有的发行方针,并且和现在的DAA几乎等同(此处可以放大来看它们的细微差别),这是因为ASERT设计中是正是用了cw-144的最后区块作为参考,并且继续扩展现行的发行方案,并且有更高的精确度,同时避免了24.5小时震荡。

如果使用Grasberg,到下次减半以前的每日发行量为800 BCH (6.25 BCH * 144 /112.5%)。这就重新定义了BCH的发行方案了;另一方面 Grasberg 将降低出块速度12.5%,也就是说在接下来6.5年中会少发11.1%的币,使得减半延后8个月。这些令人颇感意外甚至随意的新参数不管是在Bitcoin白皮书或者源代码中从来都没有出现过,不论是12.5%还是675秒。包括随后的6.5年这个数字也很是随意。Amaury Séchet和Bitcoin ABC团队选择了这些数字,然而也没有做出什么合理性解释。其中12.5%这个数字倒是与此文章有些奇妙的相似

如果Bitcoin Cash要成为一个实在的货币,那么就一定得避免开发者随便修改发布计划。如果我们现在容许Amaury Séchet来改方案,开了这种先例,之后更改发行量和价值的手段也会握在他的手中。这使他成为类似于中央银行或者说是总理一般的存在。在这6.5年中估计我们也得迎来Bitcoin ABC版“央行第二轮救市”了(此处指中本聪在创世块提到的英国救市)。

选择创世块当DAA参考基准点无异于从头改写BCH的发行方案,这无疑是个大大的NO。

3. Grasberg越过了技术和政治的界限

货币的发行方案会决定新的价值将如何分配,改方案相当于改分配,是非常关键的红线。

诸如Grasberg的11.1%发行减少这样的改动尤其危险,其正是因为这非常有诱惑力。要把这11.1%的减少发行合理化成减少膨胀有益于大持币者是很容易的。对于那些有大量库存BCH的持有人,比如说如果他们在2017年八月到十一月之间挖了大笔BCH(那时的矿工能得到3.5倍于中本聪设计的回报),那么他们会很有兴趣这种减少发行的行为,因为这样的话可以带给他们短期内的资产大增值并且更容易套现。

但我们不能就这么放弃思考了,因为本质上币的发行是一个零和博弈。每一块老持币者在暂时的高价卖出的美元都出于最终在高价买入的新持币者身上。

更进一步讲,任何打算靠操作通胀率来操控货币价值的行为都会需要代偿的。这一次如此操作BCH的发行, Bitcoin ABC将会释放出BCH的经济和货币政策不稳定的信号,BCH的持有者将会感觉到他们买入的BCH随时面临变故。当前的持有者会失去对BCH未来的信心,并且会在价格尚可的时候进行抛售。而潜在的购买者也会对BCH失去信任,也就更没有买入的意愿了。然而,货币的价值正是在于其对未来价值的保障。

Bitcoin应该是是个世界性抗监查的电子货币,带给世界经济的自主,并且帮助人们脱离自利政府机构的控制,而不是成为早期投资者的致富直通车。为了实现Bitcoin的目标,保持公正且稳定的规则很需要。我们不应该杀鸡取卵,在经济方针上用未来用户的钱来填满现在的大户口袋;恰恰一旦我们走上了这条路,也就没有未来用户来薅了。

4. Grasberg的历史偏移修正方案不受BCH开发者的欢迎

七月二十六日,Future of Bitcoin Cash主持了关于BCH DAA问题的开发会议。整个一小时五十分钟的会议都在讨论历史偏移修正的问题。总共有以下十名开发者参加了会议:

  • Amaury Séchet,Bitcoin ABC的首席开发者

  • Antony Zegers,Bitcoin ABC的开发成员

  • Zawy12 (Scott Roberts),专精于DAA的一位非BCH开发者

  • Jacob Eliosoff, 擅长EMA的一位开发者,并且使第一个提出ASERT方法的人(非BCH开发者)

  • Jonathan Toomim(本人), 独立BCH开发者

  • Jason Dreyzehner,bitauth.com钱包SPV的开发成员

  • Chris Pacia,BCHD团队的一半

  • Josh Ellithorpe,BCHD团队的另一半

  • Andrew Stone,Bitcoin Unlimited的首席开发者

  • Freetrader,,BCHN的首席开发者

经过这接近两小时的讨论之后,关于是否支持历史偏修正,大家进行了一次非正式的投票,结果如下:

  • 2票赞成,来自ABC的两位

  • 2票弃权,来自不是BCH开发者的两位,他们表达了批判但是没有投票

  • 6票反对,来自其余的所有人

参会者中只有八人是BCH的开发者,但在更广的社区中观点也是类似的。其中一些开发者做出了他们反对历史偏移修正的陈述:

  • Tom Zander ,来自Flowee

  • Jonathan Silverblood,来自BU and Cashaccounts

  • Mark Lundeberg

  • Jacob Eliosoff (尽管在会议中他弃权了)

  • Josh Green以及Bitcoin Verde (其他四位成员也签名了)

  • BigBlockIfTrue, 来自BCHN

  • Calin Culianu,来自BCHN

除了Amaury和Antony之外的,我所知的历史偏移修正支持者还包括:

• Joannes Vermorel (来自Telegram [WG] Difficulty Adjustment group)

这项提案基本上只有Bitcoin ABC支持,更多的是其他开发者广泛而且强烈的反对意见。这也表明如果在十一月的更新中ABC强推Grasberg的历史修正的话,可能会造成链的分裂。

5. 在ABC还在进行写作的时候,他们早已经收到一份完整的提案了。

ABC发布Grasberg的文案里开头是这么写的:

Bitcoin Cash社区对改善DAA表现出极大的兴趣。尽管围绕DAA进行了大量讨论,但在撰写本文时,ABC尚未收到任何具体建议,使我们没有足够的时间进行充分的审查、模拟和测试,并在8月15日的功能冻结之前获得反馈。

这个申明简单地就是错的。

我在七月八日04:55 UTC提交了我们团队关于asert3-2d的提案,比Bitcoin ABC团队发布Grasberg早了整整15天。我们的提案中不止提出了以为两日半衰期对ASERT的三次整数近似(a cubic integer approximation of ASERT with a 2-day half-life)算法概念,也包含了基于BCHN full Node的Python3 和 C++应用实例

当Bitcoin ABC说出前文中的申明的时候,铺天盖地评论指出了他们的这个谎言,先是在 Amaury Séchet的read.cash发布文章下面,后来又是在Reddit上。然而他们到现在也没有为他们的错误道歉。

我们在七月八日的提案和实例一经发布就吸引了BCH节点软件开发者们的关注和代码审核,其中包括 Flowee (Tom Zander), Knuth (Fernando Pelliccioni), BCHN (freetrader 及 mtrycz), 还有 Bitcoin Unlimited (Andrea Suisani)。提案获得了广泛而且很热情的支持,并且得到了BCH开发社区的帮助,并且有一些节点已经开始尝试整合我们的代码了。然而ABC的开发者并没有给我们任何的审核反馈。

我向ABC的两位开发者(Antony Zegers and Amaury Séchet)发了好几次这个链接,但他们从来也没有测试或者审核过代码。七月十三日到十五日,Amaury来问了我一些关于aserti3-2d算法和代码的内容和设计问题,我也进行了细致完整的回复。

当时问的问题看起来并不对他们审核代码,或者说充分测试我的提案有帮助。他们没时间做这些,因为人家正在秘密准备Grasberg。Grasberg的设计里有很多是基于我们团队的研究的,甚至有些就是从我们的实例代码里扩展的。包括现行DAA有问题的基础前提(用新的DAA可以解决问题),和Bonded Mining不是个好选择(ASERT或者RSERT很可能是最优解),以及使用2^(x+n) = 2^(x) * 2^(n)一致性来帮助进行整数近似步骤。

Bitcoin ABC没有做好引用申明这一点倒不是很让人介意,但是比较难以接受的是ABC堵截我的提案还否认这个提案的存在,同时又复制其中的关键点,最后还尝试拿下解决DAA问题的首发。

更有意思的是,他们还把Grasberg宣称成好像已经是一个既成事实了,已经要使用了的熟饭的样子。

于是ABC就按着Grasberg DAA继续行动。

我在开源项目中交流的时候总是抱持着互相信任开放的态度,但这次要是仍然假设对方还是诚信的,就相当说不通了;以下是一些事实:

  • Bitcoin ABC知道我的提案

  • Bitcoin ABC问过我关于这个提案的问题

  • Bitcoin ABC对外宣称没有我这个提案

  • Bitcoin ABC后来发布了使用我的提案里的功能的竞品

  • Bitcoin ABC的项目和我的提案有一样的基本特征并且受到我的提案的影响

  • Bitcoin ABC说他们没时间来开发、模拟、跑测试和审核我的代码, 没时间反馈(不止对我的提案,其他的提案也没时间)

  • Bitcoin ABC有时间来开发、模拟、跑测试和征求反馈他们自己的提案,并且给自己的提案提反馈,尽管他们的项目开始得晚得多, 并且也不成熟

  • Bitcoin ABC没有把Grasberg作为一种提案提出,直接声称这就是解决方案了

考虑到如上的情况, 我认为可以这么说,至少Bitcoin ABC的行为是不专业而且轻率的。然而仅仅用不专业和轻率又不能完全解释他们的行为。个人觉得BCH社区应该多考虑下Bitcoin ABC做了不诚实并且私利的事情。

对于Bitcoin ABC的行为,我能给出的最仁慈的原因就是Not-Invented-Here syndrome (NIH),这可以解释他们为什么宁愿多花时间在自己开发而不是来评估别人的代码。然而NIH也不能充分解释为什么ABC假装不知道别人的提案,以及为什么要像既成事实一样发布Grasberg。也许不那么仁慈的解释才更准确吧。

这里引用BU开发者Andrew Stone的话

对前人的工作予以充分引用是很重要的。在这一案例中的算法被套上了全新的包装,但仔细一看,它其实就是Jonathan花了很长时间劳动的成果,再附加一些别的东西。这看起来像极了瓢窃...

我们得考虑到这样一种可能性:Bitcoin ABC企图复制我们团队的DAA的核心设计,夺取别人的成果,并且重新拿回他们因为在IFP上的失败所损失的政治权利。历史偏移修正和新的币发布方案或许只是他们给其盟友或者金主的妥协条件从而获得他们的支持,或者就是当做分裂社区的一枚楔子,以便他们夺得决定权。

我也无法得知Bitcoin ABC的真实意图是什么,我希望能是最好的那种。不过说到底,这也没什么意义了:即使我们可以寄希望是他们是善意的,我们也得最好最坏的打算。

6. Grasberg 是迈向腐败的一大步

Bitcoin创立的契机有很大一部分正是为了对抗全球经济系统的腐坏(这种腐坏的一个结果就是导致了2007年到2009年的经济危机)。Bitcoin本身的设计就是能让它能够抵抗政府和巨头的操控,审查,监控,还有腐败。发布Bitcoin的时间已经过去了许久,以至于很多人都忘记了Bitcoin是如何做到这些的,并且把这当成是可以高枕无忧的自带属性。其实这些性质需要保障才能达到,而我们正面临丢掉这些特性的边缘上。

Bitcoin抗操控及腐败的能力是从其系统中的这些特性产生的:

  1. Bitcoin的核心经济参数是通过算法和计算产生的,并且大家认为其不可改变

  2. 这个系统不被任何人所有或者控制,也没有人会被胁迫;

而Bitcoin Cash不再保持这些特性,我们每六个月就被“友善的”导演指挥着上演一出硬分叉剧目。

此时Grasberg又将我们往前推了两步。如果Graberg上线激活,那么:

  1. Bitcoin Cash的核心参数比如发行方案会被有意地改动

  2. Amaury Séchet和Bitcoin ABC会独揽大权,成为一切协议修改的终极裁定者

这就使得Bitcoin Cash无力对抗贿赂和胁迫,相当于对任何有意向的组织或人宣称,只要给Amaury Séchet足够的压力,他们就能按他们的想法改动Bitcoin Cash的经济参数。或者也不需要多大的压力,五毛的板砖就成了。

https://xkcd.tw/538

Bitcoin ABC现在是不是腐败了或者被贿赂了不重要,重要的是如果我们希望我们的经济体系可以对抗腐败,积极主动的安全措施是必须的,而不是事后应对型的措施。我们得预防任何可能造成贿赂,胁迫和腐败的行为,而且需要预防那些鼓励以及给腐败行为提供温床的行为。

我们来考虑下面这两个情景:

情景A:假设有一个或者几个在EDA时期挖了大量块的矿工,并且现在握有大量币储备并想要将其转化成价值。这些矿工也希望能获得Bitcoin Cash更大的操控力,这样的话他们就能更容易地去将其政治化。他们可能会支持减少出块量12.5%,而他们自身的收益并不会减少,因为他们可以去挖BTC。考虑到BCH在SHA256总hashrate中只占2.5%,他们最多也就损失11.11%*2.5% = 0.27%的利益。与此同时,他们持有的币增值了11.11%。如果这个人或者机构有2亿美元的储备,他应该可以从推进其所希望的政策上线过程中获利。一旦事情能够成功,将会产生超过两千万的收益。我们再假设如果捐赠180万美金给相关的实现方案的话,他还能有25%的机会招揽到足够多的说客来推行他偏好的政策。按期望算下来,也就是是说给开发者投入180万可以带来360万的收益。

想要按自己的想法改变Bitcoin Cash是一件很自然的事情,没必要去指责矿工,这样没什么好处。如果Bitcoin Cash想要保持公正和自主,我们就得确保上面这件事情不会发生

场景B:假设有一家公司(或者个人、政府机构)特别希望看到某个加密货币垮台。他们可能主要持有大量BTC或者BSV,或者希望扩大这些币的的市场占比。又或者,他们也可能是视加密货币为威胁的银行。如果储备十亿美金,那么如果可以摧毁掉Bitcoin Cash的市场份额,他将获利10%(也就是一千万)。我们假设这些机构给先前有分裂社区行为的开发组捐助两百万,要求他们强推一项有争议的政策,那么这些机构有5%的可能造成链的分叉继而分裂社区,遏制发展,抹除Bitcoin Cash这个威胁。这时按照期望算下来,给开发者的两百万投入可以带来三百万的收益。各方都可以靠改变BCH的政策来打压BCH,从而获利。

在这些场景里,考虑到这些参与者都会做很好的掩饰,普通的大众很难有办法知道背后进行了这种交易。当能拿到腐败行为证据的时候,事情已经太迟了,存在最坏的可能性本身就足以让大家都行动起来。

7. Grasberg并没有进行合适的模拟运行

在二月的时候, 我花了两周来优化和扩展一款支持多币种的模拟器,后续用于测试不同的DAA算法,来解决BCH算力的震荡问题。之后我又花了大半个六月和Zawy12以及Jacob Eliosoff 一起来用这款模拟器测试了所有已知的候选DAA算法,找出在效果,简洁度,抗攻击能力之间的平衡最完善的那一个。我考虑的各种细节,同时也仔细记录了各次的模拟,以作为改动协议这种严肃的事情的可靠参考。

Grasberg怎么讲他们的模拟呢:

Bitcoin ABC已经对这个算法进行了模拟和实测

多位Telegram上DAA工作组的开发成员向Bitcoin ABC要他们所说的跑过的模拟结果。

然后我们从Amaury那里就拿到这张表格。没有注释,没有描述,没有合理性的说明,也没有测试源代码,就是一表格上一些直接写上去的数字。Amaury Séchet甚至进一步解释说我们不可以相信这张表格里的任何东西:

Amaury: "这结果还是生的,大家不应该相信裡面有什么,请自行模拟"
Josh Ellithorpe: "谢谢,你怎么不把这加在文章里?" Amaury: "因為这结果还生,我完全可在试算表裡写上些随机数字,你不应该相信它。"

说既草率也不专业。完全不能反映Bitcoin ABC的竞争力的领导力。

8. Grasberg的模拟测试表现不佳

于是我自己动手将Grasberg整合进我的的测试框架并且进行了Grasberg的模拟。在http://ml.toom.im:8051/可以见到模拟器的实时运行。

Grasberg的变量有一小部分不同于我的模拟器的,其中第一个标记为grasberg-288,用于模拟Grasberg在前6.5年保持11.25分钟的出块时间目标。第二个是grasberg-neutral-288,反映了Grasberg在恢复10分钟一块的出块时间后的行为。进一步为了模拟在去除掉历史偏移修正的部分后Grasberg的运行,我加入了变量grasberg-nodrift-288。除此之外还加入了一系列用于尝试不同的时间参数,来平衡响应能力和图像平滑。

Grasberg的表现在以下两种情况下需要单独来进行分析:

  • 在其前6.5年的运行中,Grasberg的运行主要被11.25分钟的目标出块时间所影响

  • 在Grasberg用基于创世块的发币方案来中和掉了历史偏移以后的行为

情景一看起来颇为直白,Grasberg 较aserti3-2d挖矿速度慢,而算法类似,致使确实时间变慢并且使挖矿公平性下降。但结果比我们想的更糟糕:grasberg-288使确认时间和挖矿公平变差了了不止12.5%,达到19-25%的下降。

在模拟中,grasberg-288在各种条件下相较aserti3-2d均有延迟,原因很简单,就是出块多花12.5%的时间。(在这部分模拟中预先设定的exchange rate变化模式是相同的,也就是为什么不管是grasberg-288的价格(这里没显示),还是难度变化图,看起来都像是水平拉伸了aserti3-2d一样)。
grasberg-288的确认时间始终相对更长,因为12.5%。

(出块时间和确认时间,以及不同挖矿策略下的营收能力)

在出块间隔多出了12.4%情况下,grasberg-288的确认时间甚至更长19%。并且使用switch mining的策略会多25%的预期收益。这说明了,长的出块间隔不是Grasberg唯一的问题。

而在场景二下, 两种两种算法在开始阶段看起来很像,但是仍然存在差异。

在6.5年的区间过去之后,Grasberg恢复到600秒的出块间隔目标,这时它的难度变化图看起来和aserti3-2d相当接近,但不完全等同,还有些小的差异存在。
Grasberg的确认时间还是比aserti3-2d高出一些,在第35天的跳起更大一些, 而在第140天的更小。说明两种算法非常接近, 但并不完全等同。

(出块时间和确认时间,以及不同挖矿策略下的营收能力)

在本次测试中, Grasberg在确认时间和挖矿公平性方面都更差。

当Grasberg回归600秒出块时,其性能得到很大的提升。越过了6.5年的界限以后Grasberg的性能还是很不错的,虽然依旧不如aserti3-2d。

我认为在这些测试中的不良表现主要是因为Grasberg所选择的时间参数。Bitcoin ABC没有听从我关于半衰期设定和时间参数选择的建议(然而讽刺的是,用了2天半衰期这件事是他们唯一说来在于我的贡献)。其中看起来却发生率混淆了:时间常量(或者说弛豫时间 relaxation time)和半衰期(half-life)。其中前者是自然对数函数中e^(x/tau)的tau,后者是以2为底的函数2^(x/lambda)中的lambda. 我推荐使用两天作为半衰期, 并且我自己的代码里也是用了这个参数;然而Bitcoin ABC是用了288块(两天)作为时间常数。时间常数要换算成半衰期的话需要乘以ln(2),于是他们的半衰期就变成了199.6块。我告知过Bitcoin ABC这个错误的存在,不过他们也没进行改正。出现这种混淆的原因看起来就是因为他们没有在不同的场景下测试。

9. Grasberg比ASERTI3-2D复杂很多

不管是设计上还是实际代码,Grasberg已经比它需要的程度复杂太多了。将两边的代码并排对比一下很容易看出来这一点。然而这种繁杂并不只是字数多,还有更深的问题。

左边是aserti3-2d的一个成熟实例,右边是Grasberg的早期版本之一。两个算法都只进行整型运算。这里展示python3的代码是为去除代码里的格式样板,更直白地显示算法的复杂度。上周Grasberg的再版稍微简化了一些,但还是比需要的复杂太多了,也比aserti3-2d复杂很多。

ASERT的共同作者Mark Lundeberg在七月二十四日撰写了他对Grasberg的细致评价,在他的文章中不止一次地表达了他对Grasberg过于复杂这一点的担忧:

我认为以其目标来说,这算法的细节过于复杂,同样的事可以用更简单的方法完成...如上述,我觉得这算法的复杂度和计算量大大超出了必要程度。其中 deterministicExp2是在定点运算中0<=x<1范围对2^x - 1的近似。这是个由16个不连续二次区段组成的复合曲线,精度约为~1ppm。相对于其精度而言这算法过于复杂,但在这之上我也不知道为什么选这个精度。

10. Grasberg的复杂程度使得BCH在面对攻击的时候更加脆弱

从本质上讲,Grasberg既不是绝对型也不是相对型的调整算法, 既不是ASERT也不是RSERT。它两者的特性都有。Grasberg使用相对规划反馈循环(RSERT)来控制短时程的挖坑难度,同时用绝对规划反馈循环(ASERT)来调节目标目标出块间隔。

这种双重循环不止造成了Grasberg代码量的激增, 也使得grasberg算法的运行过程非常复杂,使之变得更脆弱,就算其中ASERT或RSERT单独部分都不会发生震荡,两部分结合在一起的杂糅系统有还是有可能会发生震荡。 这其中的原因是这两部分法运行是基于不同的延迟时间的,快的循环在遇到扰动的时候可能已经在出下一块之前完成调整了,而慢的才刚开始。这样慢的循环会有残留效益,进一步导致overshoot,ringing,还有可能的震荡。在一些Grasberg的特定案例中,这种现象被专门挑选设定的数值掩盖掉了。其中,在用于决定慢循环的的反馈以及进行历史偏移修正的函数computeTargetBlockTime()里,参数tauX_CLIP需要分别设置成一高一低来预防震荡; 如果将其中一个做足够大的改动,或者两个都稍微改动一下,那么就会产生不稳定。当改动比较大的时候,震荡的情况就会变得比较严重了, 比如以tau = 600X_CLIP = 2729822324进行的模拟中的情况这样。

Grasberg在一般的情况下相对稳定,但一旦代码里如果有一两个参数改变,将导致中等到严重的震荡。在Grasberg受到攻击的情景中同样产生震荡。


在普通的正常挖矿场景下,使用参数tauX_CLIP的默认值对于防止震荡和不规范行为是足够用的,但是在遇到恶意攻击的情况中,比如在遭遇到我称为快速前向攻击(fast forward attack)的挖矿攻击时,Grasberg的双重循环会使得情况变得更加糟糕。

快速前向攻击是一种所有DAA算法都可能会受到的攻击方式,尽管其严重程度不尽相同。在这种攻击中,某位矿工会私下用诚实链101%的算力来挖几天的秘密链(这一部分比较像reorg攻击,例如前几年在Bitcoin Gold链上发生的事情),但之后就不同了,当矿工进行快速前向攻击的时候,他们会修改他们的块上的时间戳,使之十分接近他们准备公开这些块的时间点。这样一来次链上的难度会快速下降,而使他们在挖其余大部分块的时候就可以使用比较少的算力。当攻击者追上了诚实链的高度,整个过程中用更少的算力就达到了同样数目的块数和收益。之后攻击者继续挖几块中高难度的块,直到他们的链超过诚实链。合下来他们会多出几个区块。具体多多少取决于DAA和挖矿的策略。

这种快速前向攻击和一个物理问题颇为相似:重力的存在使得两点间最快的路线并不一定是直线。先快速下降获得速度常常更快。快速前向攻击也是类似的, 攻击者先操作他们块上的时间戳来达到快速降低难度的目的,然后在低难度的情况下挖出更多块。

我在测试攻击cw-144算法的时候最高的记录是攻击链209块,诚实链145块,也就是44%的额外收益。与此同时对是aserti3-2d算法的最高记录是1138块对816块,也就是多39%,由于需要的链很长,对于这么庞大(而且更难)的投入而言这个收益不够多。对于Grasberg来说,其严重程度取决于慢循环里computeTargetBlockTime()函数的偏移矫正。如果函数运行,在6.5年后Grasberg完成矫正,其被快速前向攻击时可以产出52%的额外利益。但是如果函数实际不起效(比如使其输出固定为600秒),那么就和aserti3-2d一样都只产出39%的额外利益。

快速前向攻击并不是一个让人担忧的个例。这种攻击需要101%的算力还有多日的reorg,不论这种攻击可不可行,我们都有更严重的问题需要担心。而且这种前向攻击可以被ABC和BCHN的十块定型(10 block finalization)规则来避免。但是明确Grasberg反应的复杂性本身是十分重要的,其他更实际的潜在的攻击一样有可能会存在。

11. 结论

在本文中,我从十个不同的方面说明了Grasberg是糟糕的。按照重要性的顺序大致可以如下排列:

  • Grasberg下之后6.5年中都会慢12.5%

  • Grasberg重新定义了发币计划,并且使Bitcoin ABC成为BCH中央银行一样的存在

  • Grasberg改变了收益的分配方式

  • Grasberg广泛地为人所反对,尤其是BCH的开发社区,最近的意见调查显示有75%的DAA开发者反对Grasberg

  • Grasberg的申明并不诚实,为了争夺政治力,不止忽略掉了aserti3-2,同时还试图盗取其他开发者的成果

  • Grasberg为用贿赂及威胁的方式控制BCH敞开了大门

  • Grasberg的开发者并没有认真为其跑测试

  • Grasberg的模拟测试表现并不如其他各种知名的DAA方案

  • Grasberg的代码复杂度已经远远超出了一个DAA算法应该有的程度

  • Grasberg使得BCH面对攻击时,更多了技术上的脆弱性

在论述以上问题的过程中,我同时也讲了一些Bitcoin ABC的迷惑行为:

  • Bitcoin ABC总是在误导大众:首先, 他们掩盖了11.25分钟出块这一重要信息,其次,他们错误地声称ASERT会改变发币计划(其实Grasberg才是会改变计划的那个),第三,他们宣称不存在其他的提案。

  • Bitcoin ABC经常性地表现出他们对Grasberg技术上的不专业和不上心。例如没有可靠的模拟,没有震荡场景的测试,代码过于复杂,以及容易受到攻击。

  • Bitcoin ABC完全不尊重其他Bitcoin Cash开发者的立场和贡献。

  • Bitcoin ABC看起来是按照“你们做你们的,我们做我们的”("You do you. We will do us")方式来进行软开发,他们几乎是为了应对aserti3-2d而开发了Grasberg,并且逐步推进链的分裂

  • Bitcoin ABC犯了作为开发者的一个最大禁忌:尝试改变Bitcoin的经济体系还有货币政策,并企图成为中央银行。

  • Bitcoin ABC正试图扩大他们对Bitcoin Cash的话语权和控制力。一旦成功了,他们就很有可能可以利用其牟利。

Amaury Séchet在过去为Bitcoin Cash做了很多贡献,2017年,他和freetrader两人创立了Bitcoin Cash,在后来的三年中努力维护之着Bitcoin Cash最受欢迎的全节点,并且维持代码有可以抵抗攻击的能力。在Blockstream把Bitcoin的经济体系变成高费用、限制块大小的体制,试图把用户都导向他们自己的产品Liquid时,Amaury帮助大家脱离Blockstream的控制。我们会一直感谢他做出的这些贡献。

但随着时间的推移,他逐渐容许自己膨胀了起来,并且最近开始认为他应该得到更多的回报。为了达到他想要的回报,Amaury开始试图巩固自己对Bitcoin Cash的控制力,并且寻求更多的收入。首先,他试着用IFP来重新分配收益给他自己,随后就被被BCH的用户们驳回了。我尊重IFP的这种透明诚实和直白,也不打算怪罪ABC进行了这种尝试。尽管如此, BCH在二月的的时候给Bitcoin ABC发出了明确的信号: 君必不得撼利益之分配

不幸的是,Bitcoin ABC似乎是没有收到这一信息,再次尝试去改变利益分配,这一次流向他们自家金库的通路本身的证据变得不那么明显了, 但也就是说,在其他方面Bitcoin ABC的不诚实和诡计有了实锤;并且也有证据表明他们在试图掩藏什么,在Grasberg的动机方面表现得也是遮遮掩掩。

12. 正在发生什么

Bitcoin ABC目前是覆水难收,气数将绝。

不知道各位有没有见过蛇的脑袋,是即使断了也能咬人的。当Bitcoin ABC垮台的时候,他们仍然可以极限一换一。这可能会在Amaury Séchet发现他已经无力回天之前的几周发生,挣扎着想要保住他的控制力。

Bitcoin ABC一直在进行在悬崖边上的冒险行为。他们利用了人们害怕链分裂的情绪来确保他们自己的领导地位。对分裂的恐惧会提高他们在不分裂的情况下的赢面:在懦夫博弈(注:两人对这对方开车驶去,先拐弯避让的是懦夫)中,先让步的就先输了。为了打破这种僵局,我们有两个比较好的选择,一是我们可以使他们没有能力造成有意义的链分裂,二是产生一个更强的默契选择(Schelling point)。如果这么做的话,我们可以改变这个博弈的条件:小电驴对卡车的懦夫博弈里,小电驴无论怎么整都是惨败。

为了使Bitcoin ABC无力分裂链,我推荐所有的Bitcoin Cash相关项目,用户还有投资者来进行以下的步骤:

  1. 大家每一个人都不要继续使用Bitcoin ABC的软件,可以改用其他的全节点应用。没有用户的话,Bicoin ABC也就没有了谈判的资本,也就没有办法按他们的方式威胁要分裂链了。如果你现在正在用ABC,选什么替代节点都可以,重要的是现在就不要继续用;根据不同的需求,可以选:

    • Bitcoin Unlimited 高挖矿效率及块/交易铜梁

    • BCHD 拥有先进的gRPG API和Neutrino支持

    • Flowee-the-Hub 拥有先进的效率和API可扩展性

    • Bitcoin Cash Node (BCHN) 经过了细致的验证和评估的全节点软件,可作为开箱可用的ABC替代品

    • Bitcoin Verde 一个完备的节点/区块探索平台

    • Knuth 作为node-as-a-library的软件包,拥有多种编程语言下可用的代码库

  2. 撤回给Bitcoin ABC的捐助,或者如果你是按月自动给ABC捐助,那么直接取消。可以的话请给其他的项目一些帮助。

  3. 公开明确声明在链分裂的时候不会跟Bitcoin ABC或者Grasberg,并且会卖掉Grasberg链上的币。(对我来说这还蛮简单的)

  4. 如果可能,请为Jason Cox, Fabien, 还有Antony Zegers提供工作机会,他们是非常正直优秀的工程师,而且在这种糟糕的情况下已经做到他们能做的最好了。

  5. 如果Amaury Séchet资源放弃了Grasberg,请给他一个开发者的工作,但别请他做管理岗。Amaury作为工程师是很优秀的,但是在他不能胜任的岗位上容易膨胀起来。请不要拜托他做经常需要审核别人工作的事情,请他回到他擅长的写代码的的工作中去。

为了产生一个更好的默契选择(Schelling point),我们需要:

  1. 如果你觉得aserti3-2d更好,请讲出来吧,不管是企业还是个人,对于开发来说这非常重要。

这些事情我们如果做了,那么事情会变得更加平和地过去。

13. 之后将会发生什么

对我自己来说早2018年到2019年之间, 我在做一些基准测试项目,还有基于Bitcoin ABC的Xthinner的开发工作,最终我也只能放弃了Xthinner的开发, 因为代码审核一点儿都不进展。即使都达到了3000 tx/sec,Amaury似乎对我的项目没什么反应,也没有说需要我做更多测试的意思。几个月后,我开始打算在BCHN继续进行开发(一方面也是为了缓解新冠疫情中的情绪),得到的反应差别非常大。BCHN的开发团队对基础压力测试的概念非常有兴趣,当我给项目的测试代码推新的合并请求时,他们的好几位开发者立即就给出了详细的反馈,不仅指出了我之前没注意到的问题,而且给出了很好的解决

五月中旬我意识到如果十一月要让DAA得到修复的话时间已经不剩多少了,于是我暂时把Xthinner的工作先放到了一边。考虑到之前我受到的帮助,而且BCHN的发展路线图里也包括了改进DAA的部分,在进行完python3的模拟工作以后,基于BCHN代码库来开发aserti3-2d的C++版本的决定就非常明确了

之后我也完全没后悔过这个决定。在我发布了我的提案以后,开发者们在slack上问了很多关于aserti3中的设计想法问题,像是开发全节点的Tom Zander (Flowee) 还有 Fernando Pelliccioni (Knuth)。Tom Harding也参与了其中的一些讨论。七月十四日,也就是这之后的几天,freetrader在我已经去休息了的时候一连问了一个小时的问题以及表达了他们要怎么来审核我的代码。因为还在睡觉我没回复他,然后freetrader和mtrycz没等我回复就立即着手进行了审核测试,然后醒来的时候我眼前是这样的。之后的一晚大有不同,不再是诸如这里有xxx问题,应该加上xxx的单元测试这一类的消息:我起来之后看到了freetrader fork了我的代码,开始写单元测试,如同我之前期待ABC能做的。在之后的几天里,我们像这样来来回回了好几次,在对方休息了时候复制下来对方做好的分支进行查看和修改,或者是给对方提交合并请求。这正是开源开发应该有的样子,迅速,无需许可确认,混沌的状态。非常高效,而且很有趣

我期待着aserti3-2d可以被改进,被完整地测试,准备上线,这样的话之后我就可以继续进行更多的开发工作了,比如提升Bitcoin的规模。如果在Xthinner和Blocktorrent的开发上也能像aserti3-2d这样有来有回,我觉得我们可以进展得更快。个人认为我自己是很擅长做研究,提出新想法做出原型的,而BCHN还有freetrader已经向我们展示了他们很擅长调试概念原型并将其实用化。

在接下来的几个月里,我们将把Grasberg的闹剧抛在身后,在一个健康的开发环境中,大家可以专注于一个建立更好的p2p货币。最终Amaury留下的问题都会被解决,比如50tx的限制,我们会建立完善的基准测试系统,并行化代码,加入更好的区块广播技术。自从2017年以来,Bitcoin ABC在改进全节点运行上做的事情比其他的全节点软件少之又少。当Bitcoin ABC不再是BCH网络的瓶颈,我们就可以继续扩大BCH的规模,让Bitcoin Cash成为一个连中本聪都会觉得骄傲的存在。

10
$ 3.09
$ 1.07 from @TheRandomRewarder
$ 1.00 from @ErdoganTalk
$ 0.50 from @RanierDistantfellow
+ 2
Avatar for jtoomim
3 years ago

Comments

踏实做开发工作还是蛮难的,面对这么多的事情

$ 0.00
3 years ago

Subscribe done please back

$ 0.00
3 years ago

do you pay for translation in the Japanese language sir? happy to apply😇

$ 0.00
3 years ago

Price? Edit: I will not be paying anybody else to translate this article.

$ 0.00
3 years ago

you decide sir how much sir?

$ 0.00
3 years ago

How to contact you, sir?

$ 0.00
3 years ago

My support.

$ 0.00
3 years ago

Willing to translate in Russian and Tagalog

$ 0.00
3 years ago

Balato muna sakin ang Tagalog kindly 😚😚😚

$ 0.00
3 years ago

I'll do Filipino/Tagalog version word by word since traslators are not accurate. sir.

$ 0.00
3 years ago