欢迎光临
我们一直在努力

区块链网络仿真方法研究

一种研究区块链网络行为与质量的仿真方法

摘要

区块链作为比特币的基础技术,由于其独特的安全性、可信性和可靠性,正逐渐成为互联网的又一次技术变革。然而,由于大规模部署和高昂的运行成本,研究人员很难研究大型且活跃的区块链网络(如比特币)的动态行为。本文提出了一种仿真方法,用于在较大规模的区块链网络中研究区块链协议。首先,确定了用于模拟区块链的软件工具所需的若干关键要求。其次,重点在于选择和定义关键性能指标,以量化区块链质量(QoB)。我们旨在通过使用现有的模拟工具,复制一个简化的区块链工作量证明(PoW)协议,并结合不同参数和观察结果来验证所提出的方法。我们的案例研究表明,利用仿真方法研究不同网络规模和协议的区块链网络是可行且实用的。

关键词

:区块链 Proof的工作量证明 (PoW) Discrete-event仿真 性能指标 Quality的区块链服务质量 (QoB)

1 引言

在过去的几年里,人们几乎可以在互联网上完成所有事情。然而,大多数个人之间的在线交易,无论是电子邮件、金钱、音乐还是其他任何东西,都依赖于大型中介机构,如电子邮件服务、银行和电信运营商。这种集中式系统正面临着越来越多的问题。例如,我们的隐私受到侵犯;向海外汇款的成本过高且需要数天时间。2008年,中本聪发表了他的论文《比特币:一个点对点电子现金系统》[1],情况从此开始改变。比特币的核心技术称为区块链,它展示了在未来互联网中实现去中心化的能力,成为大规模分布式系统的新范式。如果说 TCP/IP是计算机之间的通信协议,那么区块链就是其信任机制和协作协议。区块链提供了一些独特的能力/特性,如去中心化、可靠性和不可篡改性,使人们能够在不依赖可信第三方的情况下建立信任并进行交易。迄今为止,区块链已经开始在许多有趣的领域展现出其潜力,例如跨国支付、分布式存储、食品溯源等。

在区块链能够被广泛应用于其他领域之前,仍然存在一些需要解决的问题。

首先,当前区块链的挖矿(PoW—工作量证明)机制在计算上浪费了大量的计算能力,这些计算对于工作量证明是必要的,但本身毫无意义且成本高昂。

其次,网络中的每个节点都拥有完整的账本。随着时间的推移,该账本会变得越来越大。当矿工验证一笔交易时,必须追溯区块链上记录的所有历史交易,导致性能问题日益严重。

此外,尽管区块链是一个匿名系统,但所有交易都是公开可查的,这可能会引发隐私问题。

最后,在当前的比特币网络中,常见的安全策略是等待六个区块来确认最后一个区块中的交易,耗时约一小时,这显著限制了现有区块链技术的应用和推广。

针对这些问题,人们提出了许多设想,目前仍在开发中,例如 IOTA [19], EOS。

另一方面,大多数当前的区块链系统都由电子货币驱动。例如,开源的以太坊,在创建智能合约时需要花费一些以太币(ETH),即以太坊区块链上的加密货币。在进行测试和/或更新时,这同样非常昂贵,并且会对主区块链产生副作用和/或中断。因此,我们需要一种方法,能够在不同范围和规模的区块链网络中以较低成本和对现有真实区块链网络最小影响的方式测试新想法。仿真是一个很好的出路。它不需要太多成本,而且能够发现系统中的任何细微变化。

本文中,我们提出了一种仿真方法来研究大规模区块链网络。首先,我们确定了实现工作量证明协议的仿真软件的关键要求。其次,我们收集并定义了一系列性能指标,用于量化区块链质量(QoB)。然后,我们使用一个简单的模拟工具演示了所提出的想法,通过不同配置复现简化的比特币工作量证明协议。我们的案例研究表明,使用仿真软件研究大规模区块链网络是可行且实用的。

