CN110705974B - 一种完备的智能合约形式规范实现方法 - Google Patents
一种完备的智能合约形式规范实现方法 Download PDFInfo
- Publication number
- CN110705974B CN110705974B CN201910828641.9A CN201910828641A CN110705974B CN 110705974 B CN110705974 B CN 110705974B CN 201910828641 A CN201910828641 A CN 201910828641A CN 110705974 B CN110705974 B CN 110705974B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- state
- contract function
- function
- clause
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/04—Payment circuits
- G06Q20/06—Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种完备的智能合约形式规范实现方法,该方法包括步骤(1)确定智能合约函数的可达性;(2)确定智能合约函数的返回结果;(3)确定智能合约函数的状态及状态转移;该方法用于帮助开发者编写智能合约的完备的形式规范。同时基于此方法,开发者可以总结出不同业务场景下针对智能合约形式的完备的形式规范编写流程。本发明的价值在于通过建立完备的形式规范,提高了智能合约形式验证技术本身的安全性,降低了开发人员对智能合约进行形式验证的学习成本。
Description
技术领域
本发明涉及智能合约和形式验证的技术领域,具体涉及一种智能合约形式验证的形式规范完备性实现方法。
背景技术
区块链技术已经成为很多领域的变革者,在比特币中涌现的分布式技术在数字货币之外有了非常广阔的应用前景。智能合约是在区块链中能够自主执行的程序,在智能合约中,合约条款由代码规定,这意味着用计算机程序编写程序在某种意义上具有了法律效力。但是执行用代码书写的合约并且在一个不可改变的公开的区块链中存储信息具有一定的风险问题,无数历史经验也表明智能合约的安全审计至关重要。形式验证是目前业界看好的智能合约安全审计技术,它可以保证智能合约能够100%的正确,确保某种错误状态不会发生。现在已经有一些对智能合约虚拟机语义模型的研究和学术成果,但是对于开发者而言,形式验证真正的困难在于如何设计实现完备的形式规范。本发明公开了,真正帮助开发者有效地利用形式验证技术,保障智能合约的安全性。
发明内容
针对现有技术的不足,本发明公开了一种完备的智能合约形式规范的实现方法,该方法可提高智能合约形式规范编写的完备性。具体技术方案如下:
一种完备的智能合约形式规范方法具体包括如下步骤:
(1)确定智能合约函数的可达性:判断该智能合约函数是收敛还是发散,若发散则不可达,若收敛则继续判断该智能合约函数是否正常返回,若不能正常返回则不可达,否则可达。可达性的判断是智能合约函数能进行状态路径的分析的基础工作。其中发散的函数(比如死循环或无限迭代不收敛的情形)需要经过断言或后置条件进行判别;不能正常返回的函数(比如发生异常出现中断的情形)需要经过额外的异常返回值进行判别;正常返回的函数可以进行后置条件进行常规的形式验证推理。
(2)确定智能合约函数的返回结果:描述该智能合约函数满足可达性时,返回结果满足的谓词。返回结果的验证一般通过后置条件进行,表示函数执行后,堆空间的最终状态。
(3)确定智能合约函数的状态及状态转移:所述的状态包括前置状态、中间状态和后置状态;所述的前置状态、中间状态和后置状态分别具有如下特征:
前置状态为该智能合约函数调用前智能合约函数的入参和状态变量满足的谓词;对一次智能合约函数的调用,前置状态存在且唯一确定;前置状态的描述称为前置从句,前置从句对该智能合约函数来说是恒成立的公理;当其他函数调用该智能合约函数时,前置从句是调用之前的形式验证点,在调用之前对智能合约函数进行形式验证。
中间状态为该智能合约函数调用过程中,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,中间状态存在且一般有多个;中间状态的描述称为中间从句,中间从句在智能合约语句处进行形式验证,同时对该智能合约函数的状态转移起到引理的作用,辅助形式验证的推导。
后置状态为该智能合约函数调用后,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,后置状态存在且唯一确定;后置状态的描述称为后置从句,后置从句在该智能合约函数调用结束之后对智能合约函数进行形式验证;后置从句的谓词需要覆盖状态转移的所有情形状态转移为智能合约函数在调用前后状态变量的变化。即对每个状态变量其在该智能合约函数调用前后,若发生了转移,则描述在何种条件下,发生了何种转移,若未发生转移,则描述在何种条件下,后置状态和前置状态保持不变。确定智能合约函数的状态转移为描述该智能合约函数满足可达性时,状态变量符合的谓词。
根据每个状态的特征进行确定智能合约函数的状态;智能合约函数在调用前后状态变量的变化即为状态转移。
进一步地,所述的步骤(3)中,当智能合约函数为构造函数时,前置状态为Nil。
进一步地,所述的步骤(3)中,对于循环中的第n次迭代时某个确定的中间状态,称为第n迭代态;由第n迭代态的谓词组成的中间从句,是必不可少的推导条件。
进一步地,所述的步骤(3)中,当智能合约函数为析构函数时,后置状态为Nil。
进一步地,所述的步骤(3)中,步骤(2)中返回结果满足的谓词和步骤(3)中智能合约函数的入参和状态变量满足的谓词,指包含这些数据的逻辑表达式。若数据类型是一个对象,则通过对象域访问相应域的值获取基本数据,对基本数据进一步进行描述。引入对象域的概念,有助于描述合约和结构体等数据类型的状态改变情况。
本发明的有益效果如下:
本发明公开了一种完备的智能合约形式规范的实现方法,该方法可提高智能合约形式规范编写的完备性,为智能合约开发者提供了一套编写形式规范的通用准则。开发者按照本方法所述的三个步骤和具体细节,结合智能合约的具体逻辑进行形式规范的编写,可以对智能合约函数进行完备地描述,进而从根本上确保形式验证的可靠性。
附图说明
图1是基于本发明进行形式规范实现的框架图。
图2是本发明确保形式规范完备性的原理图。
具体实施方式
下面结合附图对本发明完备的智能合约形式规范实现方法作进一步说明。
如图1所示,基于本发明实现完备的智能合约形式规范的框架如下:
(1)可达性:可达性要求开发者考虑智能合约函数的可运行性,该函数是否可以按照预期效果正常执行,包括对发散、异常和正常返回这三种情况的分析。可达性的判定主要通过后置从句进行实现,对于一部分发散情形的判定也需要借助于中间从句。
(2)返回结果:返回结果要求开发者考虑智能合约函数在正常执行并返回的情况下,对返回结果满足的谓词进行描述。通常的逻辑推理模式是:如果不抛异常,则返回结果满足谓词。返回结果的正确描述是判定该函数功能的重要依据,开发者需熟悉需求,对函数功能有清晰的认识。返回结果的判定主要通过后置从句进行实现。
(3)状态转移:状态转移要求开发者考虑智能合约函数在调用前后发生的状态转移变化,对智能合约的所有状态变量的改变情况满足的谓词进行描述。如果某一状态变量在该函数调用前后发生了改变,那么通常的逻辑推理模式是:如果不抛异常,则状态变量等于预期值。如果除了一部分状态变量在该函数调用前后发生了改变,剩下的所有状态变量未发生改变,那么通常的逻辑推理模式是:如果不抛异常,则对于所有的智能合约域,除了发生改变的那一部分状态变量的域,其他所有状态变量等于原值。如果所有状态变量在该函数调用前后都没有发生改变,那么可以采用上一种逻辑推理模式的特殊情形,即发生改变的状态变量是空集,也可以采用一种简单的逻辑推理模式:如果不抛异常,则智能合约等于原值。状态转移包括前置状态、中间状态和后置状态,其中前置状态的判定一般通过前置从句实现,中间状态的判定一般通过中间从句实现,后置状态的判定一般通过后置从句实现。
(4)前置从句:前置从句用于描述函数执行前的谓词。前置从句是针对函数的形式规范来说的,往往指函数执行前的智能合约的状态。
(5)中间从句:中间从句用于描述函数执行过程中谓词。中间从句是针对函数体的形式规范来说的,往往指函数在执行过程中堆空间的状态。中间从句包括假设从句、断言从句、不变量从句、竞态从句和辅助从句。其中假设从句是对该语句处的理想公理,断言从句是对该语句处的形式验证,不变量从句是针对循环体的形式验证,竞态从句和辅助从句是针对智能合约特性设计的中间从句,用于解决特定的虚拟机语义特性,例如跨合约调用。
(6)后置从句:前置从句用于描述函数执行后的谓词。前置从句是针对函数的形式规范来说的,往往指函数执行后的智能合约的状态。
基于上述框架,本发明提出的一种完备的智能合约形式规范方法,该方法具体包括如下步骤:
(1)确定智能合约函数的可达性:判断该智能合约函数是收敛还是发散,若发散则不可达,若收敛则继续判断该智能合约函数是否正常返回,若不能正常返回则不可达,否则可达。
(2)确定智能合约函数的返回结果:描述该智能合约函数满足可达性时,返回结果满足的谓词。
(3)确定智能合约函数的状态及状态转移:所述的状态包括前置状态、中间状态和后置状态;所述的前置状态、中间状态和后置状态分别具有如下特征:
前置状态为该智能合约函数调用前智能合约函数的入参和状态变量满足的谓词;对一次智能合约函数的调用,前置状态存在且唯一确定(特别地,当智能合约函数为构造函数时,前置状态为Nil);前置状态的描述称为前置从句,前置从句对该智能合约函数来说是恒成立的公理;当其他函数调用该智能合约函数时,前置从句是调用之前的形式验证点,在调用之前对智能合约函数进行形式验证。
中间状态为该智能合约函数调用过程中,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,中间状态存在且一般有多个(特别地,对于循环中的第n次迭代时某个确定的中间状态,称为第n迭代态);中间状态的描述称为中间从句,中间从句在智能合约语句处进行形式验证,同时对该智能合约函数的状态转移起到引理的作用,辅助形式验证的推导。
后置状态为该智能合约函数调用后,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,后置状态存在且唯一确定(当智能合约函数为析构函数时,后置状态为Nil);后置状态的描述称为后置从句,后置从句在该智能合约函数调用结束之后对智能合约函数进行形式验证;后置从句的谓词需要覆盖状态转移的所有情形状态转移为智能合约函数在调用前后状态变量的变化。即对每个状态变量其在该智能合约函数调用前后,若发生了转移,则描述在何种条件下,发生了何种转移,若未发生转移,则描述在何种条件下,后置状态和前置状态保持不变。确定智能合约函数的状态转移为描述该智能合约函数满足可达性时,状态变量符合的谓词。
根据每个状态的特征进行确定智能合约函数的状态;智能合约函数在调用前后状态变量的变化即为状态转移。
本发明的关键技术在于保障本发明所述的形式规范实现方法的完备性。如图2所示,本发明的形式规范完备性原理本质上是通过保证单个智能合约函数形式规范的完备性来达成的。本发明形式规范完备性的原理如下:
(1)智能合约形式规范的语法提取和语义分析:根据本发明设计的形式规范,对三种类型的形式规范从句,即前置从句、中间从句、后置从句进行语法提取和语义分析。每类从句严格按照本发明设计的语义进行判定。
(2)根据智能合约函数调用流程对智能合约进行分片:对具有形式规范的智能合约进行语义分析后,识别智能合约中的函数调用流程,从每个函数调用的入口划分出多个线性函数流,实现分片。每个被分片的函数流称为切片,一个切片即是一个形式验证的校验点。
(3)对每个智能合约函数调用流程建立状态转移模型:通过可达性、返回结果和状态转移三方面对切片的形式规范描述,对该切片建立状态转移模型。其中前置状态作为模型的初始状态,根据函数的语句和中间从句定义多个中间状态,而后置状态作为该模型的终止状态。
Claims (5)
1.一种完备的智能合约形式规范方法,其特征在于,该方法具体包括如下步骤:
(1)确定智能合约函数的可达性:判断该智能合约函数是收敛还是发散,若发散则不可达,若收敛则继续判断该智能合约函数是否正常返回,若不能正常返回则不可达,否则可达;
(2)确定智能合约函数的返回结果:描述该智能合约函数满足可达性时,返回结果满足的谓词;
(3)确定智能合约函数的状态及状态转移:所述的状态包括前置状态、中间状态和后置状态;所述的前置状态、中间状态和后置状态分别具有如下特征:
前置状态为该智能合约函数调用前智能合约函数的入参和状态变量满足的谓词;对一次智能合约函数的调用,前置状态存在且唯一确定;前置状态的描述称为前置从句,前置从句对该智能合约函数来说是恒成立的公理;当其他函数调用该智能合约函数时,前置从句是调用之前的形式验证点,在调用之前对智能合约函数进行形式验证;
中间状态为该智能合约函数调用过程中,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,中间状态存在且一般有多个;中间状态的描述称为中间从句,中间从句在智能合约语句处进行形式验证,同时对该智能合约函数的状态转移起到引理的作用,辅助形式验证的推导;
后置状态为该智能合约函数调用后,智能合约函数的状态变量满足的谓词;对一次智能合约函数的调用,后置状态存在且唯一确定;后置状态的描述称为后置从句,后置从句在该智能合约函数调用结束之后对智能合约函数进行形式验证;后置从句的谓词需要覆盖状态转移的所有情形状态转移为智能合约函数在调用前后状态变量的变化;即对每个状态变量其在该智能合约函数调用前后,若发生了转移,则描述在何种条件下,发生了何种转移,若未发生转移,则描述在何种条件下,后置状态和前置状态保持不变;确定智能合约函数的状态转移为描述该智能合约函数满足可达性时,状态变量符合的谓词;
根据每个状态的特征进行确定智能合约函数的状态;智能合约函数在调用前后状态变量的变化即为状态转移。
2.根据权利要求1所述的完备的智能合约形式规范方法,其特征在于,所述的步骤(3)中,当智能合约函数为构造函数时,前置状态为Nil。
3.根据权利要求1所述的完备的智能合约形式规范方法,其特征在于,所述的步骤(3)中,对于循环中的第n次迭代时某个确定的中间状态,称为第n迭代态;由第n迭代态的谓词组成的中间从句,是必不可少的推导条件。
4.根据权利要求1所述的完备的智能合约形式规范方法,其特征在于,所述的步骤(3)中,当智能合约函数为析构函数时,后置状态为Nil。
5.根据权利要求1所述的完备的智能合约形式规范方法,其特征在于,所述的步骤(3)中,步骤(2)中返回结果满足的谓词和步骤(3)中智能合约函数的入参和状态变量满足的谓词,指包含这些数据的逻辑表达式;若数据类型是一个对象,则通过对象域访问相应域的值获取基本数据,对基本数据进一步进行描述。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910828641.9A CN110705974B (zh) | 2019-09-03 | 2019-09-03 | 一种完备的智能合约形式规范实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910828641.9A CN110705974B (zh) | 2019-09-03 | 2019-09-03 | 一种完备的智能合约形式规范实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110705974A CN110705974A (zh) | 2020-01-17 |
CN110705974B true CN110705974B (zh) | 2022-07-05 |
Family
ID=69193406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910828641.9A Active CN110705974B (zh) | 2019-09-03 | 2019-09-03 | 一种完备的智能合约形式规范实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110705974B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015826B (zh) * | 2020-10-27 | 2021-01-29 | 腾讯科技(深圳)有限公司 | 基于区块链的智能合约安全性检测方法及相关设备 |
CN112215618B (zh) * | 2020-12-11 | 2021-02-26 | 支付宝(杭州)信息技术有限公司 | 智能合约的验证方法和装置 |
CN115473747B (zh) * | 2022-11-14 | 2023-03-24 | 苏州浪潮智能科技有限公司 | 一种状态变更方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109375899A (zh) * | 2018-09-25 | 2019-02-22 | 杭州趣链科技有限公司 | 一种形式验证Solidity智能合约的方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6059837A (en) * | 1997-12-30 | 2000-05-09 | Synopsys, Inc. | Method and system for automata-based approach to state reachability of interacting extended finite state machines |
US7146301B2 (en) * | 2001-01-12 | 2006-12-05 | International Business Machines Corporation | Efficient production of disjoint multiple traces |
US7421680B2 (en) * | 2003-09-22 | 2008-09-02 | Microsoft Corporation | Persisted specifications of method pre-and post-conditions for static checking |
US7844951B2 (en) * | 2005-12-30 | 2010-11-30 | Microsoft Corporation | Specification generation from implementations |
US9389983B2 (en) * | 2013-11-29 | 2016-07-12 | The Regents Of The University Of Michigan | Verification of complex systems that can be described by a finite state transition system |
WO2015159501A1 (ja) * | 2014-04-17 | 2015-10-22 | 日本電気株式会社 | 検証性質統合装置、検証性質統合方法および検証性質統合プログラムが記録された記憶媒体 |
CN107783758B (zh) * | 2016-08-25 | 2019-01-18 | 北京航空航天大学 | 一种智能合约工程方法 |
-
2019
- 2019-09-03 CN CN201910828641.9A patent/CN110705974B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109375899A (zh) * | 2018-09-25 | 2019-02-22 | 杭州趣链科技有限公司 | 一种形式验证Solidity智能合约的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110705974A (zh) | 2020-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110705974B (zh) | 一种完备的智能合约形式规范实现方法 | |
CN109753288B (zh) | 一种适用于形式化验证的智能合约编译方法 | |
Cho et al. | Blitz: Compositional bounded model checking for real-world programs | |
CN110989997A (zh) | 基于定理证明的形式化验证方法 | |
Namjoshi et al. | On the completeness of compositional reasoning methods | |
Zarrieß et al. | Decidable verification of Golog programs over non-local effect actions | |
Reger | Automata based monitoring and mining of execution traces | |
Wang et al. | More anti-chain based refinement checking | |
Ghica et al. | Compositional model extraction for higher-order concurrent programs | |
Liu | Fault-tolerant programming by transformations | |
CN115039083A (zh) | 逻辑连接程序执行时生成的异步算法合法性验证使能方法 | |
Berman et al. | On the power of nondeterminism in dynamic logic | |
Dixon et al. | Verifying higher-order concurrency with data automata | |
Al-Bataineh et al. | Towards more reliable automated program repair by integrating static analysis techniques | |
Biallas et al. | {Counterexample-Guided} Abstraction Refinement for {PLCs} | |
Mota et al. | Model checking CML: tool development and industrial applications | |
Kheldoun et al. | A high level net for modeling and analysis reconfigurable discrete event control systems | |
Morbé et al. | Fully symbolic TCTL model checking for incomplete timed systems | |
CN112868038B (zh) | 用于在事件驱动环境中制定业务流程的方法和系统 | |
Panic et al. | Efficient theorem proving for conditional logics with conditional excluded middle | |
Methni et al. | State space reduction strategies for model checking concurrent C programs | |
Anureev | Program specific transition systems | |
Fraikin et al. | Efficient symbolic execution of large quantifications in a process algebra | |
Haowei et al. | Software Safety Verification Framework based on Predicate Abstraction | |
Grov | Reasoning about correctness properties of a coordination programming language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |