Transaction-based classification and detection approach for Ethereum smart contract

基于交易的以太坊智能合约分类与检测方法

摘要:区块链技术为各行业带来创新。以太坊是目前第二大区块链平台,也是最大的智能合约区块链平台。智能合约可以简化和加速各种应用程序的开发,但也带来了一些问题。例如,智能合约被用来实施欺诈,漏洞合约被用来破坏公平性,还有许多重复的合约没有实际目的地浪费性能。这篇论文为以太坊智能合约提出了一种基于交易的分类和检测方法解决这些问题。从以太坊收集了超过10000份智能合约,并专注于智能合约和用户产生的数据行为。通过手工分析从事务中识别了四种行为模式,这可以用于区分不同类型的契约之间的差异。然后在此基础上构建了智能合约的14个基本特征。为了构建数据集,提出一种数据切片算法,对收集到的智能合约进行切片。之后,使用LSTM网络来训练和测试数据集。大量实验结果表明,该方法能够很好地区分不同类型的合约,在异常检测和恶意合约识别的应用中能获得满意的精度、召回率和f1值。

关键词:区块链、以太坊、智能合约、分类、安全

1 引言

区块链是一种去中心化的分布式技术,用于记录交易。这给区块链带来了很多好处,比如去中心化、持久性、匿名性和可审计性。因此,区块链技术近年来快速发展,应用场景也从最初的电子虚拟货币分发交易扩展到金融、医药、物联网、软件工程等领域。比特币是区块链技术的第一个成功应用。它被评为2015年和2016年最佳表现货币。以太坊的市值约为250亿美元(截至2019年6月),是仅次于比特币的第二大区块链平台。同时,以太坊是第一个支持智能合约的区块链平台,也是最大的一个。截至2019年6月,以太坊拥有超过6700万个账户,每天增加约70K个新地址,以太坊中有数百万个智能合约。在以太坊的安全、性能和应用方面的许多研究已经取得了很大的进展。此外,许多组织和企业已经开始使用区块链技术来增强其信息系统的功能和安全性,以及扩展新业务。例如,组织和企业可以使用通过智能合约实现的DApp(即去中心化的应用程序)来实现这些目标。然而,由于智能合约本身可能存在安全问题,DApp也可能向信息系统引入新的漏洞。

必要性:智能合约的识别和分类可以帮助我们更好地理解智能合约的行为,找出漏洞如确认欺诈合约。然而,这些工作一直没有得到足够的重视。文中的分类和检测方法对于提高基于区块链的信息系统的安全性、性能和管理具有重要意义,原因如下:

  • 首先,智能合约是区块链最重要的组成部分之一。它也是许多基于区块链的系统实现其功能的基础。研究智能合约的安全性是提高区块链系统安全性的必要途径。
  • 恶意合约检测的第一步是对合约进行分类。不同合约(如游戏合约和金融合约的检测)特征不同,因此对应的检测重点也不同。文中提取的特征和分类方案可为恶意智能合约的检测研究提供参考。
  • 对最常见的应用案例进行分类和检查,可以帮助特定领域的新智能合约了解哪些领域值得更多投资。
  • 合约的部署者可能会隐瞒他们的真实目的,如,一些投资计划掩盖的庞氏合约。文中的分类和检测方法可以帮助用户验证合约属于某一类的概率,从而有助于发现目的不清晰的合约。
  • 一些合约在设计上是有缺陷的,可能会消耗过多的GAS,因此会给用户造成经济损失,从而影响区块链的性能。我们的方法可以帮助用户发现这些合约,从而避免损失。
  • 恶意智能合约的检测可以缓解区块链中的安全问题。我们的检测方法可以扩展到异常检测、恶意合约检测和智能合约检测和未知智能合约识别,有助于缓解智能合约带来的安全问题。

贡献:本文主要研究以太坊中智能合约和用户产生的数据行为,包括Balance的趋势和以太币的变化,用户生成的交易活动和智能合约。为了做到这个,我们从以太坊收集了超过10000个智能合约,并删除了包含太少交易的合约。通过对这些合约的分析发现不同类型合约之间的交易行为具有独立的特征。比如,1)游戏类型的合约通常表现出Balance悬崖式减少的行为。这是因为游戏会有一个赢家,而Balance的一部分会作为奖励发送给赢家。2)在赌博类型的合约中,比如掷硬币,参与者要么赢得固定赔率的奖金,要么输掉所有的下注。所以以太币的流入和流出呈固定比例关系。3)在不同类型的合约中,交易的统计特征也能反映其独特的行为。有些合约有大量的收入交易,但只有少量甚至没有支出交易,如社交合约。其他类型的合约在外部交易和内部交易的数量之间可能有很大的差距。4)账户活动可以反映不同类型的合约行为。在庞氏合约中,账户参与的时间越早,得到奖励的次数就越多,明显高于那些参与时间较晚的账户。这与庞氏骗局的现象是一致的,早期的参与者受益于后参与者的投资,后参与者获利的可能性较小。在大多数情况,我们可以根据合约的单一行为特征来区分它们的类型。然而,有时需要多个特征;来确定合约的类型。例如,赌博类的合约可能与游戏类型合约的行为相似。

