一种研究区块链网络行为与质量的模拟方法
王博志1(&),陈世平1,2,,姚丽鸣1,,刘斌1,2,,许熙威1,2, 和朱黎明1,2
1新南威尔士大学,悉尼,新南威尔士州2062,澳大利亚 bozhi.wang@student.unsw.edu.au
2 CSIROData61,悉尼,新 南威尔士州2110,澳大利亚
摘要
区块链作为比特币的基础技术,由于其独特的安全性、可信性和可靠性,正逐渐成为互联网的又一次技术变革。然而,由于大规模部署和高昂的运行成本,研究人员很难研究大型且活跃的区块链网络(如比特币)的动态行为。本文提出了一种在较大规模区块链网络中研究区块链协议的模拟方法。首先,确定了用于模拟区块链的软件工具所需的若干关键要求。其次,重点在于选择和定义关键性能指标,以量化区块链质量(QoB)。我们旨在通过使用现有的模拟工具,复制一个简化的区块链工作量证明(PoW)协议,并在不同参数下进行观察来验证所提出的方法。我们的案例研究表明,使用模拟方法研究不同网络规模和协议的区块链网络是可行且实用的。
关键词 :区块链 Proof的工作量证明(PoW) Discrete-event模拟区块链服务质量(QoB)性能指标
1 引言
在过去几年里,人们几乎可以在互联网上完成所有事情。然而,大多数个人之间的在线交易,无论是电子邮件、金钱、音乐还是其他任何东西,都依赖于大型中介机构,如电子邮件服务、银行和电信运营商。这种集中式系统带来了越来越多的问题。例如,我们的隐私受到侵犯;跨境汇款成本过高且耗时数天。
2008年,情况开始发生变化,中本聪发表了论文《比特币:一种点对点的电子现金系统》[1]。比特币的核心技术称为区块链,它展现了在未来互联网中实现去中心化的能力,成为大规模分布式系统的新范式。如果说TCP/IP是计算机之间的通信协议,那么区块链就是其信任机制和协作协议。区块链提供了一些独特的能力/特性,如去中心化、可靠性和不可篡改性,使人们能够在不依赖可信第三方的情况下建立信任并进行交易。迄今为止,区块链已开始在许多有趣领域展现出其潜力,如跨境支付、分布式存储、食品溯源等。
在区块链能够被广泛应用于其他领域之前,仍有一些问题需要解决。首先,当前区块链的挖矿(PoW—工作量证明)机制在计算上浪费了大量的计算能力,这些计算对工作量证明是必要的,但却毫无实际意义且成本高昂。其次,网络中的每个节点都拥有完整的账本。随着时间的推移,账本会变得越来越大。当矿工验证一笔交易时,需要追溯区块链上记录的所有历史交易,性能问题日益严重。此外,尽管区块链是一个匿名系统,但所有交易都是公开的,这可能会引发隐私问题。最后,在当前的比特币网络中,常见的安全策略是等待六个区块来确认最后一个区块中的交易,耗时约一小时,这极大地限制了当前区块链技术的应用和推广。针对这些问题,许多新理念被提出并正处于开发阶段,例如 IOTA [19], EOS。
另一方面,目前大多数区块链系统都由电子货币驱动。例如,开源的以太坊,在创建智能合约时需要消耗一些以太币(ETH),即以太坊区块链上的加密货币。在进行测试和/或更新时,成本也非常高,并且会对主区块链产生副作用和/或中断。因此,我们需要一种方法,能够在不同范围和大小的区块链网络中以较低的成本和对现有真实区块链网络较小的影响来测试新想法。模拟是一种很好的解决方案,它不需要太多成本,还能发现系统中的任何细微变化。
在本文中,我们提出了一种模拟方法来研究大规模区块链网络。首先,我们确定了实现工作量证明协议的模拟软件的关键要求。其次,我们收集并定义了一系列性能指标,用于量化区块链质量(QoB)。然后,我们使用一个简单的模拟工具展示了所提出的方法,通过不同配置复现简化的比特币工作量证明协议。我们的案例研究表明,使用模拟软件研究大规模区块链网络是可行且实际的。
本文其余部分组织如下。第2节介绍比特币中工作量证明协议概述,并定义区块链服务质量的一些指标。第3节确定了区块链模拟器所需的功能和能力的关键标准。第4节展示了如何利用SimPy构建一个简单的区块链模拟器。第5节介绍了一些相关工作。我们在第6节总结全文。
2 区块链概述
2.1 区块链
本质上,区块链是一种点对点的分布式账本数据库,由连接的数据块组成。区块之间的连接指针是通过密码学哈希函数处理得到的区块头哈希,用于保护每个区块中的交易以及相连的区块。因此,如果不使一连串的区块头哈希失效,则无法更改任何历史交易。
在比特币系统中,大约每十分钟创建一个区块。比特币系统中发生的交易被保存在区块中。一个区块包含头部和主体,如图1所示。头部包含区块的元数据,例如版本、指向前一区块的前一区块、时间戳、随机数、难度位、默克尔根等。主体主要包含以默克尔树结构组织的交易详情。这些交易在区块链系统中形成一个公共全球账本,账本中记录的交易可被任何能够访问互联网的人查询。每笔交易都由发送方的数字签名进行签名,以确保其不可伪造且不会重复。
包含所有交易的默克尔树通过哈希过程计算出唯一的默克尔根,并记录在头部中。
区块通过挖矿过程创建,该过程是一种穷举的随机数算法。在此过程中,矿工将前一个区块的哈希值和最近十分钟内发生的所有交易打包,并找到一个 Nonce值以计算出一个256位的哈希值。挖矿过程的目标是找到使得哈希值满足某些要求的Nonce值,例如在开头几位包含一定数量的零。成功找到此类值的矿工,获得将新区块写入区块链的权利,方法是向其他比特币节点广播该新区块以供验证(图2)。
该系统设有矿工竞争记账权的机制,称为工作量证明(在下一部分中描述)。在此过程中,矿工投入的计算能力越多,获得记账权的可能性就越大。如果新区块成功添加到区块链中,矿工将获得一定奖励。此外,也有可能两个不同的矿工几乎同时找到新区块。这两个区块可能会被比特币网络的一部分验证并接受,从而形成分叉。在这种情况下,其他矿工需要选择区块数量更多(意味着工作量更大)的那条分叉。
2.2 比特币区块链中的工作量证明协议
20世纪80年代出现的分布式系统共识算法是区块链共识的基础。目前有多种拜占庭容错协议被应用于不同的区块链平台,例如实用拜占庭容错(PBFT)、Raft、工作量证明(PoW)、PoS(权益证明)、DPoS(委托权益证明)。比特币区块链采用工作量证明(图3)。
工作量证明的主要工作是在挖矿过程中进行大量的SHA256哈希计算。达成共识的进程如下所述。
1. 用户发起并签署一笔新交易,向整个网络广播请求记账。
2. 接收到该交易的矿工将其放入内存池。
3. 在每一轮计算中,矿工将内存池中的所有交易加入以创建新区块的主体,并执行PoW过程,寻找一个具有足够难度的工作量证明。
4. 赢得竞争的矿工将新区块广播到比特币网络。
5. 接收到新区块的其他矿工验证区块中的所有交易,以确保它们全部有效且为新的。
6. 一旦新区块被整个网络接受,它将被添加到区块链的末尾。
通过上述挖矿过程,来自不同用户的交易被写入区块链中,而区块链由网络中的每个节点托管。因此,我们得到了一个分布式、高可靠且一致的全局账本。
2.3 区块链网络的参数和服务质量指标
在本节中,我们收集并定义了一些用于区块链4)的服务质量指标。我们可以使用这些指标来定义和模拟一个区块链网络。在我们的模拟器中,忽略了孤块和网络延迟。这将在未来的研究中得到解决。修复 TBN(总区块数)。在特定时间段内已挖出的区块数量。ABS(平均区块大小)。以MB为单位的平均区块大小。BCT(区块提交时间)。自区块创建以来将其提交到主链所需的平均时间。TPB(每块交易数)。每个区块中的平均交易数量。ATS(平均交易大小)。以字节为单位的平均交易大小。
TCT(交易确认时间)。一笔交易被接受进入已挖出区块的平均时间。
每日交易数(TPD)。每日确认的交易数量。
内存池大小(内存池大小)。等待确认的交易数量总和。
我们使用这些指标来衡量区块链系统的质量。TBN 与模拟时间直接相关。
BCT 约等于挖矿时间的6倍。区块大小包括头部和一些交易,且受限于 1000000字节(由比特币源代码定义)。ABS 是一个显示区块是否被填满的指标。一笔交易需要使用的存储空间是简单消息的4倍。在2017[20],年8月24日更新“隔离见证”后,额外的3倍存储不再计入区块大小,从而扩展了每块交易数。交易大小范围和每秒交易数是我们希望更改以测量性能的设置,统计后转化为ATS和TPD。TCT 显示一笔交易被接受所需的时间,MS 显示交易的等待列表。
从系统角度来看,我们希望区块被填满(平均区块大小尽可能大,每块交易数尽可能多),以便能够同时传输更多信息。从客户端角度来看,交易确认时间是最关键的区块链服务质量指标,即交易确认时间越短,区块链网络的效率越高。
3 区块链模拟的要求
为了实现一个区块链模拟器,我们需要考虑一些要求,如下所示:
• 时间模拟:区块链的规模随着时间增长。挖矿时间、交易时间和网络延迟对系统性能有很大影响。
• 广播:在现实中,我们使用多播来实现IP通信。在模拟中,这表现为一种理想情况。因此,我们需要广播所有交易。
• 事件驱动:矿工在挖矿过程中一旦发生某些事件,就可以改变其状态。模拟器应采用事件驱动模式以适应这一模式。
• 消息处理:当一个矿工找到新区块后,会广播该区块,同时其他节点接收该新区块(作为消息打包),并做出各自的响应。因此,软件应支持消息处理。
• 并发:区块链网络由许多节点组成,这些节点同时进行不同但类似的操作(如挖矿、验证、接收或发送消息)。因此也需要支持并发。
4 案例研究——使用SimPy模拟区块链
在本节中,我们演示如何通过利用SimPy的能力并结合上述标准来模拟一个简单的区块链PoW。
SimPy 是一个用 Python 编写的轻量级模拟API实现。在 SimPy 中,基本的模拟实体是进程。这些进程可以并行执行,并且彼此之间可以交换Python对象。大多数进程包含一个无限循环,在该循环中执行进程的主要操作。模拟器基于 python 3.6.0 使用 SimPy3.0.10 编写。
计算机参数:
OS: Ubuntu 14.04 64位
CPU: Intel(R) Core(TM) i7‐7700 CPU@ 3.60 GHz 内存: 16G
考虑我们在第2.2节中提到的PoW过程,我们的模拟器运行着三个进程:
1. 生成交易。如图5所示,我们随机创建一个具有大小和创建时间的交易,然后将其放入内存池中。
2. 生成区块。如图 6 所示,我们随机化一个节点作为区块的矿工,然后随机设置其挖矿时间。接着计算可写入该区块的交易数量,打包所有这些交易详情并进行广播。如果该分支具有最大算力,则在六个区块之前确认该区块,并将其添加到区块链中(由于我们未考虑孤块的情况,因此无需比较,仅作确认)。
3. 每个矿工都是一个进程(图 7):一旦矿工接收到来自交易或区块的信息,就会对其进行验证。该进程将区块添加到自身链的末尾,并在六个区块之前确认该区块。
为了清晰地观察内存池,我们设置了一个第四个进程(图 8)专门用于记录。
4 案例研究——使用SimPy模拟区块链(续)
在模拟过程中,我们可以更改多个参数(表 1):
| 参数 | 描述 | 默认 |
|---|---|---|
| SIM_TIME | 模拟运行的时间 | 24 h |
| NUN_OF_节点 | 网络中的节点数量 | 512 |
| 挖矿时间_ | 区块可以被挖出的时间排名 | [8, 10]分钟 |
| 区块大小 | 单个区块的大小有限 | 1000000字节 |
| 交易大小_ | 单个交易的大小等级可以是 [100, 2000] B |
模拟中的时间以0.1秒为单位计算,因为交易为1字节。
上述参数配置了模拟器的运行方式。在真实的比特币网络中,这些参数大多已被规定或受限。我们可以更改这些参数,以了解其对比特币网络的影响。
在此版本的模拟器中,我们忽略了网络延迟和孤块。
通过该模拟器,我们可以获取每个节点上关于区块链的一些重要信息。由于区块链的工作方式,每个节点获得的链相似但并不完全相同。一旦考虑网络延迟,不同节点上的链可能会略有差异。在我们的案例中,唯一的差异是由区块创建者引起的提交时间。节点0中使用默认设置创建的一个区块链如下所示。
图9 中的第一个图显示了网络中的前几个区块,包括主区块;第二个图显示了最新的区块,其中包含一些尚未被提交的区块。
我们进行了不同设置下的模拟,结果如下所示。
在图10中,当日交易数量和区块大小保持不变时,只有当交易大小从 100B增加到2000B时,交易才会使区块变满。当交易较小时,一个区块可以记录更多交易。一旦交易数量不足,区块就无法被填满。在真实系统中,挖矿一个区块成本较高,因此我们希望它包含尽可能多的信息,但不要造成竞争。
在图11(a)中,显示了内存池大小在一天内保持在较低水平的详细情况。交易无需长时间等待即可被打包进区块。同样,在图11(b)和(c)中,当每秒交易数发生变化时,内存池大小可能保持在较低水平,也可能直接升高。一旦内存池大小升高,系统将变得越来越冗余。正如图13所示,交易提交时间随时间增加。
在真实网络中,交易数量取决于不同的事件,这些事件存在高峰期和低谷期,交易大小也是如此。在进一步研究中,我们将在有限时间内测试网络处理大量交易的能力以及应对堆积的内存池的能力。
在图 12 中,节点数量对区块链性能影响较小。在我们的模拟过程中,节点数量最多可达 20000。实际上,节点数量的增加会为系统提供更多的计算能力,可能导致挖矿时间缩短。一旦挖矿时间超出范围,系统将提高计算难度,从而最终将挖矿时间控制在一定范围内。在我们的模拟中,挖矿时间是随机化的,处于某一范围内。因此,节点数量的增加仅会对内存造成一定压力。
在图 10和 11(a) 中,我们改变了相同的设置。但在图 11(a) 中表现良好,该图为客户端视图;而在图 10中表现较差,该图为矿工端视图。结果有所不同。
我们的模拟可以表明,不同参数会改变整个网络的行为。在未来工作中,我们将进一步研究参数如何影响网络行为,以及如何找到一种最佳设置,使其在客户端和矿工端视图中均表现出良好的性能。
:内存池大小(更改交易大小)(b):内存池大小(更改每秒交易数)(c):内存池大小(更改每秒交易数))
根据这些结果,我们可以得出以下观察:
• 我们的指标在区块链服务质量方面是有效的,可以清晰地了解区块链的性能。
• 一旦我们跳过挖矿部分并将挖矿时间设定在一个范围内,节点数量的增加至今不会影响我们的模拟。但在未来的研究中,这可能会导致节点产生孤块的可能性更高。
• 交易大小和每秒交易数的变化会体现在内存池大小上。随着内存池大小的增加,由于交易提交时间变长,用户的体验将变得更差。
• 真实网络中的交易量存在高峰期和低谷期,因此我们需要设置适当的内存池大小,以保持区块被充分填充并使系统高效运行。既不能过大,也不能持续增长,而应维持在有限的大小范围内。
5 相关工作
Rajitha 等人 [2]采用了架构性能建模方法,并使用 Weber 等人 [4]提供的同一事件管理示例,来测量由区块链相关因素(如确认区块数量的配置和区块间隔时间)引起的延迟。他们的管理系统显示,对系统级中位响应时间的预测相对误差大多低于 10%。该方法可用于基于区块链的系统的设计。他们的模型主要将 API 视为一个组件,因此忽略了区块链挖矿网络、节点通信或共识算法。他们将本地节点的资源与性能特征建模为一个组件。在我们的研究中,共识是关键点之一,无论是在网络视角还是用户视角下,都可能对性能产生重大影响。但他们的建模概念与基于组件的开发高度一致,并支持已构建模型和组件的复用。
Gobel 等人 [5]基于 DESMO‐J 模拟框架 [7] 开发了两个区块链模拟器。他们研究了在“自私挖矿”策略下通信延迟对比特币区块链的影响。首先,他们使用一个简化的马尔可夫模型来跟踪不同状态,其中包括少量恶意(自私)矿工,以证明区块隐藏策略(如自私挖矿)的使用可能会导致孤块的增加。然后,他们使用空间泊松过程模型来研究Eyal和 Sirer参数c的取值,以找出诚实矿工所挖区块的前一个区块也由诚实矿工挖出的比例。最后,他们使用离散事件仿真来研究比特币矿工网络的行为,包括在矿工之间存在通信延迟的网络中进行自私挖矿的行为。他们的研究发现,如果存在不诚实矿工,诚实矿工和不诚实矿工的性能都会变差,系统还可以通过监控孤块的产生来发现自私挖矿的行为。我们尚未提及自私矿工,可以在进一步研究中加以考虑。
格雷瓦伊斯等人 [6] 提供了一个由NS2编写的完整比特币模拟器。他们引入了一种新颖的定量框架,用于分析工作量证明区块链的各种共识和网络参数对安全性和性能的影响。在该框架下,通过改变网络传播、不同区块大小、区块生成间隔、信息传播机制以及日蚀攻击影响等基本设置,他们找到了一些对抗或限制双重支付和自私挖矿的方法。在他们的框架下,可以在区块链网络中找到性能与安全性之间的平衡。与我们的模拟器相比,他们的模拟器功能较为完整,但在节点数量方面存在问题。每个简单节点的位置及其网络延迟都需要单独定义,并且他们还模拟了挖矿过程,这消耗了大量的性能。当节点数量增加时,模拟器的响应表现较差。
戈斯瓦米 [8]讨论了导致区块链缺乏可扩展性的各种因素。他们提供了用 Java编写的模拟器。该研究深入探讨了区块链的可扩展性问题,并利用实时数据对多个区块链参数进行了比较分析。通过区块链模拟,深入研究了导致区块链缺乏可扩展性的因素。然后通过测量模拟器与真实场景之间的差异,探讨了可用于解决此限制的各种机制。他们的模拟器模拟了PoW工作过程,但不包含节点通信,仅在单个客户端上完成工作。这种方法有效,但在与真实网络结合时遇到了困难。
6 结论
本文中,我们收集并定义了一系列关键性能指标,以量化区块链质量(QoB)。
我们还使用一个简单的模拟工具,在不同参数和观察条件下模拟简化的区块链工作量证明(PoW)协议。结果展示了基本设置与区块链质量之间的关系。这表明,采用模拟方法来研究具有不同网络规模和协议的区块链网络是可行且实用的。我们下一步的工作是将可能导致孤块的网络延迟纳入考虑,并尝试其他共识机制,如DPoS、PBFT(Fabric)和Tangle(IOTA)。
15

被折叠的 条评论
为什么被折叠?



