登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 外文翻译 > 计算机类 > 计算机科学与技术 > 正文

以太坊智能合约:对其源代码和操作码的分析和统计外文翻译资料

 2023-04-13 10:42:35  

英语原文共 31 页,剩余内容已隐藏,支付完成后下载完整资料


以太坊智能合约:对其源代码和操作码的分析和统计

摘要:

智能合约是用于验证和执行协议条款的程序。以太坊是一个被广泛使用的平台,可用于执行智能合约。这些可以通过使用高级语言来定义,如可靠性、Vyper和Bamboo,这些语言被编译成低级机器指令,即字节码。这些指令定义了一种图灵完整语言,通常通过使用一种被称为操作码的可读格式来表示。在这里,我们提出了一个新颖的,更全面的,研究,旨在获得一个精确的理解,程序员如何使用由以太坊支持的语言指令。更准确地说,我们还对合约的源代码进行了分析,以便理解用于智能合约定义的高级控制结构和核心指令,以及它们如何在操作码级别上反映出来。我们已经收集了成千上万的使用坚固语言编写的以太坊智能合约。本研究为定义新的形式和新的领域特定语言(DSL)奠定基础。这些功能可以支持用户开发去中心化应用程序(DAPPs)。

关键词:以太坊、智能合约、操作码统计、智能合约分析

1、介绍

为了获得智能合约的有形利益,它们的使用一直在稳步增长。他们依靠区块链技术来缓解金钱、财产、信息或任何人们认为合适的东西转移。智能合约在多个区域已经成功地应用于物联网应用程序,其中的事物属于不同的实体,没有相互信任的[1]。与传统合约不同,智能合约是可计算的,这应该会提高其安全性,并降低执行协议条款的成本。以太坊[2]是最知名的智能合约定义平台之一。这些合约通常通过使用solidity[3]编程语言来执行,这类似于JavaScript和C 。其他语言,如Vyper和bamboo,也可以使用。刚性智能合约不能由以太坊虚拟机(EVM)直接执行,因此它们会被编译成低级的机器指令,即字节码。这些指令定义了一个图灵全局域网,通常通过使用一种可读的格式来表示,这被称为光电码。智能合约是在以太坊提供的基于区块链的分布式计算平台上执行的。人们已经从智能合约数据的各个角度进行了大量的研究分析。[4]中的作者分析了智能合约,以检测僵尸合约。经验在[5]中提出的20项研究通过考虑合约的应用领域来分析合约的使用情况。最后,其他的研究,如[6]和[7]中描述的研究,从经济、技术和法律的角度来检查合约。这项工作提出了一个关于以太坊操作码和使用的新的研究在以太度区块链平台上部署了大量真实的智能合约。目的是了解聪明的合约程序员如何使用以太坊支持的语言指令。我们对智能合约操作码进行了分析,以找出在实践中起关键作用的操作码,并排除那些不实际的相关操作码在本文中,我们引入了对可靠性智能合约源代码的新研究,进一步加强了我们的分析。这允许我们理解程序员是如何在实践中使用高级语言结构的。为了进行这项研究,我们收集了成千上万份经过验证的以太坊智能合约语言。当智能合约可以通过编译,提供了一个特定的源代码获得证明时,它们就会得到验证我们分析了用于智能合约定义的控制流结构和核心指令。我们分析了操作码的使用,以提取有用的信息。例如,我们发现了在任何操作码中都没有出现的存在在区块链上部署了40个智能合约。相反,我们对智能合约源代码的分析,为可靠性语言的使用提供了重要的见解,因此,阐明了迄今为止所编写的智能合约的本质。例如,我们发现大多数智能合约并不使用控制循环,而是有一个相当简单的线性结构,而那个智能合约很少叫其他智能合约。因此,我们的研究支持识别一组核心特征,用于定义新的形式主义和领域特定的语言,以支持基于智能合约的应用程序的开发。形式主义可以促进正式的验证技术的发展。本文的其余部分组织如下。第2节描述了背面-以太坊基础;第三节详细介绍了用于收集智能合约数据的方法,并描述了我们的分析结果;第4节回顾了相关工作;第5节总结了论文并概述了未来的工作。

