隔离见证:将经济激励与资源消耗相匹配
简单回顾下隔离见证。
SegWit(隔离见证)是改变了数据存储方式的协议升级,2015年由Pieter Wiulle首次提出,2017年5月10日首先在莱特币上实施,同年8月在比特币主网实施。
很多人将SegWit成为比特币期待已久的扩容解决方案。 由于比特币主协议将区块大小限制在1MB, 这也意味着比特币处理的交易数量只能是每秒7次左右。 低吞吐是限制比特币成为可大范围使用的支付系统的阻力之一。
虽然升级允许比特币区块支持更多交易,但设计SegWit的初衷是修复比特币代码中被称为交易延展性的漏洞。 这个漏洞允许任何人改变修改交易ID(及随后的哈希)但不包含内容的小细节。 虽然不是比特币的关键问题,但它有碍诸如第二层协议和智能合约等更复杂功能的开发。
SegWit通过删除签名信息(也称为“见证”信息)并将其存储在基本交易块之外来确定固定交易的可塑性。 借此,可以更改签名和脚本而不影响交易ID。
没有签名信息,交易的重量就会小得多。 这意味着区块里可以装更多东西。比特币可以在不改变块大小的情况下提升吞吐量。
SegWit引入了一个 “块重量”的新概念。 这是包含和不包含签名数据的块大小的混合,最大4MB,而处理基本交易的块大小仍限制在1MB。 这意味着SegWit升级与之前的协议兼容,避免了硬分叉。
因此,SegWit不会增加块大小限制,但它可以在1MB块内允许更多的交易处理。 4MB上限包含隔离见证数据,这在技术上不构成1MB基本交易块。
SegWit使诸如闪电网络等第二层协议的开发,向前迈进了一大步。 可延展性修复使任何依赖未经证实的交易的功能在风险上降低,设计上简便。
闪电网络将通过高频的链下小额交易进一步提升比特币的交易容量,只有在用户准备好以后才会落回比特币区块链。
SegWit的激活还推动了MAST(支持更复杂的比特币智能合约),Schnorr签名(进一步提升交易容量)和TumbleBit(匿名顶层网络)等其他功能的开发工作。
并非比特币社区的每个人都同意SegWit是比特币一直在等待的解决方案。 有些人认为这是一个破罐破摔的例子,充其量算是个临时的解决方案。
比特币硬分叉比特币现金就是抵制SegWit的结果,硬分叉在增加块大小与依赖新的交易结构两者中毅然的选择了前者。
尽管SegWit优势明显,但升级进展缓慢。像素时间,14%的交易使用这种新格式。
主要原因是许多钱包还不支持SegWit。 Trezo、Ledger、Electrum和Kraken等钱包已升级该服务。 Coinbase目前正在进行相关的开发,预计将于2018年初实施升级。
随着主比特币代码也进行了SegWit友好的调整,使用和附加功能方面或许会有提升。 比特币核心在其网站上列出了SegWit整合相关业务和项目的名单,像素时间已部署19个实施,还有90个实施已准备就绪。
随着更多钱包接受升级,使用SegWit结构的交易比例将增加,并且比特币费用会随区块包含更多交易数量而下降。 此外,还会推动闪电网络等第二层协议的开发,进一步提升比特币的使用范围与潜力。 突飞猛进不在一日,但SegWit绝对代表了向前的一大步。
比特币挖矿节点与全节点使用资源支持比特币网络和区块链时会产生费用。 随着比特币的规模增加,资源(包括:CPU、网络带宽、磁盘空间、内存等)成本也会增加。 矿工处理的每笔交易产生的资源成本,通常以矿工费的形式进行补偿,而矿工费与交易大小(字节数)直接相关。 非挖矿全节点没有补偿,之所以承担相应的资源消耗,可能是因为该节点被用来运营比特币相关的业务,因此需要运行一个权威的、完全有效的全索引的节点。
若没有交易费用限制,比特币数据增长可能大幅增加。 费用设置意在通过市场的价格发现机制,匹配比特币用户的需求与其交易对网络带来的负担(就是不让你把有的没的都往区块链上放)。
根据交易大小计算相应费用这种方式,视处理交易中包含数据所需成本一致。 但就全节点和矿工来说,交易某些部分的成本实际上高于其他部分。 上链的每笔交易都会影响节点上四种资源的消耗:
磁盘空间:区块链中存储着每一笔交易,随上链交易数量的增加,区块链大小不断增大。区块链存储在磁盘上,可以通过“修剪”较早的交易实现存储优化。
CPU:每一笔交易都必须验证,因此需要CPU时间。
带宽:每笔交易至少在网络中传输(泛洪传播)一次。 若不进行优化,交易作为区块的一部分将再次传输,因此对网络容量造成双倍影响。
内存:交易验证节点内存中保存“UTXO集”,即所有未花费交易输出(unspent transaction outputs,确切的说应该叫没花出去的交易输出)的列表。 由于内存比磁盘至少贵出一个数量级,因此UTXO集的增长与运行节点的成本不成比例。
从列表中可以看出,并非交易的每个部分都对运行节点的成本或比特币扩容以支持更多交易的能力产生同等影响。 交易中最昂贵的部分是新创建的输出, 因为它们被添加到内存里的UTXO集中。
相比之下,签名(又叫见证数据)对网络及运行节点成本造成的负担最小,因为见证数据验证一次后便不再使用。 此外,节点在收到新的交易并验证见证数据后,可以马上丢弃该见证数据。 若根据交易大小计算费用,又没有对这两种数据进行合理的区分,那么费用与交易产生的成本实际上并没有很好的匹配。
目前的费用结构实际上是存在问题,因为见证数据是交易中最大的部分。
费用产生的激励很重要,因为会影响钱包的一些行为。 所有钱包都必须实施一些策略来对交易进行组合,因此需要考虑诸如:隐私,比方说减少地址重复使用、碎片化,比方说大量找零,以及费用等许多因素。 如果费用不断促使钱包在交易中尽可能少地使用输入,那么就会产生UTXO挑拣并改变地址相关策略,进而膨胀UTXO集。
交易输入消耗UTXO,同时在输出中产生新UTXO。 因此,输入多于输出的交易将导致UTXO集的减少;相反,输出多于输入的交易,UTXO集增加。 考虑一下输入和输出之间的区别,把这个区别叫做 “新UTXO净值(Net-new UTXO)”。
新UTXO净值是个重要的指标,能够揭示交易对内存UTXO集这个最昂贵的网络资源产生何种影响。新UTXO净值为正,代表交易对内存UTXO集造成负担。新UTXO净值为负,代表减轻负担。 因此,应该鼓励新UTXO净值为负数,或者为零的交易。
来看一个例子,有无验证隔离的情况下,交易费计算出的不同费率。
交易A:3个输入、2个输出,新UTXO净值为-1;说明交易A多消耗一笔UTXO,因此UTXO集也减少1笔UTXO。
交易B:2个输入、3个输出,新UTXO净值为1;说明交易B向UTXO集中添加一笔UTXO,因此给整个比特币网络带来额外成本。
两笔交易均使用多重签名(2/3)脚本,为演示复杂脚本如何增加隔离见证对费用的影响。 假设交易费为30聪/每字节,验证数据费用打75折:
无隔离见证
交易A费用:25710 聪
交易B费用:18990聪
隔离见证
交易A费用:8130聪
交易B费用:12045聪
两笔交易在实施隔离见证时都比较便宜。 但对比两笔交易的成本后发现,隔离见证前,新UTXO净值为负数的交易,费用更高。隔离见证后,通过避免无意惩罚多个输入的交易,交易费用与激励可以更好的匹配来将新UTXO的产生降至最低。
因此,隔离见证对比特币用户支付的交易费存在两方面的主要影响。
首先,隔离见证通过给见证数据打折并提升比特币区块链的容量来降低交易总成本。 其次,减少了的见证数据也纠正了的错位的激励措施,这种不良匹配会导致UTXO集进一步膨胀。
资料:
https://segwit.org/segregated-witness-and-aligning-economic-incentives-with-resource-costs-7d987b135c00segwit.org