当前位置:存储行业动态 → 正文

通过软分叉将比特币链上扩容3584倍?Bitcoin Forward Blocks剖析

责任编辑:zsheng |来源:企业网D1Net  2018-10-15 14:13:15 本文摘自:魔牛财经

通过解析,我们认为Forward Blocks一定有可取之处。它产生耦合形式的链,forward block链上直接扩容,然后通过时间扭曲(即time warp,可以简单理解为修改时间戳)的方式,让比特币原链产出更多的区块,变相降低区块间隔,“欺骗”原链上的老节点,最终实现老节点向新节点的升级过渡。但是在实际操作中,即便是软分叉,想取得足够多的共识也绝非易事,因此广泛应用的可能性并不是很高。

报告正文

1.背景介绍

2018年10月6日,在东京举办的第五次比特币扩容大会(Scaling bitcoin)上,比特币开发者Mark Friedenbach提出了一种比特币链上扩容软分叉方案“Forward Blocks” [1],在社区引起了广泛讨论。Mark Friedenbach不但是一名比特币开发者,而且是区块链技术公司Blockstream公司联合创始人和研究工程师。Blockstream公司在业界较为知名,是比特币的闪电网络(lightning Network)方案的奠定和重要开发机构之一。同时,Blockstream也是比特币隔离见证(Segwit)升级上的推动者之一。因此,Forward Blocks的提出广受关注。

在Forward Blocks论文中,Mark Friedenbach声称通过这种方案能够实现以下特性:

-提供一种链上扩容方式,使比特币的交易处理量提高3584倍,并以软分叉实现;

-提供一种PoW的升级(可选),并以软分叉实现;

-限制验证成本的增加;

-通过类似分片(sharding)的方式降低中心化风险;

-提供一种未来的账本架构的扩展,包括:降低费率、保密转账、环签名和侧链转换等。

2.Forward Blocks的软分叉方案

在了解Forward Blocks的软分叉之前,我们必须了解什么是硬分叉,什么是软分叉。在比特币区块链中,无论是挖矿和转账都要通过客户端参与。最初中本聪开发的比特币客户端是bitcoin-qt(现在名为bitcoin core)。本质上,分叉就是客户端的升级。软硬分叉的定义涉及到新老节点对新老节点发出的区块的认可度问题,同时和新老节点的算力之比也有关,因此细分之后较为复杂。为了文章篇幅简洁和便于理解,本文将硬分叉和软分叉的模型做了一定程度的简化。

参考bitcoin.org上的定义,硬分叉是指老节点无法接受新节点发出的区块。软分叉则是指老节点仍然能够接受新节点发出的区块。其中,升级了客户端的节点就是新节点,反之则是老节点。比如说,比特币现金(BCH)是一种硬分叉,因为它修改了比特币的交易数据结构。导致在两个区块链之间,BCH节点无法接受BTC节点发出的区块,BTC节点也无法接受BCH节点发出的区块,但双方都接受分叉之前的区块。而隔离见证(Segwit)则是一种软分叉,虽然隔离见证也修改了交易数据结构(解锁脚本字段),但是通过一种方式让老节点仍然能接受新节点发出的区块。因此在比特币区块链中,无论你的客户端(节点)是否升级了隔离见证的版本,都能接受双方节点发出的区块。

但是需要注意得是,并非所有硬分叉都会诞生两条区块链。如果全网都能达成一致,共同升级客户端,区块链仍然是一条,只是无法用老客户端参与了。比如说以太坊曾多次以硬分叉的方式进行“升级版本”,如通过硬分叉升级到“家园”版本,“大都会”版本等,都没有产生两条区块链。BCH社区在特定的主导下,也经过了多次“升级”,其实也都是通过硬分叉完成的。

然而,在一个分布式的网络中,想要达成全网共识一致是一件非常困难的事。BCH、ETC等分叉的诞生都是一次次社区共识的分裂。由于以太坊和BCH社区都有明确的领导,以太坊还有明确的升级规划,因此通过硬分叉“升级“较为容易。而相比于以太坊社区和BCH社区,比特币社区的升级则显得非常谨慎。迄今为止,比特币的绝大部分升级都是通过软分叉完成的。在中本聪还活跃的2010年时,曾有一次修复刷币漏洞是通过硬分叉完成的。

正因如此,Forward Blocks的扩容方案也竭力强调希望通过软分叉的方式来实现。同时,由于软分叉非常强调先前兼容,即老节点(客户端)仍然能够接受新节点发出的区块。为了能让老节点仍然能接受新区块,新节点常常会采用一些“欺骗”的方式骗过老客户端接受新区块,Forward Blocks也采用了这种思路的设计,我们在后文会讨论。