本文的其余部分组织如下。第2节概述了比特币中的工作量证明协议以及定义了一些区块链服务质量的度量指标。在第3节中,我们确定了区块链模拟器所需的功能和能力的关键标准。第4节展示了如何利用SimPy构建一个简单的区块链模拟器。第5节介绍了一些相关工作。我们在第6节总结全文。

2 区块链概述

2.1 区块链

本质上,区块链是一种点对点的分布式账本数据库,由相互连接的数据块组成。

区块之间的连接指针是通过密码学哈希函数处理得到的区块头哈希,该哈希保护每个区块中的交易以及相连的区块。因此,任何历史交易都无法更改,否则将导致一连串的区块头哈希失效。

在比特币系统中,大约每十分钟创建一个区块。比特币系统中发生的交易被保存在区块中。一个区块包含一个头部和一个主体,如图1所示。头部包含区块的元数据,例如版本、指向前一区块的前一区块、时间戳、随机数、难度位、默克尔根等。主体主要包含以默克尔树结构组织的交易详情。这些交易在区块链系统中形成一个公共全球账本,任何能够访问互联网的人都可以查询账本中记录的交易。每笔交易都由发送方的数字签名进行签名,以确保其不可伪造且不会重复。包含所有交易的默克尔树通过哈希过程计算出唯一的默克尔根,并记录在头部中。

示意图0

区块通过挖矿过程创建,该过程是一种穷举的随机数算法。在此过程中,矿工将前一个区块的哈希值和最近十分钟内发生的所有交易打包,并找出一个 Nonce值以计算出一个256位的哈希值。挖矿过程的目标是找到满足某些要求的Nonce值,例如哈希值的前几位包含特定数量的零。成功找到该值的矿工获得权利,通过向其他比特币节点广播新区块来将其写入区块链进行验证(图2)。

该系统设有矿工竞争记账权的机制,称为工作量证明(在下一部分中描述)。在此过程中,矿工投入的计算能力越多,获得记账权的可能性就越大。如果新区块成功添加到区块链中,矿工将获得一定奖励。此外,也有可能两个不同的矿工几乎同时找到新区块。这两个区块可能会被比特币网络的某个子集验证并接受,从而形成分叉。在这种情况下,其他矿工需要选择区块数量更多(意味着工作量更大)的那条链。

2.2 比特币区块链中的工作量证明协议

20世纪80年代出现的分布式系统共识算法是区块链共识的基础。目前有多种拜占庭容错协议应用于不同的区块链平台,例如实用拜占庭容错(PBFT)、Raft、工作量证明(PoW)、PoS(权益证明)、DPoS(Delegated Proof of State)。比特币区块链采用工作量证明(图3)。

工作量证明的主要工作是在挖矿过程中进行大量的SHA256哈希计算。达成共识的进程如下所述。

1. 用户发起并签署一笔新交易,向整个网络广播请求记账。

2. 接收到该交易的矿工将其放入内存池。

3. 在每一轮计算中,矿工将内存池中的所有交易加入以创建新区块的主体,并执行PoW过程,寻找一个具有足够难度的工作量证明。

4. 赢得竞争的矿工将新区块广播到比特币网络。

5. 接收到新区块的其他矿工验证区块中的所有交易,以确保它们全部有效且为新交易。

6. 一旦新区块被整个网络接受,它将被添加到区块链的末尾。

示意图1

通过上述挖矿过程,来自不同用户的交易被写入区块链中,而区块链由网络中的每个节点托管。因此,我们可以获得一个分布式、高可靠且一致的全局账本。

2.3 区块链网络的参数和服务质量指标