总之,该文做出了以下贡献。

(1)从以太坊收集了超过10000份智能合约并手动分析了他它们的交易行为。发现四种行为模式,可以帮助我们更好理解合约交易行为,并用来区分不同类型的合约。

(2)为进一步研究,构造了14个基本特征来描述交易行为。它们是时间序列数据,是根据合约的主要活动构造的。

(3)为解决数据集不足的问题,提出了一种对收集的智能合约进行数据切片的方法,然后将其用于LSTM网络的训练,结果表明了该方法的有效性。

本文剩下部分如下组织。第2节介绍以太坊的背景、账户和智能合约以及合约的交易。第3节将详细描述数据收集、交易分析方法、数据处理以及模型。第四部分总结了实验设置、评价指标和实验结果。在第5节中回顾了相关研究,并在第6节进行总结。

2 背景

2.1 以太坊

以太坊是2014年提出的开源区块链平台,目前已发展为支持智能合约的最大区块链平台。它也是市值仅次于比特币的区块链平台。在撰写本文时,以太坊区块链拥有超过800万个区块,每个区块都包含许多交易。以太坊推出了名为Ether(ETH)的专用加密货币。与其他数字货币一样,ETH可以在加密货币交易所进行交易,或者开发者支付ETH以保持其应用程序的运行,包括交易费用和计算服务。与比特币相比,以太坊的另一个特点是引入了以太坊虚拟机(Ethereum virtual machine, EVM)。EVM是智能合约的运行环境。开发人员通常用高级语言构建智能合约,然后将它们转换为可以在EVM中执行的字节码。

2.2 账户和智能合约

账户是以太坊的基本单位。每个账户都有长度为20字节的唯一地址。以太坊区块链中的状态转移是账户之间信息和价值的转移。账户分为两种类型:外部账户EOA和合约账户CA。主要的区别是CA包含可执行代码而EOA不包含。

对于EOA,用户可以随意创建外部账户,并使用私钥进行控制。为了生成EOA的地址,首先通过计算私钥的哈希生成公钥,然后公钥的最后160位组成EOA地址(通常表示为40位16进制字符串,即20字节)。该地址是外部账户的唯一标识符。尽管EOA没有可执行代码,但它可用于存储当前以太币余额或传输以太币、部署合约以及通过发送事务调用智能合约。

合约账户,或者称智能合约,首次出现在1997,现在是以太坊上的一个特殊账户,由智能合约代码控制。 与EOA一样,智能合约也有一个当前的以太坊均衡字段和唯一地址,但它的地址由合约创建者的地址和合约创建时发生的交易决定。在以太坊中,智能合约本质上是一个由字节码组成的执行程序,在满足触发条件时自动执行。此外,一旦智能合约部署到以太坊上,即使是开发人员自己也无法修改它。开发人员通常使用高级进行源代码开发,通过EVM编译器将其转换为字节码,然后通过客户端将编译好的字节码上传到以太坊。智能合约在以太坊部署后,将以字节码的形式在EVM中调用并运行。此外,合约还有一个类似数据库的空间,称为存储空间,用于存储持久信息(例如全局变量,智能合约的字节码)。

部署在以太坊中的智能合约不能主动执行。它们需要由事务或消息调用触发,并由EVM在网络上的每个节点上运行,以验证新的块。因此,智能合约要么由外部账户调用,要么由其他职能合约调用,但他们具体的调用方法不同。尽管智能合约在部署后无法修改,但以太坊允许合约自毁,这可以用于停止有bug的合约等。当合约自毁时,它的运行字节码将从区块链中删除,合约中剩余的以太币将被发送到指定的账户。一般来说,智能合约可以很容易地部署在以太坊中。可以说,智能合约是存储在以太坊区块链特定地址中的功能代码和数据状态的集合。

2.3 交易

区块链是一个全球共享的交易数据库。一个块包含许多交易,交易是发送到区块链的消息,它携带导入信息(例如,函数参数或合约的字节码等)。任何人都可以通过参与网络来同步区块链上的数据。但是,如果有人想要更改区块链中的某些内容,他们必须创建一个被所有其他参与者接受的交易。此外,当一个交易应用于区块链时,没有其他交易可以更改它。

在以太坊中,交易是从一个账户发送到另一个账户地址的消息。我们关注交易是因为以太坊的主要活动是由交易触发的,包括以太币传输、智能合约传输和合约创建。为了避免歧义,我们将来自EOA的交易成为外部交易,而将从智能合约发送到其他账户的交易称为内部交易。图1显示了外部交易和内部交易。需要注意的是,内部交易并不保存在区块链中,因此它们不能直接通过解析块得到。 

