Bitcoin性能扩容

区块大小扩容(Block size)

比特币引入1MB区块大小的背景是大量的粉尘攻击导致区块巨大,区块需要同步的时间长,从而引发DOS(Denial of Service)。同时全节点的带宽,存储要求增高,导致性能不足的节点无法及时与主链同步。

Pros

  1. 提高TPS
  2. 更多的交易得到确认(当前限制下,交易手续费低的费用可能无法得到确认)

Cons

  1. 节点性能要求增高准入门槛提高,导致网络全节点数量减少,挖矿中心化趋势
  2. 升级配置带来的硬分叉风险
  3. 区块全网同步时间增加,上一个区块的矿工周围节点比网络边缘节点(相对的)更早同步更早开始挖矿,中心化趋势。同时出块时间保持不变的前提下(同步时间占区块时间比重上升),会增加分叉,孤块(stale block)的可能性,以及增加交易回滚,双花等风险。类似的,减小区块时间提高出块速度也面临这个问题。
  4. 存在其他的性能提升替代方案,如隔离见证,侧链等

隔离见证(SegWit)

这个是针对比特币的改进,提出主要是要解决Transaction Malleability(交易延展性)这个问题。(因为早期的transactionId是由utxo的来源,目的以及签名计算得到的。根据密码学的特性,可以从签名通过计算得到新的的签名,并且也是密码学意义上有效的(比如椭圆曲线数字签名算法(ECDSA),这种算法下签名(r,s)和签名(r,-s (mod n))都是有效的)。因此恶意节点可以从正常交易复制出新交易,签名有效,从而生成新的transactionId。当撤回前一个交易再换utxo输入重发时,后一个交易仍然是有效的,可能会导致重复转账的欺诈行为)。此外,第三方增加Push data到验证信息的起始位置,改变交易ID(txid)同时验证结果也通过。因此,将签名信息(见证)从交易抽离出来放到交易的后面(锁定脚本,这部分是不包含在1MB块大小的计算限制里),即Hash出来的transactionId是不包括签名的,这时就无法通过改变签名计算生成新的交易。

Pros

  1. 解决Transaction Malleability这个问题
  2. 闪电网络的技术基础
  3. 区块大小限制并没有打破,旧节点仍然可以接受新的块格式(一个隔离见证的输出看起来像一个任何人都能花费的输出,该输出可以被一个空的签名见证,所以一个交易里面没有签名(签名被隔离)也可以通过旧节点的验证)。后相兼容的软分叉。

Cons

  1. 每笔交易平均250字节,见证部分的数据约为150字节。这样相当于实际上增大了区块大小,隔离见证的整个区块大小为2.5到3MB左右。增加区块实际大小带来的风险依然存在(当然,也有通过将见证信息放在侧链上,交易主链通过引用的方式)。

bips/bip-0062.mediawiki :Transaction Malleability的官方文档
What is SegWit and How it Works Explained

侧链(Sidechain)

侧链只需符合侧链协议,能够与主链进行安全的资产/数据转移的都可以成为侧链,可以作为二层网络分担主链上的压力(例如比特币闪电网络进行结算),或者实现更复杂的逻辑功能,将主链作为最后的清算链,另外也可以实现异构链间的资产转移。实现的技术基础是双向锚定(Two-way Peg),通过双向锚定技术,可以实现暂时的将数字资产在主链中锁定,同时将等价的数字资产在侧链中释放,同样当等价的数字资产在侧链中被锁定的时候,主链的数字资产也可以被释放。具体有多种实现方式,常见的是SPV(Simplified Payment Verification)。SPV主要涉及到两个东西, 第一个是Merkle Tree,另一个是布隆过滤器(Bloom Filter)。譬如说转账后watch event,如果不在乎隐私的话, 可以直接告诉全节点所关注的地址就可以;但是如果不想暴露隐私, 那就把关注的信息映射到BF上, 然后全节点返回所有命中BF的event。