在Forward Blocks的设计中,一部分节点升级Forward Blocks客户端成为新节点之后,会形成松耦合形式的链,一条是名为兼容链(即比特币原链),一条是名为forward block链。PoW可能稍作修改,但本质上还是基于双sha-256的。

新节点矿工在forward block链上挖出的区块需要同时向两条链提交,这样老节点也能看到所有的交易。为了不被老节点拒绝,新节点的coinbase奖励也是从兼容链的UTXO中发出的。并且设计了难度过渡方案,让未升级的客户端在非强制的情况下,主动升级成新节点。

3.Forward Blocks的扩容方式

那Forward Blocks方案的扩容方式又是如何完成的呢?在了解它的扩容方案之前,我们还需要了解三个概念,一是比特币的难度调整机制,二是比特币时间戳确定机制,三是比特币的时间扭曲攻击。

1.比特币的难度调整机制

比特币在设计时,预计到了全网算力的不断变化,为了能让比特币在全网算力不断变化时,仍然能够确保每个区块的产生时间平均约10分钟,因此特别设计了难度调整机制。我们都知道,比特币新区块的寻找实际是矿工不断在做哈希运算,通过哈希运算,第一个计算出来的矿工可以发出新区块。假如算力不断上涨,计算能力越来越强,那么理论上区块就会被更快地计算出来。为了防止这种情况发生,比特币协议中规定每2016个区块产生之后,比特币就需要进行难度调整,即:如果上个2016区块周期(大约2016*10/60/24=14天)中,算力上涨,反映为矿工能用更短时间找到新区块,则增加难度;如果算力下降,则降低难度,来确保下一个2016区块的周期内,比特币的出块速度仍然保持约10分钟。

2.比特币时间戳确定机制

我们生活在中心化世界,因此找一个权威机构确定时间并非什么难事。然而,比特币是一个完全分布式的网络,没有办法找一个权威机构来敲定时间。因此比特币的时间戳的时间实际上是一个世界协调时的分布式升级版。在比特币网络中,每个矿工节点都有自己的本机时间(需要折算为Unix时间),同时每个节点链接多个其他节点,时间戳的选取来自于该节点所有链接节点(大于某值为合法)的中位数,并且该时间需要与本机时间相差不超过70分钟,且不小于前11个区块的中位数时间,同时别的节点会拒绝时间与自己相差2小时的区块。

3.比特币的时间扭曲攻击

比特币的时间扭曲攻击(time warp attack)则是一种通过“玩弄“比特币时间戳和难度调整机制的一种攻击方式。比特币的难度调整是以每个周期的第1个和第2016个区块的时间之差调整的。如果2016个区块的时间长于14天,则系统降低难度。因为时间戳没有一个权威的机构来确认,假如一部分矿工节点联手,将新区块的时间戳不断往前调整,比特币系统会误判断该2016区块周期太长,而降低难度。然而,虽然难度降低,矿工的算力并没有减少,因此,矿工能以短于10分钟的间隔时间大量出块。当然,进行时间扭曲(time warp)对矿工节点的算力有要求,而且攻击方式还包括让目标节点脱机等。更详细的讨论可以参考附录文章[2] [3]。

因为比特币的算力基数很大,目前尚未观察过任何对比特币的时间扭曲攻击。但是,在2018年5月,有攻击者曾成功使用时间扭曲的方式攻击了加密货币Verge[4]。此外,有报道表示有节点在比特币的测试网络上亦成功尝试过时间扭曲攻击。

在了解了上述概念后,让我们回到Forward Blocks方案。我们上文提到,软分叉之后,会形成松耦合形式的链,一条是兼容链(即比特币原链),一条是forward block链。它的扩容方案比较简单,就是直接提升forward block链的上区块大小(Block Weight),但不提升兼容链(即比特币原链)上的区块大小。在forward block链上,每个2016区块周期按照3.125%的速度增加区块大小,最终增加到每个区块大小为768 MWe*。同时,为了抗拒中心化审查,forward block链上的比特币区块间隔会提高至15分钟,因此初始区块体积为6MWe。

提升区块大小来扩容的方式我们并不陌生,但是提升区块大小会破坏交易信息的数据结构,因此老节点无法认可扩容后的新节点发出的区块,从而导致硬分叉。因此Forward Blocks提出,在兼容链(即比特币原链)上进行时间扭曲操作,来骗过老节点。

在时间扭曲操作之后,兼容链上会产生大量新区块,时间间隔也会降低,这样兼容链上也可以达到和forward block链(即新链)同样数量的交易处理。换句话说,假如forward block链上额外处理了15 MB的交易信息,那么就让兼容链通过时间扭曲操作额外多爆15个1 MB新区块来处理这些额外的交易。这样的话,就能保证老节点能够看到所有交易,而不至于导致硬分叉。

关键字:比特

本文摘自:魔牛财经