每个交易都包含一些基本字段,其中txdata字段包含主要的交易信息,包括了:Signature字段指定交易发送方的签名;Amount字段表示以太币转移的数量,单位为“Wei”;Payload字段指定智能合约的字节码或调用合约时的参数。交易传输也可能失败,如传输余额不足、Gas不足、字节码无效等。应用交易的效果将在失败时回滚。因此,我们只基于那些成功的交易来分析智能合约。创建智能合约意味着在区块链上部署合约,它的创建者可以是EOA或另一个智能合约,并发送交易以实现部署。在这种情况下,Recipient字段地址应该为空,Payload字段包含合约的字节码。成功部署后,任何以太坊用户都可以通过向合约地址发送交易来调用合约。

3 数据,分析和模型

本节概述了数据收集、交易分析方法、数据处理和模型。首先,简要介绍了智能合约数据的来源和采集方法。然后,对智能合约的交易特征进行分析,找出能够反映智能合约的行为特征。最后对数据处理方法和模型进行了说明。

3.1 数据收集

我们通过两种方式收集合约数据。一种是通过以太坊客户端同步所有历史交易数据。我们使用奇偶校验客户机并将其设置为跟踪启动模式,以便它能够计算和存储跟踪数据。收集2015年7月30日到2018年2月1日的所有交易数据(区块高度约500万)作为研究对象。另一种使用Etherscan提供的api下载智能合约的交易,并以JSON格式存储数据。尽管所提供的API声称只能下载最近的10000个交易,但是通过修改块范围可以获得合约的所有交易。由于网络滞后,2018年2月1日之后的合约交易采用第二种方法收集。根据智能合约的不同应用,我们还参考了DApp发布网站,最后整理出以太坊中最常见的六种类型。我们总共收集了11593份合约,详细情况见表1。

3.2 基于交易的分析

自创建以来,智能合约的每笔交易都保存在以太坊上。因此,我们可以还原智能合约的各种状态变化和趋势。例如,图2显示了以太坊上名为Wrapper Wther的合约。我们可以恢复自建立以来的所有交易行为,包括外部交易和内部交易。此外,我们可以区分收入交易和支出交易,它们由EOA或合约调用。

不同类型的合约有不同的交易行为。合约的应用目的决定了它的具体行为,这反过来又帮助我们确定合约的类型。类似地,恶意合约(如庞氏合约)也有自己的特殊行为,是可以被检测的。我们手工调查了几个具有不同应用目的的合约,并从可以反映它们之间差异的交易中总结出行为模式。

3.2.1 余额变化

余额指的是当前账户里有多少以太币。这个账户包括EOAs和合约,但这里只考虑合约的余额。余额的变化可以反映不同类型合约的差异。游戏合约通常有如图3所示的行为。

随着游戏参与者的增加,合约的余额在一段时间内稳步增长。但经过一段时间后,Ether会出现悬崖式的流出,大幅减少到一定的余额(甚至可能减少到0),这种现象会周期性发生。我们发现这是因为随着游戏的发展,赢家会出现在游戏中,而合约将余额作为奖励发送给赢家。这在其他类型的合约中没有或很少是这样的情况。

3.2.2 流入以太币和流出以太币的相关性

在某些合约中,以太币的流入和流出存在固定的相关性,这种相关性可以反映这类合约的独立交易特征,如赌博合约。以太坊上的赌博合约可以大致分为几种形式:彩票、老虎机、掷硬币、骰子等。它们都有一个特点,即合约本身向赌博参与者收取一定比例的佣金。这意味着在一个赌博合约中,在以太币的赌注和参与者赢得赌注时获得的以太币之间有一个固定的比例。例如,一个赌徒进行了一个掷硬币的赌博,下注的是X以太币,获胜者将获得a倍的下注奖金(假设没有额外费用),合约的佣金率是B%,那么如果参与者赢得了这个赌博,他实际上将获得Y奖金。因此在此合约中赢得下注奖金的所有玩家将具有此特征:Y=X*a-X*B%。图4为一个赌博合约,红线代表赌注与结果之间的关系,呈线性关系,表明两者之间的比例是固定的。

3.2.3 交易的统计特征

在不同类型的合约中,它们的交易也有一些独特的统计特征。例如,在一些社交合约中,用户的主要行为是注册账号和发布信息。因此,只有收入交易,没有支出交易,用户在注册或发布信息时不需要传输以太币。他们只需要支付Gas,所以合约余额总是0,如图5的例子4.对于一些其他类型的合约,收入交易的数量可能明显高于支出交易的数量。外部交易的数量和内部交易的数量之间也可能存在很大的差距。以游戏合约为例,如图6所示,这种现象在游戏和赌博合约中很常见。

3.2.4 账户活动的特征

合约中账户的活动也可以反映合约的独特特征。例如,图7和图8分别是庞氏合约赌博合约的账户活动分布。