双向锚定分为以下几个阶段:

  1. 用户在主链上将数字资产发送到主链的一个特殊的地址,把数字资产锁定在主链上。
  2. 该锁定会等待一个确认期,确认期的作用是等待锁定交易被更多区块确认,可防止假冒锁定交易和拒绝服务攻击。
  3. 确认期结束后,用户在侧链上创建一个对应的带有SPV证明的交易,同时验证主链上的数字资产已经被锁住,然后就可以在侧链上打开具有相同价值的另一种数字资产。该交易称为赎回交易,SPV工作量证明是指赎回交易所在区块的工作量证明。
  4. 当这种数字资产返回到主链上时,该过程会进行重复。它们被发送到侧链上锁定的输出中,锁定一个竞争期,竞争期的作用是防止双花。然后就可以创建一个SPV证明,来将其发送回主区块链上,以解锁主链上的数字资产。

全面理解区块链侧链技术 : 提及多种侧链实现方式

闪电网络(Bitcoin lightning network)

在侧链建立点对点通道channel,进行小额和持续多次的资产往来,然后等达成共识后关闭通道,将资产合约发主链上完成结算。核心思想是提高欺诈成本,进行惩罚。

参考 什么是比特币的闪电网络?一文中的例子,在双方达成C2a共识后(C1a和C2a始终由Alice持有,达成c2a时Alice需要将Alice2秘钥给到Bob。这里C1a只有Alice持有,因此Bob即使拥有Alcie2秘钥也无法签发经过双方原始秘钥Alice和Bob签名的合同),若然Alice广播C1a并且关闭通道(主动关闭通道方需要等待指定seq数量的块后才能执行RD1a),此时Bob监控到Alice广播旧的分配合约(这需要Bob节点在线,或者事先构建好BR1a交付给信任的第三方或者机器人在Alice欺诈时自动触发),可以使用Alice2秘钥对BR1a签名并广播,这个是无需等待即时结算的,所以原本属于Alice的都分配给Bob。这就是欺诈作恶成本。

之所以说Segwit隔离见证是闪电网络的基础,是因为Funding Tx只有在第一个Commitment Tx完成签名并交换之后,才会继续签名和广播(否则,广播Funding Tx后若Bob拒绝提供第一个Commitment的签名,这笔资金将被永久锁定,无法消费。拥有Commitment Tx后可以广播赎回)。此时第一个Commitment Tx消费的Funding Tx未曾广播入链,因此需要保证该Funding Tx未被篡改,即txid的固定性。

而对于多方中转交易,在上文中描述有误。根据Bitcoin Lightning Network Payment Channels Explained - Thaddeus Dryja(Youtube视频,需要梯子),在上文的例子中,Alice和Bob之间没有建立直接支付通道,需要经过第三方Charlie中转(与Alice和Bob各自建立支付通道,非可信第三方),同时Alice与Bob之间需要建立正常的TCP/IP等通信通道。若Alice需要向Bob转账,Bob选择随机数R,并且生成哈希H,将H通过通信信道发给Alice。Alice与Charlie之间达成合约,即Charlie能在指定时间内展示出正确的R值,Alice即支付指定金额,否则撤回该合约。同理Charlie与Bob间也是如此。

实际上,这样的Charlie相当于目前金融系统里的支付宝角色,一个持久而且大多数节点建立支付通道的节点(或者节点群,类似与Alice与Bob间经过多个节点,这些节点群之间建立支付通道,因此Alice与Bob之间能比较容易找到路由)。同时,对于频繁支付或者大额支付的节点(假设Bob是商家),则Bob与Charlie间的通道容量需要足够大,也就是双方在主链上锚定的资产价值足够高,否则需要经常的关闭(主动方提现需要等一定区块时间)和建立多个通道。这样的并非极端意义的分布式去中心化,但已经利用了区块链的无需信任属性。