[译]拓展区块的软分叉提案

By Copernicus

《extension block proposal》—— Johnson Lau

该临时BIP允许通过软分叉来增加额外的区块空间。这对于当前的钱包是完全透明的(无论是接收还是发送),但是利用额外块空间的新钱包将有完全不同的用户体验。

我确信这个提案具有争论性,但是我认为它是一个有趣的学术话题。如果我们有任何完全一致的强制性双向锚链设计,该提案就类似于这样。

目标:

  1. 通过一个软分叉提供更多的区块空间
  2. 对于现存钱包是完全透明的
  3. 不破坏任何当前的安全假设

规范和术语:

全称/简写 : 解释;
main block / block: 当前的比特币区块(如果BIP141被激活,使用witness)
main transaction / tx : 当前比特币区块网络中的交易(使用witness)
main UTXO / UTXO : 正常的UTXO
Extension transaction / xtx : 使用与BIP141描述的隔离见证交易相同的格式,不带签名字段,并且flag 为0x02。xtx的锁定脚本仅允许隔离见证程序。
Extension block / xblock : xblock 是xtx 的集合,当软分叉被激活后,每个block 可能含有0个或1个xblock.
Extension UTXO / xUTXO : extension block 的UTXO集合。

衔接隔离见证程序: 一个新的隔离见证程序被定义。该隔离见证的脚本的版本号为OP_2. 该程序的长度是在4-40字节之间。首字节是必须是0x00[表示:block -> xblock]或0x01表示:xblock -> block。像P2WPKH和P2WSH, 衔接程序也可以被P2SH 封装。在主链上有两种方法去花费该种类型的交易:

1) 像一个使用普通隔离见证程序的交易一样去花费它。例如:如果衔接程序是OP_2 < 0x000014{20 bytes}>, 它可以像版本号为0的20字节程序 一样花费, 例如:P2WPKH. 在这个案例中没有什么特殊的情况发生。
2) 花费它就像一个含有特殊xtx的普通隔离见证程序,这个创世的的xtx。在这个案例中,包含这个xtx的矿工需要做更多的工作,如下所述:

* 整合UTXO: 一个特殊的UTXO,含有的 value > 所有已存在xUTXO total value的特性,并且scriptPubKey 是OP_1, (为了使文档更容易阅读,这里假设我们有一个0值的UTXO,并且它以硬编码的方式初始化整合UTXO,在这个例子中,将会有第一个矿工创造xblock,以便用来构建初始化的整合UTXO)。
* 整合交易:如果一个标准区块含有一个拓展块,则在标准块的第二个交易必须是整合交易。交易输入包含拓展块中所有的初始xtx花费的UTXO。如果它只是隔离见证程序,则隔离见证必须是空的。如果是一个P2SH隔离见证程序,则签名脚本必须是衔接隔离见证程序,并且该隔离见证数据时空的。最后的输入必须是原来的整合交易的UTXO,使用空的隔离见证和签名脚本。如果没有从xblock到main block的花费,那么唯一的输出是更新的整合交易的UTXO,交易输出金额必须>=所有xUTXO的金额总和。

目前为止,以描述了如何从main UTXO 发送比特币到 xUTXO. 简单来说,人们发送金额到一个新格式的隔离见证程序。这个新格式的交易可以灵活的在main block 和拓展块上进行花费。如果人们发送金额到主区块,不会发生什么特殊的事情。如果人们发送金额到拓展块,这些发送金额将会被整合交易的UTXO收集。

当人们发送金额到拓展块后,他们可以像main block一样在拓展块上进行交易。由于xblock 对于软分叉的用户是不可见的,我们可以对xblock 有各种大小限制,这不是这个提案的主题。

棘手的部分是从xblock 发送至 main block.

  • Returning transaction :
    返回交易是一个特殊的xtx,使用方向标识符0x01,发送金额到一个衔接隔离见证程序,这些衔接的隔离见证程序将不会被记录在xUTXO集合中。另外,一个交易输出被添加到整合交易,该交易输出使用衔接隔离见证程序和对应的金额,称为”返回UTXO”。这个返回的UTXO集直到100个确认后才可以被花费。更新的整合交易的UTXO是最后一个输出,并且没有100个100块确认的要求限制。

  • Fees collection in xblock(在xblock中交易费的集合):
    类似于标准交易,人们在拓展块中支付交易费,是通过制造交易输出值<交易输入值,因为整合交易的UTXO的值 >= 所有已存在的xUTXO集合的值,如果在拓展块中支付交易费,将减少整合交易UTXO的值,并且矿工通过普通的coinbase交易作为交易费用被支付。

  • xblock commitment:
    2个xblock merkle 根,一个采用隔离见证,一个未采用隔离见证,被恰好放置在coinbase交易隔离见证承诺结构的后面。(也许我们可以使用coinbase的预留隔离见证值,详见TBD)。如果没有xblock承诺结构,xblock 必须是空的,并且整合交易是不被允许的。

类似于任何的双向锚链提案,从侧链发送金额值主链一直是棘手的部分。但是不同于Rootstock的侧链提案,extension block 是完全强制共识性的,并且与现有的比特币交易有相同的安全级别。为了保证上述的要求,对于Returning UTXO 100个块的确认期限是非常必须的,因为块链重组之后,整合交易的交易ID非常可能改变,这将破坏来自它的交易链。因此100个区块的成熟度要求使我们回到了通常的假设,即交易在100次确认后变成永久。

注意:这将大幅度改变用户体验,因为没有用户希望100个块的锁定时间(除了矿工)。这就是为什么我不允许Returning UTXO的含有随意的锁定脚本,因为当前的用户钱包根本没有这样的锁定机制。使用一个特殊的锁定脚本可以保证接收者必须理解这个实现。应该给新钱包的用户以警告,尽管他们可以在xblock中享受较低的手续费,但是他们可能很难再向传统钱包转钱。这是一个巨大的限制。

也许我们创建一些分布式的市场(使用简单的hash-time-lock锁定交易),从而允许人们在main block 与 xblock 之间进行价值转换,以绕过100个确认限制,这实际上更便宜,因为完整的返回交易需要两步,而p2p的交换仅需要1步。

问题:

  1. 是否可能在不影响安全性的条件下简化设计?
  2. 是否可以接受没有100个块的成熟度要求的交易,从而打破一些长期假设?(这将大大提高可用性,直到重组发生)
  3. 即使需要成熟度要求,100个块的成熟度是否过多?我们从来没有一个分叉可能超过20个块。另外,由于块链的重组而导致交易链的断裂已经成为可能,因为人们在块链重组期间可能进行双花。

注意:除非明确要求,否则方向标识符是必须的,它可以保证接收者不会被支付一个Returning transaction。它可以与隔离见证的版本号组合,使用同一个字节来标识这个功能。

引用:

原文链接: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-January/013490.html


本文由 Copernicus团队 姚永芯翻译,转载无需授权。