XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

Zheng P, Zheng Z, Wu J, et al. XBlock-ETH: Extracting and exploring blockchain data from ethereum[J]. IEEE Open Journal of the Computer Society, 2020, 1: 95-106.

摘要

基于区块链的加密货币最近受到广泛关注。海量数据存储在无权限的区块链上。海量区块链数据的分析可以带来巨大的商业价值。然而,缺乏经过良好处理的最新区块链数据集阻碍了区块链数据的大数据分析。为了填补这一空白,我们收集并处理来自以太坊的最新链上数据,以太坊是最流行的公开区块链之一。我们将这些处理良好的以太坊数据命名为XBlock-ETH,它由交易、智能合约和加密货币(即代币)组成。然而,将收集到的原始以太坊数据划分和分类到经过良好处理的数据集并非易事,因为整个处理过程需要软件工程和大数据分析方面的复杂知识。此外,我们还提供了每个处理良好的数据集的基本统计和探索。此外,我们还概述了基于XBlock-ETH的可能的研究机会,以及在线发布的数据和代码。

索引术语

区块链、数据分析、以太坊、智能合约

1 引言

区块链近年来受到学术界和产业界的广泛关注。在不同的区块链系统中,由于其去中心化,无许可区块链(或公共区块链)已经做出了大量努力[1]。无许可区块链的概念最早提出并在比特币上实现[2]。在区块链系统中,每个对等方都持有一个账本,该账本被视为一个公开的计票,本质上是防干扰的。以太坊[3]是另一个最流行的无权限区块链系统,它支持图灵完整的智能合约。区块链系统的激增导致了海量的区块链数据的产生。以比特币为例。据Statista报告,截至2019年第三季度,比特币数据已接近242 GB(https://www.statista.com/). 在本文中,我们关注的是以太坊的数据,而不是比特币,因为以太坊提供更丰富的数据类型。另一个例子是,在以太坊上部署了超过16000000个智能合约。由于以太坊社区已经发布了两个通证协议,使用户更容易提供初始硬币发行(所谓的ICO)[4],超过100000种ERC20代币和1600种ERC721代币可在以太坊上传输,ERC代表以太坊征求意见。

由于区块链系统的开放性、分散性和防干扰性,海量区块链数据为研究人员提供了巨大的商业价值和巨大的机遇[5]。以商业交易数据为例,过去由于数据所有者的隐私或所有权问题,研究人员很难获得真实的商业交易数据。然而,现有区块链系统中的所有数据都是公开可用的。同时,由于区块链系统的分散,无权限区块链中的区块链数据几乎可以在任何地方访问。此外,区块链的分布共识也保证了区块链数据的防干扰性。除了区块链交易,以太坊(或其替代品)还包括智能合约和加密货币。区块链数据的大数据分析可以促进交易欺诈检测、智能合约漏洞检测和智能合约软件开发等方面的发展。

但是,在区块链数据的大数据分析中,尤其是在以太坊中,存在许多挑战:(1)区块链对等点的数据同步困难。由于区块链的体积庞大,需要很长时间才能完全同步与区块链新连接的节点(即对等节点)上的整个区块链数据。例如,要在对等方完全同步整个以太坊,需要花费一个多星期的时间和500 GB以上的存储空间。由于区块链数据同步而导致的大量存储空间和网络带宽的高额支出阻碍了区块链数据的分析。 (2)区块链数据提取和处理面临的挑战。区块链数据以异构和复杂的数据结构存储在客户端,无法直接进行分析。同时,基础区块链数据是二进制或加密的。因此,有必要提取和处理二进制和加密的区块链数据以获得有价值的信息。但是,由于传统的数据分析方法可能不适用于此类数据,因此处理异构区块链数据并非易事。 (3)缺乏用于区块链的通用数据提取工具。尽管许多研究提供了区块链数据的开源数据提取工具,但大多数研究只能支持提取部分区块链数据(并非全部数据)。而且,大多数现有工具只能完成特定的研究任务。 (4)缺乏区块链的基本数据探索。现有研究仅专注于区块链数据的特定数据分析,例如交易图[6],合约安全性[7]。但是,大多数现有工具都缺少诸如统计分析,文本分析和数据可视化之类的基础数据探索。

为了应对上述挑战,我们提出了一种区块链数据分析框架,即eXplore区块链ETH(XBlock-ETH),以分析以太坊数据。特别是,我们从以太坊中提取了包含8,100,000块的原始数据。原始数据包括三种类型的以太坊数据:区块,跟踪和收据。由于难以对原始以太坊数据进行分析,因此我们将获得的以太坊区块链数据划分为六个数据集:(1)区块和交易,(2)内部以太币交易,(3)合约信息,(4)合约调用,(5)ERC20通证交易和(6)ERC721通证交易。以太坊数据的新分类可以帮助其他研究人员以更方便的方式探索和分析以太坊数据。但是,对原始数据进行分区和处理并非易事,因为从原始数据中提取元数据信息并与六个数据集相关联需要大量的精力。然后,我们对六个精炼数据集进行统计分析。我们还将讨论XBlock-ETH的潜在应用,例如区块链系统分析,智能合约分析和加密货币分析。

总而言之,我们重点介绍了本文的主要贡献如下:

  • 与以前的工作相比,XBlock-ETH数据包含全面的链上数据(仅涵盖部分以太坊数据)。特别是,它包括区块链数据,智能合约数据和加密货币数据。此外,这些经过良好处理的数据集可轻松用于数据探索。此外,在线正式发布的XBlock-ETH数据已经被定期更新。
  • XBlock-ETH框架还提供了基本的统计和探索功能来分析区块链数据集。本文还概述了XBlock-ETH带来的研究机会。特别是,我们讨论了XBlock-ETH在区块链系统分析,智能合约分析和加密货币分析方面的应用。
    本文的其余部分安排如下。第二部分首先概述了区块链和智能合约技术。然后,第三,四节介绍了从以太坊获取的原始数据以及对六个数据集的数据探索。第V节讨论XBlock-ETH数据的应用。第六节调查相关工作。最后,论文在第七节结束。

2 背景

图1展示了以太坊区块链的概述,由下至上由以下几层组成:对等方,区块链,智能合约和通证。接下来,我们回顾以太坊中每一层的基本概念。

A.对等节点和区块链

简而言之,区块链本质上是由多个连续连接的块组成的链状数据结构。该链已由对等(P2P)区块链网络中的所有对等节点维护。在一定时期内,整个区块链网络只能通过共识协议来确认一个区块。当时已确认交易的区块和前一个区块的哈希值已由对等方(也就是矿工)生成。生成后,该块将由其他对等方独立验证。一旦区块链网络中的大多数对等点验证并确认了该区块,该区块中的交易将被视为已完成。这样,由于所有对等方都已验证了交易,因此每个对等方都可以信任整个区块链(也称为分类帐)。换句话说,区块链通过在所有对等节点上复制计算和存储来增强交易数据的可信赖性。
由于每个免许可区块链对等体中区块链数据的完整性,研究人员可以通过将区块链对等体连接到区块链网络来获取整个区块链数据。由用户和矿工在区块链中完成的所有操作组成的区块链数据包含实质性的业务价值。例如,交易记录实质上是由不同业务方完成的操作。区块链数据的分析可以帮助了解现实世界经济系统中的用户行为(例如汇款)。同时,随着区块链用户和交易的激增,区块链数据快速增长,特别是在比特币和以太坊中。区块链数据的分析也可以有助于预测经济趋势。

B.智能合约

早于区块链[8]提出的智能合约是重塑现代行业的有前途的技术。基于区块链的智能合约本质上是计算机程序,其中执行状态存储在区块链顶部。区块链交易是代表智能合约的部署或调用的消息。因此,区块链保证了智能合约的可信赖性。
现有的区块链系统已启用智能合约。例如,比特币使用户可以在执行交易期间运行一个简单的脚本程序。该脚本可被视为基于区块链的简单智能合约。但是,比特币脚本不是图灵完整的,因此它无法在合约中启用复杂的逻辑表达式。相比之下,以太坊支持图灵完备的智能合约。在以太坊中,智能合约在称为以太坊虚拟机(EVM)的环境中执行。 EVM读取和写入状态(存储在键值对中)作为智能合约中定义的操作。在合约执行期间,矿工使用“天然气”作为单位来评估一个智能合约的消耗。在合约执行期间,合约用户由“ GasUsed”和“ GasPrice”收费。用户承诺为矿工支付的“ GasPrice”越多,合约执行得越快。完成交易(即操作)后,EVM将生成状态的哈希值并将其记录到区块链中。因此,我们可以从图1得知以太坊上的智能合约没有直接存储在区块链上。它们基本上存储在由区块链操作的状态中。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

C. 通证和客户端

值得一提的是,以太坊拥有两种智能合约的标准通证协议(又称模板)。这些通证协议定义了智能合约中的标准变量,功能和接口。使用这些协议,用户可以在以太坊之上基于智能合约发行通证(或所谓的加密货币)。如图1所示(顶层),有四个典型的通证USDT,Cryptokitty [9],Kyber [10]和MarkerDAO。例如,用户可以在以太坊向其他人发行通证时发布ERC20合约。此后,任何其他用户(甚至合约)都可以在没有集中授权(例如证券交易所)的情况下接收或发送通证。标准通证协议极大地丰富了以太坊的生态系统,从而使以太坊成为灵活的金融系统。在第IV-E节和第IV-F节中,我们将探索以太坊中的代币数据。

以太坊允许任何符合P2P协议(例如BitTorrent)协议要求的计算机程序都可以加入网络。结果,有许多不同的以太坊客户端可以验证区块和交易。在大多数以太坊客户端中,根据以太节点的统计数据,Go-Ethereum(Geth)和奇偶校验是使用最广泛的客户端。它们都提供了JSON-RPC接口供用户与以太坊区块链进行交互。通过JSON-RPC接口,用户可以从以太坊获取区块链数据。在以前的许多研究中都普遍使用了Geth,而用Geth设计的接口不适合进行数据采集。尽管许多研究人员试图修改Geth的源代码以获得详细的运行时数据,但是代码修改的整个过程却既耗时又复杂。另外,在某些情况下,获得的数据并非绝对准确。与Geth不同,Parity更好地设计了接口,以便它可以获得与我们需要的每条数据相对应的每个块的索引。关于区块链数据的数据获取的详细信息将在第三部分中描述。

3 从以太坊中提取原始数据

本节介绍如何从以太坊区块链获取原始数据的过程。图2展示了典型的以太坊交易执行流程,从区块N通过区块链对等点到EVM。在此过程中,我们收集了三种类型的区块链原始数据:Block,Receipt和Trace。接下来,我们将详细描述每种原始数据的组成和获取。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

A. 区块

区块数据直接保存在以太坊中。每个区块包含两个部分:

  • 区块头:区块头是区块的基本信息,包括矿工地址,时间戳,gas limit等
  • 区块交易:区块交易组成区块体,每个加一由以下字段组成:From,To,Value,Input等。如果交易被用来部署合约,To字段等值是null

几乎所有的以太坊客户端,包括Geth和Parity,提供查询区块的接口。例如,"eth_getBlock"在Geth和Parity中有相同作用。然而,通过对区块数据的分析,我们只能获得很少的区块链用户信息。这是因为块交易的输入只表示在合约部署阶段对EVM的操作,而合约代码只在事务执行结束时存储,并且它与事务的输入不同。因此,我们无法在大宗交易中获得准确的合约代码。同时,在合约调用阶段,我们不知道事务是否成功执行,也不知道在事务执行过程中抛出了什么样的错误,因为有时一个合约会向其他合约发送消息或加密货币。

B. 追踪

跟踪数据本质上是在EVM中生成的详细的运行时数据(例如,内部合约调用、从合约向人员转移资金)。跟踪数据不能直接从块数据中获得或观察到,但可以在合约执行期间记录。在本文中,跟踪数据是指在事务执行之前或之后无法获得,但只在执行过程中出现的数据。跟踪数据包括以下类型:

  • 创建是跟踪,包括创建智能合约时的创建者,代码和初始余额。合约的创建者可以是人或其他智能合约。

  • 通过不同的以太坊地址转移资金或消息时会发生调用。合约调用或以太转移显示为“调用”跟踪。

  • 自杀是智能合约“自杀”删除其代码,并将其价值退还至特定帐户的痕迹。

  • 奖励是矿工在挖出一个区块时获得以太奖励的踪迹。奖励价值取决于矿工的贡献。

在Geth中,跟踪的接口是“ debug_traceTransaction”。但是,此接口返回事务处理期间的所有操作,从而导致大量资源消耗和低效率。因此,许多先前的研究试图修改Geth的源代码以获得详细的运行时数据,而此过程非常耗时。在本文中,我们在奇偶校验中采用“ parity_trace”来获取跟踪数据。该接口由官方开发人员提供和维护,因此与Geth相比,可以保证正确性。同时,它还提供了我们所需的足够信息,例如基本跟踪类型和错误。此外,奇偶校验的另一个优点是更新便利,因为数据是按块索引的。

C.收据

执行交易后,一些以太坊状态已更改(例如,代币合约中的账户余额)。然后客户需要知道发生了什么变化。为了减少客户端的查询开销,许多合约在执行中保留了一种称为“事件”的输出。例如,标准通证合约将输出“ Transfer(from,to,value)”事件,以使客户知道执行期间会发生什么。这种输出是单向输出,因为它只写在交易的收据中,并且可以由外部客户或个人读取,但不能由内部EVM读取。

第四部分将给出以太坊数据的统计数据。特别是,在以太坊上使用智能合约的加密货币超过100,000种。对于这些代币合约,收据数据是了解持有人,所有者和用户行为的重要来源。因此,有必要获得收据数据。 Geth和Parity都提供了获取交易收据的接口。 Geth和Parity接口之间的主要区别在于收据的查询索引。特别是,Geth的接口的接收是通过交易哈希索引的“ eth_getTransactionReceipt”,而奇偶校验的接口是通过块编号索引的“ parity_getBlockReceipts”。这样,奇偶校验比Geth高效得多,因为它可以在一个查询中返回一批收据。

总之,可以在以太坊中获得三种原始数据集:阻止,跟踪和接收。更具体地说,用Shell,NodeJS和Python中的工具同步整个以太坊区块链并获取原始数据大约需要2周。压缩后,数据大小约为313 GB。由于原始数据量大且信息冗余,因此需要进行数据处理以简化数据表示并加快数据分析的速度,以供进一步研究。

4 以太坊的数据探索

在本节中,我们处理从以太坊获得的原始数据并将其分为六个数据集:(1)区块和交易,(2)内部以太币交易,(3)合约信息,(4)合约调用,(5)ERC20代币交易,以及(6)ERC721代币交易。 从原始数据到处理后的数据集的关系如图3所示。划分这六个数据集的原因是,我们希望找到特定研究领域的研究人员所需的最小数据子集。 例如,如果研究人员想研究以太传输网络,那么他只能研究数据集2(内部以太币交易),而不是处理原始数据或其他子数据集,从而节省了工作量。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译
Figure 3 Mapping from raw data to datasets.

本节将介绍如何通过统计和观察来生成数据集。

A.数据集1:冻结和交易

为了研究以太坊的基本统计信息,我们提取了有关区块和区块内交易的信息。特别地,从该块数据产生了8,100,000个块和491,562,222笔交易。对于每个块,我们还获得“ gasPrice”的统计值:最小值,平均值和最大值。同时,对应于每个交易的哈希,从收据和跟踪中提取“ minerReward”,“ gasUsed”和“ error”字段。关于以太坊区块链的矿工,有5122个唯一的矿工地址,如表1所示。这意味着最多有5122个对等方充当矿工,因为一个对等方可能拥有多个地址。同时,每个矿工都有权在区块中编写额外的文本。我们使用“词云”来分析矿工的文本。图4(a)显示了词云文本的可视化。结果表明,由于大多数矿工都在矿池中,因此矿池中留下了文本,并且他们将自己的名字留在了区块中以提高其挖掘能力。如表1所示,每个块的事务计数平均值为60.68,块时间为15.33秒。换句话说,以太坊的平均吞吐量约为每秒4个事务。即使在大多数网络处于活动状态时(如图4(b)中的490万个块所示),吞吐量也大约为每秒16.7个事务。这一结果表明,以太坊在支持实时互联网应用方面还有很长的路要走。在以太坊中,矿工具有更高的优先级,可以将具有更高“ gasPrice”的交易打包到区块中。 “ gasPrice”的可视化如图4(c)和(d)所示。从宏观上看,随着以太坊社区的发展,“ gasPrice”正在逐渐下降,但由于网络拥塞时交易极为频繁而导致的几个高峰。从微观上看,我们提取了从8,000,000到8,020,000个块的时间,发现潮气定律( tidal law)可以观测到“ gasPrice”的这种波动。该观察结果暗示可以潜在地预测“ gasPrice”的波动。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

B.数据集2:内部以太币交易

以太币是以太坊的原生加密货币。以太币的交易不仅发生在区块中记录的交易中,而且还发生在智能合约执行期间。例如,如果有人要求智能合约将10个以太币发送给另一个,则在该区块中将不会观察到该合约的以太币交易。在诸如Etherscan等的区块链浏览器中,这种交易也称为“内部交易”。为了调查所有以太币交易,我们处理区块和跟踪数据以进行内部以太币交易数据集。如表2所示,收集了54,688,782个地址中发生的330,239,865个以太交易。以太币的值有很大的方差,最大为11,901,464.24个以太币(现在约20亿美元),但平均值仅为22.26个以太币。图5(a)给出了每10,000个块的总交易量的统计数据。结果表明,以太币交易的最活跃时间是4,000,000至4,300,000区块之间的时间,与初始代币发行(ICO)的最活跃时间相匹配。关于图5(b)所示的以太分布,我们发现大多数以太交易都在0.1到1的范围内,这表明大多数交易只转移少量的以太。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

C.数据集3:合约信息

以太坊可以被视为智能合约的平台。为了调查以太坊上的所有智能合约,我们处理跟踪数据以获得智能合约的基本信息,包括创建者,创建时间,初始值,合约代码,创建代码。如果某些智能合约在功能内设置了“ SUICIDE”操作码,则可以将其删除并退还给他人。因此,我们可以观察合约删除的行为。根据表3的统计,有133,039个地址创建了16,557,477个智能合约。这意味着应该有许多创建多个合约的用户。从表3中观察到的异常现象是,删除了5,704,054张合约,同时将以太币余额退还给19,133,738个地址。通常,智能合约不会在删除过程中将以太币退款至多个地址。这种异常现象背后的原因是,以太坊遭受了拒绝服务(DoS)攻击,攻击者使用“ SUICIDE”价格的漏洞在以太坊中创建帐户。在漏洞修复之前,大量合约被删除以直接指向空地址,从而导致许多以太坊对等节点关闭,如先前的工作所述[11]。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

关于合约代码,我们将字节代码转换为十六进制代码。 图6(a)给出了合约规模的统计。 特别是,合约大小的平均值为962.00,这表明智能合约占用的存储空间很小。 合约规模分布还意味着大多数合约的规模都集中在某些集群上。 这表明许多智能合约可能看起来相似。 在数据集4中将进一步研究这种相似性。图6(b)展示了已创建合约的数量。 如图6(b)所示,新的智能合约的数量正在增加,特别是在“ ICO”概念[12]问世之后。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

D.数据集4:合约调用

在EVM中,智能合约可以调用另一个合约来调用某些代码或功能。为了调查以太坊合约之间的调用(以地址表示),我们从跟踪数据集中提取执行中的合约调用。合约调用数据集包括调用者,被叫地址,调用功能。如表4所示,它包含1,148,572,009个合约调用,其中639,336,722个包含输入代码,而169,463,261个包含错误。图7给出了合约调用的可视化。特别地,图7(a)和7(c)显示,在从2,300,000到2,460,000个块的时间内,合约调用和错误非常频繁地发生。这是由以上小节中提到的DoS攻击引起的,因为攻击者分批调用了大量合约,其中一些抛出错误。图7(b)给出了调用类型的分布。特别是,图7(b)显示,大多数开发人员更喜欢使用“ call”和“ delegatecall”,而不是“ staticcall”和“ callcode”,因为“ call”和“ delegatecall”比其他两个调用逻辑更清晰,更实用。图7(d)显示了调用合约期间的错误类型,表明大多数错误是由“ Out of gas”引起的,这主要是由于消息发送者的错误设置引起的。第二个最常见的错误是“还原”,这是开发人员手动抛出的异常。此外,其他错误(例如“错误的指令”和“错误的跳转目标”)通常是由合约代码本身引起的。通常,智能合约的编译器会将函数名称和参数的哈希值用作函数的条目。换句话说,在以太坊智能合约中,源代码中的相同功能在编译后的合约代码中将具有相同的条目。然后,我们计算调用合约功能,以了解最常用的功能。前10个功能的分布如图7(e)所示。结果表明,大多数调用函数都集中在某些类型的函数上。例如,排名前10位的功能已占合约调用的46.32%。此外,在使用开放源代码合约验证了函数的哈希值之后,我们在源代码中获得了这些函数。然后,我们具有前三项功能:“ transfer(address,uint256)”,“ balanceOf(address)”和“ transferFrom(address,address,uint256)”。此结果表明,最常见的合约调用与token有关,并且由于相似的调用,合约之间可能存在很大的相似性。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

E.数据集5:ERC20代币交易

从以上分析可以看出,以太坊上最活跃的智能合约现在是代币合约。接下来,我们进一步调查代币合约。为了收集代币信息,我们处理收据数据集以提取标准事件,这些事件在以太坊社区的标准ERC20协议中定义。此外,每个ERC20代币都包含基本信息,例如 name, symbol, total supply等。然后,我们将调用发送给本地以太坊对等方,以收集ERC20通证的此类基本信息。如表5所示,将106,683个智能合约视为ERC20合约,因为它们输出定义为标准ERC20通证交易的事件。在42,146,575个持有人地址中,有227,698,645个ERC20交易。通常,持有人地址的数量可能比确切的人类持有人的数量大得多,因为用户可能拥有多个地址。同时,一些通证发行者会在未经其许可的情况下将代币发送给其他用户(也称为代币空投[13])。图8(a)显示了每个ERC20通证的交易计数分布。我们可以很容易地从图8(a)中观察到马太效应[14],因为大多数代币交易都发生在少数代币合约中。图8(b)展示了ERC20通证名称的词云。如图8(b)所示,最常见的单词是“链”,“硬币”和“份额”,这是大多数ERC20通证关注的地方。此外,另一个通用词是“测试”,这意味着部署在以太坊上的许多ERC20合约仅用于测试目的。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

F.数据集6:ERC721代币交易

ERC721通证是由以太坊社区提出的另一种合约协议。与ERC20通证不同,ERC721通证不可分割。在合约功能中,参数不是通证的值,而是通证ID。例如,智能合约中的虚拟宠物可以是ERC721通证,该通证不可分离,但可以转让。表6列出了ERC721合约的统计数据。我们发现1,954个ERC721合约包含7,524,827个通证交易和414,829个持有人地址。值得一提的是,某些收集到的合约并未完全遵循标准的ERC721协议。这些合约也包含在数据集中,因为它们在收据中输出通证传输的事件。图9(a)显示了ERC721通证的受欢迎程度分布。与ERC20通证相比,ERC721通证的数量要少得多。主要原因是ERC721应用程序在每个通证上的可视化要求更多的工作量,因此提高了开发难度。我们还研究了一种流行的ERC721通证合约,称为CryptoKitties。它是最著名的ERC721代币合约之一,出售虚拟猫作为代币。每只猫在ERC721合约中均被表示为通证。如图9(b)所示,我们计算了按猫的出生块分布的周转时间。图9(b)还显示,以4,500,000至5,000,000块出生的猫比其他猫有更高的周转时间。那时,CryptoKitties的类型达到了顶峰。图9(b)中获得峰值的时间与图4(b)和(c)中获得峰值的时间几乎相同,这意味着CryptoKitties的普及会导致以太坊的拥塞。

XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译XBlock-ETH: Extracting and exploring blockchain data from ethereum 中文翻译

5 XBlock-ETH的应用

本节介绍XBlock-ETH框架的应用。如图1所示,以太坊的架构由对等方,区块链,智能合约和通证组成。因此,我们还根据该体系结构中的前三层对应用程序进行了分类。同时,我们还讨论了各个层面的研究机会。

A.区块链系统分析

由于XBlock-ETH处理来自现实的区块链系统的数据,因此可用于支持以下应用程序。

1)去中心化分析
去中心化是区块链系统的关键特征之一。但是,关于区块链系统去中心化评估的研究很少。特别地,[15]的工作提出了比特币采矿池的度量。虽然Gencer等 [16]对比特币和以太坊的去中心化水平进行了一项测量研究,他们的研究仅考虑了网络带宽,挖掘能力和公平性等多个指标。相比之下,我们的XBlock-ETH数据可以更全面地衡量以太坊。此外,我们的工作可用于分析用户,合约所有者和矿工的权力下放。此外,我们的XBlock-ETH还可用于与其他区块链系统进行比较,例如比特币,EOS或其他区块链系统。

