2020-09-07 来源:
原文信息
Peilin Zheng,Zibin Zheng,Jiajing Wu,Hong-Ning Dai;
XBlock-ETH: Extracting and Exploring Blockchain Data From Ethereum;
IEEE,2020.5
摘要
基于区块链的加密货币最近受到了广泛关注。大量数据已存储在无许可的区块链上。对海量区块链数据的分析可以带来巨大的商业价值。但是,缺乏经过良好处理的最新区块链数据集阻碍了对区块链数据的大数据分析。为了填补这一空白,我们从以太坊收集并处理最新的链上数据,以太坊是最流行的无许可区块链之一。我们将经过良好处理的以太坊数据命名为XBlock-ETH,该数据由交易,智能合约和加密货币(即令牌)组成。然而,将整个收集的原始以太坊数据划分并分类为处理良好的数据集并非易事,因为整个处理过程都需要软件工程和大数据分析方面的丰富知识。此外,我们还介绍了每个处理良好的数据集的基本统计数据和探索方法。此外,我们还概述了基于XBlock-ETH的可能的研究趋势,并在线发布了数据和代码。
以下为正文内容:
1 引言:
区块链近年来受到学术界和产业界的广泛关注。在各种区块链系统中,由于其去中心化,无许可区块链(或公共区块链)已经做出了大量努力。无许可区块链的概念最早是在比特币上提出并实现。在区块链系统中,每个对等方都持有一个账本,该账本被视为一个公开账本,本质上是不可篡改的。以太坊是另一个流行的无权限区块链系统,它支持图灵完备的智能合约。区块链系统的激增导致了海量的区块链数据的产生。据Statista报告,截至2019年第三季度,比特币数据已接近242 GB(https://www.statista.com/)。本文重点研究以太坊的数据,而不是比特币,因为以太坊提供了更丰富的数据类型。另一个例子是,在以太坊上部署了超过16000000个智能合约。由于以太坊社区已经发布了两种代币协议,以便为用户提供更简单的初始硬币发行(所谓的ICO),以太坊上有超过10万种ERC20代币和1600种ERC721代币,ERC代表以太坊征求意见。
由于区块链系统的开放性、分布式和不可篡改,海量区块链数据为研究人员提供了巨大的商业价值和巨大的机遇。过去,由于数据所有者的隐私或所有权问题,研究人员很难获得真实的商业交易数据。然而,现有区块链系统中的所有数据都是公开的。同时,由于区块链系统的分布式,无权限区块链中的区块链数据几乎可以在任何地方访问。此外,区块链的分布式共识也保证了区块链数据的不可篡改。除了区块链交易,以太坊(或其替代品)还包括智能合约和加密货币。区块链数据的大数据分析可以促进交易欺诈检测、智能合约漏洞检测和智能合约软件开发等方面的发展。
然而,区块链数据的大数据分析,特别是以太坊的大数据分析存在诸多挑战:(1)区块链节点数据同步困难。由于区块链的庞大规模,在与区块链新连接的节点(即对等节点)完全同步整个区块链数据需要很长时间。例如,在对等平台上完全同步整个以太坊需要一个多星期和超过500GB的存储空间。区块链数据同步带来的海量存储空间和网络带宽的高消耗阻碍了区块链数据的分析。(2)区块链数据提取和处理的挑战。区块链数据以异构、复杂的数据结构存储在客户端,无法直接分析。同时,底层区块链数据要么是二进制的,要么是加密的。因此,为了获取有价值的信息,有必要对二进制和加密的区块链数据进行提取和处理。然而,处理异构区块链数据并非易事,因为传统的数据分析方法可能无法处理此类数据。(3)缺乏区块链的通用数据提取工具。虽然很多研究都提供了区块链数据的开源数据抽取工具,但大多只能支持提取部分区块链数据(不是全部数据)。而且,现有的工具大多只能完成特定的研究任务。(4) 缺乏区块链的基础数据探索。仅针对特定交易的区块链数据分析研究。然而,现有的大多数工具都缺少诸如统计分析、文本分析和数据可视化等基础数据探索。
为了应对上述挑战,我们提出了一个区块链数据分析框架,即eXplore Block ETH(XBlock ETH)来分析以太坊数据。特别是,我们从以太坊提取包含8100000个块的原始数据。原始数据包括三种类型的以太坊数据:块、跟踪和接收。由于对以太坊原始数据的分析比较困难,我们将获得的以太坊区块链数据分为六个数据集:(1)区块与交易;(2)内部以太交易;(3)合约信息;(4)合约调用;(5)ERC20代币交易;(6)ERC721代币交易。以太坊数据的新分类可以帮助其他研究人员以更方便的方式探索和分析以太坊数据。然而,对原始数据进行分区和处理并非易事,因为它需要从原始数据中提取元数据信息并与六个数据集关联。然后,我们对这六个精化数据集进行了统计分析。我们还讨论了XBlock ETH的潜在应用,如区块链系统分析、智能合约分析和加密货币分析。
综上所述,本文的主要贡献如下:
与之前的工作相比,XBlock ETH数据包含全面的链上数据(仅包含部分以太坊数据)。特别是,它包括区块链数据、智能合约数据和加密货币数据。此外,这些经过良好处理的数据集可以方便地用于数据勘探。此外,正式在线发布的XBlock ETH数据已定期更新。
XBlock ETH框架还提供了分析区块链数据集的基本统计和探索功能。本文还概述了XBlock ETH带来的研究机遇。重点讨论了XBlock ETH在区块链系统分析、智能合约分析、加密货币分析等方面的应用。
2 主要内容
图1显示了以太坊区块链的概述,该区块链由自下而上的若干层组成:对等网络、区块链、智能合约和代币。
图1:以太坊区块链架构图
本节介绍如何从以太坊区块链获取原始数据的过程。图2展示了典型的以太坊事务执行流程,从块N到EVM通过区块链对等方。在这个过程中,我们收集了三种类型的区块链原始数据:区块、收据和追踪。接下来我们将详细描述每种原始数据的组成和获取。
图2:以太坊事务流期间的原始数据收集
区块数据(Block)直接存储在以太坊区块链中。每个块由两个组件组成:
•区块头:区块头是区块的基本信息,包括矿工地址、时间戳、gas限制等。
•区块交易:区块交易构成区块主体。每个事务由以下字段组成:From、To、Value、Input等。如果事务用于部署协定,则块事务中的To字段为“null”。
几乎所有的以太坊客户端(包括Geth和Parity)都提供了查询块的接口。例如,“eth getBlock”在Geth和奇偶校验中都可用,效率相似。
然而,通过对区块数据的分析,我们只能获得很少的区块链用户信息。这是因为block transaction的输入只表示在合约部署阶段对EVM的操作,而合约代码只在事务执行结束时存储,与事务的输入不同。因此,我们无法在大宗交易中获得准确的合约代码。同时,在契约调用阶段,我们不知道事务是否成功执行,以及在事务执行过程中抛出了什么样的错误,因为有时候一个合约会向其他合约发送消息或加密货币。
跟踪数据(Trace)本质上是在EVM中生成的详细的运行时数据(例如,内部合约调用、从合约向人员转移资金)。跟踪数据不能直接从块数据中获取或观察到,但可以在合约执行期间记录。在本文中,跟踪数据是指在交易执行之前和之后都无法获得的数据,仅在执行期间出现。跟踪数据包括以下类型:
•Create是部署智能合约时的跟踪,包括创建者、代码和初始余额。合约的创建者可以是个人或其他智能合约。
•当资金或信息通过不同的以太坊地址传输时,调用发生。合约调用或以太传输显示为“调用”跟踪。
•自毁式智能合约是指自己删除其代码并将值退还给特定帐户。
•奖励是矿工在开采区块时获得以太币奖励,奖励的价值取决于矿工的贡献。
在Geth中,trace的接口是“debug_traceTransaction”。但是,该接口返回事务期间的所有操作,导致资源消耗大,效率低。因此,许多以前的研究都试图修改Geth的源代码以获得详细的运行时数据,而这个过程非常耗时。
本文采用parity的“parity_trace”来获取跟踪数据。这个接口是由官方开发者提供和维护的,与Geth相比,它的正确性得到了保证。同时,它还提供了我们需要的足够的信息,例如基本的跟踪类型和错误。此外,parity的另一个优点是更新方便,因为数据是按块索引的。
在交易执行后,一些以太坊状态已经改变(例如,代币合约中账户的余额)。为了减少客户端的查询开销,许多合约在执行过程中会留下“Event”的输出。例如,一个标准的令牌合约将输出一个“Transfer(from,to,value)”事件,让客户知道在执行过程中发生了什么。这种输出是单向输出,因为它只是写入事务的接收中,可以被外部客户或个人读取,但不能被内部EVM读取。
第四节将给出以太坊数据的统计。尤其是以太坊上使用智能合约的加密货币超过10万种。对于这些代币合约,收据数据是了解持有人、所有者和用户行为的重要来源。因此,有必要获取收据数据。Geth和Parity都提供了获取交易凭证的接口。Geth接口和parity接口的主要区别在于收据的查询索引。具体地说,Geth接口的接收是由事务散列索引的“eth-getTransactionReceipt”,而奇偶校验的接口是按块号索引的“parity_getBlockReceipts”。这样,奇偶校验比Geth高效得多,因为它可以在一个查询中返回一批收据。
总之,在以太坊中可以获得三种原始数据集:块、跟踪和收据。由于原始数据量大、信息量大,数据处理是简化数据表示、加快数据分析速度的必要手段。压缩后,数据的大小约为313gb。
在本节中,我们将从以太坊获取的原始数据进行处理,并将其分为六个数据集:(1)块和交易;(2)内部以太坊交易;(3)合约信息;(4)合约调用;(5)ERC20令牌交易;(6)ERC721令牌交易。图3显示了从原始数据到已处理数据集的关系。我们不难看出,在数据处理中,跟踪数据的应用最为广泛。本节将介绍如何生成数据集,以及统计数据和观察结果。
图3:从原始数据到数据集的映射
关于以太坊区块链的矿工,有5122个矿工的唯一地址,如表一所示。这意味着作为矿工的对等节点不超过5122个,因为一个对等节点可能拥有多个地址。同时,每个矿工都有权在区块内写额外的文本。所以,我们也用词云(word cloud)来分析矿工的文本。图4(a)显示了单词cloud的文本可视化。结果表明,由于大多数矿工都在矿池中,为了提高采矿能力,他们在矿池中留下了自己的名字。
表1 数据集1的统计
如表1所示,每个块的事务数平均值为60.68,出块平均时间为15.33秒。换句话说,以太坊的平均吞吐量约为每秒4个事务。即使当大部分网络处于活动状态时,如图4(b)中4900000个块所示,吞吐量也约为每秒16.7个事务。这一结果意味着以太坊在支持实时互联网应用方面还有很长的路要走。
图4:数据集1的可视化
在以太坊,矿商有更高的优先级将交易打包到区块中。“gasPrice”的可视化如图4(c)和4(d)所示。从宏观上看,随着以太坊社区的发展,“gasPrice”正在逐渐减少,除了在交易异常频繁的时候出现了几个高峰。
网络拥塞方面,在微观上,我们提取了8000000到8020000个区块的时间,发现“gasPrice”的波动可以用潮汐定律观察到。这一观察结果意味着“gas价格”的波动是可以预测的。
以太币是以太坊的本地加密货币。以太币的交易不仅发生在区块中记录的交易中,也发生在智能合约执行过程中。例如,如果有人要求智能合约向另一个智能合约发送10个以太币,合约中的以太币交易不会在区块中被观察到。在某些区块链探索者(如Etherscan5)中,此类交易也称为“内部交易”。为了调查所有的Ether交易,我们处理块和跟踪数据来处理内部Ether交易数据集。如表2所示,收集了54720018个地址之间发生的329020672个以太。
表2 数据集2的统计
Ether的值有很大的差异,最大值为11901464.24 Ether(市值约20亿美元),但平均值只有22.30 Ether。图5(a)显示了每10000个块的总交易量的数据。结果表明,以太币交易最活跃的时间是400万至430万个区块之间,与首次发行硬币(ICO)最活跃的时间相匹配。关于图5(b)中所示的Ether分布,我们发现大多数Ether交易都在0.1 Ether到1 Ether的范围内,这表明大多数交易只转移少量的Ether。
图5:数据集2的可视化
以太坊可以被视为智能合约平台。为了调查以太坊上的所有智能合约,我们对追踪数据进行处理,得到智能合约的基本信息,包括创建者、创建时间、初始值、合约代码、创建代码。有些智能合约可以被删除,如果某人在函数中设置了“自杀”操作代码,则可以将以太网退还给他们。因此,我们可以观察合同解除的行为。根据表三的统计,133484个地址创建了16609273个智能合约。它意味着有多个用户创建多个合同。
表3 数据集3的统计
从表三中观察到的一个异常现象是,删除了5564823个合同,同时将以太余额退还给19133481个地址。一般情况下,智能合约在删除期间不会将以太网退还给多个地址。这种异常现象背后的原因是,以太坊遭遇了拒绝服务(DoS)攻击,攻击者利用“自杀”代价的漏洞在以太坊创建帐户。在关闭以太坊之前,许多对等方的漏洞被直接删除,导致大量的漏洞被删除。
对于合同代码,我们将字节码转换为十六进制代码。图6(a)给出了合同规模的统计数据。特别是合约规模的平均值为958.20,说明智能合约占用的存储空间很小。契约规模分布也意味着大多数契约的规模都集中在一些集群上。这表明许多智能合约看起来可能相似。这种相似性将在数据集4中进一步调查。图6(b)显示了创建的合同的数量。如图6(b)所示,新智能合约的数量正在增加,尤其是在“ICO”概念出现之后。
图6:数据集3的可视化
3 结论
本文介绍了以太坊最新处理的链上数据集XBlock ETH,包括以太坊区块链、智能合约和加密货币的数据。此外,还对数据集进行了全面的统计和探索。XBlock ETH数据集已于发布XBlock.pro版网站。此外,还概述了XBlock ETH数据集的研究前景。
我们的XBlock ETH有望促进以太坊的研究。今后的改进工作如下:(1)更多特征:本文对数据集的基本特征进行了探讨。以太坊是一个复杂的生态系统,包括分布式金融、稳定币等等。以太坊数据的更多特性将在未来进行探索。(2) 更多来自交易所和开源社区的数据,同时,链下数据也很重要,因为它提供了开发者和用户的链下行为信息。(3) 结合其他区块链系统分析:还有一些其他区块链系统也吸引了大量用户和开发者。未来的工作会将以太坊和其他无权限区块链进行组合分析。
ABSTRACT
Blockchain-based cryptocurrencies have received extensive attention recently. Massive data has been stored on permission-less blockchains. The analysis of massive blockchain data can bring huge business values. However, the absence of well-processed up-to-date blockchain datasets impedes big data analytics of blockchain data. To fill this gap, we collect and process the up-to-date on-chain data from Ethereum, which is one of the most popular permission-less blockchains. We name such well-processed Ethereum data as XBlock-ETH, which consists of transactions, smart contracts, and cryptocurrencies (i.e., tokens). However, it is non-trivial to partition and categorize the collected raw Ethereum data to the well-processed datasets since the whole processing procedure requires sophisticated knowledge on software engineering as well as big data analytics. Moreover, we also present basic statistics and exploration for each of the well-processed datasets. Furthermore, we also outline the possible research opportunities based on XBlock-ETH, with the data and code released online.