基于图链和并行挖矿提高区块链性能

Improve Blockchain Performance using Graph Data Structure and Parallel Mining

原文: https://arxiv.org/abs/1808.10810

摘要

区块链又迎来了另一个突破之年,然而区块链技术所面临的挑战仍需被解决。本文分析了 BitCoin 系统的特点和 BitCoin-NG 系统,提出一种将链结构改为图结构的方式来提高区块链系统效率的方法,命名为 GraphChain。在 GraphChain 图链中,每一个区块都代表了一个交易,也表示了交易后的余额。总所周知,在区块链系统中所有的交易在某个时刻都只能由一个矿工打包完成,这将浪费大量的资源。所以提高区块链资源利用率的更好方式就是通过选举和并行挖矿方式来代替原来的挖矿方式。我们运用 python 来模拟图链结构和并行挖矿,提出了一中既能提高容量又能提高性能的新数据模型。

关键词

blockchain, performance, graph chain, parallel mining
区块链,性能,图链,并行挖矿

简介

分布式数字货币 BitCoin 的后端技术是区块链技术。与传统系统相比,区块链具有去中心化、不可变的特点。在综述文献《Bitcoin and Beyond》中,区块链技术创造性地结合了几十年来的研究成果,解决了通过互联网传递价值的基础问题。

现在区块链已经在互联网上被传播广泛,变得众所周知。随着使用场景的拓宽,原先设计的一些局限性和不足慢慢显现出来,其中的一个很重要的问题就是容量和性能的可扩展性。区块链网络堵塞最早的著名例子是在2017年一款基于区块链的名为 CryptoKitties 的游戏。由于太多的人试图通过以太坊网络购买 CryptoKitties,不久以太坊就超过了它的最大处理能力,导致所有交易都被延迟。

到目前为止,比特币和以太坊已经遇到了每秒交易量 (TPS) 性能的瓶颈。他们都在寻找改进的解决方案。新的协议需要提出,以解决之前区块链的缺点。商业应用依赖于高性能的区块链。大多数公共链都需要具有处理来自世界各地的大量用户请求的能力。因此,性能显得非常重要。

迄今为止,并没有多少文献报道了这一领域的研究成果,学术界也很少尝试提高区块链的性能。相比之下,许多区块链产品声称自己有很高的性能,但大多数仅仅通过调整区块链参数来追求更高的性能。到目前,仅有一些项目提出了独特有效的方法,如 Bitcoin-NG、Bitshares、EOS、IoTA以及早期的 DagCoin。

这里值得一提的是,在论文《Bitcoin-NG: A Scalable Blockchain Protocol》中,通过矿工选举对区块链的性能进行了改进。然而,只允许一个矿工被选举出来写入新区块,操作不得不排队,容量和性能提升仍然面临很大的挑战。

在 Bitcoin-NG 的基础上,我们提出了另一种方法来提高区块链的性能。为了提高性能,我们需要改变数据结构。链数据结构和 PoW 共识机制像一个单用户操作系统,只允许一个矿工写数据到区块链。在我们的实验中,并行挖矿可以明显提高 TPS。同时,多矿工可以增加网络的稳定性,以防止没有矿工在线的情况下交易无法确认形成的网络堵塞。

将数据结构从链到图的转换可以让多个矿工进行并行挖矿。在这个实验中,基于图数据结构被命名为 GraphChain 图链。图链和并行挖矿将区块链提升为一个多用户操作系统,允许多个矿工同时贡献他们的计算资源。这也有利于缩短交易确认时间。

本文详细介绍了一个区块链系统的新协议。关键点在于提出了新的解决方案,一种能落地的高性能区块链构建的方法。新的数据结构 GraphChain 在这个灵活的框架中发挥了关键作用,并行挖矿机制提高了系统的整体性能。基于此未来可能产生出一些新的使用场景,比如一个微支付系统、区块链大数据系统或新一代银行系统。

模型和目标

一个区块链系统由 N 个全节点组成。全节点具有所有完整的交易信息,节点通过可靠的点对点网络连接。与此同时,有 M 个矿工在等待交易请求,并准备将交易数据打包到区块链中。