2)汽油价格预测
由于交易费用等于“ gasPrice”乘以“ gasUsed”,因此用户可以将“ gasUsed”控制在合理的范围内,以最大程度地减少矿工收取的交易费用。同时,我们可以从第IV-A节中了解到,一个区块中的最低“ gasPrice”与平均“ gasPrice”之间始终存在差距,从而有机会节省费用。最近的研究(例如Other-tech [17],Majuri [18])分析了以太坊的“ gasPrice”,而一些以太坊网站(例如Etherscan,Etherchain)提供了在短时间内预测“ gasPrice”的工具。但是,这些工具本质上是黑匣子,无法保证其准确性和正确性。综上所述,“ gasPrice”的预测具有巨大的经济价值,以太坊的用户可以通过“ gasPrice”的预测节省资金或缩短等待时间,但值得今后进行深入研究。

3)绩效基准
性能对于区块链系统至关重要。关于区块链性能优化的研究很多,例如Omniledger [19],Algorand [20]和RapidChain [21]。同时,一些优化的区块链系统(例如,Monoxide [22])采用了现实的区块链交易数据来进行区块链系统的性能评估。为了比较不同优化方法的性能,需要一个用于区块链系统的实际使用案例的通用基准。郑等 [23]和BlockBench [24]提出了用于区块链系统的性能评估工具。性能基准测试需要模拟用户行为并获得类似于现实世界区块链系统的数据。在这种情况下,XBlock-ETH框架可以视为基准,因为源数据是由实际用户精确生成的。