图7展示了庞氏合约的投资频率和投资以太币的金额。上面两个子图代表了账户投资频率(红色)和投资回报频率(蓝色)。下面两个子图表示以太币的投资额(红色)和以太币的回报率(蓝色)。在每个子图中,每个小方格代表一天的统计数据。我们用颜色深度来区分,颜色越深,数字越大,反之亦然。从左上角到右下角表示合约的时间顺序,即左上角的方格表示第一天,右下角表示最后一天。可以观察到以下特征。首先,从上面两个子图可以看出,红色子图中的小方块颜色非常浅,而对应的蓝色子图颜色非常深,尤其第一个最明显。这说明,越早投资合约的账户,回报频率越高,明显高于较晚参与合约的账户。第二,从下面两个子图可以看出,前面的小方块大部分在红色子图和蓝色子图中都有颜色。后面的小方块在红色字图里有颜色,而对应的蓝色子图中的小方块几乎没有颜色。这说明早期的投资账户有较高的回报比例,而后期的投资账户几乎没有投资收益。这两点都符合庞氏骗局现象。

在其他类型的合同中,例如,图8是一种赌博合约。首先,从上面两个子途中可以看出,红色字图中大部分小方块与蓝色子图中的小方块颜色深浅大致相同。首先,从上面的两个子图中可以看出,红色字图中的大部分小方块与蓝色子图中的小方块颜色深浅大致相同。然而,也有一些情况下,红色子图有较深的小方块,而对应的蓝色子图有较浅的小方块。由此可见,用户投入的频率和回报基本上是成正比的,即投注的频率越高,获得回报的概率越高。当然,也有可能在没有任何回报的情况下一直输下去。这和真正的赌博差不多。其次,上面两个子图还显示了另一个与真实赌博一致的现象。从整体上看,投注的数量远远大于获胜的数量。第三,从下面两个子图可以看出,蓝色子图中对应的红色子图的小方块不是颜色略深就是没有。这说明账户下注的以太币要么获得固定收益,要么没有收益,这与赌博的特点是一致的。

3.2.5 基于交易的特征

根据我们发现的智能合约的四种行为模式,很明显,基于交易的分析确实可以反映不同应用类型合约的特点。然而,单一的行为特征并不能完全准确地判断合约的类别,因此需要结合多个行为特征来提高判断的准确性。

通过对以太坊上大量智能合约交易的统计分析,我们构建了以下14个能够真正反映智能合约的基本特征。这14个特征是按合约转移行为发生的时间顺序构建的,因此它们是时间序列数据。这些特征如下:

  • 特征1:合约余额的数量;
  • 特征2:外部交易流入以太币的数量;
  • 特征3:内部交易流入以太币的数量;
  • 特征4:外部交易流出以太币的数量;
  • 特征5:内部交易流出以太币的数量;
  • 特征6:合约总交易数;
  • 特征7:外部交易的收入交易数量;
  • 特征8:外部交易的支出交易数量;
  • 特征9:内部交易的收入交易数量;
  • 特征10:内部交易的支出交易数量;
  • 特征11:外部交易唯一传入地址数量;
  • 特征12:外部交易唯一传出地址数量;
  • 特征13:内部交易唯一传入地址数量;
  • 特征14:内部交易唯一传出地址数量。

3.3 数据预处理和建模

3.3.1 数据预处理

基于这14个特征,我们可以区分两种不同类型的合约。我们将合约的14个特征作为时间序列数据。因此,每一份节约实际上都可以看作一个二维矩阵。每一行用来表示上面14个特征,就即一共14行。每一列表示每个时间间隔。

因为每个合约的创建时间不同,所以生成交易的数量、时间、频率都不同,即每个矩阵的列数不同。每个合约的交易都需要分割。切片的方法和长度将影响模型分类的准确性和效率。值得注意的是,有些合约产生的数据太少,只有很少的交易,我们认为这类数据并不能真正代表合约的行为特征。因此,在后续的实验中,将忽略此类合约。

图9为数据预处理流程,算法1描述了数据切片算法。数据切片算法的过程可以概括为:1)根据固定的时间t设置一个时间步长,然后将一个时间步长产生的数据合并。合约可以用一个二维数组(n,14)表示,其大小为n*14,其中n表示有n个时间步长,也是数组的长度,14表示n有14个数据,即该时间步长上的14个特征数据。2)设置最小数据长度nMin以及一个最大数据长度nMax。数据长度n小于nMin的合约将被忽略,不参与后续的实验。3)对于nMin<=n<=nMax的情况,即用0填充空缺值,让数组大小变为(nMax,14)。生成一个三维数组组(1,nMax,14),1表示合约只有一个数据切片。对于n>nMax的情况,从数据集开始,每隔m个时间间隔获取一个数据包切片(nMax,14),直到剩下的n小于nMin(小于nMin的数据长度仍然填充为0),因此此时一个合约可以生成多个(nMax,14)。这样做的好处是增加了实验中的数据量。将所有切片转换为一个数组可以形成一个三维数组(x,nMax,14),其中x表示总共x个数据切片。上述数据切片算法可以完成对数据的预处理。算法中T、nMin、nMax和m的具体值将在第4节中提到。

