CN111562906A - 一种基于Noesis逻辑的智能合约开发与验证方法 - Google Patents

一种基于Noesis逻辑的智能合约开发与验证方法 Download PDF

Info

Publication number
CN111562906A
CN111562906A CN202010296976.3A CN202010296976A CN111562906A CN 111562906 A CN111562906 A CN 111562906A CN 202010296976 A CN202010296976 A CN 202010296976A CN 111562906 A CN111562906 A CN 111562906A
Authority
CN
China
Prior art keywords
intelligent contract
logic
intelligent
noesis
program
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.)
Granted
Application number
CN202010296976.3A
Other languages
English (en)
Other versions
CN111562906B (zh
Inventor
黄步添
徐启源
罗春凤
刘振广
陈建海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Yunxiang Network Technology Co Ltd
Original Assignee
Hangzhou Yunxiang Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Yunxiang Network Technology Co Ltd filed Critical Hangzhou Yunxiang Network Technology Co Ltd
Priority to CN202010296976.3A priority Critical patent/CN111562906B/zh
Publication of CN111562906A publication Critical patent/CN111562906A/zh
Application granted granted Critical
Publication of CN111562906B publication Critical patent/CN111562906B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于Noesis逻辑的智能合约开发与验证方法,包括:准备交互式定理证明器,及其上用于智能合约的抽象机器,包括智能合约和抽象机器;在交互式定理证明器和用于智能合约的抽象机器上,实现计算与状态分离的方案,将所有状态进行转移并以指令的方式记录;基于计算与状态分离的方案,通过转移指令计算智能合约;在智能合约计算完成后,写入区块链。本发明的基于Noesis逻辑的智能合约开发与验证方法,具有能够实现区块链上智能合约的零缺陷代码的开发与验证过程。本发明通过形式化验证方法,提高智能合约的形式化分析效率,以便提高智能合约执行效率,并保证智能合约在执行过程中的安全性。

Description

一种基于Noesis逻辑的智能合约开发与验证方法
技术领域
本发明属于形式化验证技术、智能合约技术、区块链技术领域,具体涉及一种基于Noesis逻辑的智能合约开发与验证方法。
背景技术
随着计算机信息技术的发展,区块链技术的价值被逐渐认可,并得到广泛的应用,并且为一直找不到发展依托的智能合约技术提供了发展平台。智能合约技术作为区块链技术的基础技术之一,依托区块链技术得以发展和投入应用。区块链技术是一种以块链式数据结构验证与存储数据的分布式数据库技术,在应用层面,更多人愿意将它理解为一种以分布式节点的共识算法来保证数据的一致性的技术。区块链的编程和操作数据的方式,是以自动化脚本代码组成的智能合约来实现的,其实现的是一种去中心化、透明、安全的分布式基础架构。
基于区块链技术与智能合约技术的应用已经产生了广泛的影响。其中以太坊与EOSIO均是目前商业市场上活跃的平台。智能合约直接与商业业务关联,智能合约的程序实现上的缺陷将直接影响其业务,并可能造成严重的经济损失。已有大量文献研究智能合约的安全性。已有诸多智能合约实现的缺陷造成了财产损失,包括DAO事件造成了1.5亿美元的损失,HackerGold事件造成了40万美元的损失,Rubixi事件造成了2万美元的损失,Govermental事件造成1万美元的损失,Parity Multisig事件造成2千万美元的损失。
且由于区块链技术本身的特点,一旦智能合约被部署就难以被修改,而任何部署后发现的缺陷都难以被更新。DAO事件中,缺陷实际在数月前就被发现,但因缺乏有效的补救措施而未能及时修复,事件发生后以太坊不得不通过硬分叉来挽回造成的损失。
对智能合约进行形式化分析尽可能在发布前提早发现缺陷有重要意义,现已有大量研究利用形式化验证方法对智能合约进行安全研究。其中包括测试与静态分析,但测试与静态分析难以覆盖所有潜在的缺陷。
目前的智能合约都很短小,对其进行形式化验证相对而言并不困难,而因其特性,智能合约上所有缺陷的代价都十分昂贵,因此值得对智能合约进行尽可能全面的形式化验证。
基于以上背景,若能彻底形式化地证明智能合约实现的正确性,则可实现智能合约的实现尽其所能的正确并且不存在任何潜在的缺陷。
发明内容
本发明基于上述背景和现有技术所存在的问题,拟设计一种基于Noesis逻辑的智能合约开发与验证方法,其能够实现区块链上智能合约的零缺陷代码的开发与验证过程。本发明还有一个目的是通过形式化验证方法,提高智能合约的形式化分析效率,以便提高智能合约执行效率,并保证智能合约在执行过程中的安全性。
为了实现本发明的这些目的和其它优点,提供了一种基于Noesis逻辑的智能合约开发与验证方法,具体实现步骤包括:
准备交互式定理证明器,及其上用于智能合约的抽象机器,此用于智能合约的抽象机器包括智能合约和抽象机器;
在交互式定理证明器和用于智能合约的抽象机器上,实现计算与状态分离的方案,将所有状态进行转移并以指令的方式记录;
基于计算与状态分离的方案,通过转移指令计算智能合约;
在智能合约计算完成后,写入区块链。
优选的是,Noesis逻辑采用Noesis逻辑实现器构建程序,并使用交互式定理证明器作为证明引擎,完成对抽象语义的证明,最终完成对智能合约的证明。
优选的是,所述计算与状态分离的方案,使用请求-响应模型,将程序分割成下层与上层计算过程两个部分,具体实现内容包括:
下层实现生存期管理、数据持久化管理;
上层计算过程负责计算响应与状态的修改指令,在计算中无法修改系统状态,仅将状态修改指令输出,而后由下层执行再发生实际的状态改变。
进一步地,在计算智能合约的过程中,负责计算响应与对状态的修改指令,首先请求当前状态,仅计算响应与状态转移指令;将状态转移抽象成一种指令,计算部分计算这些指令,根据程序逻辑,计算出当下该进行的状态转移并将这些转移以指令的方式输出,交给下层,再由下层执行状态转移;具体包括:用于智能合约的抽象机器中所有的条件都具有确定的字节数,条件值以此字节数排布在内存中,计算时,设置所有小于等于4字节的值以虚拟机的i32表示,设置大于4字节但小于等于8字节的以i64表示,设置大于8字节的以指针表示。
优选的是,所述计算智能合约具体步骤包括:
1.1对程序进行编译,包括将程序定义为展开成基元函数的组合,成为中间表达;
1.2中间表达由交互式定理证明器作为文本输出,并交给由基元函数到智能合约指令集的映射,将基元函数的组合翻译至智能合约执行部分。
进一步地,所述步骤1.2中,还包括:以虚拟机为智能合约架构的智能合约提供基元函数,用于实现高精度运算;虚拟机、用于智能合约的抽象机器的中间表达分别采用树形结构表达。
进一步地,所述步骤1.1和1.2对智能合约进行编译,具体步骤还包括:
2.1设置抽象机器中的Let结构表示本地变量,赋值p给本地变量x,经过编译的p变为p’,并在编译p’的过程中,所有对x的引用都编译为读取本地变量x;用于智能合约的抽象机器的中间表达中的分支表达形式包括直接表达和抽象表达形式;抽象表达形式用于较复杂的分支实现情况;所述步骤3.1中,还包括:所有分支都在分支块中,重复的计算被置于之前的临时变量赋值中;对于不能直接对应到虚拟机上指令的基元函数,通过预先构建虚拟机函数,调用基元函数时,内联地展开此函数;涉及到的基元函数或系统库函数到WASM指令的映射包括:基元函数在满足条件下的虚拟机指令,以及全局值、和各种运行函数;
2.2由虚拟机映射关系,可以将用于智能合约的抽象机器的中间表达翻译成虚拟机,进而完成编译;外部编译程序设置成简短形式,用于降低出现缺陷的概率,并用于简化形式化验证的过程;
2.3编译完成的程序进行最后的包装,在函数执行前,插入处理来自智能合约的输入代码,并在函数后增加对链数据写入指令的执行程序;最后,智能合约执行部分调用包装完成的函数,并修改区块链数据的智能合约。
优选的是,所述对编译完成的程序进行最后的包装,对编译完成的程序采用包装算法,具体步骤包括:
3.1读取来自智能合约的输入;
3.2以输入调用程序并记返回值为(l,x),其中l为链数据写入命令序列,x为计算结果;
3.3逐一遍历命令序列l并执行链数据写入;
3.4将计算结果x返回到智能合约。
进一步地,在智能合约计算完成后,写入区块链,具体操作步骤包括:
4.1智能合约通过网络扩散,存入到区块链上的每个节点;
4.2触发启用共识机制,验证节点将智能合约集合的Hash值封装成一个区块结构并迅速扩散到全网;
4.3收到智能合约集合的每个节点对每条智能合约进行私钥签名与账户匹配的有效验证,即进行背书;
4.4背书经验证通过后,将智能合约最终写入区块链中,区块链构建部署的智能合约自动执行,不可修改。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。本发明至少包括以下有益效果:
1.本发明开创性地提出将Noesis逻辑用于智能合约的开发与验证,由于Noesis逻辑实现器使用交互式定理证明器作为证明引擎,允许程序开发使用交互式定理证明器完成对抽象语义的证明,进而完成对智能合约的证明,所以能够生产较高执行性能,且易于被形式化分析与验证的智能合约。
2.本发明对于智能合约的开发与验证中,状态方面采用计算与状态分离的方案,将所有状态转移以指令的方式记录,在智能合约完成所有计算后,将完成计算的智能合约写入区块链,保证智能合约的安全。
3.基于Noesis逻辑的程序开发与验证方法,能够实现产生彻底正确的程序,因此基于Noesis逻辑开发与验证过的智能合约,不存在缺陷和漏洞,实现绝对的安全性。
附图说明
图1为本发明智能合约开发及验证的整体实现流程图;
图2为本发明Noesis逻辑的主体框架图;
图3为本发明状态与计算分离的原理实现示意图;
图4为本发明智能合约写入区块链的流程图。
具体实施方式
为了清晰地阐述本发明,使本发明实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。
Noesis对应(Noesis correspondence)中文解释为理解对应关系,与Noesis对应相关的系统叫做Noesis系统。Noesis本为希腊语,来源于形而上学的本体论,其本义来自本体论的定义,即对现象(phenomenon)理解(Noesis)下的本体(noumenon)。
具体实施例1:
提供了一种基于Noesis逻辑的智能合约开发与验证方法,如图1所示,示出了本发明智能合约开发及验证的整体实现流程图,具体实现步骤包括:
(1)准备交互式定理证明器,及其上用于智能合约的抽象机器
Figure BDA0002452556030000071
其中Sc表示智能合约,
Figure BDA0002452556030000072
表示抽象机器;
(2)实现计算与状态分离,将所有状态转移以指令的方式记录;
(3)基于计算与状态分离的方案,计算智能合约;
(4)在智能合约计算完成后,写入区块链。
所述步骤(1),还包括:如图2所示为本发明Noesis逻辑的主体架构图,利用Noesis逻辑实现器
Figure BDA0002452556030000073
实现智能合约的程序开发,能够生产较高执行性能的易于被形式化分析与验证的智能合约。
Figure BDA0002452556030000074
使用交互式定理证明器作为证明引擎,完成对抽象语义的证明,最终完成对智能合约的证明。
如图3示出了本发明状态与计算分离的原理实现示意图,所述步骤(2)中,所述计算与状态分离,使用请求-响应模型,将程序分割成下层与上层计算过程两个部分,即构建状态机,状态机中不涉及实际的状态转移,仅将状态如何转移的计算分离出来,具体实现内容包括:
下层实现生存期管理、数据持久化管理;
上层计算过程负责计算响应与状态的修改指令,在计算中无法修改系统状态,仅将状态修改指令输出,而后由下层执行再发生实际的状态改变。
所述步骤(3),在计算智能合约的过程中,负责计算响应与对状态的修改指令,首先请求当前状态,仅计算响应与状态转移指令。将状态转移抽象成一种指令,计算部分是纯粹地计算这些指令,根据程序逻辑,计算出当下该进行的状态转移,并将这些转移以指令的方式输出,交给下层,再由下层执行状态转移。具体包括:
Figure BDA0002452556030000075
中所有条件都具有确定的字节数,条件值以此字节数排布在内存中,计算时,设置所有小于等于4字节的值以WASM(WebAssembly,可移植、体积小、加载快并且兼容Web的全新格式,可称为虚拟机)的i32表示,设置大于4字节但小于等于8字节的以i64表示,设置大于8字节的以指针表示。
进一步地,所述计算智能合约,利用Noesis逻辑实现器
Figure BDA0002452556030000081
实现智能合约编译,实现对智能合约的计算,具体步骤包括:
1.1对程序进行编译,包括定义为展开成基元函数的组合,成为一种中间表达IR(Intermediate Representation,IR);
1.2IR由HOL(Higher-Order Logic,高阶逻辑)交互式定理证明器作为文本输出交给外部程序,外部程序由基元函数到智能合约指令集的映射,将基元函数的组合翻译至智能合约执行部分。
程序到IR的编译是在HOL交互式定理证明器内部进行而被保障的,外部进行的IR到智能合约的编译,存在错误的概率。
所述基元函数,存在到WASM的映射,用于
Figure BDA0002452556030000082
其程序可以被编译到WASM,进而在可以在所有WASM执行平台上运行,EOSIO等智能合约支持以WASM程序作为智能合约。
Figure BDA0002452556030000083
中的基元运算根据字节长度有不同版本。
所述步骤1.2中,还包括:以WASM为智能合约架构的智能合约提供基元函数,用于实现高精度运算。WASM采用树形结构表达,
Figure BDA0002452556030000084
的IR也用树形结构表达,与WASM的结构类似。
所述步骤1.1和1.2对智能合约进行编译,具体还包括:
2.1设置
Figure BDA0002452556030000085
中的Let结构表示本地变量,赋值p给本地变量x,经过编译的p变为p’,并在编译p’的过程中,并在编译p’中,所有对x的引用都编译为读取本地变量
Figure BDA0002452556030000086
的IR中的分支表达形式包括直接表达和WAST(Web Abstract Syntax Tree,AST,抽象语法树)表达形式,其中,WAST表达形式用于较复杂的分支实现情况。
所有分支都在分支块中,重复的计算被置于之前的临时变量赋值中。对于不能直接对应到WASM上指令的基元函数,通过预先构建的WASM上的函数,此函数即为
Figure BDA0002452556030000091
运行时的系统库,在基元函数调用之处,内联地展开此函数。涉及到的基元函数或系统库函数到WASM指令的映射包括:基元函数在满足条件下的WASM指令,以及全局值、和各种运行函数。
2.2由WASM映射关系,可以将
Figure BDA0002452556030000092
的IR翻译成WASM,进而完成编译,即外部编译器对
Figure BDA0002452556030000093
的IR进行指令对指令的翻译,不需要任何复杂的编排或逻辑。外部编译程序设置成简短形式,用于降低出现缺陷的概率,并用于简化形式化验证的过程。
2.3编译完成的程序进行最后的包装,在函数执行前,插入处理来自智能合约的输入代码,并在函数后增加对链数据写入指令的执行程序。最后,智能合约执行部分调用包装完成的函数,能有效计算输出,并修改区块链数据的智能合约。
进一步地,所述对编译完成的程序进行最后的包装,应用程序的包装算法,包括对编译完成的程序:
3.1读取来自智能合约的输入;
3.2以输入调用程序并记返回值为(l,x),其中l为链数据写入命令序列,x为计算结果;
3.3逐一遍历命令序列l并执行链数据写入;
3.4将计算结果x返回到智能合约。
如图4所示,为本发明实现智能合约开发与验证后,将智能合约写入区块链的流程图,所述步骤(4)中,将计算完成后的智能合约写入区块链的具体操作步骤包括:
4.1智能合约通过网络扩散,存入到区块链上的每个节点;
4.2触发启用共识机制,验证节点将智能合约集合的Hash值封装成一个区块结构并迅速扩散到全网;
4.3收到智能合约集合的每个节点对每条智能合约进行私钥签名与账户匹配的有效验证,即进行背书;
4.4背书经验证通过后,将智能合约最终写入区块链中,区块链构建部署的智能合约自动执行,不可修改。
具体实施例2:
1.图1示出了根据本发明的一种实现形式,示出了本发明智能合约开发及验证的整体实现流程图,其实现的是一种基于Noesis逻辑的智能合约开发与验证方法,具体实现步骤包括:
(1)准备HOL交互式定理证明器,及其上用于智能合约的抽象机器
Figure BDA0002452556030000101
其中Sc表示智能合约,
Figure BDA0002452556030000102
表示抽象机器;
(2)实现计算与状态分离,将所有状态转移以指令的方式记录;
(3)基于计算与状态分离的方案,计算智能合约;
(4)在智能合约计算完成后,写入区块链。
所述步骤(1),还包括:如图2所示为本发明Noesis逻辑的主体架构图,即为Noesis逻辑实现器
Figure BDA0002452556030000103
的主体架构图,利用Noesis逻辑实现器
Figure BDA0002452556030000104
实现智能合约的程序开发,能够生产较高执行性能的易于被形式化分析与验证的智能合约。且
Figure BDA0002452556030000105
使用HOL交互式定理证明器作为证明引擎,完成对抽象语义的证明,最终对智能合约的证明。
2.如图3示出了本发明状态与计算分离的原理实现示意图,使用请求-响应模型,将程序分割成下层与上层计算过程两个部分,即构建状态机,状态机中不涉及实际的状态转移,仅将状态如何转移的计算分离出来,具体实现内容包括:
1.1下层实现生存期管理、数据持久化管理;
1.2上层计算过程负责计算响应与状态的修改指令,在计算中无法修改系统状态,仅将状态修改指令输出,而后由下层执行再发生实际的状态改变。
涉及到状态转移指令和计算逻辑基础具体包括:
1)定义值,类型phenomenon表示值,其表示如下:
Figure BDA0002452556030000111
其中,PhV x b:b个二进制表示的数字x;PhS p1 p2:两个值p1、p2在内存上的直接拼接构成的值;PhP p:对值p的指针。这些表示的规则如下:
Figure BDA0002452556030000112
不定义PX(PhP p),PointerSize为常量固定为智能合约执行环境的位数。
2)定义
Figure BDA0002452556030000113
上的条件,
Figure BDA0002452556030000114
上理解的定义,只固定理解的值集位数目;
3)确立
Figure BDA0002452556030000115
的Noesis的对应关系,定义三元关系
Figure BDA0002452556030000116
表示值与抽象语义在某种理解下的对应关系,在此基础上,加入值合法性,
Figure BDA0002452556030000117
Figure BDA0002452556030000121
4)抽象表达链,
Figure BDA0002452556030000122
将链上数据抽象为各个由标识区分的键值表,使用有限映射表示,又称类型chain:
Figure BDA0002452556030000125
链数据是作为字符串的表标识与作为值的健元组到作为值的值有限映射。domcφ,rancφ表示一个链数据φ名为c的表的所有健与值:
Figure BDA0002452556030000123
5)定义智能合约的调用响应,类型response表示预期智能合约调用的返回类型,例如:
α response::=((write_chain list),α) (7)
(1,x)表示以x为返回值,1为链数据写入命令序列的智能合约调用响应。L列表中的每一项元素都是write_chain类型描述的链数据的写入命令,一个智能合约的外部接口函数必须返回response类型,编译时会在每个外部接口函数的实现的最后逐一遍历写入命令序列1,逐一将命令执行并写入链中。智能合约调用响应时的内存结构包括指向写入命令序列1的指针和计算结果x。如下表1所示:
表1:智能合约调用响应在实现上的内存结构
Figure BDA0002452556030000124
6)定义智能合约的外部接口,定义理解RsIi表示以i理解为返回内容的智能合约调用响应:
RsI i:=i×(LI CWI), (8)
所有
Figure BDA0002452556030000131
的智能合约所暴露的可供外部调用的接口应是一种值函数,且其具有至少一种Noesis同构,此同构满足第一个参数的条件必为:I1(x:chain),且返回值的条件必为RsI k。即函数f应满足如下形式的Noesis同构:
Figure BDA0002452556030000132
所述步骤(3),在计算智能合约的过程中,负责计算响应与对状态的修改指令,首先请求当前状态,仅计算响应与状态转移指令。将状态转移抽象成一种指令,计算部分纯粹地计算这些指令,根据程序逻辑,计算出当下该进行的状态转移,并将这些转移以指令的方式输出,交给下层,再由下层执行状态转移。具体包括:
Figure BDA0002452556030000133
中所有条件都具有确定的字节数,条件值以此字节数排布在内存中,计算时,设置所有小于等于4字节的值以WASM的i32表示,设置大于4字节但小于等于8字节的以i64表示,设置大于8字节的以指针表示。例如,设置Tb表示b个字节的值的WASM类型,即满足如下所示的条件:
Figure BDA0002452556030000134
所述计算智能合约,利用Noesis逻辑实现器
Figure BDA0002452556030000135
实现智能合约的编译,实现对智能合约的计算,具体步骤包括:
2.1编译程序,并定义为展开成基元函数的组合,成为一种中间表达(IR);
2.2IR由HOL交互式定理证明器作为文本输出,并交给外部程序,外部程序由基元函数到智能合约指令集的映射,将基元函数的组合翻译至下层智能合约。
程序到IR的编译是在HOL交互式定理证明器内部进行而被保障的,外部进行的IR到智能合约的编译,存在错误的概率。
所述基元函数,存在到WASM的映射,用于
Figure BDA0002452556030000141
其程序可以被编译到WASM,进而可以在所有WASM执行部分上运行,EOSIO等智能合约支持以WASM程序作为智能合约。WASM上的指令也为各种类型设计了不同版本,例如整数加法有i32.add,i64.add两种版本。
Figure BDA0002452556030000142
中的基元运算也根据字节长度有不同版本,例如|IAdd n表示n个字节的整数加法基元函数,n个字节的基元函数就对应Tn版本的add指令。基元函数IAdd n对应的WASM指令是Tn.add,这一记号表示类型Tn版本的add指令。
所述步骤2.2中,还包括:以WASM为智能合约架构的智能合约提供基元函数,用于实现高精度运算。WASM采用一种树形结构表达,
Figure BDA0002452556030000143
的IR也用树形结构表达,与WASM的结构类似。
所述步骤2.1和2.2对智能合约进行编译,具体还包括:
3.1设置
Figure BDA0002452556030000144
中的Let结构表示本地变量,赋值p给本地变量x,经过编译的p变为p’,并在编译p’的过程中,所有对x的引用都编译为读取本地变量x。
Figure BDA0002452556030000145
的IR中的分支表达形式包括直接表达和WAST表达形式,直接表达形式例如分支A、分支B。WAST表达形式用于较复杂的分支实现情况。
所有分支都在分支块中,重复的计算被置于之前的临时变量赋值中。对于不能直接对应到一个WASM上指令的基元函数,通过预先构建WASM的函数,此函数即为
Figure BDA0002452556030000146
运行时的系统库,在基元函数调用之处,内联地展开此函数。涉及到的基元函数或系统库函数到WASM指令的映射包括:基元函数在条件下的WASM指令。以及全局值、和各种运行函数。
Figure BDA0002452556030000147
的基元函数到WASM指令部分映射如下表2所示:
表2:
Figure BDA0002452556030000151
的基元函数到WASM指令的映射
Figure BDA0002452556030000152
3.2由WASM映射关系,可将
Figure BDA0002452556030000153
的IR翻译成WASM,进而完成编译,即外部编译器对
Figure BDA0002452556030000154
的IR进行指令对指令的翻译,不需要任何复杂的编排或逻辑。外部编译程序可设置成简短形式,用于降低出现缺陷的概率,并用于简化形式化验证的过程。
3.3编译完成的程序进行最后的包装,在函数执行前,插入处理来自智能合约的输入代码,并在函数后增加对链数据写入指令的执行程序。最后,智能合约执行部分调用包装完成的函数,能有效计算输出,并修改区块链数据的智能合约。
所述对编译完成的程序进行最后的包装,应用程序的包装算法,包括对编译完成的程序:
4.1读取来自智能合约的输入;
4.2以输入调用程序并记返回值为(l,x),其中l为链数据写入命令序列,x为计算结果;
4.3逐一遍历命令序列l并执行链数据写入;
4.4将计算结果x返回到智能合约。
3.如图4所示,为本发明实现智能合约开发与验证后,将智能合约写入区块链的流程图,将计算完成后的智能合约写入区块链的具体操作步骤包括:
5.1智能合约通过网络扩散并存入到区块链上的每个节点;
5.2触发启用共识机制,验证节点将智能合约集合的Hash值封装成一个区块结构并迅速扩散到全网;
5.3收到智能合约集合的每个节点对每条智能合约进行私钥签名与账户匹配的有效验证,即进行背书;
5.4背书经验证通过后,将智能合约最终写入区块链中,区块链构建部署的智能合约自动执行,不可修改。
这里说明的智能合约的开发与验证流程是用来简化本发明的说明的。对本发明的智能合约开发与验证方法的应用、修改和变化对本领域的技术人员来说是显而易见的。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