B.智能合约分析

作为最受欢迎的智能合约平台之一,以太坊吸引了众多软件开发人员以及大量智能合约。因此,与EOS和Tron等其他智能合约平台相比,以太坊拥有更活跃的开发者社区,后者声称比Ethereum具有更高的吞吐量和更低的延迟。因此,我们的XBlock-ETH框架(以太坊之上)可以用于智能合约的研究。我们总结如下XBlock-ETH的潜在应用。

1)合约的相似性和建议
如第四节所述,智能合约代码与智能合约的调用之间存在很大的相似性。代码相似性评估是软件工程中的传统研究主题,因为许多研究都集中在代码相似性检测上[25],[26]。最近的一些研究集中在智能合约的相似性分析上。特别是,Etherscan提供了基于类似合约的查询系统。找到相似的合约对开发人员在开发新合约时是有益的。例如,开发人员可以在发布合约之前估算用户的行为。同时,黄等 [27]提出了一种方法,以基于智能合约的现有代码来推荐区分代码以更新智能合约。另外,在用户方面,推荐类似的智能合约将帮助用户找到适合自己的合约。

2)合约开发商分析
开发人员分析是软件工程中的另一个传统研究主题,包括开发人员网络分析[28],行为分析[29],故障预测[30]等。关于开发人员分析,XBlock-ETH还包括一个大型的智能合约开发人员网络。例如,有一些由不同的开发人员部署和提供的链上库。这些库可以被其他人调用。每个开发人员都可以通过自己的以太坊地址进行标识。因此,合约调用网络也可以看作是合约开发者的协作网络。开发人员协作的网络和结构可能会告知我们合约代码的可靠性。例如,开发具有漏洞的智能合约的开发人员比其他人具有更高的开发具有漏洞的合约的风险。从这个意义上讲,在分析开发者的智能合约之后,我们的XBlock-ETH可以对开发者分析有所帮助。

