可扩展性

来自BitcoinWiki
这是此页面已获认可并且最新的版本。
跳转至: 导航搜索

[注意:本文过时已久,大部分没有保存,而且因为之前编辑时发生的一些小插曲,也没有接受同行审查。]

比特币的完全节点是可以修改的,在高端服务器上运行该节点(而不是在桌面上运行)可以扩大比现在高得多的交易量。比特币的设计初衷是为了支持轻量级的客户,这只需要运行一小部分区块链(更多细节参见章节《简化的支付验证》 )。

请注意,本文描述了在不考虑网络安全性和分散性的前提下,如果计算一个比特币完全节点的可扩展性以及基于区块链的交易。本文不涉及关于替代协议的可扩展性,或者尝试并总结哲学上的辩论,如果谁对这方面有见解,可以自行再创新文。

致读者[编辑]

每当技术员听到比特币的工作原理,他们经常会说到“洪泛法”或感叹到“哦天呐!那怎么能测量的出来!”。这篇文章的目的就是用VISA最高的交易量作为一个极端的例子,来说明比特币通过更新Core,或新的覆盖区,就能在技术层面毫无疑问的达到这样的交易量。但是,这仅仅只是一个极端的例子——而不是关于发展比特币以解决更广泛需求的计划(比特币是去中心化的系统,它的增长是由用户决定的)——这个论点只是想表明Core的设计可以使计算比特币比人类最初所猜想的要好得多

丹很肯定地批判了上述观点——这种规模的操作会大大降低比特币的去中心化程度:如果你需要用好几百万兆字节的磁盘空间才能运行一个完全节点,那么能这么做的人会越来越少,然后不能这么做的

人就不得不相信能这么做的人。丹似乎(从他的幻灯片中来看)在这条批判的道路上走得太远了,他认为这意味着比特币将会被普通的中央银行控制。他的分析有两处错误(第二处是这篇文章的错误,有点误导): 首先,即使在太空范围内,这种能力也在(富有的)个体力所能及的范围内,以后也依然如此。如果一个系统能使私人或至少私人团体与中央银行平起平坐,那么即使它会比我们今天拥有的比特币去中心化程度更小,也很难被认为是中央集权制的。而且如果比特币用户不集体同意增加区块的最大值,该系统也无法达到这种规模,因此,没有比特币用户的同意,这样的结果就不可能出现。

其次,也是最重要的一点,这里所假想的规模是假设比特币就是VISA。这个比较很不妥当,因为就算不考虑规模,比特币本身也不能完全替代VISA:比如,比特币不提供实时交易、信用度和各种反欺诈机制(即使不是每个人都需要,总有些人想要)。比特币可以更彻底的替代支票、电汇、汇票、金币、CD、储蓄账户等,如果被广泛使用,也可能会取代信用卡,利用网络能更好服务于其他支付方式。

有时侯比特币用户会迅速地掩盖掉这一事实,太快了反而被认为是缺陷,但是这并不公平。没有一个系统能适用于所有的需求,比特币比大多数货币工具拥有更广泛的优点。如果比特币社区不愿意指出那些利用其他系统就能改善的地方,这很容易变成稻草人谬论:如果我们承认比特币可以作为一种地板蜡和沙漠植物,总会有人指出,这不是最好的地板蜡和沙漠植物。

建立比特币的支付和信用体系的过程很琐碎、无论是经典体系(如VISA)还是去中心化的如Ripple。这些系统可以以较低的成本处理高交易量,并且时不时就可以支持比特币。它们还可以使用与比特币的消长完全不同的技术,但仍然支持核算比特币,所以仍享受着不被中央控制的优势。我们现在看到的这个开始与比特币进行交换,支持钱包服务,并且允许成员之间的实时付款

这些服务将获得比特币的好处,就是稳定的抗通胀性,用户可以完成实时交易,获得信用和反欺诈的服务,比特币总喜欢改进算法,从而在不影响其去中心化特性的前提下,降低交易量。现在的世界,是一个被比特币充斥的世界,支付系统可能会降低价格,因为它们需要与原始比特币交易竞争,它们也因为频繁的比特币结算(以及零信任比特币托管交易)能降低风险,负担得起这样低的价格。这是一种双重真实,因为比特币被设想可以完全取代它们,即使由于去中心化程度的下降使得这个主意并不是最好的

扩展目标[编辑]

VISA平均交易量约为每秒2000次(tps),每日最高交易量为4000tps。理论上它能达到的最高交易量约为每秒56000次, [1] 但哪怕是购物高峰期,连三分之一都到不了。[2]

相反,在2014年底,PayPal每日处理大约1000万次交易,平均115tps。[3]

我们可以以4000tps为出发点。很显然,如果想让比特币扩展到全球范围的所有经济贸易,包括现金交易,还需要提升很高,也许要超过几十万tps。而且要能够抵御DoS攻击(VISA却不用)意味着我们的目的地将远远超出标准的交易峰值。不过,我们还是可以有点武断地选择一个目标,来做一些基本计算。

目前,由于比特币协议会限制区块大小为1MB,所以整个比特币网络持续性的维持在7 tps。

CPU[编辑]

该协议有两部分。一个节点发送“投资方”信息到其他节点,告诉它们有一笔新的交易。如果接收节点没有进行交易则会要求一个GetData。

