什么是比特币的扩容?为什么要扩容?
发布网友
发布时间:2022-04-28 19:50
我来回答
共2个回答
热心网友
时间:2022-06-22 23:59
每个区块大小是一兆,大概能容纳一千多条交易的信息,如果你上一个比特币区块链浏览器上去观看的话,你会查到现在每一个区块大概都是一兆左右,已经达到了区块容量的上限,如果比特币的网络的转账越来越多,很多交易就不会在交易发生后第一个发生的区块被打包和确认。可能要等好几个区块或者时间更长,在比特币的历史上曾经遭遇过几次粉尘攻击,其中就有很多交易者在交易所(币汇)制造大量的小额转账,粉尘攻击就是有人制造出大量的小额转账,使得网络中有大量的待确认的交易,导致正常的转账不能够被确认,确认时间被延迟,影响网络的正常运转。
很多交易者的交易等待两天或者是更久才得到确认,虽然粉尘攻击是非常极端的例子,但是看现在的比特币的网络,正常的转账量,已经远远超出了他能够承受的最大的容量,每个区块大小现在都是一兆,所以扩大比特币区块容量,突破现有一兆大小的*,这个过程叫做扩容。
热心网友
时间:2022-06-22 23:59
1.比特币的扩容问题
1.1比特币交易的TPS与手续费引发的问题
比特币块大小2M,大约每10分钟出一个块。基于此,我们可以计算比特币的理论TPS:
TPS(BTC)
= Block Size / TX Size / (10 * 60)
= 2 * 1024 * 1024 / 500 / (10 * 60)
≈ 7
可见,比特币平均一秒钟内可以处理交易7笔左右的交易。并且,随着使用比特币的人数增多,比特币交易激增,容易造成比特币交易拥堵。拥堵时,交易形成队列,等待处理上链,对于使用者造成一定的困扰。
此外,交易拥堵还会造成另一个严重后果,即交易手续费激增。比特币的交易是由矿工打包处理的,矿工通过挖矿奖励、交易手续费获得报酬,因此矿工有提高交易手续费的动机。由于用户希望更低廉的手续费、而矿工希望更高额的手续费,因此市场会形成均衡,达成大家可以接受的手续费水平。但是,如果交易发生拥堵,市场的供需平衡将会被打破,天平倾斜,矿工可以要求更高的手续费(理论上矿工有权利选择优先处理和打包的交易)。
历史数据(上图:纵轴为以美元计价的交易手续费)显示,比特币单笔交易手续费曾经在2017年底达到40美元+之巅峰,即使在前后两个月时间内也稳定在15-20美元的平台上。在非活跃时期,交易手续费一般可以维持在0.3-1.5美元之间。
虽然淡季的手续费似乎是可接受的,但是人们不可能满足于现状。毕竟,比特币是被寄希望于走向大规模应用的加密货币,应当具备应对大规模交易的能力。也正因为如此,比特币的扩容问题(Scalability Problem)成为最为批评者所诟病的缺陷。
1.2 比特币的链上扩容
我们已经在前文提到,比特币的关注者已经意识到比特币扩容问题的严重性和急迫性。那么如何扩容?这是引发争议的核心环节。
第一种扩容思路称为链上(On-Chain)扩容。所谓链上扩容,顾名思义就是通过修改共识协议的参数,实现更高的TPS数据。对于比特币而言,提高出块的时间间隔、提高块容量、减少交易的容量占用都是理论可行的思路。然而,比特币作为当今市值最庞大的加密货币体系,对它的修改可谓牵一发而动全身,不得不万份谨慎。事实上,为了防止因全节点门槛过高而丧失去中心化程度,比特币几乎不可能缩短出块时间间隔。因此,可能性被压缩到了块容量和交易容量占用上。
在交易容量占用方面,比特币的框架已经决定了交易的格式和内容,能够减少的余地有限。隔离见证(SegWit)升级后,交易的结构得到了一定的优化,但是这方面带来的变化一定是很有限的。
我们不得不把目光转向块大小方面。由于比特币初始协议约定了1M的块容量,而在互联网基础设施高速发展的当下,这似乎不会构成任何压力。有部分支持者提出可以放开容量*、提高容量上限。事实上,比特币的一个分叉协议-比特币现金(BCH)正是这么做的:BCH直接把块容量提高到32M,并扬言未来还可以继续大幅提高。比特币也在隔离见证升级后,得到了将近2M的块容量。
但是,这种扩容的思路是值得商榷的:理由是扩容的收益很有限,然而对去中心化造成的损害很大。
我们可以做一个简单的比较:
·比特币现金(BCH)把块大小提升到32M,可以实现相比于比特币(BTC)16倍的TPS提升;
·闪电比特币(LBTC)通过基于UTXO的DPOS,可以实现相比于比特币(BTC)约200倍的TPS提升。
然而,BCH提高块体积,会大大增加全节点的门槛,以及区块在P2P网络中流转的效率与速度。这一点是比特币原教旨主义这非常担忧的问题。也正因此,比特币(BTC)在提高块容量方面极为谨慎,始终不愿意放开*。
1.3另一个思路
如果链上扩容的收益很有限而潜在损害很大,那么是否可以把目光转向非链上的扩容思路?
答案是可以的。非链上的扩容,可以通过链下(Off-Chain)或跨链(Cross-Chain)的思路来解决。
先说跨链。跨链指通过将比特币网络对接后绑定到一个TPS更高的区块链上,来实现实质上更高的TPS。但是这么做需要一个公认可行的跨链技术方案,以及子链(Child Chain)生态体系的方案。这种做法显得比较尴尬,因为我们必须引入一条全新的区块链。
而链下扩容正是目前人们最为关心的、也是可行性比较高的方案。大名鼎鼎的闪电网络(Lightning Network)正是这样一个链下扩容方案。
链下扩容的含义是指,交易在链下达成,并不占用链上资源;当一系列交易达成后,再将一个最终的结果传达上链。通俗地理解,你可以看成是有一家小银行帮助你完成一系列转账交易,然后再定期把余额数据传送到链上。
在下文中,我们会具体描述闪电网络的运行机制,并评价这种扩容方式是否真的有效。
2.闪电网络的基本运行原理
2.1支付通道
很多人接触到闪电网络后都会有一些疑问,例如说:既然闪电网络是链下的交易,我们又为何可以信任它呢?
这是一个好问题!如果你问出这个问题,至少说明你对区块链是有一定认识的。闪电网络的确是在链下完成交易,但是我可以保证它的运行机制是很可靠的。闪电网络依赖于一些列密码学上十分安全的方案,来完成支付通道建立、支付与余额变更、乃至节点路由等等功能。
在这里我们引入了一个新名词:支付通道。支付通道听起来有些抽象,但你可以这样理解:它是一个开设在两位交易者之间的账户,由两位交易者共同维护。发生交易时,交易会被记录在这个账户中。经过一段时间、若干次交易后,账户的余额才会在比特币链上进行登记。
闪电网络,就是一个支付通道的网络。除了支付通道的创建与关闭需要通过链上交易来实现以外,其余操作都是链下的。基于这一点,闪电网络实现了良好的链下扩展性,极大地延伸了比特币的交易潜力。
2.2 支付通道与RSMC交易
支付通道的开启、关闭、余额变动,都是通过一种被称为RSMC的交易类型来实现的。
RSMC的全称是Revocable Sequence Maturity Contract,意为序列到期可撤销合约,是由一系列交易组成的、以实现特定的功能。
我们以Alice和Bob互相转账、构建两人之间的支付通道为例,尽量简单滴解释支付通道的建立过程。
整个通道的构建步骤如下:
1)Alice、Bob各拿出自己初始拥有的BTC,构建一笔Funding交易。这笔交易的输入是两人各自拿出的BTC;输出是一个2-of-2多重签名的条件。此时,该Funding 交易尚未被两人签名、没有广播。
2)Alice创建两笔Commitment交易。
其中第一笔交易的输入花费了Funding交易,交给Bob签好名(此时Alice未签名);该笔交易含有2个输出的结构,第一个输出要求Alice和Bob的多重签名(Alice2表示Alice的另一个私钥),第二个输出要求Bob的签名。
而第二笔交易是指向第一笔交易的第一个输出,先交由Bob签名,其自身的输出指向Alice的地址。此交易带有Sequence条件,也就是要求必须前一个交易有Sequence个确认以后,该交易才能被打包进区块。
3)Bob也创建两笔Commitment交易,交易结构与Alice创建的交易完全对称。
4)双方完成以上Commitment交易的设定后,再各自对Funding交易签名,并广播之。
再来简单解释一下:
Funding交易的作用是,让双方各拿出一笔资金建立通道;后面的Commitment交易的作用是允许双方单方面要求退还(refund)这笔资金。Alice和Bob都有权利单方面触发refund。但是,谁先触发refund,对方就可以立即拿到refund,而自己要等待Sequence时间后才能拿到refund。由此,Alice与Bob双方随时都可以取消通道、终止合作,且可以保证双方资金的安全。
2.3支付通道中的余额更新
现在支付通道已经创建好了,如果Alice和Bob希望互相转账,又应该如何操作呢?
具体思路是:当双方商量发起一笔交易时,双方共同构建另外一套Commitment交易,取代原先的Commitment交易,并在交易内容中更新余额信息。
问题来了,原先的Commitment交易也还在,且双方都交换签名了,如何才能废弃?
解决的方式也非常巧妙。双方在新创建Commitment交易时,要求发起方的签名是对应一个新的私钥(姑且称为Alice3、Bob3);此时,Alice告诉Bob她原先的私钥Alice2,Bob就可以修改原先的交易为一笔新的惩罚*易,该交易的输出是自己、并且取消Sequence*;这样万一Alice私自签名Commitment交易,那么Bob就可以广播修改后的交易去实施惩罚,导致Alice失去自己的资金。因此,一旦Alice把Alice2告诉Bob,就等于宣布原先的Commitment交易作废。Bob这边也是同理。
原理确实有些复杂对吗。给出一个简单易懂的结论:在需要更新交易余额的时候,交易双方可以通过构建新的Commitment交易,保证其中任何一方,都无法单方面篡改资金余额使自己获利。
至此,我们的疑问彻底解决了。在支付通道的构建、关闭、余额变动的过程中,都能够保证双方在互不信任的情况下,实现相关交易的构建。因此,即使是链下的支付通道,也是完全去信任(Trustless)的。
3.闪电网络的节点路由
3.1 为什么需要节点路由
支付通道的建立,保证了任意两个交易方都可以在链下建立一套用于记录交易余额变更的账户,并且实现去信任框架下的交易行为。
但是,仍有一个问题尚未解决。我们知道,小额支付行为往往是高频且对象不固定的,那么是否意味着任意两个个人需要完成支付或转账交易的时候,都必须建立两人之间的支付通道呢?当然不可能!前文已经提到,支付通道的建立和关闭,都是通过链上交易实现的。如果闪电网络的用户在进行支付前都需要和对手方建立一次支付通道的话,这样就和在链上直接交易没有任何区别。这显然是荒谬的。
为了解决这个问题,我们需要在不同的支付通道之间构建一个路由(Routing)机制。
举个例子,假设Alice已经和Bob建立了支付通道,而Bob也和他的朋友Kevin建立了支付通道。现在Alice想要给Kevin转账,那么他们就可以由Bob来做中介,通过Alice→Bob→Kevin的路径来实现支付行为,不需要额外建立新的支付通道!
3.2 支付通道路由与HTLC交易
HTLC交易全称Hashed Time-lock Contract,意为哈希时间锁定的合约。简单理解,就是该合约是被一个哈希值以及一个到期时间参数所锁定。
相信大家已经厌倦了那些极为复杂的技术解释,下面就用一个简单的比方来说明HTLC的基本原理。
在上例中,我们已经找到了一条路由路径Alice→Bob→Kevin。我们假设Alice希望支付1BTC给Kevin。
首先,Bob制作了一个保险箱,存入1BTC,并交给Kevin;Alice也制作了一只类似的保险箱,存入1BTC并交给Bob。这两只保险箱的密码都是相同的,并且需要由Kevin来提供。当Kevin提供密码时,这个密码会被公示,也就是说任何人都可以看见这个密码。
交易执行时,Kevin会通过提供密码来打开Bob送来的保险箱,获得1BTC;Bob得知密码后,打开Alice送来的保险箱,获得1BTC。
我们注意到,Bob相当于交易里的中介(Escrow),他的存在使得Alice→Kevin的交易得以实现。因此,理论上Bob可以收取一定的佣金,作为撮合Alice与Kevin交易的报酬。例如,Bob可以在给Kevin的保险箱中放入0.99BTC,留下0.01BTC作为此次交易的佣金。
虽然我们的比喻可能不一定完全符合实际情况,但我相信也可以大致说明HTLC的原理了。HTLC同样是去信任(Trustless)的。这就意味着,我们可以通过由无数RSMC和HTLC合约构建的巨大网络,来支持链下的高频小额支付活动,并且无需担心资金的安全。
4.闪电网络 VS. LBTC:扩容方式之争
4.1 对闪电网络的一些评价
不得不说,闪电网络是一个很天才、也很成功的设想,至少它已经在走向大规模实施的路上了。目前来说,比特币社区密切关注闪电网络的实施情况,闪电网络内部的交易也有一定的活跃度。
但是,闪电网络距真正的大规模应用,是有一定距离的。我认为闪电网络可能存在这样几个问题,或者至少是值得关注的点:
1)闪电网络对于基础设施的要求很高。由于闪电网络的定位就是小额高频支付,那么必须有配套的设备和软件应用去支持闪电网络所需的算法。但是如果你观察当下的情形,会发现可以支持闪电网络的钱包大多还是托管式的钱包,并不是真正的去中心化钱包。然而,真正的去中心化钱包距离被普通用户接受也还有很远的距离。在这种大背景下,闪电网络的意义是存在一定疑问的。
2)闪电网络作为链下的支付设施,对中介机构以及交易双方的要求都会比链上更高!具体来说,就是需要中介机构在线运作,也需要交易双方在线,方可提供签名、构建RSMC与HTLC交易。这样的模式,对中介机构提出了挑战,能力脆弱、规模小的中介机构势必很难存活。相比之下,链上交易对于中介机构与节点都没有那么多严格的要求;新生成的比特币交易只要抛到P2P网络中,等待交易被打包并生产新区块就可以了,你无需担心太多问题。
虽然提及了一些缺点,还是必须得说在实际使用中,闪电网络到账快、手续费低的优势是存在的。此外,由于闪电网络链下结算的特征,还具有交易隐私性保护等诸多侧面优点。
我们以Alice和Bob互相转账、构建两人之间的支付通道为例,尽量简单滴解释支付通道的建立过程。
整个通道的构建步骤如下:
1)Alice、Bob各拿出自己初始拥有的BTC,构建一笔Funding交易。这笔交易的输入是两人各自拿出的BTC;输出是一个2-of-2多重签名的条件。此时,该Funding 交易尚未被两人签名、没有广播。
2)Alice创建两笔Commitment交易。
其中第一笔交易的输入花费了Funding交易,交给Bob签好名(此时Alice未签名);该笔交易含有2个输出的结构,第一个输出要求Alice和Bob的多重签名(Alice2表示Alice的另一个私钥),第二个输出要求Bob的签名。
而第二笔交易是指向第一笔交易的第一个输出,先交由Bob签名,其自身的输出指向Alice的地址。此交易带有Sequence条件,也就是要求必须前一个交易有Sequence个确认以后,该交易才能被打包进区块。
3)Bob也创建两笔Commitment交易,交易结构与Alice创建的交易完全对称。
4)双方完成以上Commitment交易的设定后,再各自对Funding交易签名,并广播之。
再来简单解释一下:
Funding交易的作用是,让双方各拿出一笔资金建立通道;后面的Commitment交易的作用是允许双方单方面要求退还(refund)这笔资金。Alice和Bob都有权利单方面触发refund。但是,谁先触发refund,对方就可以立即拿到refund,而自己要等待Sequence时间后才能拿到refund。由此,Alice与Bob双方随时都可以取消通道、终止合作,且可以保证双方资金的安全。
2.3支付通道中的余额更新
现在支付通道已经创建好了,如果Alice和Bob希望互相转账,又应该如何操作呢?
具体思路是:当双方商量发起一笔交易时,双方共同构建另外一套Commitment交易,取代原先的Commitment交易,并在交易内容中更新余额信息。
问题来了,原先的Commitment交易也还在,且双方都交换签名了,如何才能废弃?
解决的方式也非常巧妙。双方在新创建Commitment交易时,要求发起方的签名是对应一个新的私钥(姑且称为Alice3、Bob3);此时,Alice告诉Bob她原先的私钥Alice2,Bob就可以修改原先的交易为一笔新的惩罚*易,该交易的输出是自己、并且取消Sequence*;这样万一Alice私自签名Commitment交易,那么Bob就可以广播修改后的交易去实施惩罚,导致Alice失去自己的资金。因此,一旦Alice把Alice2告诉Bob,就等于宣布原先的Commitment交易作废。Bob这边也是同理。
原理确实有些复杂对吗。给出一个简单易懂的结论:在需要更新交易余额的时候,交易双方可以通过构建新的Commitment交易,保证其中任何一方,都无法单方面篡改资金余额使自己获利。
至此,我们的疑问彻底解决了。在支付通道的构建、关闭、余额变动的过程中,都能够保证双方在互不信任的情况下,实现相关交易的构建。因此,即使是链下的支付通道,也是完全去信任(Trustless)的。
3.闪电网络的节点路由
3.1 为什么需要节点路由
支付通道的建立,保证了任意两个交易方都可以在链下建立一套用于记录交易余额变更的账户,并且实现去信任框架下的交易行为。
但是,仍有一个问题尚未解决。我们知道,小额支付行为往往是高频且对象不固定的,那么是否意味着任意两个个人需要完成支付或转账交易的时候,都必须建立两人之间的支付通道呢?当然不可能!前文已经提到,支付通道的建立和关闭,都是通过链上交易实现的。如果闪电网络的用户在进行支付前都需要和对手方建立一次支付通道的话,这样就和在链上直接交易没有任何区别。这显然是荒谬的。
为了解决这个问题,我们需要在不同的支付通道之间构建一个路由(Routing)机制。
举个例子,假设Alice已经和Bob建立了支付通道,而Bob也和他的朋友Kevin建立了支付通道。现在Alice想要给Kevin转账,那么他们就可以由Bob来做中介,通过Alice→Bob→Kevin的路径来实现支付行为,不需要额外建立新的支付通道!
3.2 支付通道路由与HTLC交易
HTLC交易全称Hashed Time-lock Contract,意为哈希时间锁定的合约。简单理解,就是该合约是被一个哈希值以及一个到期时间参数所锁定。
相信大家已经厌倦了那些极为复杂的技术解释,下面就用一个简单的比方来说明HTLC的基本原理。
在上例中,我们已经找到了一条路由路径Alice→Bob→Kevin。我们假设Alice希望支付1BTC给Kevin。
首先,Bob制作了一个保险箱,存入1BTC,并交给Kevin;Alice也制作了一只类似的保险箱,存入1BTC并交给Bob。这两只保险箱的密码都是相同的,并且需要由Kevin来提供。当Kevin提供密码时,这个密码会被公示,也就是说任何人都可以看见这个密码。
交易执行时,Kevin会通过提供密码来打开Bob送来的保险箱,获得1BTC;Bob得知密码后,打开Alice送来的保险箱,获得1BTC。
我们注意到,Bob相当于交易里的中介(Escrow),他的存在使得Alice→Kevin的交易得以实现。因此,理论上Bob可以收取一定的佣金,作为撮合Alice与Kevin交易的报酬。例如,Bob可以在给Kevin的保险箱中放入0.99BTC,留下0.01BTC作为此次交易的佣金。
虽然我们的比喻可能不一定完全符合实际情况,但我相信也可以大致说明HTLC的原理了。HTLC同样是去信任(Trustless)的。这就意味着,我们可以通过由无数RSMC和HTLC合约构建的巨大网络,来支持链下的高频小额支付活动,并且无需担心资金的安全。
4.闪电网络 VS. LBTC:扩容方式之争
4.1 对闪电网络的一些评价
不得不说,闪电网络是一个很天才、也很成功的设想,至少它已经在走向大规模实施的路上了。目前来说,比特币社区密切关注闪电网络的实施情况,闪电网络内部的交易也有一定的活跃度。
但是,闪电网络距真正的大规模应用,是有一定距离的。我认为闪电网络可能存在这样几个问题,或者至少是值得关注的点:
1)闪电网络对于基础设施的要求很高。由于闪电网络的定位就是小额高频支付,那么必须有配套的设备和软件应用去支持闪电网络所需的算法。但是如果你观察当下的情形,会发现可以支持闪电网络的钱包大多还是托管式的钱包,并不是真正的去中心化钱包。然而,真正的去中心化钱包距离被普通用户接受也还有很远的距离。在这种大背景下,闪电网络的意义是存在一定疑问的。
2)闪电网络作为链下的支付设施,对中介机构以及交易双方的要求都会比链上更高!具体来说,就是需要中介机构在线运作,也需要交易双方在线,方可提供签名、构建RSMC与HTLC交易。这样的模式,对中介机构提出了挑战,能力脆弱、规模小的中介机构势必很难存活。相比之下,链上交易对于中介机构与节点都没有那么多严格的要求;新生成的比特币交易只要抛到P2P网络中,等待交易被打包并生产新区块就可以了,你无需担心太多问题。
虽然提及了一些缺点,还是必须得说在实际使用中,闪电网络到账快、手续费低的优势是存在的。此外,由于闪电网络链下结算的特征,还具有交易隐私性保护等诸多侧面优点。