在经典的区块链中,通过从 0 开始不断增加 nonce 的数字,所有矿工都在竞争去算一个满足条件哈希值。这个条件有一定难度,很多人需要一起算。当问题被解决后,新的区块被创建。最近的交易被打包进了新区块。如下所述,在上述模型上发现了几个问题:

  1. 由于太多的竞争者并且最终只会产生一个赢家,大部分用于计算的能源都被浪费了。只允许一个赢家意味着这个矿工扮演了一个中心锁,限制了整个区块链系统的性能。

  2. 交易需要等待下一个新的块生成被才能被打包进去,并获得最终确认。这意味着所有交易都需要等待一定时间才能被确认,交易不可能能实时完成。

在原有的区块链系统上做一些改进,比如调整区块链的某些参数,是能够提高一点点区块链性能,例如增加块大小。然而,引用综述的观点,改变块的大小或调整区块的间隔时间并不能无限的提高区块链的性能和容量。其他方面的瓶颈,如“全节点大小限制”或“太频繁的区块分叉”都是不得不面对的问题。因此,需要全新的设计来解决这些限制。我们系统地重新设计了数据结构、挖矿机制和存储分区在内的体系结构,提高了系统的性能和容量。具体实验过程如下:

  1. 将当前链型数据结构转换为基于图的数据结构。基础数据结构的变化使得后续的改进成为可能。

  2. 将单个矿工改为多个矿工进行并行挖矿。这提高了区块链的性能,可以缩短交易处理时间。这项工作的主要贡献是提高了区块链的性能,交易处理时间缩短。

  3. 数据分片。虽然通过并行挖矿增加了TPS,但是数据分片让区块链在不同的节点上分别存储交易。因为每个节点可能存储整个交易历史的不同部分,所以包含所有历史交易数据的全节点将不再存在。

实验过程表明,将数据结构改为图链的目的是为了打破了传统区块链系统的中心锁,通过并行挖矿,增加 TPS,减少交易打包时间,使区块链具有伸缩性。

链和图数据结构

图1

众所周知,区块链数据结构在比特币等产品中得到了广泛的应用。IoTA 和 DagCoin 则使用有向无环图(DAG)。

图链数据结构的最初想法受到 DAG 启发。改变数据结构的主要原因是为了找到一种用并行操作取代顺序操作的方法。数据结构图链如图1所示,图链是一个定制的数据结构,它不是 DAG。每一个块通常有两个输入和两个输出,块表示交易后的帐户状态。另一个重要的点的输入是有方向的。如果它是一个发送帐户,它应该连接到上面的输入点。因此,接收账户应该连接到下面的输入点。

图链与常规的链结构不同的在于,图链不需要将交易打包到一条链上。使用图链可以由不同的挖矿人员并行添加交易。

并行挖矿

新的机制是在世界范围内的 M 个矿工中选择 m 个领导人。在论文 Bitcoin-NG 中,引入了领导人 leader 的概念。矿工们过去常常通过解决哈希问题并生成一个新的区块来获得奖励。在并行挖矿中,矿工通过解决难题来被选举成为领导者。领导者将在未来一段时间内负责打包交易生成区块。

与传统的区块链(如Bitcoin)不同的是,新的机制要求赢得选举变成领导人的矿工在未来一段时间保持在线状态工作。然而意外事件总是难免的,比如断电问题,或者网络连接问题,总是有肯能会发生。如果领导者处于离线状态,没有人可以代替他在线处理交易,就会阻塞整个区块链系统(交易需要很长时间才能被确认)。在这种情况下,冗余是唯一选择。需要不止一位领导人的在线,才能提高系统的稳定性。领导们作为一个团队工作。为此制定了一套规则。以下是具体细节和要素:

矿工和领导者

