南京理工大学 金 钊
比特币的区块链概念是由中本聪在其2008年10月的论文[1]中所提出的。以往的网络支付系统只使用了数字签名验证系统,但此系统仍需要第三方的中心机构来提供验证服务以防止网络上双重支付情况的出现。而区块链的出现则解决了这一难题,即将原本由中心化机构保管的交易数据改成了由整个网络各方共同维护的公开透明不可篡改的数据库。而原本互不相识且互不信任的各方则可以通过此系统进行瞬时、无国界、低费率且安全可信的交易。这些特点使得比特币在过去的几年里受到了各国网民的热爱和追捧,另有无数的海外商家已将其纳入正常的支付手段并由此降低交易费用。
在比特币网络中,一定数量的过往交易数据文件都会被打包并永久的储存在各个节点上,而这样一个经过打包处理过的一组交易数据文件的集合就被称为一个区块。每隔大约10分钟,比特币区块链网络内存池(mempool)中未确认的交易就会被矿工打包形成新的区块,并将其加入到原区块链的末端。
一个区块一般由五个部分组成,即常数(Magic no),区块大小,区块头(blockheader),交易数量以及其所包含的交易。而区块头中则包含了此区块的根节点的Hash值(HashMerkleRoot)和前一区块的Hash值。而这前一区块的Hash值便是区块链形成的关键。
由于每个区块必须包含前一区块的Hash值,这使得最新添加的区块可以由此一直追述到创世块(比特币网络上的第一个区块)。而一个区块内的所有交易和前一区块的Hash值则是通过Merkle根节点的方式被散列而得到最终的Hash值。所以如果有人试图篡改比特币区块链中的某一区块的交易,则其之后的所有区块都将会改变。所以这些特性使得比特币区块链解决了双重支付和交易的可信性问题。
在最原始的比特币客户端中,其并没有区块大小上限的限制,只是由于比特币区块协议消息字节大小的限制,而被约束到了32MB。
然而, 在2010年7月由于当时比特币的交易费用几乎为零,这使得恶意攻击者可以在比特币网络上生成无数的交易信息,从而使比特币网络难以确认有用的交易数据,甚至陷入瘫痪。并且由于当时唯一的比特币客户端-比特币核心,需要同步整个区块链的所有信息才能使用。于是比特币的发明者中本聪零时引入了一个1MB的区块大小 限制作为一个反制措施。三个月后,中本聪在通信邮件中表明,如果实际交易数据增加,可以通过逐步调整区块大小限制来增加其网络处理能力。另外正如其早在2008年的邮件中所说,比特币网络可以很轻松的扩容到与Visa信用卡相当的处理能力[2]。
然而由于中本聪在2010年末的退出,以及比特币核心技术团队人员在2013年后对此限制的态度转变,使得原本暂时的1MB的区块大小限制,慢慢变成了难以变动的固定限制和多方争论的焦点。
由于比特币网络交易需求的逐步上升,在2017年初,比特币区块平均大小达到了其1MB的上限。正如许多反对1MB限制的比特币开发团队人员所预测的,这所导致的结果便是直线上升的平均网络交易费用和不断增加的交易延迟。
在2017年7月,反对提升区块大小的技术团队 (根据2017年6月“纽约大会” 结果,原计划为先加入隔离见证,再将区块大小上限升到2MB,但后来由于反对提升区块大小的技术团队的坚决抵制,最终导致2MB升容计划被放弃) 准备在8月1号进行一次软分叉(User-Activated Soft Fork) 来加入隔离见证技术,将用户的数字签名信息从原区块中去除,以此减少区块中的交易信息数据大小,从而达到扩容的目的。然而反对的一方则指出这种方法最多只能将交易容量扩大为原来的1.7倍,而去除用户数字签名所带来的安全隐患则是不可接受的。
于是在2017年8月1号, 相当一部分的原比特币技术团队 (Bitcoin ABC, Bitcoin XT & Bitcoin Unlimited) 启动了硬分叉,从而从原比特币网络中分离了出来,并将此区块链称为比特币现金 (BCH)。这条分离出来的区块链则选用了直接而简单的链上扩容方案,即直接将原来1MB的区块大小更改为了8MB,并加入了新的难度调整机制EDA (现为DAA) 来更好的应对算力的大幅波动。
相比于原比特币区块链网络所奉行的完全的链下扩容方案 (隔离见证,闪电网络等), 比特币现金则更加倾向于更加开放而简单的链上扩容方案。 以下便是对这几种链上扩容方案的简介、分析和讨论。
在比特币现金分叉启动时,其相应的各个客户端技术团队便将节点中1 MB 的区块大小限制删除,并将现有的区块大小上限暂时定为8MB,并且将于今年五月约定的硬叉协议升级中将此上限再次调升至32MB,以此来适应不断增长的网络交易的数据存储需求。而致力于比特币现金扩容的比特币无限团队 (Bitcoin Unlimited) 更是提出了无固定限制的可自由调整的区块大小协议,即将客户端中的区块大小限制完全取消,实际区块大小将由市场需求和矿工实际打包的区块大小决定。这样的扩容方案可以使得比特币现金网络能够在可预见的未来里一直提供足够的数据储存空间,并保持其源代码的简单可靠,由此减少因复杂扩容技术方案可能带来的漏洞和风险。
另外最近由哥伦比亚大学的Suisani等人[3]进行了一次全球性的1GB区块大小的传输实验来调查包含大量交易数据的区块在网络传输中可能遇到的技术瓶颈。在此测试中当交易量达到100/s时,其遇到了第一个瓶颈,原因则是原客户端只利用了单线程CPU来接受交易数据,在简单修改了客户端代码后便解决了此瓶颈。而在继续的测试中,当交易量达到500/s时其遇到了由区块传输时间接近10分钟所导致的第二个瓶颈,测试组在利用极限薄块技术减少区块传输时间后,便解决了这第二个瓶颈。所以这此实验从根本上证明了包含大量数据的区块在开放网络上传播的可行性,而其所遇到的技术瓶颈都可以通过简单的协议代码改变而得到解决,无需网络硬件上的升级。
原比特币核心客户端有一段低效的代码导致同一交易往往会被每一个节点接受两次,其中一次是在接受用户对节点广播的交易,另一次是在接受由矿工发现的一个包含已确认交易记录的区块。
而极限薄块则并不是接受矿工所发现区块的全部信息,相反其使用了一个节点内存镜像布鲁姆过滤器,节点可以通过此来获取区块所包含交易的Hash值,从而可以在本地利用已接受的未确认交易数据重新组建区块,这样便可以大大减少接受新区块的数据量。在另一不太可能的情况下,如果节点无法重新组建区块,其还可以请求下载所缺失的交易数据从而完成区块重建。
经过实际网络测试证明,极限薄块可以将区块传播所需的字节数变为原来的24分之一,并可以使得原来区块的网络传播速度增快5.6倍。
在2017年斯坦福比特币技术大会上,Levine等人提出了一个石墨烯块传播技术 (Graphene Technology), 并宣称能够达到比极限薄块还要快10倍的网络传播速度。
Levine等人在此会议上展示了此技术的相关初步测试结果,他们展示了将一个17.5kb的极限薄块利用石墨烯块技术编码压缩到2.6kb。
石墨烯块的编码技术使用了一个新的布鲁姆过滤器和布鲁姆可逆查找表 (IBLTs) 的互动组合,来减少区块传输的带宽消耗。
目前,一些简化了付款验证(SPV)的钱包已经利用了此过滤技术,而布鲁姆逆查找表(IBLTs)将比布鲁姆过滤器更复杂一些,但其也设置了数据重构的途径。由于这两种方法的组合,石墨烯块技术不会发送一个区块所有交易数据的ID列表,而是将只携带一个小的布鲁姆过滤器和布鲁姆逆查找表。此技术将比在目前使用的区块传输协议要高效10倍。
Levine等人还在此会议上阐述了此技术的一个缺点,即石墨烯块的压缩编码的大小将随着未确认交易内存池的大小的增大而增大。但即使如此,此编码技术也依然远比现行传输协议要高效的多。
在现行的比特币客户端中, 当一个节点接收到一个新的区块时,它基本上会处于冻结状态, 直到它解决了是否接受或拒绝该新区块的问题。在此验证过程中, 该节点既不会传输新的交易数据, 也不会尝试验证与此区块相竞争的区块。
而这一漏洞则有可能被恶意分子利用,即通过挖出一个需要极长时间才能验证的区块来暂时冻结整个区块链网络。
而由比特币无限团队所提出的并行验证技术可以使得节点同时验证多个区块,还可以同时接受并传播新的交易数据。
在加入并行验证技术后,验证较快的区块将赢得与验证缓慢区块之间的竞争,如果此项技术的得到广泛的应用,将大大减少由于验证缓慢的区块所导致的孤立区块的出现,并可以减少由此所导致的损失。
而这项技术不仅弥补了原客户端的漏洞,还提高了比特币(现金)网络的交易处理性能。
根据最原始的中本聪的比特币白皮书[1],其区块链的代码是应由验证交易的CPU来决定,即一CPU一票制,而现在比特币的的挖矿设备早已从CPU变为了专用的ASICs矿机,小型的单独挖矿变成了大型的矿池。但是这其中基本的网络机制并未发生变化,只有被一定量算力支持的节点才能是有效的网络节点,才能起到验证区块链交易数据真伪的作用。而个人建立的无算力节点对区块链网络安全并没有起到帮助作用 (正如恶意攻击者可以在很短的时间内通过云端服务器建立起大量的无算力虚假节点)。另外现在的小型算力中心一般都将其算力接入矿池来获得更加稳定的收入,几乎所有通过算力验证 (POW) 的区块链都有类似的趋势,但由于地区带宽和能源分布等因素,矿池在世界范围内也还是相对分散的。所以只要矿池运行者们拥有足够的带宽和储存设备便可以保证整个区块链网络的通畅运行。
所以如文章[4]中,通过对世界所有网络用户的平均带宽进行简单分析便断定比特币区块链网络不能够支持大于4MB区块的结论显然是不成立的。而实际比特币现金区块链网络运行的数据也证实了这一点,从2018年1月14号到15号期间,在297个区块中有129个区块达到了 8MB的区块上限,共有236个区块超过了1MB。在此期间,比特币现金网络中各节点运行正常,没有出现孤立的区块,也没有出现任何区块数据同步问题,所有正常的交易依旧能以极低的费用在1到2个区块的时间内被确认。
近年来公共区块链的扩容问题一直是计算机科学界所探讨的焦点,而在这一领域所提出的算法和新型数据结构也是日新月异,并时常走在了整个现代互联网创新的最前沿。本文就比特币现金这一公共区块链的链上扩容技术做出了简要的阐述和分析,表明了区块链链上扩容的可行性。当然这一领域的创新速度往往超乎人们的想象,也许当本文刊登之时又会有更新更好的扩容方案被提出。
[1]Nakamoto S.Bitcoin:A Peer-to-Peer Electronic Cash System[OL].(2008/10/31)http://nakamotoinstitute.org/bitcoin/.
[2]Nakamoto S.(2008)Re:Bitcoin P2P e-cash paper[OL].https://www.mail-archive.com/cryptography%40metzdowd.com/msg09964.html.
[3]Andrea Suisani,Andrew C,Andrew S & Erik B.Measuring maximum sustained transaction.,2017,Bitcoin Unlimited,University of British Columbia, nChain. [OL].https://bitco.in/forum/threads/buip065-gigablock-testnet-initiative.2610/.
[4]喻辉,张宗洋,刘建伟.比特币区块链扩容技术研究[J].计算机研究与发展,2017,54(10):2390-2403.