今天reddit的长辩论:硬分叉有多糟?
有关软分叉和硬分叉,是个相当复杂而讨论很艰难的话题,因此这一页的辩论都是大段大段的。懂的人都认为软分叉其实是对网络的一种攻击,但难点在于向不懂的人解释清这个问题
对软分叉不懂的人有着各种各样的理解,比如说有些人就认为软分叉是安全的分叉,软分叉是不会修改系统共识的,等等。。。而这些理解正好都和实际相反,但要让他们理解到他们的错误却绝非简单的事情,因为如果不懂比特币运行机制的人,无论你怎么解释,他们都会歪到另一个似是而非的说法上去,而要想澄清那个说法又需要说一大堆。。。
--以太坊10天前有过一次硬分叉,啥事也没有。比特币2013年硬分叉过,没啥大事。但那之后所有节点都运行在新的0.8以上版本,你运行之前的版本就会出错无法同步
--我认为2013年硬分叉证明比特币可以做硬分叉,只要网络中已经有一个普遍的共识。以太坊规模小分叉更容易,但比特币社区现在很大做硬分叉应该缓慢
--Monero 每六个月一次硬分叉,分叉前30天冻结代码,算力投票触发机制,不支持分叉前的版本
--硬分叉对比特币有利,因为他们保证了共识不被改变。真正的问题是:“软分叉有多糟?”软分叉其实是51%攻击,因为他们可以忽略系统的共识
比方说,如果矿工引入一个硬分叉来改变币的2100万上限,这种修改将没人承认,只有矿工自己会接受这些区块,全节点和其他用户都不接受
但矿工可以用一个软分叉来取消2100万上限,你的节点无法拒绝这些新区块(因为新区块是兼容旧版的)。如果你不同意这个改变,你唯一能做的是卖掉你的币
--不对,如果这样会产生一个分叉,不接受的矿工会另成一链
--但是软分叉可是95%算力支持,不接受新区块的旧矿工挖的块只会被孤立掉
--也许你并不知道,软分叉可以修改任何共识规则。这就是为什么隔离见证可以在面对比特币节点不接受1MB以上区块的情况下却能产生最大4MB的区块而仍然被现有节点接受
--不对,隔离见证只是把签名数据隔离开来,区块大小没有变
--让我们进一步看细节:
所有节点限制区块大小不超过1MB
所有节点定义区块包含签名数据
所有节点对于区块大小的共识是:包含签名数据的区块大小不能超过1MB
显然隔离见证违反了这个共识,它重新定义了区块的概念,使节点接受一个它们本该拒绝的区块,并通过让这些没有签名的交易变成任何人都可以花,使节点无从判别签名是否有效。让我来问问你,一个节点到底接受多大数据量的区块才会认为它受到了攻击?如果我写了个新客户端,使得你的旧节点每个区块要接受1GB的数据,但却不违反1MB的区块上限,你认为这是可以接受的吗?我们是否可以持续往未定义的部分添加数据,而不需要通过一个硬分叉来实现?这样的策略会导致什么样的后果?软分叉不是糟糕的,糟糕的在于它可以在没有共识的情况下被实现,事实上你根本就不知道是不是有共识,因为软分叉不需要所有人都同意,没有投票过程
比特币最初的时候,没有可能在无共识情况下软分叉,因为每个节点都是矿工,如果要矿工支持一个软分叉,那就是所有节点都升级了。但现在挖矿中心化了,软分叉流行起来,但代价就是网络对于共识的意识削弱
软分叉绕过共识的坏处应该是很明显的。对于恶意的硬分叉,用户只需不运行其代码即可;但对于恶意的软分叉,用户唯一的办法就是退出比特币
硬分叉可以防止矿工实现一个会导致价格下跌的变化,软分叉却不能。这使得软分叉除了用于微小的改动以外都很不合适
--我认为中本聪的共识规则导致硬分叉不会导致经济损失,因为对系统可能造成巨大破坏的硬分叉会被社区共同拒绝。矿工不需要对这个变化做出正确判断,没有社区共识,不会有分叉
相反的,如果矿工支持了一个软分叉,却不是社区的共识,结果会导致价格崩跌。矿工必须对这个软分叉的后果独立做出正确的判断,否则所有人都完了
--不对,软分叉不修改任何共识规则
--软分叉可随意改变共识规则,只要得到6大矿池同意即可
--如果修改了不该修改的规则,两种分叉都可认为是对系统的攻击。但优势算力并不需要任何人的许可发动软分叉,就和优势算力可以发动双花一样
--这是个误导,因为比特币设计上有个缺陷,可以允许六个人通过掌握优势算力来修改协议,但这并不该成为core标准的升级方式吧?此外,如果矿工硬分叉而没有用户的支持,他们挖的链就一分不值。但矿工软分叉则不需要用户的支持,用户不支持只能抛币走人
--软分叉根据定义不可能修改共识规则,这就是他们叫做软分叉的原因
--虽然软分叉不违反已有的代码规则,但它通过利用代码中定义不严格的地方,违反制定这些规则的人的共识。如果大家都决定了一个区块不能包含超过1MB的数据,但代码中有个漏洞,可以使得一个新格式的区块包含超过1MB的数据却不违反现有的代码,这只能说明网络已经违反了原代码设计者的共识在运行
硬分叉使所有的共识规则改变都很明确,如果硬分叉实现,我们知道是全社区接受的。如果社区不接受,硬分叉不会发生
软分叉则不同,如果软分叉发生,有可能这个分叉会被社区拒绝。但不幸的是,此时已经没有别的办法了,拒绝的唯一办法就是卖掉所有的币关机走人
大致摘录这些比较重要的对话,原文太长了估计要看好一阵子。其实看完这大段对话我都挺悲观这个问题的争论是否是有意义的。那个懂的人都搞IT系统30年了,那么绝大多数用户对这个问题的理解大概就是软比硬好或者硬比软好这个水平
硬和软这两个形容词根本就和计算机代码搭不上任何联系:看不见摸不着的代码用触觉的词来描述,本身就是为了故意引起误解。这种方式是搞IT的人惯用的,就是为了让不懂IT的人产生更加错误的理解,冷钱包的冷字也是这样一种故意混淆是非的形容词:哪里冷了,温度计测出来几度?
这就是说,当复杂性上升到没有相关知识的人十年都搞不清楚时,那做决策就几乎完全得听命于相关的专业人员,结果就开始需要信任人了,这是不利于比特币发展的,因为比特币的精神就是不信任任何人。所以我认为比特币当务之急是赶紧停止所有让比特币架构进一步变得更复杂的改动,将所有的代码简化和标准化,附以清晰的文档规范说明等等。复杂性上升的结果就是越来越多的人搞不清楚情况。开源的目的就是让所有人都能看懂,但如果开源项目变成了几百万行代码,复杂的象飞机一样的架构,任何人花十年都搞不明白,就完全成了一个公司的闭源项目了
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場