3)合约漏洞检测
区块链的安全性和隐私性最近引起了广泛关注[31] – [32] [33] [34]。智能合约的安全性一直是区块链研究界的热门研究主题。尤其是,智能合约的脆弱性引起了更多关注。对以太坊的许多恶意攻击(例如TheDAO攻击)已经造成了巨大的损失(以百万美元计)[35]。为了防止智能合约受到恶意攻击,合约上的漏洞检测是至关重要的一步。最近有一些尝试进行漏洞检测。例如,Oyente [7],Zeus [36],teEther [37],S-gram [38]和ContractFuzzer [39]提出了智能合约漏洞检测的工具。在某些情况下,智能合约的漏洞检测方法可能会受到传统软件漏洞检测方法的启发和启发,因为它们实质上等同于代码验证。在这方面,一些研究集中在验证区块链上的合约代码。这些合约代码也称为“字节码”或“操作码”。我们的XBlock-ETH本质上包括合约代码数据,可以应用于合约漏洞检测。

4)欺诈检测
由于巨大的经济价值和智能合约的普及,恶意用户可以将智能合约用作骗局。例如,众筹合约带来可观的回报,以吸引受害者进行投资。 [40]中有报道称,庞氏骗局合约可以骗取他人的加密货币。已经提出了几种方法[40]-[41] [42] [43]来检测以太坊上的欺诈合约。大多数方法主要基于智能合约的代码和交易记录,而它们却包含在XBlock-ETH数据中。因此,可以在欺诈检测中进一步利用XBlock-ETH数据。