3.3.2 模型结构和训练参数、

我们将智能合约处理成多个时间序列切片,每个时间序列切片都是合约数据的一部分,可以视为合约特征行为的映射。图10显示了数据集生成和模型训练的流程。首先,将每种类型的合约分别作为输入数据,该类型中的每个合约都通过数据切片算法进行处理(如3.3.1节所述)。然后,由所有合约生成的(x,nMax,14)最终合成一个。重复上述过程,直到处理完所有类型。最后,我们可以得到包含训练模型和实验类型标签的数据集((X,nMaxn14), label)。之后,将((X,nMaxn14), label)数据集中的每种类型按7:3的比例划分为训练集和测试集,并从训练集中抽取20%作为验证集。需要注意的是,划分时应随机取数据,以防止过拟合。训练集用于训练模型,验证集用于训练过程中对模型参数进行调优,测试集用于测试模型的有效性。

我们使用LSTM网络来训练数据集并进行实验。具体训练参数设置如下(基于Keras和TensorFlow):dropout=0.2以及recurrent dropout=0.2,这两个参数用来缓解过拟合;损失函数使用二元交叉熵,优化器采用Adam;致密层设置激活函数'sigmoid'作为输出结果。其他参数包括T、nMin、nMax、m、batch size和epochs在第四节每组实验中给出。

4 实验和结果分析

4.1 评价指标

我们使用精度P、召回率R和F1值来评价模型的性能。TP指智能合约正确预测的数量。FP指其他类型错误分类到该类型的数量。FN指该类型错误分类到其他类型的数量。P,R和F1的值越高,越能区分不同类型的智能合约。

Precision(P)=\frac{TP}{TP+FP}

Recall(R)=\frac{TP}{TP+FN}

F1-score(F1)=2\times \frac{P\times R}{P+R}

4.2 实验1:评估不同类型合约之间的差异

为了验证第3节中对不同类型智能合约的分析结论,对不同类型的合约进行了成对分类实验。具体的实验参数设置为:T=24(h),nMin=64,nMax=128,batch size=64,epochs=2000。T为时间步长,nMin为最小数据长度,nMax为最大数据长度,m为m个时间步长。这四个参数在3.3节中提到。batch size为训练LSTM网络时的批大小。epochs是一个超参数,它定义了学习算法在整个训练数据集中工作的次数。每组实验重复10次。均值(m)和标准差(std)的结果汇总为表2-7中m(+/- std)的形式。

表2-7分别显示了一种与其他不同类型合约的区别,说明我们从合约交易中提取的特征可以表征不同类型合约的行为模式。以表2为例,游戏类的合约相对于其他类型合约的P在0.902-0.955之间,这意味着90%以上的游戏类合约可以通过特征与其他类型的合约进行区分。R范围在0.909-0.967之间,这意味着超过90%的游戏类型合同被正确识别为游戏类型。F1在0.906-0.972之间,说明模型的分类效果良好。我们使用这14个特征来进行实验,结果表明他们能够真实地反映不同类型合约的特征。但我们也发现,如果某些合约的交易数量过少,会影响实验结果的准确性。该方法可以扩展到异常检测、恶意合约检测、未知智能合约识别等领域。

4.3 实验2:应用于异常检测

在实际应用中,合约的发行人可能会隐瞒合约的真实目的,比如一些合约声称是投资计划,但结果确实典型的庞氏骗局。另一个例子是,一个赌博合约的胜率实际上比他们宣称的要低得多。这个实验可以用来验证合约属于某一类型的可能性,从而发现目的不明确的合约。我们将一种合约类型设置为正数据集,其余所有合约类型设置为负数据集。我们进行了6组实验,每组实验重复10次。均值(m)和标准差(std)的结果汇总在表8中m(+/- std)的形式。具体的实验参数设置为:T=24(h),nMin=64,nMax=128,m=10,batch size=64,epochs=5000。

由图8可以看出,P在0.827-0.965之间,即检测结果正确率为82.7%-96.5%,其中最高的为High-risk,最低的为Game。例如,在Game-type的测试结果是,82.7%的合约是Game-type,剩下的17.3%被错误识别为Game-type。R在0.696-0.876之间,这意味着一份合约的正确识别率在69.6%-87.6%之间,其中最高的是High-risk-type,最低的是Social-type。例如,在Game-type样本中,83.8%的Game-type合约被正确识别,其余16.2%的Game-type合约被识别为其他类型的合约。F1值在0.776-0.918之间。与实验A相比,整体P、R、F1下降,这是由于数据集的不平衡造成的。但这并不妨碍该方法在检测目的不明确的合约时的有效性。

4.4 实验3:恶意合约识别

