摘要
智能合约是在分布式公共账本上实现和执行交易以及管理商务逻辑的计算机程序。智能合约可以用不同的语言编写,也可以运行在不同的区块链之上。目前最流行的智能合约编程语言是solidity,最流行的区块链平台是以太坊。评估智能合同程序的质量是专业程序员要求的一项重要任务,特别是当一种编程语言具有如此强大的经济意义时。因此,专业程序员评估智能合约所使用的工具至关重要。在软件工程中,软件度量(metrics)已经被定义用于度量软件质量,更一般地说,在“你不能管理那些你没有度量(measure)的东西”的原则下对软件进行度量。对于solidity,只有几个独立的程序可以来分析智能合约度量。本文的目的是首先建立一个用于实际计算特定solidity源码度量集合的工具以便该集合在将来也可以根据solidity编译器的发展而扩展,其次充分实现该工具的基于Web的使用来访问solidity的度量结果。与现有应用程序不同的是,该工具(PASO)仅使用Web浏览器就可以给出用solidity编写的智能合约的软件度量结果。
概要
区块链智能合约编程语言(如本文中的solidity),与传统的编程语言有很多不同。同时,solidity还很年轻,因此,其迭代速度非常快。每次更新都会加入新功能和修复以前的bug。这使得solidity程序员感到担心,又因为区块链往往和金钱直接挂钩,这更加剧了程序员们对于代码评估工具的需要。目前市面上的工具有Pharo Solity Parser 和 SolMet。这些通常都要用户自己部署到本机上来,搭建环境往往很麻烦,费时费力费钱。而且更新频率难以提高,难以跟上solidity和以太坊EVM飞快的更新速度。于是PASO(a PArser for SOlidity)应运而生。PASO是一个网页应用,因此程序员不用部署,且能够很快的更新(换网址就成)。
相关工作
网页分析器早已有之,例如针对JavaScript的JSHint,而对于solidity,分析器也是有的,例如(SolHint)[https://protofire.github.io/solhint],但是是命令行工具。此外还有前面提到的Pharo Solidity Parser。而这篇文章,是受到(OWL)[http://www.sciencedirect.com/science/article/pii/S03148]文章的启发。
动机
solidity的语法,关键词,特性等都会经常更新。这使得评估工具也得不断地更新。利用现有的工具不能很好的完成工作,而网页更新快,方便易用的特点促成了PASO的开发。
PASO组件
PASO可以分成4个主要部分:
- Solidity语法,
- PASO Parser,
- PASO Metrics,
- PASO GUI。
solidity语法
Solidity的文法如图所示,而这个使用ANTLR4表示的。
PASO Parser
如图所示,The PASO Parser通过 Parser Generator生成。最左边是输入,最右边是输出。
parse tree是根据语法表示源代码的语法结构的有序根树。parse tree的根(root)是语法的起始非终结点。 在解析树中,非终端节点是作为树的根或分支的解析树的节点,而终端节点是作为叶的解析树的节点。(这一部分的内容,详细请搜索编译原理,词法分析和语法分析)
对于不同的编程语言,有不同的解析器生成器应用程序。 为了实现本文的目标,有必要使用Parser Generator来生成客户端脚本语言(如JavaScript)中的Parser。 在不同的解析器生成器中,我们选择了ANTLR4,正是因为它可以生成JavaScript编程语言的解析器,该解析器可以与GUI部分一起运行在客户端。工作过程如图所示。
PASO Metrics
PASO度量solidity分成两个部分,一部分是对于面向对象语言的通用度量,一部分是针对solidity特性的度量。二者关系如图所示。
对于各项指标的一些解释说明,如图
PASO GUI
这一部分就不介绍了。
结论与将来的工作
这篇文章给出了一个完整的基于网页的用于度量智能合约的度量工具。通过ANTLR(ANother Tool for Language Recognition)实现了分析器。我们给出了solidity语法作为ANTLR Parser Generator的输入,ANTLR Paser Generator也被用在JavaScript的词法分析上。最后,我们将solidity源码填入PASO GUI的文本框中,然后将其作为JavaScript Parser的输入,利用其计算和展示度量结果。在PASO实现之前,只有少数的独立程序,例如Pharo Solidity Parser和SolMet,这些都允许对solidity编写的智能合约解析和生成度量结果。这项研究评估了这样一种假设,即有可能构建一个完全基于网络的工具PASO,它至少能够实现与以前的独立应用程序相同的结果。 与以前的工具相比,拥有这种基于Web的工具的主要优势是1)用户不用安装第三方软件,例如Java或者Smalltalk Pharo,2)PASO能够以更高效的方式应对Solidity编程语言的频繁更新:通过使用PASO,不需要更新独立的应用程序,只需要更新网页。
本文中讨论的指标只是少数几个:要在PASO工具中实现指标的完整列表,确实需要进行更深入的研究,以便在未来的工作中进行开发。 本研究的目的实际上仅限于检验这样一种假设,即可以构建一个完全的、可更新的基于Web的工具来计算以可靠形式写成的智能合同的度量值,而无需在用户本地计算机上安装任何工具。 在撰写本文时(2019年12月),PASO是唯一一个完全基于Web的工具,它允许解析和生成用Solidity编程语言编写的智能合同的指标。它代表了未来更丰富的实现的起点,能够为开发人员提供更相关的信息,为用户提供更友好的图形界面。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/101295.html