新闻开发人员企业区块链解释事件和会议新闻时事通讯
订阅我们的新闻.
电子邮件地址
我们尊重您的隐私
新闻博客
通过ConsenSys Diligence介绍涂鸦
由ConsenSys 2020年12月8日发布于2020年12月8日
确保智能合约的安全性和无缺陷性从未如此重要。不幸的是,这仍然是一项艰巨的任务。尽管有用于自动测试和形式验证的有用工具,但是确保智能合约的正确性仍然是一项耗时且具有挑战性的任务。更糟糕的是,每种工具的学习曲线通常都很陡峭,而且通常不确定是否合适.
因此,我们开发了Scribble:一种验证语言和运行时验证工具。最初是为了在审核期间进行自动属性测试而创建的,但我们决定与社区共享此项目!
什么是涂鸦?
当我们谈论涂鸦时,我们谈论的是两件事.
首先,Scribble是用于编写属性的规范语言.
其次,Scribble是使用Scribble规范语言的运行时验证工具.
注意:Scribble本身不会执行任何验证。它 做 启用其他工具来测试和检查属性.
乱涂乱画是一种语言
乱涂乱画定义了一种领域特定的语言,用于编写有关智能合约的属性。我们已在solidity语法的基础上构建了该语言,以使其易于学习。该规范语言允许您使用属性注释实体智能合约.
注意:属性是您希望为真的逻辑语句,例如“所有汽车都是红色的”。实际上,您通常会拥有以下属性:“只有所有者才能对X进行更改”。或“函数sendToken(),不应更改该合约的以太币余额”.
您可以将几种注释类型用于不同类型的属性。例如,不变式或后置条件.
这是Scribble批注的示例:
如您所见,注释采用内联注释的形式,放置在函数定义上方。我们添加了一个所谓的if_succeeds子句,该子句在执行函数后检查条件是否成立。在这种情况下,我们检查函数的结果始终为非零.
我们已将Scribble语言基于经过验证的概念,例如后置条件,不变式和时态逻辑。但是,我们还将研究如何引入新颖的想法,以更好地适应智能合约的特定于领域的问题。.
涂鸦是一种工具
涂鸦可以获取带有属性注释的合同,然后将其编译为新合同。在此新合同中,Scribble将添加Solidity代码,该代码将在违反属性时引发断言。我们称此过程为仪器.
添加用于检查属性的可执行代码称为运行时验证,它可以轻松使用现有工具,而无需进行大量修改。之所以如此,是因为大多数工具已经可以解释坚固性代码,并且能够立即搜索违反属性的行为!
因为您可以使用现有的自动测试技术(例如我们的模糊器 哈维),您只需编写一个属性即可开始测试. 我们认为这是一项重大利益;您可以立即从自动测试中受益,而不必花大量时间在前就获得大量批注。传统验证方法通常需要做的事情.
您可以快速开始测试和分析合同,甚至以后可以决定付出额外的努力来完全验证智能合同!
目标
审计
我们在审核过程中使用Scribble来制定属性。使用模糊分析和符号执行等自动分析技术,我们将自动测试并查找这些属性的违规情况.
联系我们以了解有关审核过程中的模糊测试和基于属性的测试的更多信息
标准
涂鸦的目的是使用不同的工具和技术;我们不仅希望启用基于属性的测试,而且还希望进行简单的形式验证。使用单一通用规范语言的好处是您只需要编写一次属性即可,而获得使用多个工具的好处.
采用
借助Scribble,我们希望降低自动测试和形式验证的障碍或门槛。我们还希望减少开发正确和安全的智能合约所需的时间,从而建立一个更安全的生态系统.
在哪里可以买到?
我们完全开源了Scribble,现在可以在以下位置获得 github.com/consensys/scribble.
注意:这是一个测试版,该语言的某些方面将发生变化,并且您可能会遇到一些错误.
您可以使用npm轻松安装Scribble:
订阅我们的时事通讯以获取最新的以太坊新闻,企业解决方案,开发人员资源等信息。报告
以太坊2020年第三季度DeFi报告
报告
以太坊2020年第二季度DeFi报告
报告
以太坊2.0抵押生态系统报告
指导
区块链业务网络完整指南
网络研讨会
如何构建成功的区块链产品
白皮书