在本节中,我们收集并定义了区块链的一些服务质量指标(图4)。我们可以使用这些指标来定义和模拟一个区块链网络。在我们的模拟器中,我们忽略了孤块和网络延迟。这将在未来的研究中得到修复。

  • TBN (总区块数)

    :在特定时间段内已挖出的区块数量。

  • ABS (平均区块大小)

    :以 MB 为单位的平均区块大小。

  • BCT (区块提交时间)

    :自区块创建以来将其提交到主链所需的平均时间。

  • TPB (每块交易数)

    :每个区块的平均交易数量。

  • ATS (平均交易大小)

    :以字节为单位的平均交易大小。

  • TCT (交易确认时间)

    :一笔交易被接受进入已挖出区块的平均时间。

  • 每日交易数(TPD)

    :每日确认的交易数量。

  • 内存池大小(Mempool Size)

    :等待确认的交易总数。

示意图2

我们使用这些指标来衡量区块链系统的质量。TBN 与仿真时间直接相关。BCT 约等于挖矿时间的6倍。区块大小包括头部和一些交易,且受限于 1000000字节(由比特币源代码定义)。ABS 是一个表明区块是否被填满的指标。一笔交易需要使用的存储空间是简单消息的4倍。在 2017[20], 年8月24日 更新“隔离见证”后,额外的3倍不再计入区块大小,从而扩展了每块交易数。

交易大小范围和每秒交易数是我们希望更改以衡量性能的设置,统计后转化为 ATS 和 TPD。TCT 显示一笔交易被接受所需的时间,MS 显示交易的等待列表。

从系统角度来看,我们希望区块被填满(平均区块饱和度尽可能大,每块交易数尽可能多),以便在相同时间内传输更多信息。从客户端角度来看,交易确认时间是最重要的区块链服务质量指标,即交易确认时间越短,区块链网络的效率越高。

示意图3

3 区块链仿真的要求

为了实现一个区块链模拟器,我们需要考虑以下几个要求,如下所示:

  • 时间仿真

    :区块链的规模随着时间增长。挖矿时间、交易时间和网络延迟对系统性能有很大影响。

  • 广播

    :在现实中,我们使用多播来实现IP通信。在仿真中,这表现为一种理想情况。因此,我们需要广播所有交易。

  • 事件驱动

    :矿工在挖矿过程中一旦发生某些事件,就可以改变其状态。模拟器应采用事件驱动模式以适应这一特性。

  • 消息处理

    :当一个矿工找到新区块时,该矿工会广播其区块,同时其他节点接收该新区块(作为消息打包),并做出各自的响应。因此,软件应支持消息处理功能。

  • 并发

    :区块链网络由许多节点组成,这些节点同时执行不同但类似的任务(如挖矿、验证、接收或发送消息)。因此也需要支持并发。

4 案例研究——使用SimPy模拟区块链

在本节中,我们演示如何通过利用SimPy的功能并结合上述标准来模拟一个简单的区块链PoW。

SimPy是一个用Python编写的轻量级模拟API实现。在SimPy中,基本的模拟实体是进程。这些进程可以并行执行,并且能够相互交换Python对象。大多数进程包含一个无限循环,在该循环中执行进程的主要操作。该模拟器基于 python 3.6.0使用SimPy3.0.10编写。

计算机参数

– 操作系统:Ubuntu 14.04 64位

– CPU: Intel(R) Core(TM) i7‐7700 CPU@ 3.60 GHz

– 内存: 16G