C.加密货币分析

由于去中心化和成本降低,基于区块链的加密货币已成为近年来的热门话题。以太坊中有大量的加密货币,包括以太币,ERC20通证和ERC721通证。 CoinMarketCap中显示,第三方交换中可以使用超过2,000种通证。因此,基于区块链数据的加密货币分析可以带来巨大的财务价值。我们将加密货币分析大致分为加密货币转移分析,加密货币价格分析和虚假用户检测,分别解释如下。

1)加密货币转移分析
加密货币交易分析是进行加密货币转移分析的第一步。关于以太坊的转移,Chen等 [6]提出以太交易的图形分析,并从图形分析中得出一些见解。关于ERC20 / ERC721通证,Victor等人 [44]和Somin等[45]提出了对代币交易网络的分析。在分析了加密货币交易之后,可以对用户行为进行进一步分析。例如,通证的用户可以形成不同的社区。社区发现可以通过分析加密货币交易来进行。此外,基于区块链的加密货币的匿名性可能导致洗钱行为,这可以通过加密货币交易分析从本质上进行识别和检测。我们的XBlock-ETH数据为这些问题提供了潜在的解决方案。

2)加密货币价格分析
基于区块链的加密货币的价格受到多种不同因素的影响,例如政府政策,技术创新,社会情感和商业活动。最近的一些研究集中在加密货币的价格分析和预测上[46]-[47] [48]。典型的加密货币价格分析包括三个步骤:(i)从加密货币交易所收集价格数据,(ii)识别加密货币价格与其他因素之间的相关性,以及(iii)预测未来价格并预测潜在利润。但是,加密货币的价格有时会受到某些方的恶意控制。因此,数据清理过程对于获得准确和正常的加密货币价格数据是必需的。一些加密货币价格数据存储在去中心化交易所合约中,可用于加密货币价格分析,而原始数据可能需要进一步的预处理才能使将来的分析受益。

