比特币是世界上最早、最安全、最去中心化、市值最高的区块链。然而,其较低的每秒交易量 (TPS) 和有限的编程能力经常受到批评,难以支持大规模应用,严重阻碍了比特币生态系统的发展。作为比特币生态系统的建设者,本文将带领你了解比特币扩容解决方案的过去、现在和未来。 本文是比特币可扩展性系列文章的第一篇,主要介绍比特币主网上历史上实现的原生扩容解决方案。下一篇文章将讨论具有更高扩容性的链下扩容方案。敬请期待。 增加区块大小限制2010 年,中本聪在bitcoin-core中引入了1MB 的区块大小限制。之后十多年这一明确限制一直未曾修改。 有趣的是,中本聪并没有公开解释他提出区块大小限制的原因,这个限制“隐藏”在代码合并的 PR 中,没有详细解释。在中本聪离开几年后,社区在区块大小限制问题上出现了严重分歧,对更大区块的需求引发了广泛的讨论。 区块越大,容纳的交易数量越多。假设共识时间不变,区块越大,TPS 越高。 为什么TPS这么重要?因为在1MB的区块限制下,以当时的交易规模,每秒能完成的交易数量只能有3-7笔,对于大规模应用是远远不够的,无法实现比特币“点对点的电子现金系统”的愿景。 然而,更大的区块也带来不同程度的问题。 首先,更大的区块对存储、计算和带宽等硬件的要求更高,导致全节点的运营成本增加。比特币的历史交易数据迅速扩展,需要新的全节点花费更多时间与网络同步。这些要求降低了用户操作全节点的意愿,从而降低了去中心化程度。 其次,区块越大,节点间的同步时间越长,出现孤块的可能性越大,导致区块重组更加频繁,分叉风险增大,大大降低安全性。 后来这个问题被Vitalik称为区块链不可能三角,即区块链无法同时实现去中心化、可扩展性和安全性。区块越大,可扩展性就越强,但代价是去中心化和安全性越弱。
最重要的是,修改区块大小限制需要硬分叉,这就要求全网所有节点同时升级,否则将导致网络分裂。这对于依赖去中心化共识的比特币来说并不是一个好的选择。在中本聪的影响下,避免硬分叉似乎已经成为比特币事实上的原则。 不幸的是,分裂确实发生了。尽管社区内部缺乏共识,但一些矿工和开发人员还是更改了客户端中的区块大小限制,最终导致网络分叉。2016 年,Bitcoin Classic 采用 BIP 109 将区块大小限制分叉至 2MB;2016 年,Bitcoin XT 客户端采用 BIP 101,将区块大小提高至 8MB。然而,绝大多数矿工和用户仍留在我们现在所知的比特币主网上。 通过硬分叉明确增加区块大小的努力失败了。 隔离见证如果硬分叉不可接受,那么软分叉可以作为解决方案吗?SegWit 就是其中一种方法。 见证是解锁UTXO的凭证,长期以来,见证被放置在UTXO的输入脚本字段中以完成交易。然而,这种方式存在循环依赖、第三方交易延展性、第二方交易延展性等潜在问题。 早在 2011 年,开发者就注意到了这个问题,并提出了隔离见证(SegWit)的解决方案,即将见证与其他交易数据分开。但当时的硬分叉提案并未获得支持,直到 2015 年 SegWit 软分叉的提出才最终实现合并。 SegWit是如何通过软分叉实现向后兼容的呢?这主要包括以下两个方面: SegWit 软分叉允许新交易使用空输入脚本,并在区块结构中添加见证字段以存储见证。由于升级前的比特币核心支持空输入脚本,因此旧版本节点不会拒绝新版本生成的区块。此外,通过使用版本字段,旧的交易类型仍可使用,并且节点会根据版本以不同的方式处理它们。 SegWit 中的扩展是通过权重的形式实现的,见证字节的权重为 1,其他数据字节的权重为 4,从而限制每个区块的最大权重为 400 万。为什么要为不同类型的数据分配不同的权重?一个常识性的想法是,见证数据在使用时只起到验证作用,不需要长期保存在存储中,因此成本相对较低,权重也较低。 这实际上是变相提高了区块大小限制,理论上的区块大小上限被提升到了 4MB(完全归功于见证数据),平均下来区块可以达到 2MB 左右。从旧区块结构来看,这还是秉承了中本聪当初每个区块不超过 1MB 的限制。 Taproot利用比特币的操作码比如OP_IF,我们可以为比特币的花费脚本设置复杂的条件,比如时间锁、多重签名等。然而,复杂的花费条件往往需要多次输入和签名进行验证,从而增加区块负载并降低交易速度,同时暴露所有的支付条件,导致隐私泄露。 Taproot 使用 MAST 来增强比特币,用户使用 Merkle Trie 来表示花费条件。每个叶节点代表一个花费脚本,在花费过程中,只需要提供实际执行的脚本和相应的 Merkle Path,而无需透露其他条件。这可以减少区块空间消耗并提高隐私性。 Taproot 升级还引入了 Schnorr 签名,该签名具有加法同态特性,允许签名聚合和批量验证,从而提高整体每秒交易数 (TPS)。Schnorr 签名的聚合签名优势大大简化了验证多重签名交易的逻辑。以前,ECDSA 签名需要将多个签名发送到链上才能与脚本匹配,而 Schnorr 签名只需要将单个链下聚合签名发送到链上,从而减少了多重签名支付对链上空间的使用。 通过将 Schnorr 签名与 MAST 相结合,并使用支付到合约 (Pay to Contract,P2C) 概念,通过 MAST 根提交复杂的合约代码,以调整并生成支持单一 Schnorr 签名支付的标准比特币公钥。 有趣的是,由于 Schnorr 签名的单个签名和多个签名在链上看起来相同,因此复杂脚本、多重签名和单次签名的逻辑在链上无法区分,从而进一步增强了隐私性。
结论比特币的可扩展性解决方案反映了其在提高性能的同时保持去中心化和安全性的不断发展的方法。 最初,考虑增加区块大小,直接解决低交易率的问题,但引发与节点成本和网络分叉相关的问题,对社区共识提出挑战。 SegWit 的引入标志着一项重大进步,通过软分叉优化区块容量,确保向后兼容性并避免分裂的硬分叉。 随后,Taproot 通过 MAST 和 Schnorr 签名进一步完善了可扩展性和隐私性,减少了交易空间并提高了验证效率。更重要的是,Taproot 可以在比特币上实现复杂的脚本编程,为未来的扩展尝试铺平了道路。 这些发展凸显了比特币谨慎而创新地向更具可扩展性和更强大的网络迈进,这对其作为全球支付系统的未来至关重要。 然而,这些扩容方案的影响还不足以实现“点对点电子现金系统”的愿景。
|