考虑我们在第2.2节中提到的PoW过程,我们的模拟器使用三个进程运行:

  • 生成交易

    。如图5所示,我们随机创建一个具有大小和创建时间的交易,然后将其放入内存池中。

  • 生成区块

    。如图6所示,我们随机选择一个节点作为区块矿工,然后随机设置其挖矿时间。接着计算可写入该区块的交易数量,打包所有这些交易详情并进行广播。如果该分支具有最大算力,则在六个区块之前确认该区块,并将其添加到区块链中(由于我们未考虑孤块的情况,因此只需确认而无需比较)。

  • 每个矿工都是一个进程(图7)

    :一旦矿工接收到一笔交易或区块,它会对其进行验证。该进程将该区块添加到自身链的末尾,并在六个区块之前确认该区块。

  • 示意图4

    示意图5

    示意图6

    为了清晰地观察内存池,我们专门设置了一个第四进程(图8)用于记录。

    示意图7

    在仿真过程中,我们可以更改多个参数(表1):

    参数

    描述

    默认

    SIM_TIME 模拟运行的时间长度 24 h
    NUN_OF_NODES 仿真中的节点数量 512
    挖矿时间_ 区块可被挖出的时间范围 [8, 10]分钟
    区块大小 单个区块的限制大小 1000000字节
    交易大小_ 单个交易可能的大小排名为 [100, 2000] B

    仿真中的时间以0.1秒为单位计算,因为交易为1字节。

    上述参数配置了模拟器的运行方式。在真实的比特币网络中,这些参数大多被规定或限制。我们可以更改这些参数,以了解其对比特币网络的影响。在此版本的模拟器中,我们忽略了网络延迟和孤块。

    通过该模拟器,我们可以获取每个节点上区块链的一些重要信息。由于区块链的工作方式,每个节点获得的链相似但不完全相同。一旦考虑网络延迟,不同节点上的链可能会略有差异。在本例中,唯一的差异是由区块创建者导致的提交时间。节点0在默认设置下生成的一条区块链如下所示。图9 的第一个图显示了网络中的前几个区块,其中包括主区块;第二个图显示了最新的区块,其中包含一些尚未被提交的区块。

    示意图8

    我们进行了一些不同设置的仿真,结果如下所示。

    在图10中,当日交易数量和区块大小保持不变时,只有当交易大小在100B到2000B之间时,交易才会使区块满。当交易较小时,一个区块可以记录更多交易。一旦交易数量不足,区块就无法填满。在真实系统中,挖一个区块成本较高,因此我们希望它尽可能包含更多信息,但不要急于出块。

    示意图9

    在图11(a)中,显示了在一天内内存池大小保持在较低水平的详细情况。交易不需要等待很长时间即可被打包进区块。同样在图11(b)和(c)中,当每秒交易数发生变化时,内存池大小可能仍保持在较低水平,也可能直接升高。一旦内存池大小升高,系统将变得越来越冗余。就像图13中所示,交易提交时间随着时间推移而上升。在真实网络中,交易数量取决于不同事件,这些事件存在高峰和非高峰时段,交易大小也是如此。在进一步研究中,我们将测试在有限时间内网络处理大量交易的能力以及应对堆积内存池的能力。

    示意图10
    :内存池大小(更改交易大小)(b):内存池大小(更改每秒交易数)(c):内存池大小(更改每秒交易数))

    在图12中,节点数量对区块链性能影响很小。在我们的仿真过程中,节点数量最多可达20000。实际上,节点数量的增加会为系统提供更多的计算能力,这可能导致更短的挖矿时间。一旦挖矿时间超出范围,系统将提高计算难度,从而最终将挖矿时间限制在一定范围内。在我们的仿真中,挖矿时间是随机化的,处于一个范围内。因此,节点数量的增加只会给内存带来一些压力。

    示意图11

    在图10和图11(a)中,我们改变了相同的设置。但在图11(a)中表现出良好的性能,该图显示的是客户端视图;而在图10中显示矿工端视图时性能较差。结果有所不同。

    我们的仿真可以表明,不同的参数会改变整个网络的行为。在未来的工作中,我们将进一步研究参数如何影响网络行为,以及如何找到一种最佳设置,使其在客户端和矿工端视图中均表现出良好的性能。

    示意图12

    根据这些结果,我们可以得出以下观察结论:

    • 我们的指标在区块链服务质量方面是有效的,能够清晰地了解区块链的性能。
    • 一旦我们跳过挖矿部分并将挖矿时间设定在一个范围内,节点数量的增加到目前为止不会影响我们的仿真。但在未来的研究中,这可能会导致节点产生孤块的可能性升高。
    • 交易大小和每秒交易数的变化会体现在内存池大小上。随着内存池大小的增加,由于交易提交时间变长,用户体验将变得更差。
    • 真实网络中的交易量存在高峰和非高峰时段,因此我们需要设置适当的内存池大小,以保持区块被充分填充并维持系统高效运行。既不能过大,也不能持续增长,而应控制在有限的范围内。

    5 相关工作

    Rajitha 等人 [2]采用了架构性能建模方法,并使用 Weber 等人 [4] 提供的相同事件管理示例,来测量由区块链相关因素(如确认区块数量和区块间隔时间的配置)引起的延迟。他们的管理系统显示,系统级中位响应时间的预测相对误差大多低于10%。该方法可用于基于区块链系统的开发设计。他们的模型主要将 API 视为组件,因此忽略了区块链挖矿网络、节点通信或共识算法。他们将本地节点的资源与性能特征建模为一个组件。在我们的研究中,共识是关键重点之一,无论从网络视角还是用户视角来看,都可能对性能产生重大影响。但他们的建模理念与基于组件的开发高度一致,并支持已构建模型和组件的复用。

    Gobel 等人 [5]基于 DESMO‐J 模拟框架 [7] 开发了两个区块链模拟器。他们研究了在“自私挖矿”策略下通信延迟对比特币区块链的影响。首先,他们使用一个简化的马尔可夫模型来跟踪不同的状态,其中包括少量不诚实(自私)的矿工,以证明区块隐藏策略(如自私挖矿)的使用可能会导致孤块的增加。然后,他们使用空间泊松过程模型来研究Eyal和 Sirer参数c的取值,以找出诚实矿工所挖区块的前一个区块也由诚实矿工挖出的比例。最后,他们采用离散事件仿真来研究比特币矿工网络的行为,其中包括在矿工之间存在通信延迟的网络中自私挖矿行为的影响。他们的研究发现,如果存在恶意矿工,无论是诚实矿工还是恶意矿工的性能都会变差,系统还可以通过监控孤块的产生来发现自私挖矿的行为。我们尚未提及自私矿工,可以在进一步研究中考虑该问题。

    格雷瓦伊斯等人 [6] 提供了一个由NS2编写的完整比特币模拟器。他们引入了一种新颖的量化框架,用于分析工作量证明区块链的各种共识和网络参数对安全性和性能的影响。在该框架下,通过改变网络传播、不同区块大小、区块生成间隔、信息传播机制以及日蚀攻击影响等基本设置,他们找到了一些对抗或限制双重支付和自私挖矿的方法。在他们的框架下,可以在区块链网络中找到性能与安全性之间的平衡。与我们的模拟器相比,他们的模拟器功能较为完整,但在节点数量方面存在问题。所有简单节点的位置及其网络延迟都需要单独定义,并且还模拟了挖矿过程,消耗大量性能。当节点数量增加时,模拟器的响应表现不佳。

    戈斯瓦米 [8]讨论了导致区块链 largely 不可扩展的因素。他们提供了一个用 Java 编写的模拟器。该研究深入探讨了区块链的可扩展性问题,并利用实时数据对多个区块链参数进行了比较分析。通过区块链的仿真,研究深入分析了导致区块链 largely 不可扩展的因素。然后通过测量模拟器与实时场景之间的差异,探讨了可用于解决此限制的各种机制。他们的模拟器在单个客户端上模拟工作量证明工作,且不包含节点通信,虽然有效,但在与真实网络结合时遇到了困难。

    6 结论

    本文中,我们收集并定义了一系列关键性能指标,以量化区块链质量(QoB)。

    我们还使用一个简单的模拟工具,在不同参数和观察条件下模拟简化的区块链工作量证明(PoW)协议。结果展示了基本设置与区块链质量之间的关系。这表明,使用仿真方法研究具有不同网络规模和协议的区块链网络是可行且实用的。我们下一步的工作是将可能导致孤块的网络延迟纳入考虑,并尝试其他共识机制,如DPoS、PBFT(Fabric)和Tangle(IOTA)。

    赞(0)
    未经允许不得转载:171主机测评 » 区块链网络仿真方法研究
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址