2、以太坊背景

区块链实现了一个分类帐,以一种可验证和永久的方式记录双方之间的交易。区块链在不同的节点(有时被称为矿工)之间进行共享和同步,这些节点相互合作,以便通过共识协议[8]添加新的事务。这允许交易有公开证人,从而使分部账本抵抗种类繁多的恶意攻击(如数据修改)。本文主要介绍了以太坊[2]区块链的实现,这是迄今为止最流行的开发智能合约的实现。共识使用了一个改进版本的中本算法[9]通过基于交易的状态转换。以太坊平台用于实现以太加密货币,可以在账户之间转账。钱包存储用于接收和使用以太币的公钥和私钥(即地址)。

图1:以太坊区块链的块数据

以太坊区块链是由一个越来越多的块列表组成的。图1显示了包含在一个块中的所有数据。表示一个以太坊状态作为一个Merkle树[10],并定义了所有帐户的当前余额加上一些额外的数据。字段状态根是所有事务执行和完成后状态树的根节点的散列。tx根字段是Merkle树的根目录,该树包含已验证的所有事务。交易可以包含以太币的转移,即与智能合约的交互或对一个令牌的管理。时间戳字段定义了该块被添加到区块链中的时间。块编号是一个唯一的块标识符。事务处理收据存储事务处理执行后的状态。所有的收据都保存在一个索引键控[11]中。 其根的散列作为接收根放置在块头中。布鲁姆过滤器是基于事务日志信息创建。这将减少为256字节的哈希,当日志开花时,所有的哈希都在块头中。每个块还包括区块链中前一个块的哈列,prev哈列,连接两个。这确保了前一个块的完整性,一直持续到第一个块。通过使用Ethash[2]算法在报头字段上计算散列。更精确地说,每次计算一个新的哈希块时,以太坊节点就会执行一个挖掘过程(也称为工作证明),在那里它们必须找到一个产生期望散列的Nonse值。这是一个包含一定数量的初始零的散列。由难度域定义的零的数量,建立了查找散列所需的计算努力。当一个节点找到nonce(即块被解决)时,该共识被用来将解决方案扩展到其他节点。这些数据将验证所提出的解决方案,并将该块添加到区块链中。有时可以同时生成单独的块。这将创建一个临时的分支分支。使用Ghost协议[13]来选择其中一个分支,并将其他分支保留为孤儿分支(孤儿分支存储在叔叔散列字段中)。所有的以太坊交易都要花费一定数量的gas[13],这相当于区块链基础设施处理交易所需的少量费用。gas上限是指用户愿意在一笔交易上花费的最大gas单位量。区块gas限制设定了gas使用区块场的上限。这是该区块的交易所消耗的所有gas的总和。

以太坊的主要特性之一是它的图灵完整脚本语言,它允许定义智能合约。这些都是在整个区块链网络的顶部执行的小型应用程序。以太坊合约的代码是用一种低级的、基于堆栈的字节码语言编写的,即以太坊虚拟机(EVM)代码。操作码是一种人类可读的字节码的表示形式。在以太坊黄纸[2]中描述了以太坊字节码和操作码的综合集合。智能合约可以通过使用被编译成EVM字节码的高级语言来编写。写智能合约最流行的语言是坚固性。有两种不同的编译器来编译可靠的智能合约。一个是用javacript写的,被称为solc-js,而另一个是用C 写的,被称为solc[14]。这是官方的编译器,因此在我们的研究中考虑到它。

