首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

软分叉的艺术——政策规则保护

摘要:在本文中,继续我们上一篇关于

比特币共识分叉的完整历史

的文章,客座作家 Johnson Lau 博士解释了政策规则与共识分叉的区别。他解释了为什么在政策规则(非标准行为)已被涵盖的情况下引入新的软分叉可能会更安全,因为这可以减轻或降低改变共识规则所带来的一些风险。

资料来源:gryb25

软分叉是修正和引入新的比特币共识规则的主要方式。接下来的一系列文章将介绍软分叉是如何被实现的。

共识规则和软分叉

共识规则决定着每个交易或每个区块的有效性。比特币网络上的每个用户和矿工都遵守着同一套共识规则,代表着他们都愿意接受和同意一个账本。

当大多数用户和/或矿工决定采用更严格的共识规则时,软分叉就可能出现,这使一些以前有效的交易/区块将变为无效,而不是相反。如果大多数人执行新的规则的话,其他任何违规分叉(统计上)都不会在工作量证明方面赶上新的更严格的共识分叉。遵守旧规则的少数人将始终遵循更长,更严格的分叉,使得网络上的每个人都会最终接受和同意一个账本。

政策规则和共识规则

虽然共识规则是确定交易有效性的唯一标准,但是传播节点或挖矿节点可能偏好某种交易。例如:

作为垃圾邮件控制机制,费用非常低的或 “微产量”(输出值很低)的交易将被拒绝。

一些矿工拒绝将 “链上赌场” 交易包括在内,这些交易被认为是垃圾邮件。

未知版本的交易被拒绝(目前只有版本 1 和 2 是 “已知的” )。

非常规的脚本(即不是 P2PKH , P2SH , v0 segwit 或其他一些情况)和未知的 NOPx 代码(目前仅知道 OP_NOP2 和 OP_NOP3 )的交易将被拒绝。

更换费用( Replace-by-fee )和母费子付( child-pay-for-parent )也属于政策规定,因为他们确定了哪些是矿工首选的交易。

根据定义,政策规则必须至少与共识规则一样严格。很明显,矿工们不希望在一个区块中包含无效交易(这会导致采矿奖励的丧失),或者将其传播(这将被同行排斥)。

虽然政策规定可能比共识规定更严格,但要注意,政策规定并不决定交易的有效性。一旦交易被包含在有效的区块中,即使它违反了一些政策规则,所有的网络节点也将会接受并承认它。

同样要注意的是政策规则是区域性的,而共识性规则是普遍性的。这意味着不同的网络节点可能有不同的策略规则。只要运行相同的共识规则,他们仍然会一致同意区块链账本。

违反政策规则的交易有时被称为“非标准交易”,我们需要将其与 “无效交易” 区分开。

政策规则和软分叉

理想情况下,所有的矿工都应该在软分叉激活之前升级到新的更严格的规则版本。在经济利益上,他们有强烈的动力去做这件事,因为挖掘一个无效区块(就新规则而言)会形成重大的财务成本。但是,像比特币这样的去中心化系统,矿工的行为是不能保证的。

虽然矿工们理论上应该关注所有规则变化的提案并及时采取行动,但是一旦矿工挖掘无效区块便会导致市场中断和普通用户的经济损失。因此,任何计划良好的软分叉都应该考虑到这一点,并将风险降至最低。

诀窍是,软分叉的内容应该限制在现有并广泛采用的政策规定所涵盖的范围内。拥有政策规定,但不了解新的共识规则的矿工,将会自动拒绝这些交易,因此,他们绝不会将新交易规则中的交易包括在内。这在比特币历史上的一些案例中有详细阐述。

在上述图像中,工人在一条无法使用的道路上摆放 “道路封闭” 的标示牌,该障碍物在工人放置标示牌之前已经存在。新的交通标示牌只能防止一些 “非标准” 的行为,因此造成的影响很有限。

1.新的交易 nVersion (如 BIP68 )不起作用。如果新的共识规则是“只有当 nVersion 大于 2 时才执行 segwit 规则”,则攻击者可以通过改变 nVersion 来窃取存储在 segwit 输出中的所有加密货币(因为 nVersion 仅由 segwit 签名认证,而当 nVersion 是 2 以下时是不被检查的)。

2.OP_NOPx 可以被用来标识见证程序。但是,这会使所有见证程序多出 1 个字节,并占用有限的 OP_NOPx 空间。

最终版本使用了BIP62的所谓 “clean stack” 政策规则。虽然 BIP62 现在被撤回了,但其规则仍作为政策被执行。 “Clean stack” 要求脚本评估必须以唯一一个堆栈项目结束。然而,最后的见证程序设计留下了两个堆栈。这基本上是没问题的,但却违反了 “clean stack” 政策。

政策保护不是万能的

读至此时,读者可能会发现,上述的政策保护手段只会阻止未升级的矿工在软分叉激活后主动产出第一个无效块。然而,如果这个无效块被创造出来,那么未经升级的矿工会接受它,同时如果得到更多工作证明的支持,那么这个区块链就会越来越长。所以这只是一种减少而不是完全消除在软分叉激活中发生意外区块链分叉的方法。如果在大量矿工正在通过不同的完整节点运行不同的政策规则的情况下,那么这个政策保护也是存在问题的。

比特币协定开发员 Johnson Lau 博士CC BY-SA 4.0

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180307A0ZIX400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券