Claims (9)

1.一种基于Noesis逻辑的智能合约开发与验证方法,其特征在于,具体实现步骤包括:
准备交互式定理证明器,及其上用于智能合约的抽象机器,此用于智能合约的抽象机器包括智能合约和抽象机器;
在交互式定理证明器和用于智能合约的抽象机器上,实现计算与状态分离的方案,将所有状态进行转移并以指令的方式记录;
基于计算与状态分离的方案,通过转移指令计算智能合约;
在智能合约计算完成后,写入区块链。
2.根据权利要求1所述的基于Noesis逻辑的智能合约开发与验证方法,其特征在于,Noesis逻辑采用Noesis逻辑实现器构建程序,并使用交互式定理证明器作为证明引擎,完成对抽象语义的证明,最终完成对智能合约的证明。
3.根据权利要求1所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,所述计算与状态分离的方案,使用请求-响应模型,将程序分割成下层与上层计算过程两个部分,具体实现内容包括:
下层实现生存期管理、数据持久化管理;
上层计算过程负责计算响应与状态的修改指令,在计算中无法修改系统状态,仅将状态修改指令输出,而后由下层执行再发生实际的状态改变。
4.根据权利要求3所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,在计算智能合约的过程中,负责计算响应与对状态的修改指令,首先请求当前状态,仅计算响应与状态转移指令;将状态转移抽象成一种指令,计算部分计算这些指令,根据程序逻辑,计算出当下该进行的状态转移并将这些转移以指令的方式输出,交给下层,再由下层执行状态转移;具体包括:用于智能合约的抽象机器中所有的条件都具有确定的字节数,条件值以此字节数排布在内存中,计算时,设置所有小于等于4字节的值以虚拟机的i32表示,设置大于4字节但小于等于8字节的以i64表示,设置大于8字节的以指针表示。
5.根据权利要求4所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,所述计算智能合约具体步骤包括:
1.1对程序进行编译,包括将程序定义为展开成基元函数的组合,成为中间表达;
1.2中间表达由交互式定理证明器作为文本输出,并交给由基元函数到智能合约指令集的映射,将基元函数的组合翻译至智能合约执行部分。
6.根据权利要求5所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,所述步骤1.2中,还包括:以虚拟机为智能合约架构的智能合约提供基元函数,用于实现高精度运算;虚拟机、用于智能合约的抽象机器的中间表达分别采用树形结构表达。
7.根据权利要求5所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,所述步骤1.1和1.2对智能合约进行编译,具体步骤还包括:
2.1设置抽象机器中的Let结构表示本地变量,赋值p给本地变量x,经过编译的p变为p’,并在编译p’的过程中,所有对x的引用都编译为读取本地变量x;用于智能合约的抽象机器的中间表达中的分支表达形式包括直接表达和抽象表达形式;抽象表达形式用于较复杂的分支实现情况;所述步骤3.1中,还包括:所有分支都在分支块中,重复的计算被置于之前的临时变量赋值中;对于不能直接对应到虚拟机上指令的基元函数,通过预先构建虚拟机函数,调用基元函数时,内联地展开此函数;涉及到的基元函数或系统库函数到WASM指令的映射包括:基元函数在满足条件下的虚拟机指令,以及全局值、和各种运行函数;
2.2由虚拟机映射关系,可以将用于智能合约的抽象机器的中间表达翻译成虚拟机,进而完成编译;外部编译程序设置成简短形式,用于降低出现缺陷的概率,并用于简化形式化验证的过程;
2.3编译完成的程序进行最后的包装,在函数执行前,插入处理来自智能合约的输入代码,并在函数后增加对链数据写入指令的执行程序;最后,智能合约执行部分调用包装完成的函数,并修改区块链数据的智能合约。
8.根据权利要求7所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,所述对编译完成的程序进行最后的包装,对编译完成的程序采用包装算法,具体步骤包括:
3.1读取来自智能合约的输入;
3.2以输入调用程序并记返回值为(l,x),其中l为链数据写入命令序列,x为计算结果;
3.3逐一遍历命令序列l并执行链数据写入;
3.4将计算结果x返回到智能合约。
9.根据权利要求1所述基于Noesis逻辑的智能合约开发与验证方法,其特征在于,在智能合约计算完成后,写入区块链,具体操作步骤包括:
4.1智能合约通过网络扩散,存入到区块链上的每个节点;
4.2触发启用共识机制,验证节点将智能合约集合的Hash值封装成一个区块结构并迅速扩散到全网;
4.3收到智能合约集合的每个节点对每条智能合约进行私钥签名与账户匹配的有效验证,即进行背书;
4.4背书经验证通过后,将智能合约最终写入区块链中,区块链构建部署的智能合约自动执行,不可修改。
CN202010296976.3A 2020-04-15 2020-04-15 一种基于Noesis逻辑的智能合约开发与验证方法 Active CN111562906B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010296976.3A CN111562906B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的智能合约开发与验证方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010296976.3A CN111562906B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的智能合约开发与验证方法