在并行挖矿的基础上,当一名矿工被选为领导者时,他在一定时间内履行他的职责。在一个滑动的时间窗口中,m(矿工的数量)个矿工被选举为领导者。参照 BitCoin 系统,研究人员将选举间隔时间设置为10分钟,服务周期设置为1小时。结果是6位领导在一个滑动的时间窗口期间在线履行职责。领导者们在值班时监听 P2P 网络,等待新的交易请求。一旦新的交易开始传播,领导者们就会把交易打包进图链。由于领导者之间的通信延迟,同一个交易有可能被不同的领导者多次打包到图链中。有m(领导的数量)个领导者是并行工作的,链的分支数量最多为m条。

用户

用户帐户通常以零余额开始。帐户余额因交易而改变。在一个交易中至少涉及两个帐户。账户区块是一个非交易块,通常只有一个输出(图1)。交易块表示两个帐户的余额状态。

创建和销毁资产

颁发或撤销资产的块需要来自某个私钥或多个密钥的特殊签名。任何资产大于零的非交易块都应该在机制设计中仔细验证。

交易

任何交易都应该发生在至少两个账户之间。发送人的余额必须大于零。如图1所示,每个交易块通常有两个输入和两个输出。交易块代表两个账户的往来余额,一个是发送方账户,另一个是接收方账户。

可扩展性

比特币及其相关系统的可扩展性有限。原因包括块大小、总数据量、块传播速度和矿机容量。在比特币[1]的设计中,选择一个矿工来打包过去10分钟的交易。这条规则的作用就像一把中央锁,阻止了其他矿工的参与。

并行挖矿允许互相独立的交易同时发生。让我们来看看现实生活中的两种场景:1.父母给孩子一些零花钱。2.大家排队付钱给商家。第一类每个家庭中进行的交易的进行。他们是独立的,很多父母可以同时转账。第二类交易是按顺序进行的,接受每一笔交易的商业活动都会改变自己的余额。这两种类型的交易都很常见,有时它们是混合的。并行挖矿允许更多的领导者参与挖矿任务,从而加快交易的处理速度。

领导者的选举

在图链和 BitCoin-NG 的设计当中,领导者扮演了比特币[1]的矿工的角色。在比特币领域,发现新区块的矿工有权将过去10分钟的交易打包到新区块。在图链系统中,领导者被选出来在一定时间内打包交易。但问题是:一旦挖矿结束,比特币矿工就完成了他的任务,一旦选举结束,图链和 BitCoin-NG 的领导人就需要继续工作。由于异常,任何领导者可能随时脱机,除非增加冗余,否则无法保证可用性。图链或 BitCoin-NG 中, 如果网上没有领袖, 整个系统将会堵塞, 这就是为什么网上应该有不止一个领导人。领导们在竞争中合作。领导者的数量取决于系统性能的需求。

领导人的选举方式与比特币矿工挖出新的区块的方式类似。该方法是基于共识机制的。作为一个想要成为领导者的矿工,世界范围的竞争是必须的。不同之处在于,比特币奖励赢家矿工,图链授予赢家矿工资格。成为领导者的矿工将与其他领导者一起工作一段时间,将用户交易打包到图链中。

添加交易记录

原始的共识机制算法设置了一个困难的目标。谁先计算这个谜题,谁就会广播这个结果并创建下一个块。在这种情况下,在无限的竞争对手中,只有一个能赢。

在并行挖矿场景中,有限的领导者试图解决更简单的难题。如果一个领导者重试了几次,仍然找不到达到目标的结果,这个领导者就会放弃。因为这个谜题非常简单,所以我们假设至少有一个领导者能够得到这个谜题的答案并创建下一个交易块。

结果是,不同的领导者可能会为一个交易创建多个块。创造者花费较少重试的块将是幸运的新区块。对共识机制算法的简单修改称为幸运证明(PoL)。

领导者将交易附加到图链数据结构。由于领导者的数量有限,幸运证明(PoL)算法发挥了高效的作用。任何领导者都可以从任何未打包的交易中选择将其附加到图链中,不同的订单都可以。

为了提高效率,可以使用算法,不同的领导者按照不同的顺序排列交易,以确保所有的交易至少被追加到数据结构中一次。这是一种经过计算验证的冗余。