我们的方法也可以用来检测恶意合约,如庞氏合约。我们使用来自论文(Chen, Zheng, Ngai, Zheng, & Zhou, 2019d)的庞氏合约数据作为实验的恶意合约数据集。然而,庞氏合约的数据集太小,无法训练LSTM网络。即使使用了数据切片算法,与其他合约相比还是太小。因此,通过减小nMin来增加训练数据,由于nMin的减小,每个数据切片可能不能真正代表合约行为的特征。设置庞氏数据集为正,另一种类型的合约为负。进行了六组实验,每组实验重复十次。均值(m)和标准差(std)的结果汇总在表9中m(+/- std)的形式。具体的实验参数设置为:T=24(h),nMin=10,nMax=128,m=10,batch size=64,epochs=5000。

在表9中,F1在0.691-0.825之间,总体结果不太令人满意。这是由于庞氏数据集太小,导致LSTM网络训练不足造成的。尽管如此,在没有合约源代码的情况下,我们的方法仍然可以有效地检测出庞氏恶意合约。由表9可以看出,P在0.795-0.925之间,即正确率为79.5%-92.5%,其中High-risk-type正确率最高,Exchange-type最低。R在0.553-0.778之间,这意味着合约类型的正确识别率在55.3%-77.8%之间,其中最高的是Social-type,最低的是High-risk-type。较高的准确率和较低的召回率说明庞氏合约在行为模式上与其他类型的合约具有较高的相似性。例如High-risk-type的召回率最低,这与现实相符,因为庞氏合约也经常被归为High-risk-type。这也表明可能存在High-risk-type的未披露庞氏合约。此外,庞氏合约还经常伪装成Game-type和Gambling-type,所以Game-type和Gambling-type的召回率也比较低。我们在相同的参数设置和实验环境下,使用LSTM的改进模型,即GRU模型重复实验。结果如表10所示。结果比LSTM模型略差。在我们的数据集中,GRU的训练的时间成本比LSTM约少25%。这是因为与LSTM相比,GRU降低了计算复杂度,但可以获得接近LSTM的训练结果。在表11(结果以均值表示)中,该方法的实验结果与Chen et al.,(2019d)的方法进行了比较。当Chen et al.,(2019d)只使用账户特征时,我们的方法具有更好的P、R和F1。加入操作吗特征后,他们的结果比我们的好。然而,以太坊中只有少数合约会发布源代码,这对他们的方法产生了重大影响,因此我们的方法具有更好的通用性。

5 相关工作

以太坊平台可以被视为一个基于交易的状态机,它从一个起始状态开始,并逐步执行交易,将其转变为某种最终状态。因此,许多研究者通过研究以太坊上的交易数据,对区块链技术有了更深入的了解。交易分析研究还可以揭示区块链上的行为模式,验证现有理论,或证明新方法的有效性。一般来说,可大致分为四类研究方向:数据采集研究、实证研究、性能与安全研究、预测和分类研究。

5.1 数据采集研究

以太坊包含大量异构数据,在保证数据完整性和正确性的同时,不容易高效获取数据。因此,许多研究人员关注以太坊平台上的数据采集,并利用这些数据支持进一步的研究。如Kiffer, Levin, and Mislove (2017)和Nikoli´c, Kolluri, Sergey, Saxena, and Hobor (2018)通过下载和解析文件收集交易数据。这种方法实现简单、快速,但不能收集到完整的数据。这是因为内部交易没有存储在区块链中,因此无法通过解析块获得。此方法将错过智能合约之间的交互。以太坊平台提供了详细的Web3 API,一些研究人员直接调用它们来收集数据。但是有两个明显的缺点。一是由于设计的原因,一些API返回数据很慢,而是不能获得内部交易。也有一些研究人员通过爬以太坊浏览器网站来获取数据。Kalra, Goel, Dhawan, and Sharma (2018)和Bartoletti, Carta, Cimoli, and Saia (2020)都从Etherscan中抓取相关信息,不需要二次处理,相对方便。然而,该网站的服务器通常只列出部分数据,并阻止自动爬虫,以确保所有访问者可用。其他一些研究人员通过检测以太坊节点获得数据。与其他方法相比,该方法可以搜集到更完整、更准确的数据。但这种方法的有效性取决于研究人员和开发人员所拥有的以太坊知识。Chen等人在他们之前的工作中只收集每笔交易中的发送方、接收方和转移的金额,以调查资金转移、合约创建和合约调用。但在随后的工作中,他们通过利用以太坊的内部机制,提出了一种系统的、高保真的数据探索框架DataEther。目前,在以太坊上收集数据方面,DataEther比其他方法更高效、更全面。

5.2 实证研究