3)伪造用户检测
假用户检测[49] – [50] [51]是社交网络中的传统研究主题。区块链系统中的加密货币用户还形成了类似于社区的社交网络,其中还存在一些由开发人员控制的假用户,以提高DApps活动排名。因为DApp(或加密货币)排名基于与用户活动相关的某些指标,例如每日活跃用户(DAU)。因此,许多开发人员利用漏洞来制造一些假用户来改善活动,从而获得更高的排名。尽管某些DApp网站(例如DAppReview)使用伪造用户标记了加密货币,但这种伪造用户检测几乎是在黑匣子中或手动完成的。另外,关于伪造用户对加密货币的检测的研究很少。经常免费的无许可区块链系统可能会比许可的区块链系统倡导更频繁的假用户活动。我们的XBlock-ETH将在未来得到进一步改进,以支持假用户检测。

6 相关工作与讨论

本节将介绍和讨论有关以太坊数据的一些先前研究。我们将最新文献分为两类:数据工具和数据分析。

关于以太坊数据工具,一些研究向用户提供了开源工具或API来获取数据。例如,EtherQL [52]为以太坊提供了一个查询层。 Blocksci [53]为研究人员构建了一个分析区块链数据的平台。 DataEther [54]是通过对以太坊客户端进行代码修改而从以太坊获取数据的工具。 Google BigQuery导入比特币和以太坊的数据,使研究人员可以在线分析数据,同时长时间停止更新以太坊数据。同时,对于研究人员而言,下载,更新和分析区块链数据非常具有挑战性。也有一些网站提供了供开发人员使用或分析的数据API,包括Amberdata。13。但是,这些第三方API始终限制使用率,因此研究人员很难抓取所有数据。总而言之,这些研究中的大多数仅向研究人员提供工具或API,而无法提供经过良好处理的最新数据集。