Publications (2)

Publication Number Publication Date
CN111562906A true CN111562906A (zh) 2020-08-21
CN111562906B CN111562906B (zh) 2023-06-06

Family

ID=72069022

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010296976.3A Active CN111562906B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的智能合约开发与验证方法

Country Status (1)

Country Link
CN (1) CN111562906B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108536445A (zh) * 2018-03-28 2018-09-14 成都链安科技有限公司 面向区块链智能合约的高度自动化形式化验证系统及方法
EP3471006A1 (en) * 2017-10-13 2019-04-17 Eciotify GmbH Method for verifying an execution of a computer program
CN109753288A (zh) * 2019-01-14 2019-05-14 杭州云象网络技术有限公司 一种适用于形式化验证的智能合约编译方法
CN110111104A (zh) * 2019-04-23 2019-08-09 矩阵元技术(深圳)有限公司 区块链智能合约实现方法、装置、计算机设备和存储介质
EP3550464A1 (en) * 2018-04-05 2019-10-09 Accenture Global Solutions Limited Data security and protection system using distributed ledgers to store validated data in a knowledge graph
CN110599177A (zh) * 2019-09-23 2019-12-20 腾讯科技(深圳)有限公司 一种交易验证方法及相关设备
JP2020038482A (ja) * 2018-09-04 2020-03-12 富士通株式会社 プログラム検証プログラム、プログラム検証方法およびプログラム検証装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3471006A1 (en) * 2017-10-13 2019-04-17 Eciotify GmbH Method for verifying an execution of a computer program
CN108536445A (zh) * 2018-03-28 2018-09-14 成都链安科技有限公司 面向区块链智能合约的高度自动化形式化验证系统及方法
EP3550464A1 (en) * 2018-04-05 2019-10-09 Accenture Global Solutions Limited Data security and protection system using distributed ledgers to store validated data in a knowledge graph
JP2020038482A (ja) * 2018-09-04 2020-03-12 富士通株式会社 プログラム検証プログラム、プログラム検証方法およびプログラム検証装置
CN109753288A (zh) * 2019-01-14 2019-05-14 杭州云象网络技术有限公司 一种适用于形式化验证的智能合约编译方法
CN110111104A (zh) * 2019-04-23 2019-08-09 矩阵元技术(深圳)有限公司 区块链智能合约实现方法、装置、计算机设备和存储介质
CN110599177A (zh) * 2019-09-23 2019-12-20 腾讯科技(深圳)有限公司 一种交易验证方法及相关设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
王璞巍等: "面向合同的智能合约的形式化定义及参考实现" *
陈波;李夫明;: "形式化验证方法浅析" *