以太坊上有许多现象可以反映用户特征、经济行为模式和数学问题。因此,一些研究者通过分析以太坊的数据进行了实证研究。Kiffer等人探讨了硬分叉的后果,展示了分叉如何导致无意的激励和安全漏洞。Bai, Zhang, Xu, Chen, and Wang从时间图的角度研究了以太坊交易的发展行为,发现用户在以太坊上的财富从一开始就非常不公平。Ferretti and D’Angelo使用复杂网络建模框架分析以太坊区块链,以验证区块链发展中是否发生了根本变化。Somin, Gordon, and Altshuler分析了符合ERC20协议的加密货币交易的网络属性,结果表明网络显示出很强的幂律属性,这些结果与当前网络理论的语气一致。Pierro and Rocha旨在调查不同变量是否以及在多大程度上影响以太坊交易费用,他们阐明了不同变量可能如何相互作用并影响Gas Price。Spain, Foley, and Gramoli研究了一系列ICO的影响,以理解以太坊的交易费用、吞吐量和延迟之间的关系,结果显示,交易成本与等待时间成反比。Liang, Li, and Zeng对三种具有代表性的基于区块链的加密货币进行了动态网络分析,反映了不同加密货币的演化特征和竞争力。Sovbetov研究了影响最常见的五种加密货币价格的因素,以及加密货币价格与加密货币市场之间的关系。Fenu, Marchesi, Marchesi, and Tonelli分析了影响ICO成功的因素,结果表明,ICO的成功与以太坊区块链上相关网站的评价和ICO代币的管理有一定的关系。Torres, Steichen等人通过研究智能合约蜜罐的普遍性和行为及其对以太坊区块链的影响,对智能合约蜜罐进行了系统分析。

5.3 性能和安全性研究

区块链的安全性和性能一直是人们关注的热点问题,研究人员在这方面已经取得了许多成果。例如,Chen等人做了很多工作来缓解以太坊的安全问题。他们在2017年提出了一种新的Gas成本机制,根据执行次数动态调整EVM操作的成本,以阻止DoS攻击。2018年,他们的团队使用图表分析对以太坊进行首次系统研究,并提出了基于交叉图表分析的新方法,以解决两个安全问题。2019年,他们调查了与最流行的令牌标准ERC-20相关的这种不一致的令牌行为,并揭示了不一致背后的11个主要原因。然后,他们提出了一种新的方法,通过对比来自三个不同来源的行为,自动检测这种不一致。在他们的后续工作中,他们开发了一种名为SODA的智能合约在线分析框架,并在SODA基础上开发了8个检测应用程序,以检测智能合约中的主要漏洞和能力。

一些研究工作侧重于区块链中的特定安全问题。Nikoli´c等人通过以太坊的交易分析发现了智能合约中的三种漏洞。Bartoletti等人解释了庞氏骗局的定义和以太坊上的庞氏合约,描述了庞氏骗局如何欺骗用户,最后对现有的庞氏骗局进行了分类。Grossman等人通过内部交易和存储操作检测到了智能合约的可重入性漏洞。Sun, Ruan, and Liu将机器学习应用到了以太坊分析中,并通过使用现有区块中的交易信息对用户和智能合约进行分组,并提出了一种基于聚类结果的用户识别和恶意用户检测的新方法。Chen等人使用带有机器学习的交易特征和代码操作码特征来检测以太坊上的庞氏骗局。Cheng等人将蜜罐部署了6个月,他们观察到一种名为zero gas交易的交易类型,攻击者利用它盗取ERC20代币。Sun, Ruan, and Liu研究了以太坊交易,并在私有区块链上分析了两个最受欢迎的以太坊客户端Geth和Parity,以更好地理解不同用户端对以太坊性能的影响。

一些研究人员开发了特定的工具来检测或缓解以太坊上的安全问题。Kalra等人提出来一个名为ZEUS的框架来验证智能合约的正确性和公平性。Krupp and Rossow提出了脆弱合约的通用定义,并使用该定义构建了一个名为TEETHER的工具,该工具可以帮助发现、理解并在漏洞造成损失之前阻止它们的利用。Liu等人开发了一种用于以太坊的语义克隆检测EClone,用于检测合约是否为克隆合约。因为克隆合约可能会放大安全威胁或浪费资源。Jiang, Liu, and Chan提出了一种名为ContractFuzzer的新型模糊器,用于测试以太坊智能合约的安全漏洞。Ferreira Torres, Baden, Norvill, and Jonker介绍了一种保护智能合约和区块链上的用户不被利用的工具。Luu, Chu, Olickel, Saxena, and Hobor提出了增强以太坊操作语义的方法,以使合约不那么脆弱,并构建了一个名为Oyente的符号执行工具,以发现潜在的安全漏洞。Ma等人提出了一种在智能合约包含漏洞时加强EVM的方法,该方法可以实时停止危险交易。Kolluri, Nikolic, Sergey, Hobor, and Saxena构建了一个名为ETHRACER的自动工具,该工具可以有效地检测现有工具遗漏的一类微妙但危险的bug。Torres, Schütte, and State关注与整数错误相关的漏洞,并引入了Osiris框架,该框架结合了符号执行和污染分析,以便准确地发现以太坊智能合约中的整数错误。Rodler, Li, Karame, and Davi提出了一种名为Sereum的新型智能合约安全技术,该技术基于运行时监控和验证,以向后兼容的方式保护现有部署的合约免受可重入攻击。