一个智能合约通过使用一个事务被部署到区块链上。gas限额和gas价格总是与智能合约的执行有关。前者是用户愿意为智能合约执行支付的最大gas量,而后者定义了gas对以太币的转换率,更高的转换率将鼓励矿商选择合约。矿工将在本地执行智能合约字节码。每条指令要花费一定数量的汽油,为合约支付的总金额与执行的指令成正比。当被成功地添加到区块链时,智能合约总是会获得一个唯一的合约地址。用户可以通过生成包含合约地址、gas限额和要调用的合约方法的事务来执行合约。执行过程的输出、所使用的gas和其他信息被写入到一个块中。有可能分配给一个事务的gas不足以结束计算。在这种情况下,执行将被终止,但有一个例外,并且链的状态将被恢复到其初始状态(在计算开始之前)。值得注意的是,合约的执行必须支付,尽管其执行没有成功结束。这可以防止资源耗尽攻击[9]。块资源管理器或简单的资源管理器是一种工具,用于获取有关在线区块链交易的信息。一些块探索器允许用户验证部署在区块链上的智能合约。探索者可以启用区块链分析的类型,并允许合约验证。该过程包括以下三个步骤:

1.作者将编译后的智能合约代码注册到区块链中;

2.作者将原始的智能合约源代码和编译器版本发布到块探索中;

3.当可以从相关源代码获得编译代码时,资源管理器将合约标记为验证。

值得一提的是,智能合约验证过程不能通过单独使用区块链来执行。这不存储任何稳固的源代码或编译器信息,而只存储字节码。

  1. 操作码和智能合约的分析

本节详细介绍了用于收集Solidity智能合约数据的实验设置。本节最后描述了数据分析及其结果。

3.1实验设置

以太扫描[15]已被用来收集有关智能合约的数据。虽然有不同的块探索器,如以特普洛[16]和区块椅[17],以太扫描是唯一允许验证智能合约的浏览器。我们的研究考虑了以下智能合约信息:(i)合约的以太坊唯一地址;(ii)智能合约中使用的操作码;(iii)用于编译智能合约的可靠性编译器的版本;(iv)一个或多个智能合约经过验证的所有日期。我们研究考虑的合约是2016年10月至2018年5月期间已验证的合约。这是我们的数据收集结束的日期。在2016年10月之前,很少有合约得到验证,因此没有被考虑。一个Java程序(源代码可在https://github.com/GianmarcoMazzante/代码surv)已经开发出来,以扫描以太扫描网页验证智能合约。该扫描用于检索所有已验证的合约的地址。智能合约地址可以作为以太扫描API的输入,该API以操作码格式返回智能合约源。然后,我们的Java工具将分析这个输出,该工具存储在一个JSON文件中,其中存储了每个智能合约的地址,用于编译合约的编译器版本,以及所有具有相关频率的合约操作码(详见图2)。这是操作码在合约中出现的次数。

3.2打开统计信息

本节描述了对智能合约数据进行的定量分析(关于数据收集的信息见第3.1节)。

图2:包含检索到的信息的JSON的部分

3.2.1所有已验证合约的操作码频率

表1显示了每个月已验证的智能合约的数量和这些合约所包含的操作码的数量。值得注意的是,合约数量自2016年开始呈指数级增长。

图3的x轴显示了所有操作码的十六进制编码(在[2]上可以找到一个全面的操作码列表),而y轴显示了操作码的全局频率。这是通过考虑所有智能合约并计算操作码出现在其中的次数来获得的。我们强调,只有5个操作码的全局频率高于每个操作码的全局频率之和的5%。图4显示了图3的全局频率。

3.2.2.常用操作码

本节将讨论为什么某些以太坊操作码比其他的更频繁地出现。

表2显示了最常用的操作码。这些操作码中的大多数都与堆栈管理操作有关,例如pop、交换和推送等。

已验证合约

Op代码计数经核实的合约

10/2016

53

630859

11/2016

83

809555

12/2016

72

1491497

1/2017

108

1818251

2/2017

126

1830664

3/2017

120

1958167

4/2017

198

3332301

5/2017

270

3903969

6/2017

359

5436532

7/2017

702

10495739

8/2017

947

13541032

9/2017

1108

16653251

10/2017

1473

22308628

11/2017

1977

32242058

12/2017

2002

32415653

1/2018

2716

445501

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[589556],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图