Also Published As

Publication number Publication date
CN111562906B (zh) 2023-06-06

Similar Documents

Publication Publication Date Title
Hirai Defining the ethereum virtual machine for interactive theorem provers
KR102608500B1 (ko) 블록체인 컴파일러
Wang et al. Formal verification of workflow policies for smart contracts in azure blockchain
Leroy A formally verified compiler back-end
Arcaini et al. AsmetaSMV: a way to link high-level ASM models to low-level NuSMV specifications
CN111179086B (zh) 一种基于WebAssembly的智能合约虚拟机
Yang et al. Fether: An extensible definitional interpreter for smart-contract verifications in coq
Davis et al. The reflective Milawa theorem prover is sound (down to the machine code that runs it)
Lindner et al. TrABin: Trustworthy analyses of binaries
Yang et al. Formal process virtual machine for smart contracts verification
Plump From imperative to rule-based graph programs
Riener et al. metaSMT: focus on your application and not on solver integration
Fredriksson et al. Abstract machines for game semantics, revisited
Crary et al. Foundational certified code in a metalogical framework
Eckhardt et al. Semantics, distributed implementation, and formal analysis of KLAIM models in Maude
Goel et al. Abstract stobjs and their application to ISA modeling
CN107122184A (zh) 一种虚拟现实软件开放式开发系统及方法
Hoang et al. Random testing of a higher-order blockchain language (experience report)
CN111562906B (zh) 一种基于Noesis逻辑的智能合约开发与验证方法
Wang Type system for resource bounds with type-preserving compilation
CN113778564B (zh) 一种高效执行evm智能合约的方法、设备及储存介质
Toma et al. Combining several paradigms for circuit validation and verification
Allais et al. Frex: dependently-typed algebraic simplification
Jaber et al. Synthesis of Distributed Agreement-Based Systems with Efficiently-Decidable Verification
Wiegley et al. Using Coq to write fast and correct Haskell

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