CN113191774A - 一种可更新的智能合约的动态验证方法 - Google Patents
一种可更新的智能合约的动态验证方法 Download PDFInfo
- Publication number
- CN113191774A CN113191774A CN202110433470.7A CN202110433470A CN113191774A CN 113191774 A CN113191774 A CN 113191774A CN 202110433470 A CN202110433470 A CN 202110433470A CN 113191774 A CN113191774 A CN 113191774A
- Authority
- CN
- China
- Prior art keywords
- verification
- intelligent contract
- function
- updatable
- variable
- 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.)
- Pending
Links
- 238000012795 verification Methods 0.000 title claims abstract description 79
- 238000000034 method Methods 0.000 title claims abstract description 33
- 230000006870 function Effects 0.000 claims description 51
- 238000010200 validation analysis Methods 0.000 claims description 9
- 239000007943 implant Substances 0.000 claims description 3
- 230000014509 gene expression Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/38—Payment protocols; Details thereof
- G06Q20/40—Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
- G06Q20/401—Transaction verification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种可更新的智能合约的动态验证方法。该可更新的智能合约的动态验证方法包括以下步骤,步骤S1:编译器接收一份智能合约源代码作为输入;步骤S2:编译器接收一份验证条件作为输入;步骤S3:编译器输出经修改后的安全智能合约。本发明的可更新的智能合约的动态验证方法具有准确率高、可大规模验证扩展等优点。
Description
技术领域
本发明涉及区块链技术领域,具体涉及一种可更新的智能合约的动态验证方法。
背景技术
现有的智能合约动态验证作者设计了一种源代码到源代码的Solidity编译器——Solythesis,用来对智能合约进行运行时的高效动态验证,确保合约的安全性。编译器接受Solidity合约源码和不变式,输出修改后的合约,该合约将拒绝所有违反不变式的交易。编译器通过不变式指定的条件生成Solidity语句并插入代码,在执行时合约将检查是否满足不变式。
上述方法在智能合约中插入代码,并将修改后的智能合约部署上链后,将不能再修改,该方法是在链下解析不变式并将不变式对应的Solidity代码插入智能合约中,不能在智能合约运行时刻动态解析验证条件,传统的形式化验证方法存在适用范围小、求解速度慢的问题,且存在较多假阳性的情况,因此需要新的方法来对智能合约进行高准确率的、可扩展的大规模验证。
发明内容
本发明提供了一种可更新的智能合约的动态验证方法,旨在解决上述问题。
根据本申请实施例提供的一种可更新的智能合约的动态验证方法,包括以下步骤:
步骤S1:编译器接收一份智能合约源代码作为输入;
步骤S2:编译器接收一份验证条件作为输入;
步骤S3:编译器输出经修改后的安全智能合约。
优选地,所述编译器的运行步骤包括:
步骤S10:转换并储存验证条件;
步骤S11:植入验证解释器;
步骤S12:添加验证函数调用;
步骤S13:输出结果。
优选地,所述步骤S10包括:在输入的智能合约源代码中添加一个string类型的storage变量且名称为verification,将输入的验证条件语言转换为字节码格式,并存储在verification变量中;
在智能合约源代码中添加一个setVerification函数,该函数的输入参数是一个string类型的变量,函数内部将这个参数赋值给verification变量,用于从外部更新verification变量的值,并限制该函数只能由智能合约的创建者调用。
优选地,所述步骤S11包括:在智能合约源代码中添加一个check函数用于验证,所述check函数的输入参数为一个string类型的变量且名称为information,表示函数调用时的函数名、传入的参数、调用位置经编码后的结果,函数内部为验证条件语言的解释器,将会依次执行存储在verification变量的字节码中的指令。
优选地,所述步骤S12包括:对智能合约源代码进行分析,找出其所有的函数,并在函数的第一行和最后一行插入一个check函数的调用语句,将函数名、函数的多个参数、当前位置的三种信息进行编码,转换为一个string类型的值并传入check函数中。
优选地,所述步骤S13包括:将处理后的智能合约代码输出,输出的智能合约代码为安全的经过验证的智能合约。
本申请实施例提供的技术方案可以包括以下有益效果:本申请设计了一种可更新的智能合约的动态验证方法,本申请允许智能合约开发者在部署后修改智能合约的验证条件,确保使用该智能合约进行交易的安全性,解决了传统静态方法的假阳性问题,准确率更高,解决了传统形式化验证方法的适用代码规模小、验证速度慢的问题,可用于大规模的验证。
允许用户编写验证条件,以便对智能合约进行验证。验证条件可被更新,以便将来在Solidity编译器中发现新的bug后,合约开发者可以及时更新该验证条件,拒绝不安全的交易。解决了现有技术中,对于以太坊智能合约,现有方法无法应对Solidity编译器内部尚未被发现的bug,这些bug会导致编译出的字节码的程序语义与源代码的语义不同,一旦编译部署后,合约内部将隐藏着某些改变语义的bug。
用于验证的代码将和智能合约的原始源代码一起部署上链,形成经验证的安全智能合约,该安全智能合约将拒绝所有不满足验证的判定条件的交易,从而保护智能合约正常运行。本申请部署上链的智能合约能够向后兼容,相比没有使用本方法处理过的合约,不影响用户的正常使用。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明可更新的智能合约的动态验证方法的流程示意图;
图2是本发明可更新的智能合约的动态验证方法的另一流程示意图;
图3是本发明可更新的智能合约的动态验证方法的另一流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1和图2,本发明公开了一种可更新的智能合约的动态验证方法10,所述可更新的智能合约的动态验证方法10包括以下步骤:
步骤S1:编译器接收一份智能合约源代码作为输入;
步骤S2:编译器接收一份验证条件作为输入;
步骤S3:编译器输出经修改后的安全智能合约。
验证条件用一个领域特定语言编写,其语言的语法如下:
(合约名"."函数名("pre"|"post"){断言语句*})*
其中,"pre"表示在该函数的首部进行验证,"post"表示在该函数的尾部进行验证。断言语句的语法为:"assert"逻辑表达式";",该逻辑表达式的语法为:变量名逻辑运算符(值|变量名|算术表达式),其中变量名是智能合约的storage变量或函数内部的变量的名称,逻辑运算符是"<"、"<="、"=="、">="、">"、"!="的其中一个,值是任意数值或字符串,算术表达式的语法为:变量名算术运算符(值|变量名|算术表达式),其中算术运算符是"+"、"-"、"*"、"/"的其中一个。
例如,对于以下智能合约,可以编写一个合法的验证条件:
智能合约:
验证条件:
在编译器的运行过程中,验证条件语言将会被转换为字节码,该字节码将被智能合约的内部函数用来做验证。该字节码基于栈的形式,有以下15种指令,其含义分别如下:
例如,一个验证条件会被转换为如下的字节码:
验证条件:
字节码:
请参阅图3,所述编译器的运行步骤包括:
步骤S10:转换并储存验证条件;
步骤S11:植入验证解释器;
步骤S12:添加验证函数调用;
步骤S13:输出结果。
其中,所述步骤S10包括:在输入的智能合约源代码中添加一个string类型的storage变量且名称为verification,将输入的验证条件语言转换为字节码格式,并存储在verification变量中;
在智能合约源代码中添加一个setVerification函数,该函数的输入参数是一个string类型的变量,函数内部将这个参数赋值给verification变量,用于从外部更新verification变量的值,并限制该函数只能由智能合约的创建者调用。
例如,对于以下智能合约代码:
该代码被转换为以下格式:
其中,所述步骤S11包括:在智能合约源代码中添加一个check函数用于验证,所述check函数的输入参数为一个string类型的变量且名称为information,表示函数调用时的函数名、传入的参数、调用位置经编码后的结果,函数内部为验证条件语言的解释器,将会依次执行存储在verification变量的字节码中的指令。
其中,所述步骤S12包括:对智能合约源代码进行分析,找出其所有的函数,并在函数的第一行和最后一行插入一个check函数的调用语句,将函数名、函数的多个参数、当前位置的三种信息进行编码,转换为一个string类型的值并传入check函数中。
其中,所述步骤S13包括:将处理后的智能合约代码输出,输出的智能合约代码为安全的经过验证的智能合约。
本申请实施例提供的技术方案可以包括以下有益效果:本申请设计了一种可更新的智能合约的动态验证方法,本申请允许智能合约开发者在部署后修改智能合约的验证条件,确保使用该智能合约进行交易的安全性,解决了传统静态方法的假阳性问题,准确率更高,解决了传统形式化验证方法的适用代码规模小、验证速度慢的问题,可用于大规模的验证。
允许用户编写验证条件,以便对智能合约进行验证。验证条件可被更新,以便将来在Solidity编译器中发现新的bug后,合约开发者可以及时更新该验证条件,拒绝不安全的交易。解决了现有技术中,对于以太坊智能合约,现有方法无法应对Solidity编译器内部尚未被发现的bug,这些bug会导致编译出的字节码的程序语义与源代码的语义不同,一旦编译部署后,合约内部将隐藏着某些改变语义的bug。
用于验证的代码将和智能合约的原始源代码一起部署上链,形成经验证的安全智能合约,该安全智能合约将拒绝所有不满足验证的判定条件的交易,从而保护智能合约正常运行。本申请部署上链的智能合约能够向后兼容,相比没有使用本方法处理过的合约,不影响用户的正常使用。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (6)
1.一种可更新的智能合约的动态验证方法,其特征在于,包括以下步骤:
步骤S1:编译器接收一份智能合约源代码作为输入;
步骤S2:编译器接收一份验证条件作为输入;
步骤S3:编译器输出经修改后的安全智能合约。
2.根据权利要求1所述可更新的智能合约的动态验证方法,其特征在于,所述编译器的运行步骤包括:
步骤S10:转换并储存验证条件;
步骤S11:植入验证解释器;
步骤S12:添加验证函数调用;
步骤S13:输出结果。
3.根据权利要求2所述可更新的智能合约的动态验证方法,其特征在于,所述步骤S10包括:在输入的智能合约源代码中添加一个string类型的storage变量且名称为verification,将输入的验证条件语言转换为字节码格式,并存储在verification变量中;
在智能合约源代码中添加一个setVerification函数,该函数的输入参数是一个string类型的变量,函数内部将这个参数赋值给verification变量,用于从外部更新verification变量的值,并限制该函数只能由智能合约的创建者调用。
4.根据权利要求3所述可更新的智能合约的动态验证方法,其特征在于,所述步骤S11包括:在智能合约源代码中添加一个check函数用于验证,所述check函数的输入参数为一个string类型的变量且名称为information,表示函数调用时的函数名、传入的参数、调用位置经编码后的结果,函数内部为验证条件语言的解释器,将会依次执行存储在verification变量的字节码中的指令。
5.根据权利要求4所述可更新的智能合约的动态验证方法,其特征在于,所述步骤S12包括:对智能合约源代码进行分析,找出其所有的函数,并在函数的第一行和最后一行插入一个check函数的调用语句,将函数名、函数的多个参数、当前位置的三种信息进行编码,转换为一个string类型的值并传入check函数中。
6.根据权利要求2所述可更新的智能合约的动态验证方法,其特征在于,所述步骤S13包括:将处理后的智能合约代码输出,输出的智能合约代码为安全的经过验证的智能合约。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110433470.7A CN113191774A (zh) | 2021-04-19 | 2021-04-19 | 一种可更新的智能合约的动态验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110433470.7A CN113191774A (zh) | 2021-04-19 | 2021-04-19 | 一种可更新的智能合约的动态验证方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113191774A true CN113191774A (zh) | 2021-07-30 |
Family
ID=76978413
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110433470.7A Pending CN113191774A (zh) | 2021-04-19 | 2021-04-19 | 一种可更新的智能合约的动态验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113191774A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765688A (zh) * | 2015-04-17 | 2015-07-08 | 上海交通大学 | 一种可动态部署规则的Java程序运行时验证系统 |
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109240907A (zh) * | 2018-07-26 | 2019-01-18 | 华东师范大学 | 基于霍尔逻辑的嵌入式实时操作系统的自动化验证方法 |
CN110009362A (zh) * | 2019-04-02 | 2019-07-12 | 北京众享比特科技有限公司 | 区块链智能合约修改方法、装置和计算机可读存储介质 |
CN112015628A (zh) * | 2020-09-01 | 2020-12-01 | 北京物资学院 | 一种智能合约函数级动态监测分析系统及实现方法 |
-
2021
- 2021-04-19 CN CN202110433470.7A patent/CN113191774A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765688A (zh) * | 2015-04-17 | 2015-07-08 | 上海交通大学 | 一种可动态部署规则的Java程序运行时验证系统 |
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109240907A (zh) * | 2018-07-26 | 2019-01-18 | 华东师范大学 | 基于霍尔逻辑的嵌入式实时操作系统的自动化验证方法 |
CN110009362A (zh) * | 2019-04-02 | 2019-07-12 | 北京众享比特科技有限公司 | 区块链智能合约修改方法、装置和计算机可读存储介质 |
CN112015628A (zh) * | 2020-09-01 | 2020-12-01 | 北京物资学院 | 一种智能合约函数级动态监测分析系统及实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
US10146532B2 (en) | Apparatus and method for detecting code cloning of software | |
US8843907B2 (en) | Compiler with error handling | |
US8453126B1 (en) | System and method for converting base SAS runtime macro language scripts to JAVA target language | |
US9262135B2 (en) | Interpreter-based program language translator using embedded interpreter types and variables | |
Kiselyov | Typed tagless final interpreters | |
CN110196719A (zh) | 一种基于自然语言处理的业务规则生成方法与系统 | |
US8464232B2 (en) | Compiler compiler system with syntax-controlled runtime and binary application programming interfaces | |
EP2454661A1 (en) | System and method for creating a parser generator and associated computer program | |
CN104932905A (zh) | 一种aadl到c语言的代码自动生成方法 | |
CN106503496A (zh) | 基于操作码替换与合并的Python脚本程序防逆转方法 | |
US11650901B2 (en) | Automated generation of software patches | |
CN105260223B (zh) | 一种scpi命令定义、解析、执行和测试的方法 | |
CN113805890A (zh) | 小程序跨应用迁移方法、设备、终端、系统及存储介质 | |
Gil et al. | Formal language recognition with the Java type checker | |
Uhl et al. | An attribute grammar for the semantic analysis of Ada | |
CN111190585B (zh) | 基于字节码增强技术实现java模式匹配特性的方法 | |
CN114443041A (zh) | 抽象语法树的解析方法及计算机程序产品 | |
Sozeau et al. | Correct and Complete Type Checking and Certified Erasure for Coq, in Coq | |
Blewitt et al. | Automatic verification of Java design patterns | |
Lehner | A formal definition of JML in Coq and its application to runtime assertion checking | |
Plump et al. | The semantics of graph programs | |
CN110427179B (zh) | 面向智能合约语言的msvl程序自动生成方法及系统 | |
CN113191774A (zh) | 一种可更新的智能合约的动态验证方法 | |
Iwama et al. | Constructing parser for industrial software specifications containing formal and natural language description |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210730 |
|
RJ01 | Rejection of invention patent application after publication |