x 通过软分叉将比特币链上扩容3584倍?Bitcoin Forward Blocks剖析 扫一扫
分享本文到朋友圈
当前位置:存储行业动态 → 正文

通过软分叉将比特币链上扩容3584倍?Bitcoin Forward Blocks剖析

责任编辑:zsheng |来源:企业网D1Net  2018-10-15 14:13:15 本文摘自:魔牛财经

通过解析,我们认为Forward Blocks一定有可取之处。它产生耦合形式的链,forward block链上直接扩容,然后通过时间扭曲(即time warp,可以简单理解为修改时间戳)的方式,让比特币原链产出更多的区块,变相降低区块间隔,“欺骗”原链上的老节点,最终实现老节点向新节点的升级过渡。但是在实际操作中,即便是软分叉,想取得足够多的共识也绝非易事,因此广泛应用的可能性并不是很高。

报告正文

1.背景介绍

2018年10月6日,在东京举办的第五次比特币扩容大会(Scaling bitcoin)上,比特币开发者Mark Friedenbach提出了一种比特币链上扩容软分叉方案“Forward Blocks” [1],在社区引起了广泛讨论。Mark Friedenbach不但是一名比特币开发者,而且是区块链技术公司Blockstream公司联合创始人和研究工程师。Blockstream公司在业界较为知名,是比特币的闪电网络(lightning Network)方案的奠定和重要开发机构之一。同时,Blockstream也是比特币隔离见证(Segwit)升级上的推动者之一。因此,Forward Blocks的提出广受关注。

在Forward Blocks论文中,Mark Friedenbach声称通过这种方案能够实现以下特性:

-提供一种链上扩容方式,使比特币的交易处理量提高3584倍,并以软分叉实现;

-提供一种PoW的升级(可选),并以软分叉实现;

-限制验证成本的增加;

-通过类似分片(sharding)的方式降低中心化风险;

-提供一种未来的账本架构的扩展,包括:降低费率、保密转账、环签名和侧链转换等。

2.Forward Blocks的软分叉方案

在了解Forward Blocks的软分叉之前,我们必须了解什么是硬分叉,什么是软分叉。在比特币区块链中,无论是挖矿和转账都要通过客户端参与。最初中本聪开发的比特币客户端是bitcoin-qt(现在名为bitcoin core)。本质上,分叉就是客户端的升级。软硬分叉的定义涉及到新老节点对新老节点发出的区块的认可度问题,同时和新老节点的算力之比也有关,因此细分之后较为复杂。为了文章篇幅简洁和便于理解,本文将硬分叉和软分叉的模型做了一定程度的简化。

参考bitcoin.org上的定义,硬分叉是指老节点无法接受新节点发出的区块。软分叉则是指老节点仍然能够接受新节点发出的区块。其中,升级了客户端的节点就是新节点,反之则是老节点。比如说,比特币现金(BCH)是一种硬分叉,因为它修改了比特币的交易数据结构。导致在两个区块链之间,BCH节点无法接受BTC节点发出的区块,BTC节点也无法接受BCH节点发出的区块,但双方都接受分叉之前的区块。而隔离见证(Segwit)则是一种软分叉,虽然隔离见证也修改了交易数据结构(解锁脚本字段),但是通过一种方式让老节点仍然能接受新节点发出的区块。因此在比特币区块链中,无论你的客户端(节点)是否升级了隔离见证的版本,都能接受双方节点发出的区块。

但是需要注意得是,并非所有硬分叉都会诞生两条区块链。如果全网都能达成一致,共同升级客户端,区块链仍然是一条,只是无法用老客户端参与了。比如说以太坊曾多次以硬分叉的方式进行“升级版本”,如通过硬分叉升级到“家园”版本,“大都会”版本等,都没有产生两条区块链。BCH社区在特定的主导下,也经过了多次“升级”,其实也都是通过硬分叉完成的。

然而,在一个分布式的网络中,想要达成全网共识一致是一件非常困难的事。BCH、ETC等分叉的诞生都是一次次社区共识的分裂。由于以太坊和BCH社区都有明确的领导,以太坊还有明确的升级规划,因此通过硬分叉“升级“较为容易。而相比于以太坊社区和BCH社区,比特币社区的升级则显得非常谨慎。迄今为止,比特币的绝大部分升级都是通过软分叉完成的。在中本聪还活跃的2010年时,曾有一次修复刷币漏洞是通过硬分叉完成的。

正因如此,Forward Blocks的扩容方案也竭力强调希望通过软分叉的方式来实现。同时,由于软分叉非常强调先前兼容,即老节点(客户端)仍然能够接受新节点发出的区块。为了能让老节点仍然能接受新区块,新节点常常会采用一些“欺骗”的方式骗过老客户端接受新区块,Forward Blocks也采用了这种思路的设计,我们在后文会讨论。

