基于c#的区块链编程_基于区块链的智能合约编程语言:可用性和安全性的实证评估...

本文评估了基于区块链的智能合约编程语言Solidity, Pact和Liquidity在可用性和安全性方面的表现。实验结果显示,Solidity在新开发者中的可用性较高,但易出现安全漏洞;而Pact和Liquidity的合约实现则显示出更好的安全性。" 89595195,8256904,PostgreSQL 数据页 checksum 实现与检测,"['数据库', 'PostgreSQL', '开发工具']
摘要由CSDN通过智能技术生成
135be59b68db497fdc6f4a882538b89d.png

论文摘要:区块链是一项十分有前景的基础技术,它正在进入越来越多的领域,如大数据、金融和医疗。虽然区块链最初被认为是比特币的基础,但它的发展远远超出了支撑这种虚拟货币的范畴。区块链编程作为一种核心手段,提供了“code is law”的解释,指定了各方之间的协议,并允许其利益相关者仍然信任平台来执行已达成的合约(称为智能合约)。虽然这在理论上看起来很简单,但在现实生活中却并非如此。已经有几个例子表明,智能合约在代码上充满了问题和漏洞,并且造成了很大的损失。可以肯定的是,现有的语言没有达到能够释放区块链的全部潜力的程度,通常会导致开发人员在学习代码时遇到很大的困难。这说明目前对智能合约开发的研究还处于起步阶段。为了推进这一领域的研究状况,需要对目前最先进的做法进行彻底和实验性的评估。因此,本文的目标是从可用性和安全性的关键点全面分析这些特定领域的编程实践,为新手和研究人员提供工作指南。

技术介绍:

区块链已经颠覆了金融、云计算、隐私、安全等多个行业。另外,近年来区块链出现了一个有趣的新应用,智能合约。智能合约是一种自动执行的合约,其中多方之间的协议条款直接写入代码行中。代码和其中包含的协议存在于区块链网络中。智能合约允许在不同的匿名方之间进行可信的交易和协议,而不需要中央权威、法律系统或外部执行机制。它们使事务具有可追溯性、透明性和不可逆性。认识到智能合约编程的独特挑战,开发人员创建了特定领域的语言如Solidity来促进开发。

Solidity是一种静态类型的编程语言,其语法类似于为编写智能契约而构建的ECMAScript (JavaScript)。它是在Ethereum平台上实现智能契约的首选语言。

Solidity合约实现样例:在图1中,展示了一个加密货币的智能契约,将其命名为“SampleCrypto”。

eb95bdd0bbd9e6c420031b6a6ff2adf9.png

图1.Solidity实现的SampleCrypto

Pact编程语言用于编写由Kadena区块链执行的智能合约。Pact允许开发人员实现健壮的、高性能的事务逻辑,快速且安全地执行关键任务的业务操作。Pact是不可变的、图灵不完整的,它支持声明式方法,而不是复杂的控制流。这使得bug更少,也更容易发现。Pact智能合约旨在执行保护记录系统更新的业务规则:复杂的、推测性的应用程序逻辑不属于这个关键层。

Pact合约实现样例:它实现了一个简单的“帐户余额”智能合约,具有创建帐户和转移资金的功能,如图2所示。上述契约的详细描述,包括关于安装模块、键集定义、模块定义、表创建以及最后调用“accounts”模块的信息。

091a3fd417be302ba73646dc21e3489d.png

图2.Pact实现的账户余额智能合约

Liquidity 是Tezos的一种高级类型化智能契约语言。它是一种全类型的函数式语言,使用OCaml的语法,严格遵守Michelson的安全限制。一个正式的验证框架正在开发中,以证明以流动性形式编写的智能合同的正确性。

Liquidity合约实现样例:如图3所示,是一个简单的投票系统,要求用户至少拥有5tz才能提交投票。如果用户试图以低于5tz的余额进行投票,则合同将显示一条错误消息“没有足够的钱,至少5tz可以投票”。

197b2d8870fd6e7d7313e435ea25168d.png

图3. Liquidity实现的智能合约

实验计划分为四个部分,分别是测试对象、测试合约、测试措施和实验设计。

测试对象:我们向肯尼索州立大学计算机与软件工程学院(CCSE)的本科生和研究生助教发送电子邮件邀请他们参与研究。这封邮件描述了实验的目的和目标(即基于可用性和安全性对智能合约编程语言进行实证评估)、地点、时间、实验预期时长和RSVP链接。在上述期限内,共收到15名本科生和研究生助教的回复。每个测试对象都有至少一种通用编程语言和面向对象概念的经验。

测试合约:以场景段落的形式为实验中的测试对象准备了三个测试合约的正式描述。表1简要描述了为实验选择的三个测试合约。每个测试对象必须用随机分配的智能合约编程语言来实现这三个合约。

811213181a293afc65db3f0d8b1bc1ee.png

表1.测试合约总结