最近的一些研究提供了对以太坊数据的分析。例如,[40] – [41] [42]的研究提出了用于检测庞氏骗局的合约分类方法。而且,Chen等 [6]分析交易并构建三个图以观察以太坊的行为。此外,[55]的工作分析了Etherem上的ERC20通证并找到了非标准通证。关于以太坊数据的另一个流行研究领域是智能合约安全性。例如,Oyente [7]和Zeus [36]提出了以太坊智能合约的安全分析工具,以查找易受攻击的代码。尽管其中一些研究发布了一些数据集,但大多数只适合特定的研究问题。此外,大多数都很难更新。值得一提的是,XBlock-ETH不包含链下数据,例如交易所的价格数据,经过验证的智能合约的源代码,DApp在Github上的行为,即使它们对于分析也至关重要。由于这些数据不是由以太坊生成的,因此本文只关注链上数据。

7 结论

本文介绍了一个经过良好处理的以太坊的最新链上数据集XBlock-ETH,其中包括以太坊区块链,智能合约和加密货币的数据。此外,提出了综合的统计资料和对数据集的探索。 XBlock-ETH数据集已在XBlock.pro网站上发布。此外,还概述了XBlock-ETH数据集的研究机会。我们的XBlock-ETH有望促进以太坊的研究。未来的改进如下:(1)更多功能:本文对数据集的基本特征进行了探索。以太坊是一个复杂的生态系统,其中包括去中心化的金融,稳定的代币等。未来将探索以太坊数据的更多功能。 (2)来自以太坊的额外链下数据:链下数据也很重要,因为它提供了有关开发人员和用户的链下行为的信息。将来,将收集链下数据。 (3)与其他区块链系统的联合数据分析:还有其他一些区块链系统也吸引了大量的用户和开发人员。未来将进行以太坊和其他未经许可的区块链的联合数据分析。