5.4 预测和分类研究

也有一些研究者通过数据挖掘发现智能合约或交易的行为模式,对其特征进行建模,他们使用机器学习或其他算法进行预测或分类研究。Singh and Hafid提出了一种新颖的方法,用来估计挖掘节点使用机器学习接受和确认一个块的交易所需的时间。Norvill, Pontiveros, State, Awan, and Cullen提出了一个框架,只使用公开可获得的编译过的合同代码,将以太坊网络中的类似合约分组在一起。He, Wu, Wang, Guo, and Jiang研究了以太坊智能合约生态系统中的代码重用实践的特征,并给予字节码的相似性对合约进行了聚类。Chen, Narwal, and Schultz使用各种分类方法来预测以太坊的价格符号,所有方法都达到了50%以上的准确性。

5.5 总结

我们的工作涵盖了上述以太坊研究的所有四个方面。

1 数据采集的研究。我们工作的前提是收集完整的合约和交易数据,因此我们梳理了5.1节中关于如何获取以太坊数据的研究。我们需要收集的交易包括外部交易和内部交易,因此不可能直接从解析块中获得完整的数据。很多工作使用Etherscan提供的API来下载交易数据,但是直接使用这个数据收集方案只能得到最近10000个交易。我们发现,通过修改块范围,可以获得合约的所有交易。该方法可以灵活地获取单个合约的交易情况。但是,由于服务器的限制,无法快速下载大量合约的交易。因此,我们还使用Parity客户机并将其设置为跟踪模式,以便它能够计算和存储跟踪数据。我们通过这两种方式获得的数据可以进行交叉验证,以确保它们是正确的。与其他工作相比,虽然无法获取自定义数据,但我们获取交易的方法更简单方便,同时也保证了数据的完整性。

2 实证研究。第5.2节对以太坊的实证研究进行了总结。我们的工作也有助于实证研究。根据我们在3.2.1-3.2.4节中对这些合约的分析,我们发现它们的交易行为在不同类型的合约中具有独立的特征。这些独特的行为模式与实际现象是一致的。例如,在game-type合约中,通常会显示其余额悬崖式削减的行为。这是因为游戏中有一个赢家,而余额的一部分将作为奖励发送给赢家。在gambling-type合约中,以太币的流入和流出呈固定比率关系。这与赌博中的固定赔率情况是一致的。在庞氏合约中,账户参与的时间越早,得到奖励的次数就越多,明显高于晚参与的账户。这与庞氏骗局的现象是一致的,即早期参与者受益于后期参与者的投资,而后期参与者不太可能赚钱。

3 性能和安全研究。区块链安全性和性能一直是研究的重点,我们在5.3中进行回顾。我们认为,本文提出的分类检测方法在提高智能合约的安全性、性能和管理方面具有重要意义。原因如下:1)恶意合约的分类是恶意合约检测的第一步。不同合约(如游戏合约和金融合约的检测)行为特征不同,相应的检测重点也不同。本文提取的分类方案和特征可为恶意智能合约的检测研究提供参考。2)合约的部署者可能会隐瞒其真实目的,例如,一些庞氏合约使用投资计划掩盖。本文的分类和检测方法可以帮助用户验证合约属于某一类型的概率,从而有助于发现目的模糊的合约。3)部分合约设计存在缺陷,可能会消耗过多Gas,给用户造成经济损失,同时影响区块链的性能。我们的方法可以帮助用户发现这些合约,从而避免损失。4)恶意智能合约的检测可以缓解区块链的安全问题。我们的检测方法可以扩展到异常检测、恶意合约检测和未知智能合约识别,有助于缓解智能合约带来的安全问题。

4 预测和分类研究。这方面的研究相对不足,现有的研究主要集中在如何预测区块链中加密货币的价格趋势。在5.4节中,我们回顾了相关的研究。我们的工作也有助于这一领域。我们从合约交易中提取了14个特征,随后通过LSTM网络训练模型。然后,利用训练好的模型对智能合约的适用范围进行分类,检测合约的异常行为,检测恶意合约。此外,对最常见的应用程序用例进行分类和检查,可以帮助特定领域的新智能合约开发人员了解哪些领域值得更多的投资。

6 结论

为了解决智能合约的安全问题,并对区块链技术产生一些有用的见解,我们为以太坊智能合约提出了基于交易的分类和检测方法。我们发现了四种模式可以帮助我们更好地理解合约的交易行为,并可以用来区分不同类型的合约之间的差异。然后构建了智能合约的14个基本特征。之后提出一种数据切片算法来构造实验数据集。我们使用LSTM网络来训练和测试我们的智能合约数据集。我们通过三个实验,包括评估不同类型合约之间的差异,异常检测和恶意合约识别,来证明它的有效性。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值