数据分片

链数据结构很难被“切分”,因为区块链不能按帐户分割。

现有的解决方案建议通过快照保持一定的时间区块链。帐户余额列表还需要保持独立。删除部分区块链数据会导致数据验证困难。

此外,这里的“分片”这个术语与以太坊的“分片”不同,后者在GitHub项目页面 https://github.com/ethereum/sharding/blob/develop/docs/doc.md 中有描述。以太坊的分片是通过双层设计来增加容量。在图链中,可以通过用户垂直拆分来实现分片。

由于高 TPS 对生产环境的要求,数据的整体大小将会快速增加。假设有2000个 TPS,每天大约产生 24G 的数据。越来越少的个人电脑能达到作为完全克隆节点的条件。

图链上的数据分片按帐户划分数据。通常,用户帐户内部表示为散列。可以简单地设计一个节点规则,以保留所有与哈希以“a”或“b”开头的帐户相关的交易信息。通过这种配置,庞大的数据可以由多个冗余节点单独保存。

测量

为了证明提出的性能改进方案,需要对单个领导者和多个领导者的性能进行度量。

第一个实验(图2)假设有4000笔交易等待打包,并以不同数量的领导者来衡量业绩。等待中的4000个交易实际上是一个大的干扰案例。实际上,新交易应该尽快处理。

在这个实验中,领导者可以自由选择任何要写入到图链的交易。如果网络延迟,领导者可能会尝试打包已经由其他领导者完成的交易。根据最长链规则,对于长度相同的两条链,采用幸运证明(PoL)算法来决定走哪一条。

它还发现,当更多的交易被添加到图链中时,整体性能会下降。原因是当链长度增加时,数据库需要查找链来验证交易是否已经存在于块中。这个问题通过添加缓存来解决。应用该技术后,我们可以在图2中观察到相当平均的性能。

第二个实验(图3)测量了区块链网络的稳定性。如果所有的领导者都是离线的,那么网络就陷入了阻塞,因为没有交易可以处理。研究人员使用 Simple Gilbert 模型方法对网络状态进行建模。假设所有的领导者都有概率 p 掉线和 1-p 机会回到线上,这里测试了单个领导和多个领导对于整个网络状态的稳定性。

实验设置

图2

实验源代码在GitHub上列出: https://github.com/ProofOfLuck/graph

MySQL数据库用于存储数据结构、领导者和交易数据。它假设点对点网络传输是可靠的。实验没有实现那部分。在比特币中,数据存储在不同的全节点中,并被复制(相互复制)。这部分已经被证明是可行的。在图链中,这部分是是模仿比特币。因此,将数据存储在集中式MySQL数据库中不会影响性能度量。

交易直接插入到数据库表中。下面是每个脚本文件的两个主要步骤和详细信息:

模拟选举

矿工们首先通过选举成为领袖。在实际选举中,困难和竞争是必需的。在这个模拟代码中,矿工将通过解决简单的谜题(带有固定目标的迭代哈希)而成为领导者。

模拟挖矿