在Forward Blocks的设计中,一部分节点升级Forward Blocks客户端成为新节点之后,会形成松耦合形式的链,一条是名为兼容链(即比特币原链),一条是名为forward block链。PoW可能稍作修改,但本质上还是基于双sha-256的。

新节点矿工在forward block链上挖出的区块需要同时向两条链提交,这样老节点也能看到所有的交易。为了不被老节点拒绝,新节点的coinbase奖励也是从兼容链的UTXO中发出的。并且设计了难度过渡方案,让未升级的客户端在非强制的情况下,主动升级成新节点。

3.Forward Blocks的扩容方式

那Forward Blocks方案的扩容方式又是如何完成的呢?在了解它的扩容方案之前,我们还需要了解三个概念,一是比特币的难度调整机制,二是比特币时间戳确定机制,三是比特币的时间扭曲攻击。

1.比特币的难度调整机制

比特币在设计时,预计到了全网算力的不断变化,为了能让比特币在全网算力不断变化时,仍然能够确保每个区块的产生时间平均约10分钟,因此特别设计了难度调整机制。我们都知道,比特币新区块的寻找实际是矿工不断在做哈希运算,通过哈希运算,第一个计算出来的矿工可以发出新区块。假如算力不断上涨,计算能力越来越强,那么理论上区块就会被更快地计算出来。为了防止这种情况发生,比特币协议中规定每2016个区块产生之后,比特币就需要进行难度调整,即:如果上个2016区块周期(大约2016*10/60/24=14天)中,算力上涨,反映为矿工能用更短时间找到新区块,则增加难度;如果算力下降,则降低难度,来确保下一个2016区块的周期内,比特币的出块速度仍然保持约10分钟。

2.比特币时间戳确定机制

我们生活在中心化世界,因此找一个权威机构确定时间并非什么难事。然而,比特币是一个完全分布式的网络,没有办法找一个权威机构来敲定时间。因此比特币的时间戳的时间实际上是一个世界协调时的分布式升级版。在比特币网络中,每个矿工节点都有自己的本机时间(需要折算为Unix时间),同时每个节点链接多个其他节点,时间戳的选取来自于该节点所有链接节点(大于某值为合法)的中位数,并且该时间需要与本机时间相差不超过70分钟,且不小于前11个区块的中位数时间,同时别的节点会拒绝时间与自己相差2小时的区块。

3.比特币的时间扭曲攻击

比特币的时间扭曲攻击(time warp attack)则是一种通过“玩弄“比特币时间戳和难度调整机制的一种攻击方式。比特币的难度调整是以每个周期的第1个和第2016个区块的时间之差调整的。如果2016个区块的时间长于14天,则系统降低难度。因为时间戳没有一个权威的机构来确认,假如一部分矿工节点联手,将新区块的时间戳不断往前调整,比特币系统会误判断该2016区块周期太长,而降低难度。然而,虽然难度降低,矿工的算力并没有减少,因此,矿工能以短于10分钟的间隔时间大量出块。当然,进行时间扭曲(time warp)对矿工节点的算力有要求,而且攻击方式还包括让目标节点脱机等。更详细的讨论可以参考附录文章[2] [3]。

因为比特币的算力基数很大,目前尚未观察过任何对比特币的时间扭曲攻击。但是,在2018年5月,有攻击者曾成功使用时间扭曲的方式攻击了加密货币Verge[4]。此外,有报道表示有节点在比特币的测试网络上亦成功尝试过时间扭曲攻击。

在了解了上述概念后,让我们回到Forward Blocks方案。我们上文提到,软分叉之后,会形成松耦合形式的链,一条是兼容链(即比特币原链),一条是forward block链。它的扩容方案比较简单,就是直接提升forward block链的上区块大小(Block Weight),但不提升兼容链(即比特币原链)上的区块大小。在forward block链上,每个2016区块周期按照3.125%的速度增加区块大小,最终增加到每个区块大小为768 MWe*。同时,为了抗拒中心化审查,forward block链上的比特币区块间隔会提高至15分钟,因此初始区块体积为6MWe。

提升区块大小来扩容的方式我们并不陌生,但是提升区块大小会破坏交易信息的数据结构,因此老节点无法认可扩容后的新节点发出的区块,从而导致硬分叉。因此Forward Blocks提出,在兼容链(即比特币原链)上进行时间扭曲操作,来骗过老节点。

在时间扭曲操作之后,兼容链上会产生大量新区块,时间间隔也会降低,这样兼容链上也可以达到和forward block链(即新链)同样数量的交易处理。换句话说,假如forward block链上额外处理了15 MB的交易信息,那么就让兼容链通过时间扭曲操作额外多爆15个1 MB新区块来处理这些额外的交易。这样的话,就能保证老节点能够看到所有交易,而不至于导致硬分叉。

关键字:比特

本文摘自:魔牛财经

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^