实验措施:为了量化可用性,使用一个内置计时器来测量每个测试对象用指定的编程语言实现每个合约的平均时间。测试对象实现合约的时间越长,新开发人员对该语言的可用性就越低。为了得到更可靠的结果,在实验结束时在问卷中额外要求受试者回答一份关于所分配的智能合约编程语言可用性的问卷。要求受试者在1.0 - 10.0(1.0:极难使用,10.0:极易使用)的范围内对语言可用性进行评分。

使用两种方法来捕获和分析实现的智能合约中的安全漏洞。首先,使用OYENTE工具,针对6个已知的安全漏洞运行已实现的合约。OYENTE是一个用于揭示智能合约中上述安全漏洞的自动化安全分析工具。其次,手动分析了实现的合约,以检查该工具没有覆盖的进一步漏洞,包括具有恢复性的DoS和Solidity中带有Block Gas Limit的DoS。这些漏洞在合约中出现的越多(自动化和手工部分),底层合约编程语言的安全性就越低。

实验设计:总共有15个信封,每个信封都包含三个智能合约的正式描述和这些合约使用的编程语言。每个信封还被分配了一个ID号,这有助于跟踪合约需要使用的语言。5个信封会包含Li语言(Solidity, Pact, Liquidity)。每种语言都要在一个在线编译器上实现,使用Solidity使用Remix编译器,Pact用Try-Pact编译器,而Liquidity使用Liquidity在线编译器。表2总结了实验的组织。如表所示,有5名测试对象使用指定的智能合约编程语言实现给定的3个智能合约。

8ce120f5fb09fec9d654301ba74e5c25.png

表2. 实验中信封和语言的组织和分配

实验实施:

实验分为两部分,第一部分是一个背景和演示会议。在开始演示之前,要求每位测试对象根据自己的背景和编程经验填写问卷,并签署一份同意书。

在同意声明和背景问卷被签署之后,进行智能合约编程基础的介绍,以使测试对象熟悉智能合同编程。接下来,与测试对象进行问答环节,回答他们的问题和关注事项。之后,要求测试对象休息45分钟。休息结束后,开始第二阶段的实验。每个测试对象都有一个信封,信封上有一个ID号。每个信封都有三个测试合约的正式描述,以及分配给测试对象执行这些合约的语言。将受试者的ID与信封ID进行匹配,以跟踪实验。然后,要求测试对象打开信封,仔细阅读所有的问题陈述,然后进行第二次问答环节,消除所有关于问题陈述和分配给他们的编程语言的疑问和困惑。当这一切结束时,要求他们用指定的语言实现一个“Hello world”练习。当所有的受试者做完热身运动后,要求他们开始解决问题,并为每个受试者设置一个计时器。

实验对象被要求在两小时内完成所有的合约,为了确认完成,要求他们确保测试合约在前面提到的在线编译器上成功编译。包括演示和休息,实验时间为3小时45分钟。实验是在“考试条件”下完成的,即为了避免在实验结果中引入误差,测试对象不被允许与其他人交流。最后,在实验结束后,要求每位测试对象在离开前填写退出问卷。

实验结果和分析:

按照上一节所述的实验执行过程,收集了所需的实验数据,并对收集到的所有数据进行仔细分析,得出结论。现在提出这些结果来回答的研究问题。

RQ1:对于新的合约开发人员来说,编程语言的可用性如何?

表3总结了使用给定的智能合约编程语言实现每个测试智能合约的平均时间。发现与Pact和Liquidity相比,Solidity每个合约的平均执行时间明显较低。

8c06030155b8ad3f6e605e5727b8ea89.png

表3.测试合约实现时间总结

最后,表4总结了实验结束时被试填写的退出问卷的结果。平均可用性得分越高,对于新开发人员来说,该语言的可用性就越好。

c9cf36a14bb3b8eaa25df224fd840110.png

表4.测试对象退出问卷中平均可用性得分

RQ2:新开发人员在合约中遗留的常见安全问题是什么?

使用之前描述的“OYENTE”工具和方法分析了已实现测试契约的安全漏洞。虽然没有发现Liquidity和Pact实现的合约中任何安全漏洞,但对于Solidity结果却不同。安全性分析结果总结在表5中。

07c356b653e57739759601c32d58579a.png

表5. 已实现测试合约中安全性问题

即使是经验丰富的开发人员使用Solidity时也常常很难避免某些陷阱,但是由于实验对象可以被认为是新的和没有经验的合约开发人员,因此实现的Solidity合约容易出现安全漏洞也就不足为奇了。因此,从实验结果和对第二个研究问题RQ2的反应来看,相对于使用Liquidity和Pact执行的智能合约,由新开发人员执行的Solidity合约更容易出现安全漏洞。虽然没有发现Pact和Liquidity执行合约的漏洞,但这并不一定意味着Pact和Liquidity合约不受安全漏洞的影响。相比Solidity之下,使用Liquidity和Pact更难以留下bug和安全漏洞。

致谢

本文由南京大学软件学院2018级硕士乔力翻译转述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值