extension point

BUIP039 Upgrade via extension point

  1. https://github.com/BitcoinUnlimited/BUIP/blob/master/039.mediawiki
  2. 概要
    • 迄今为止,仅有硬分叉和软分叉两种方式来升级比特币网络。两种方式各有缺点,软分叉通过矿工激活,对于普通的节点操作者,没有途径来发出他们的声音,也没有机制来反对该分叉。另一方面,硬分叉需要大家一起升级,但是在激活时会有风险。
    • 本提案的目的是:使用已知的拓展点来升级比特币网络,在其中引入新功能。因为当前节点们知道这些拓展点,所以他们可以注意到这些功能的激活,甚至即使他们不知道这些功能,也会采取与之相应的行动。
    • 本提案定义了OP_NOP1, OP_NOP4, OP_NOP5, OP_NOP6, OP_NOP7, OP_NOP8, OP_NOP0 and OP_NOP10 操作码来作为拓展点,未来的BUIP应该指定它们在适当的时机添加的拓展点。
    • BUIP激活后,软分叉必须考虑51%攻击和相应的处理,添加新的拓展点应使用现有的拓展点,或通过一个硬分叉。
  3. 拓展激活,信令和锁定
    • 为了使用一个新的拓展点,矿工可以使用BIP的信号集发信号,来通知他们的意图。当该拓展点激活时,节点可以使用拓展点来接受区块,或者使用他们的AD参数来等待,看该区块是否被网络上的大部分节点所接受,然后再决定是否接受该区块。如果节点不知道这些新功能,或者不希望激活它,如果有多数节点使用新的拓展点来拒绝该区块,该区块将成为孤块。
    • 该处理进程会被每个拓展点来重复。
    • 节点用户可以像他们在MG/EB/AD中所做的,以/分隔符他们的用户代理数据中,来信号通知它们愿意激活的拓展。对于OP_NOP操作码,节点可以使用OP_NOP前缀来发送信号,后面跟着一个星号分隔的数据列表,来说明他们想激活哪个OP_NOP操作码。
    • 例如:OP_NOP1,5,8 表明该节点希望激活OP_NOP1,OP_NOP5,OP_NOP8操作码。其它OP_NOP操作码的使用将被拒绝,直到AD区块被构建在使用该操作码的第一个块的顶部。
  4. 结论
    • 该BUIP引入了一种升级机制来安全的关闭硬分叉,同时大大减少所涉及的风险。在过去几年,大多数对于共识代码的升级都符合该BUIP的描述,除了P2SH和SW。这个处理过程相对成功,并且应该成为未来升级的一种模式。增加了每个节点表达自己意图的能力,极大地保证了每个参与者的利益一致。
    • 总结说来:其实就是增加了一中分叉的方式。

作者对于上述BUIP的解释:

  1. 上面的提案过于抽象,是因为不想将该想法与具体的实现技术联系起来。
  2. 为了使事情更清晰,我解释一下对于指定OP_NOPs操作码的工作机制。
  3. 比特币使用脚本机制去验证交易的合法性,该脚本是非图灵完备的智能合约。该脚本由大量的操作码组成,并且每个操作码做对应的事情,例如:检查签名的有效性。
  4. 该脚本语言有一些OP_NOPX的操作码,这里的X标识一个数字。可以重新设计这些操作码,用来给比特币增加一些新功能,例如:OP_NOP2被重新设置为OP_CHECKLOCKTIMEVERIFY;当遇到这个操作码时,旧节点不做任何事情,但是新节点将检查锁定时间。
  5. 今天,操作码可以通过软分叉来重新设计,在新的操作码的操作上增加一些限制。例如:新的操作码不可以修改栈,不可以产生结果,并且对于验证一个交易只能有条件的失败。
  6. 通过软分叉升级有点问题:旧节点被欺骗为他们有效的验证了区块,但实际上并不是这样。另外,软分叉增加了设计约束,并产生了技术债。另一方面,硬分叉强迫每个人立即升级,并且旧的节点不可以再进行验证,因为它们无法理解它们收到的交易和区块。两者都不是理想的升级方式。
  7. 我建议定义所有的OP_NOPs作为拓展点。每个拓展点是预先商量好的,它将被用来在在协议中添加一些新功能。一旦某个OP_NOPs被定义为拓展点,协议通过该拓展点来分配一个特定的功能,从而进行拓展。
  8. 支持该功能的新节点,可以使用指定的OP_NOP来接收和验证交易。另一方面,旧的节点看到它们所不知道的拓展点的使用,就会知道它们不理解的功能在网络中被触发。此时,它们有多种执行方案:
    • 它们可以将拓展点作为软分叉来对待,然后跳过使用了该拓展点的脚本签名检查。
    • 它们可以选择等待AD区块,看使用该拓展点的块是否被网络中的多数节点所接受;如果是,则跳过这些特殊交易的签名检查。
    • 它们可以选择不跟随当前使用拓展点的链,并等待操作码的升级,这种方式将拓展点作为硬分叉来对待。
  9. 如果拓展点被绑定上AD参数,通过为AD选择合适的值,上述3中方式都可以实现。
  10. 简而言之:当前节点对于链的合法性有两种状态:有效或者无效。使用拓展点,将获取3中:有效无效一些我不理解的事情发生。作为软分叉,旧节点将以减少安全的方式在网路中运行,然而,与软分叉相反的是,这些节点直到自己正运行在安全环境低下的场景,并且没有被欺骗。除此之外,如果节点愿意,它们可以拒绝接收采用新功能的区块。

你可能感兴趣的:(金融技术)