领导者观察数据库的 transactions 表,看是否出现新的交易。一旦出现新交易,图链中的空闲领导者将查询是否其他领导者已经将交易打包成块。否则,由现任领导者立即开始包装。检查下面的代码(GitHub存储库中的实验性源代码https://github.com/ProofOfLuck/graph):

election.py 通过解决简单的基于散列的谜题,选择了矿工成为领导者。leader.py 扮演领导者的角色,将交易打包成块。 leader_auto.py将选举与领导人职能相结合,在领导人任期届满时继续发挥领导作用,连任。
send.py 为用户发送余额给另一个用户的脚本。
send_auto.py 模拟一组用户之间的自动交易。
wallet_new.py 生成一个私钥。私钥是标识,可以用于矿机用户或普通用户。为了简单起见,身份的公钥将用作钱包地址。

第一个实验(图2)是为了证明区块链可以实现多大的性能。在图2中,在相同交易量的挖矿任务中模拟了不同数量的矿工。据观察,随着工作在图链上的矿工数量的增加,系统处理了更多的交易。在一台计算机上完成了模拟。仿真代码被调整为故意减慢速度,以防止过度使用CPU。

第二个实验(图3)是模拟矿工每个人都有机会脱机并重新联机。仿真中使用了简单的Gilbert模型[6]。从结果可以看出,5名矿工在一起工作(p设置为0.1, q设置为0.5),几乎没有停机时间。

图3

评估

本文提出了提高区块链性能的新方案。主要的方法是将链数据结构改为图链,并使用新的挖矿机制来支持并行挖矿。

从实验中可以观察到,矿工的工作越多,可以处理的交易就越多。虽然增长不是线性增加的,但是在现有的区块链中增加miner可以提高性能。与分布式数据库系统类似,当一台超级计算机上运行的中央数据库无法满足数据存储和处理能力的需求时,人们就会使用数千台小型PC机去另一个方向构建一个大数据系统。

还观察到,随着矿工人数的增加,所有节点同时脱机的可能性将接近于零。并行挖矿有利于构建可行性高的区块链系统。

图链和并行挖矿的应用方向有几个:

  1. 微交易。现在比特币和以太坊的估值都很高,如果将其兑换成合法货币,即使是很小的交易费用也会很昂贵。在支持微交易的分散式货币系统中,允许多矿工的图链能很有用,因为在图链的设计中,每个块只包含一个交易。如果有足够的矿工可用,则不需要等待时间来确认交易。

  2. 区块链数据。现在隐私问题是一个大问题,个人数据已经成为大公司的私人资产。在未来,某些领域会有区块链,例如健康数据。如果将大量数据插入到区块链中,那么存储它的成本就会很高。图链将数据单元分割为最小的交易级别,数据跨不同的节点链接。因此,通过这种数据结构可以实现分块数据。

  3. 银行区块链系统。银行业正在寻找数字货币的解决方案。现有的区块链由于性能和可伸缩性问题无法满足需求。在这种情况下,新技术将彻底改变行业。传统的银行系统接受企业的存款和贷款。为了获得安全的存款,巨大的成本被投入到IT系统中作为钢笔和纸的选举版本。监管政策已经制定,但它们仍需要人类来遵循。区块链是一项华丽的发明,因为人类不再需要调节部分。监管成本可能低得令人难以置信。一个可扩展的高性能区块链将在银行业扮演重要角色。

图链和并行挖矿是对当前区块链系统的有益改进。如果正确实现,性能和容量问题将被修复。

相关工作

Bitcoin-NG: Bitcoin-NG 对原始比特币的性能改进。它引入了微区块,在链上的两个原始块之间起着更轻区块作用。与 Bitcoin-NG 相比,我们引入了并行挖矿,提高了系统的可用性,还引入了图链数据结构,使矿工能够一起工作,特别是在交易不相互关联的情况下,能起到更好的性能提升。

BitShares/EOS: BitShares 和 EOS 从 PoS 证明中开发了授权的股权证明(DPoS)。DPoS的共识机制试图减少决策者的数量,以提高整个系统的效率。DPoS 采用了与领导人选举类似的想法: 减少矿商参与交易处理。它为下一个区块的产生节省了决策(更少的矿工竞争采矿)的时间。图链是纯基于 PoW 共识机制的,没有使用 PoS 或 DPoS 共识。

IoTA/DagCoin: IoTA 和早期 DagCoin 引入了 DAG 数据结构,相信这是区块链未来的发展方向。有向无环图(DAG)的思想被许多系统所借鉴。最著名和成功的例子之一是IoTA。在 IoTA 的设计中,没有矿工。任何需要在以后的交易中确认的交易。与 IoTA/DagCoin 相比,我们当前的工作的做法更像是一个比特币系统,保留了最初的 PoW 共识机制,并将挖矿作为必要的组成部分。虽然图链收到 DAG 的思想的启发,但是图链并不是 DAG。

感谢

非常感谢 Brahma OS 团队的指导,以及提供的帮助和支持。

原文: https://arxiv.org/abs/1808.10810

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267