成本最大的地方是在验证交易时查找Crypto和区块链。验证交易意味着验证某些哈希值和 ECDSA签名。RIPEMD-160运行速度为106兆/秒(简称为100),和SHA256差不多。所以一兆的哈希值大约需要10毫秒,一千字节的哈希值只需0.01毫秒,快到可以直接忽略它。 比特币目前能够在承载四核英特尔核心i7-2670qm,2.2GHz的处理器的条件下完成每秒约八千次签名验证(有一些原型式的简单优化,但未合并)。每一次交易的平均输入数量大约是2次,所以我们必须将速率减半。这意味着使用一个相当主流的CPU就能很容易实现4000tps的目标。

我们从中可以看到,只要比特币节点能够在至少四核的机器上运行出最大值,验证签名将不可能占用全部的CPU,除非比特币是在处理比PayPal高100倍的交易量。截止到2015年底,比特币网络平均每秒处理1.5次交易,因此,即使交易量的增长率居高不下,在未来的很长一段时间内我们也不可能到这么高的交易量。

当然,除了验证签名之外,比特币还能做其他事情,最突出的一个就是管理数据库。我们使用LevelDB,它可以在一个单独的线程中形成数据堆,并且具有非常高的读/写负荷。整个比特币的CPU使用率主要是ECDSA占据的

网络[编辑]

假设平均交易量为2000 tps,VISA就差不多这样。交易规模从两百字节到一千字节不等,但目前平均为五百字节。

所以只需要保持大约8兆/秒的交易量(2000 tps×512字节),1千字节=1024字节,1兆字节=1024千字节,所以0.97兆/每秒×8 = 7.8兆/秒。

目前,普通人家中都能连接到这样的带宽,而且是主机托管供应商所能的提供的低端水平。

每当区块被解决时,当前协议将会再次发送交易,即使在广播时已经看到另一个对等的区块了。将区块变成一系列哈希值就可以解决问题,而广播区块所需要的带宽就可以忽略不计了。由于这个优化目前还未充分实现,我们在这里就不将传输区块的带宽考虑在内。

存储[编辑]

非常高的交易量会导致每一区块的大小都超过0.5G字节。

大多数完全节点不需要存储整条区块链。在Satoshi的文章中,他提到了“修剪”,是指删除一些无用的已全部完成的交易数据。这减少了数据大小,使得一个完全节点的大小只有当前未使用的输出所需要的数据量,再加上一些重新组织数据所需的额外空间。截至2012年10月(203258区块)已有7979231笔交易,而剩余的输出数据的大小却小于100 MB,这个大小甚至能适用于很旧的电脑的RAM。

只有少数的节点需要存储从创世块开始的完整区块链。这些节点可以帮助引导拼凑新的完全节点,但也没这个必要。

主要会限制比特币性能的因素是硬盘一旦查找未使用的交易输出就会停止拟合记忆。如果硬盘能被固态硬盘所取代,进入UTXO集就很有可能不再会是一个严重的瓶颈。

优化[编辑]

上文所述适用于当前只需进行少量优化的软件(可以由个人在几个星期内完成)。

然而,将来可能会有更大的优化,也会变得更加复杂。

CPU[编辑]

有些算法能够加速基于椭圆曲线的数字签名的批量验证,使同时验证全部签名的速度提升两倍,但是实现起来会比较复杂。

简单支付验证[编辑]

我们有可能建立一个比特币系统,其中不再需要验证所有的区块数据,而只需要连接到一个受信任的节点,或者利用高难度的信任作为代理来完成验证。 Bitcoinj 就是使用这个模式的。

简单支付验证(SPV)模式,名字由来于Satoshi的文章中,是指用户连接到任意一个完全节点只需要下载区块头即可,验证链头是否连接正确,难度是否足够高。然后,交易需从远程节点(即支付给你的地址)匹配相应模式,它提供了这些交易的副本、利用默克树连接到区块出现的地方。默克树结构使得交易无需整个区块数据也能验证交易。

进一步的优化要求把区块头隐藏得足够深以至于可以在一段时间后丢弃(例如,您只需要存储到2016个区块头)。

要获得保证远程节点不会给您提供虚假交易的信任级别,取决于您的威胁模型。如果您连接到一个已知的可靠节点,那么难度就无关紧要了。如果您选择一个随机节点,那么就可能有攻击者对包含假交易的区块序列进行挖掘,从而骗取更高的价值。,可以将确认时间与攻击成本进行权衡,来决定区块的隐藏深度。

实现这种方法的程序能在没有使用的情况下具有固定的存储或网络开销,其资源占用与接收/发送交易是成比例的。

参见:瘦客户机安全.

相关方案[编辑]

优化比特币的可扩展性目前有以下几种方案,有些会需要可选择的区块链或硬分叉。

区块链压缩最大化:有一种理念认为压缩区块链能实现完全信任的轻节点。

《有限的区块链》一文中阐释了区块链可以分为三种数据结构,这样就都能各司其职。这三种数据结构分别是一条有限的区块链(包含之前的N个区块),保持各账户地址之间余额不为零的“账户树”,以及一条“证据链”,是(持续增长的)简化版的区块链。

闪电网络:一种关于交易通关的替代协议,可以建立节点与节点之间微支付的渠道,偶尔也会用于区块链。普通用户大部分或仅仅通过支付渠道完成交互,区块链只用于转移大量资金和资金冷冻。

资料[编辑]

http://bitcoin.it/

另请参阅 BitcoinWiki[编辑]