没有合适的资源?快使用搜索试试~ 我知道了~
以太坊上的庞氏骗局检测:迈向更健康的区块链技术
14090在以太坊上检测庞氏骗局:迈向更健康的区块链技术0陈伟利中山大学数据与计算机科学学院中国广州chenwli9@mail2.sysu.edu.cn0郑子斌中山大学数据与计算机科学学院中国广州机器智能与高级计算(中山大学)教育部重点实验室zhzibin@mail.sysu.edu.cn0崔佳辉中山大学数据与计算机科学学院中国广州 cuijh6@mail2.sysu.edu.cn0Edith Ngai信息技术系,乌普萨拉大学瑞典乌普萨拉edith.ngai@it.uu.se0郑佩林中山大学数据与计算机科学学院中国广州zhengpl3@mail2.sysu.edu.cn0周宇人中山大学数据与计算机科学学院中国广州zhouyuren@mail.sysu.edu.cn0摘要0区块链技术越来越受欢迎。它也吸引了一些欺诈行为,例如庞氏骗局,一种经典的欺诈行为,在区块链上发现了大量的非法获利,对其产生了非常负面的影响。为了帮助解决这个问题,本文提出了一种使用数据挖掘和机器学习方法来检测区块链上的庞氏骗局的方法。通过验证以太坊上的智能合约,我们首先从用户账户和智能合约的操作代码中提取特征,然后构建一个分类模型来检测以智能合约实现的潜在庞氏骗局。实验结果表明,所提出的方法可以在实际使用中实现高准确性。更重要的是,该方法可以在庞氏骗局创建的那一刻就被检测到。通过使用该方法,我们估计在以太坊上运行着400多个庞氏骗局。基于这些结果,我们提议建立一个统一的平台来评估和监控每个创建的智能合约,以提前警示欺诈行为。0关键词0区块链;智能合约;庞氏骗局;以太坊0ACM参考格式:Weili Chen, Zibin Zheng, Jiahui Cui, Edith Ngai, PeilinZheng, and Yuren Zhou. 2018.在以太坊上检测庞氏骗局:迈向更健康的区块链技术. WWW 2018: The 2018Web Conference, April 23–27, 2018, Lyon, France. ACM, New York, NY,USA, Article 4, 10 pages. https://doi.org/10.1145/3178876.31860460本文根据知识共享署名4.0国际许可发布。作者保留在个人和公司网站上传播作品的权利,并附上适当的归属。WWW 2018,2018年4月23日至27日,法国里昂。© 2018IW3C2(国际万维网会议委员会),根据知识共享CC BY 4.0许可发布。ACM ISBN978-1-4503-5639-8/18/04.. https://doi.org/10.1145/3178876.318604601 引言0比特币的创造使得匿名参与者之间的价值转移成为可能,而无需依赖权威的第三方机构[27]。比特币结合了许多成熟的技术,如数字签名方案、工作证明机制、分布式技术等等。区块链是比特币的重要组成部分,它是通过分布式共识机制由点对点网络维护的价值转移交易记录的不断增长的列表。区块链现在是学术界和工业界的热点[36,43]。比特币和衍生的区块链技术通常被称为下一代互联网[9],因为它们相对于传统的信息互联网创造了一个价值互联网。许多基于区块链的项目已经被创建。以太坊是一个基于区块链的开源分布式平台。以太坊的对应货币被称为以太币。以太坊提供了一个图灵完备的虚拟机来执行智能合约。智能合约是在互不信任的参与者之间自动执行的计算机协议,当预设条件满足时,在区块链上强制执行[4,37]。智能合约的执行不能被终止,也不依赖于可信的权威机构。智能合约可以应用于各个领域[7, 15,30]。支持智能合约的区块链平台被认为是第二代区块链[9]。任何新技术都容易受到欺诈的利用。例如,电子邮件的兴起带来了大量的垃圾邮件。区块链作为一种新兴技术,也因其缺乏监管和匿名特性而吸引了许多欺诈行为。庞氏骗局是一种经典的欺诈行为,以一个近百年前臭名昭著的骗子命名,它也有基于区块链的形式[3,38]。庞氏骗局是一种通过新投资者的投资收入为老投资者产生回报的欺诈投资运作,而不是通过合法的商业活动或金融交易的利润[39]。在庞氏骗局中,许多参与者,特别是后来者,将失去他们投资的大部分资金。显然,庞氏0论文题目:Web经济学、货币化和在线市场 WWW 2018,2018年4月23日至27日,法国里昂Etherscan.io14100各种庞氏骗局对经济造成了伤害,在许多国家是被禁止的。据报道,各种庞氏骗局正在从那些想要参与区块链技术但不了解其工作原理的人身上赚取大钱[16, 25,35]。最近的一项研究估计,从2013年9月2日至2014年9月9日,比特币骗局共筹集了超过700万美元[38]。0图1:智能庞氏骗局(Rubixi)的宣传图片来源:https://bitcoindtalk.org/index.php?topic=1400536.00如今,许多庞氏骗局都伪装成智能合约的形式[3]。我们将这些庞氏骗局称为智能庞氏骗局,相应的智能合约庞氏骗局合同。由于参与者对持续支付的信心是庞氏骗局成功运作的关键因素,智能合约似乎是庞氏骗局的一种吸引人的工具,因为它在区块链上自动执行且无法终止。更重要的是,推广者保持匿名。图1显示了一个典型智能庞氏骗局的宣传图片。宣传词如下:“你好!我叫Rubixi!我是以太坊区块链上的新型验证金字塔智能合约。当你给我发送1个以太币时,我会将金额乘以倍数并在余额足够时将其发送回你的地址。我的倍数因子是动态的(最小为x1.2,最大为x3),因此我的支付加速并且保证未来几个月都会发放。”正如宣传所说,这个智能合约相对来说是有利可图的,回报似乎很快就能到来。然而,实际支付与描述相去甚远。通过手动检查合约交易,我们发现合约中有112个参与者,但只有22个参与者从合约中获利。最幸运的两个参与者获得了超过40%的利润,而创建者就是其中之一。显然,这个合约对大多数其他参与者造成了伤害。上述例子生动地展示了检测基于区块链的庞氏骗局是一项紧迫的任务。尽管一些用户在参与庞氏骗局时对可能的损失有充分的意识[24,29],但检测潜在的庞氏骗局仍然是一个挑战。0因为1)用户和投资者觉得理解区块链很复杂,所以他们可能对其背后的欺诈骗局视而不见;2)对于国家机关和监管机构来说,区块链技术非常新颖,有些在法律体系的灰色地带[12]。因此,为了使与区块链相关的市场健康和合法,开发检测基于区块链的庞氏骗局的技术不仅紧迫而且至关重要。检测基于区块链的庞氏骗局并不是一件容易的事情,因为区块链的用户本质上是匿名的。鉴于智能合约是由代码组成的,通过检查其源代码可以手动检测智能合约是否是庞氏骗局。然而,更糟糕的是,智能合约的源代码可能是隐藏的。实际上,只需要字节码就可以在以太坊区块链上实现智能合约。目前在以太坊上运行着超过一百万个智能合约,但其中只有不到四千个有源代码[1]。这意味着潜在智能庞氏骗局的创建者和逻辑都是隐藏的。这引发了许多问题:以太坊上存在多少个智能庞氏骗局?有哪些类型的智能庞氏骗局?它们的特征是什么?智能庞氏骗局的影响有多大?在回答这些问题之前,首先也是最重要的问题是:如何在没有源代码的情况下检测智能庞氏骗局?为了建立一个有效的模型来检测没有源代码的智能庞氏骗局,我们需要1)足够多的带有标签的合约(确定它们是否是智能庞氏骗局)和2)可以在没有源代码的情况下提取的有效特征。为此,如图2所示,我们首先下载了3071个经过验证的智能合约,包括正常交易、触发交易和源代码。然后将源代码编译为字节码,再将字节码反汇编为操作码(详见第2节)。接下来,从交易中提取账户特征,从操作码中提取代码特征。最后,提出了一种基于XGBoost的分类模型。0正常0以太坊浏览器0触发0交易0源代码0交易0操作0代码0代码0账户特征0特征0编译0分类器0图2:智能庞氏骗局检测框架0反汇编01 https://etherscan.io/accounts/c0论文的一个重要贡献是实验证明了在智能庞氏骗局创建时检测其可行性。因为我们从合约部署后公开可访问的操作码中提取了代码特征。这个结果非常重要,因为通过使用这个模型,我们可以:1)即使源代码被有意隐藏,也能检测到智能庞氏骗局;2)在它造成任何损害之前检测到智能庞氏骗局;3)基于此构建一个风险警示平台。14110本文的剩余部分组织如下。第2节简要介绍以太坊平台和一些关键概念。第3节详细描述了数据、提取的特征和分类模型。第4节总结了实验结果和分析。最后,第5节总结了相关工作,并在第6节中结束了本文。02 以太坊和智能合约0本节简要介绍以太坊和智能合约。首先,我们介绍以太坊平台及其状态转换机制。然后提供庞氏骗局合约的源代码片段。最后,介绍了操作码,即字节码的助记符形式,以及我们模型中特征的主要来源。02.1 以太坊简介0以太坊是一个具有以太坊虚拟机(EVM)的区块链平台,可以执行任意算法复杂度的代码,并允许用户通过几行代码创建区块链应用程序[4]。从技术上讲,EVM是EVM字节码的运行时环境,它是一种图灵完备的编程语言。基于以太坊的智能合约是一系列EVM字节码。创建基于以太坊的智能合约需要三个步骤:1)使用高级语言编写智能合约源代码,例如Solidity[2];2)使用EVM编译器将源代码编译为字节码;3)使用以太坊客户端将字节码上传到区块链。从技术角度来看,区块链系统可以被视为一个状态转换和维护系统[4]。在以太坊系统中,状态由所有账户组成,每个账户都有一个20字节的地址[3]。账户包含四个字段,用于确定其唯一状态。这四个字段分别是nonce、以太币余额、合约代码和存储。前两个字段在发生交易时通常会发生变化。交易通常是从一个账户向另一个账户发送的带有二进制数据(有效负载)或以太币的消息。以账户A向账户B发送5个以太币为例,这是一个典型的交易,它会减少A的余额并增加B的余额5个以太币。每个账户的nonce会增加一次,以确保交易只能被处理一次。如果存在代码,它将以有效负载作为输入数据执行,并使用存储作为临时空间。例如,从受害者向庞氏骗局合约发送以太币的交易可能会触发向先前参与者的付款交易。在这种情况下,我们将发送以太币的交易称为正常交易,将触发的付款交易称为触发交易。在以太坊中,一段时间内发生的交易被打包成区块,并附加到一个公共的只追加的账本,即区块链。每个交易由以太坊网络的矿工节点独立执行。矿工是相互不信任的节点,他们可以验证其他矿工的执行结果。为了鼓励矿工维护区块链的安全性和完整性,他们可以通过挖矿获得奖励。02 http://solidity.readthedocs.io/en/develop 3地址是一个由数字和字符组成的字符串,可以与希望与该账户交互的任何人共享。例如,上述智能庞氏骗局Rubixi的地址是0xe82719202e5965Cf5D9B6673B7503a3b92DE20be。0在区块链中,每个交易都会根据用于验证交易的消耗资源收取一定数量的费用。消耗的Gas(以太坊中用于衡量交易执行所需工作量的特殊单位)乘以用户定义的Gasprice就是交易的费用,这与矿工的奖励相同。交易的执行可能会失败,例如,交易的Gas用完了,然后所有的副作用都会被撤销,但是费用会丢失。因此,确保足够的Gas对于发起交易非常重要,特别是对于发送以太币交易的人来说。共识协议被用来在某个时间段内维护以太坊的唯一状态。以太坊的共识协议基于工作量证明(PoW),类似于比特币。这意味着除非某个攻击者拥有整个网络的51%的计算能力,否则以太坊系统是安全的。以太坊用户对其透明的代码执行过程建立了信任。02.2 智能庞氏骗局的源代码片段0如上所述,智能合约通常是用高级语言编写的。Solidity是一种面向合约的高级语言,其语法与JavaScript类似。Solidity是以太坊平台上运行的重要语言,运行在EVM上。为了理解如何从源代码中识别智能庞氏骗局,我们提供了一个用Solidity编写的简化智能合约的代码片段(清单1)。代码片段从Rubixi中提取,只保留了用于理解为什么它是智能庞氏骗局的关键代码。一般来说,智能合约由两部分组成:函数和数据。函数可以通过来自其他账户或合约的交易或消息调用。在执行函数期间,该合约的数据可以更新。清单1中的第2到11行是数据定义,用于描述合约的当前状态。例如,balance记录智能合约的当前余额,Participant结构记录投资者的地址和付款。第14行的Rubixi函数是构造函数,仅在创建合约时运行一次。第17行的无名函数只包含对addPayout的函数调用,称为回退函数。当一个账户向合约发送以太币而没有数据时,它会被执行。因此,当参与者向合约投资以太币时,触发addPayout函数,该函数在第19行定义。这个函数是合约的关键,因为它实现了庞氏骗局的主要逻辑:1)记录投资者的地址和付款(第21-22行);2)计算费用(第28行);3)当余额足够时向先前的投资者支付(第29-34行)。第12行定义的participants数组按顺序记录所有的投资者,包括地址(msg.sender)和付款(payout=msg.value *pyramidMultiplier)/100)。注意,传播的高利润(见图1)由变量pyramidMultiplier控制,该变量最初设置为300(第6行),但从第10个参与者开始降低到200(第23行),从第25个参与者开始降低到150(第25行)。显然,为了吸引早期参与者,合约所有者承诺给他们更高的利润。值得一提的是,pyramidMultiplier应该设置为大于100,以实现参与者的承诺利润。从参与者那里收取费用是经营庞氏骗局的主要目的。从代码片段中可以清楚地看到,Rubixi每笔投资收取10%的费用,并通过调用第37行的collectAllFees函数来收取费用。从第29行到第34行的while循环尝试按照投资顺序支付所有先前的参与者,直到余额不足为止。这段代码清楚地显示了合约支付的逻辑,显然可以识别为庞氏骗局。从代码片段中可以看出,智能合约可能发生两种类型的交易:正常交易和炸弹交易。这些交易是公开可见的,并可以通过提供的API从ethereum.io4下载。0研讨会:网络经济学,货币化和在线市场 WWW 2018,2018年4月23日至27日,法国里昂1c o n t r a c tRubixi{2uintprivatebalance = 0 ;3uintprivatec o l l e c t e d F e e s = 0 ;4uintprivatef e e P e r c e n t = 1 0 ;5uintprivateOrder = 0 ;6uintprivatepyramidMultiplier = 3 0 0 ;7addressprivatec r e a t o r;8s t r u c tP a r t i c i p a n t{9addressetherAddress;10uintpayout;11}12P a r t i c i p a n t[ ]privatep a r t i c i p a n t s;1314f u nc t io nRubixi(){15c r e a t o r = msg.sender;16}17f u nc t io n(){addPayout( ) ; }1819f u nc t io naddPayout()private{20uintfee = f e e P e r c e n t;21p a r t i c i p a n t s . push ( P a r t i c i p a n t ( msg . sender,22( msg . value∗pyramidMultiplier)/1 0 0 ) ) ;23i f(p a r t i c i p a n t s.length == 10)24pyramidMultiplier = 2 0 0 ;25elsei f( p a r t i c i p a n t s . length == 25)26pyramidMultiplier = 1 5 0 ;27balance += ( msg . value∗(100 − fee))/1 0 0 ;28c o l l e c t e d F e e s+= ( msg . value∗fee)/1 0 0 ;29while(balance > p a r t i c i p a n t s [ Order ] . payout ){30uintpayoutToSend =p a r t i c i p a n t s [ Order ] . payout;31p a r t i c i p a n t s [ Order ] . etherAddress . send ( payoutToSend ) ;32balance −= p a r t i c i p a n t s [ Order ] . payout;33Order +=1 ;34}35}3637f u nc t io nc o l l e c t A l l F e e s()onlyowner{38i f(c o l l e c t e d F e e s== 0) throw;39c r e a t o r . send(c o l l e c t e d F e e s);40c o l l e c t e d F e e s = 0 ;41}42}4 https://etherscan.io/apis#accountsto do is to compile the source code into EVM bytecode. The EVMbytecode is composed of a series of bytes. Each byte is an operation.For human readable, each operation corresponds with a mnemonicform. For example, the mnemonic form of EVM bytecode 0x10 is LT,which means less-than comparison. We call LT and such mnemonicform of EVM bytecode as opcode. The appendix of Ethereum yellowpaper [40] contains a complete list of the EVM bytecode and itsmnemonic form, i.e., opcode. A disassembler5 can be used to getthe operation code of a contract from bytecode. Operation codeconsist of a series of opcode and operand. For example, the first 5rows of the operation code in Rubixi are: PUSH1 0x60; PUSH1 0x40;MSTORE; CALLDATASIZE; ISZERO. PUSH1 is an opcode and 0x40 isan operand.To make the contract callable from other accounts, the byte-code of a smart contract should be deployed in the main Ethereumnetwork. A special transaction targeted to the zero-account (theaccount with the address 0) creates a new contract. The bytecodeof the contract provides as the payload of that transaction and willbe executed; the result will be stored in the code field of the newcontract account and be record permanently on the blockchainuntil the contract being killed by the creator. The address of thenew contract will return to the creator, which can then be sharedwith the others.5https://etherscan.io/opcode-tool6https://etherscan.io/apis#accounts7ibase.site/scamedbTrack: Web Economics, Monetisation, and Online MarketsWWW 2018, April 23-27, 2018, Lyon, France14120更高的利润。值得一提的是,pyramidMultiplier应该设置为大于100,以实现参与者的承诺利润。从代码片段中可以清楚地看到,Rubixi每笔投资收取10%的费用,并通过调用第37行的collectAllFees函数来收取费用。从第29行到第34行的while循环尝试按照投资顺序支付所有先前的参与者,直到余额不足为止。这段代码清楚地显示了合约支付的逻辑,显然可以识别为庞氏骗局。从代码片段中可以看出,智能合约可能发生两种类型的交易:正常交易和炸弹交易。这些交易是公开可见的,并可以通过提供的API从ethereum.io 4下载。0代码清单1:简化的Rubixi02.3 部署合约0如上所述,以太坊合约是存储在以太坊区块链中的一系列“以太坊虚拟机代码”或“EVM代码”。我们称之为合约的字节码。为了方便编写智能合约,使用了高级语言(例如Solidity语言)。因此,要部署一个合约,首先要将源代码编译成EVM字节码。EVM字节码由一系列字节组成。每个字节都是一个操作。为了方便人类阅读,每个操作都对应一个助记符形式。例如,EVM字节码0x10的助记符形式是LT,表示小于比较。我们将LT和这样的EVM字节码助记符形式称为操作码。以太坊黄皮书的附录[40]包含了EVM字节码及其助记符形式(即操作码)的完整列表。可以使用反汇编器[5]从字节码中获取合约的操作码。操作码由一系列操作码和操作数组成。例如,Rubixi中操作码的前5行是:PUSH1 0x60; PUSH1 0x40; MSTORE; CALLDATASIZE;ISZERO。PUSH1是一个操作码,0x40是一个操作数。为了使合约可以从其他账户调用,智能合约的字节码应该部署在主要的以太坊网络中。针对零账户(地址为0)的特殊交易将创建一个新的合约。合约的字节码作为该交易的有效载荷,并将被执行;结果将存储在新合约账户的代码字段中,并永久记录在区块链上,直到合约被创建者终止。新合约的地址将返回给创建者,然后可以与其他人共享。03 数据,特征提取和分类模型0为了建立一个有效的模型来检测智能庞氏骗局,我们从网站http://etherscan.io收集了1382个经过验证的智能合同。根据之前的研究报告[3],这些智能合同经过手动检查,以确定它们是否是智能庞氏骗局。我们重新检查了结果,并将其整理为我们模型中的基准数据。具体而言,收集了131个庞氏骗局合同和1251个非庞氏骗局合同。为了建立模型,我们下载了相应的数据,并从数据中提取了两类特征。本节概述了数据和特征,并介绍了特征提取方法。03.1 数据0如图2所示,我们收集了包括交易和源代码在内的两种数据。交易数据以JSON文件的形式包含正常交易和触发交易。所有这些数据都是通过etherscan.io提供的API收集的。请访问我们的网站获取更详细的信息。值得注意的是,由于ethescan.io的限制,只能下载最后10000个交易。然而,这个限制对我们的研究几乎没有影响,因此被忽略。合同的源代码对于检测其功能非常重要。然而,开源代码并不是强制性的,尽管建议在以太坊平台上进行公开检查。为了建立一个实用的模型,可以用来检测潜在的智能庞氏骗局,我们只依赖公开可用的字节码。我们首先使用编译器将源代码编译为字节码。GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG0th15th30th45th60th75th90th105th120th2016−03−142016−03−202016−04−052017−08−19TimeStampParticipantsDirectionGGInvestmentPaymentGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG1th5th10th15th20th2016−02−1802−1902−2002−2202−2302−2402−2502−27TimeStampParticipantsDirectionGGInvestmentPayment8 http://the.looney.farm/game/lotteryTrack: Web Economics, Monetisation, and Online MarketsWWW 2018, April 23-27, 2018, Lyon, France14130使用以太坊本地客户端获取字节码。然后,使用反汇编工具获取操作码。最后,我们提取所有操作码并计算它们在合同中的频率。03.2 账户特征0由于欺诈行为,庞氏骗局与正常组织相比具有几个独特的特点。庞氏合同中至少有三个特征:1)这些合同通常在投资合同时向账户发送以太币;2)一些账户收到的支付次数超过了投资次数,例如,经常从合同中收取费用的创建者;3)合同的余额可能很低,因为庞氏骗局总是试图保持快速和高回报的形象。庞氏骗局的内在特征决定了它的行为,这可以用来判断它是否是庞氏骗局。合同的以太币流是这种行为的良好表现。为了展示行为特征,我们引入了合同的以太币流图,通过使用相应的交易进行绘制。与常用的现金流图不同,以太币流图用于显示合同与参与者之间的交易。交易有两个方向:参与者要么向合同发送以太币,要么从合同接收以太币。我们将第一个方向称为投资交易,将第二个方向称为参与者的支付交易。图中的投资交易用红色圆圈表示,支付交易用绿色三角形表示。x轴表示时间线,y轴表示个体参与者。通过阅读图表,我们可以轻松地看到每个参与者在时间线上所涉及的交易。圆圈或三角形的大小反映了交易中的相应以太币金额。合同与参与者之间的交易按照时间戳的顺序排列在一条水平线上。参与者按照与合同的第一笔交易的时间戳排序。因此,第0个参与者通常是合同的创建者。在正常的经济活动中,投资交易应该紧随其后有一笔支付交易,但在智能庞氏骗局中并非如此。0金额 GG G0图3:Rubixi(典型的庞氏骗局合约)的以太流图0图3和图4显示了两个合约的以太流图:Rubixi和LooneyLottery。Rubixi是一个典型的聪明的庞氏骗局0金额 GG G G0图4:LooneyLottery(典型的非庞氏骗局合约)的以太流图0而LooneyLottery8是一个普通的彩票游戏合约。Rubixi合约的以太流图(图3)显示,合约的创建者和早期参与者是游戏的赢家。合约中涉及了近120个参与者,但大部分付款都属于前25个幸运的参与者。值得注意的是,图中的第54个参与者(以灰色虚线表示)存在异常行为,他/她只发送了两次但收到了多次付款。这种异常行为是因为源代码中存在一个错误,可以用来更改合约的所有者并收取费用[2]。这两个图之间存在显著差异:图3包含更多的参与者,但与图4相比,许多参与者与合约的互动较少。从付款的角度来看,每个合约的付款相对较少,但图3中的大部分付款都属于前面的参与者,而图4中的付款则更具随机性。这些差异可以通过合约的功能轻松推导出来。因此,反过来,可以利用账户行为对智能合约进行分类。通过检查Rubixi的以太流图,我们可以发现:1)付款交易通常发生在投资交易之后,这表明合约通常向已知账户支付;2)许多投资交易没有随后的付款交易;3)一些参与者的付款交易次数多于投资交易次数。基于这些观察和特征:我们提取了以下七个关键特征的合约:0•已知率(Kr):在付款之前进行投资的接收者比例。高Kr意味着合约与已知账户的互动更多。我们预计聪明的庞氏骗局的Kr非常高。• 余额(Bal):智能合约的余额。•投资次数(N_Inv):投资次数。•付款次数(N_pay):付款次数。•差异指数(D_ind):该指数用于衡量合约中所有参与者的付款和投资次数之间的差异。假设合约涉及p个参与者,v是长度为p的向量,Track: Web Economics, Monetisation, and Online MarketsWWW 2018, April 23-27, 2018, Lyon, France14140m i 和 n i 分别表示第 i个参与者的投资次数和付款次数。为了计算差异指数,首先通过 v [ i ] = n i - m i 计算向量 v 的每个元素,然后0D _ ind = 0,如果v = 0或p ≤2;否则为s0其中 s 是向量 v的偏斜度。对于一个聪明的庞氏骗局合约,D_ind通常是负数,因为许多参与者投资更多但收到的回报较少。•付款率(Pr):收到至少一次付款的投资者比例。•最大付款次数(N_maxpay):参与者收到的最大付款次数。0表1显示了提取特征的三个统计量:均值、中位数和标准差(Sd)。表分为两部分:上部分是所有庞氏骗局合约的结果,下部分是非庞氏骗局合约的结果。0表1:提取的账户特征统计0庞氏骗局合约0Kr Bal N_inv N_pay D_ind Pr N_max0均值 0.89 4.65 56.84 92.49 -1.04 0.62 36.12 中位数 1.00 0.26 17.0021.00 -0.65 0.66 11.00 标准差 0.29 15.51 119.41 204.71 1.95 0.30 94.360非庞氏骗局合约0Kr Bal N_inv N_pay D_ind Pr N_max0均值 0.49 22319.60 653.44 540.74 -0.51 0.43 237.95 中位数 0.50 0.106.50 4.00 0.00 0.40 2.00 标准差 0.43 187549.23 3986.45 2195.42 6.050.41 1095.080从表中清楚地看出,庞氏骗局合约和非庞氏骗局合约之间的统计数据差异很大。例如,庞氏骗局合约的已知率(Kr)中位数为1,而非庞氏骗局合约为0.5。庞氏骗局合约的高Kr表明许多合约向曾经投资过它的人支付回报,这是庞氏骗局合约的一个重要特征。至于余额(Bal),两种合约的中位数差异很小,但标准差(Sd)的差异非常大。庞氏骗局合约的低标准差表明许多合约的余额相对较低。另一方面,非庞氏骗局合约的高标准差表明一些合约的余额非常大。与此同时,非庞氏骗局合约的中位数仅为0.1,这意味着一半的非庞氏骗局合约的余额小于0.1。事实上,许多非庞氏骗局合约的余额为零。03.3代码特征0操作码成功地分析了智能合约的潜在问题,因为它从以太坊虚拟机(EVM)的角度反映了智能合约的逻辑[2,6]。我们期望从操作码中提取的特征在检测潜在的智能庞氏骗局方面是有用的。我们提取了所有的操作码并计算了它们的0频率。在1382个合约的操作码中发现了64个不同的操作码。0图5:Rubixi(左)和LooneyLottery(右)的操作码云图0图5显示了上述两个智能合约中操作码的云图。为了更容易观察,我们删除了三个最常见的操作码PUSH、DUP和SWAP。由于EVM是基于堆栈的,这些操作码在每个合约中经常出现。虽然通过观察操作码的云图无法确定智能合约的类型,但很容易看出这两个智能合约明显不同。直观地说,至少有两个显著的差异:Rubixi包含更多的判断语句,而LooneyLottery包含更多的随机性。实际上,第一个差异可以从图中清楚地看出,Rubixi合约包含相对较多的JUMPI(7.8%),而LooneyLottery合约包含更多的JUMP(2.6%)。这两个操作码之间的差异在于前者是后者的条件版本。要检测第二个差异需要更多的观察。LooneyLottery合约包含4个TIMESTAMP,而Rubixi合约不包含。原因是TIMESTAMP操作码用于获取区块的时间戳,它是系统中常用的随机变量。上述分析表明,操作码特征可能在检测庞氏骗局合约方面是可行的。03.4分类模型0为了准确区分庞氏骗局合约和其他智能合约,我们使用了XGBoost,这是最流行的机器学习算法之一,并且在许多问题中被证明是一种有效的方法[5]。本小节提供了XGBoost及其参数的简单介绍。XGBoost是“极端梯度提升”的缩写,是梯度树提升的改进版本[13]。与GBM不同,XGBoost引入了两个重要的改进:正则化和树剪枝。基本上,XGBoost在目标函数中提供了正则化,用于避免树模型过拟合。同时,它将树剪枝方法从遇到负损失时停止改为后剪枝。具体而言,假设数据集中有N个智能合约{(xi, yi) | i = 1, 2, ...,N},其中xi∈Rd是与第i个智能合约相关的提取特征,yi∈{0,1}是分类标签,当且仅当智能合约为庞氏骗局时yi = 1。09 梯度树提升也被称为梯度提升机 (GBM)Obj(
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功