一种基于形式化模型的智能合约代码设计生成方法及系统技术方案

技术编号:32573338 阅读:13 留言:0更新日期:2022-03-09 17:01
本发明专利技术公开了一种基于Event

【技术实现步骤摘要】
一种基于形式化模型的智能合约代码设计生成方法及系统


[0001]本专利技术属于区块链智能合约与软件安全
,尤其涉及一种基于形式化模型的智能合约代码设计生成方法及系统。

技术介绍

[0002]智能合约本质上可以看作在区块链上部署的一段可信交易执行程序,蕴含着契约关系和利益交易,承载了巨大的价值和交易量,比一般的软件具有更复杂的逻辑性和更高的安全性要求。
[0003]形式化方法是一种基于严格数学模型的软硬件设计方法,也是在安全关键软件系统中被广泛采用且高效的验证方法,同时也是国际软件验证的最高级别标准,形式化方法对整个系统使用非二义性的形式语言进行描述,并可以通过相应的验证工具对模型的各种属性进行验证
[0004]通过对智能合约以及形式化方法应用在智能合约领域现状的分析,现有技术主要存在以下不足:
[0005]1)智能合约存在大量的潜在安全风险,并且大部分隐患来源于合约开发者的设计逻辑出现的漏洞。常见的静态分析方法、软件测试或人工审计很难发现这种类型漏洞。
[0006]2)形式化方法和智能合约代码之间存在语义鸿沟和技术壁垒。应用形式化方法需要深厚的数学功底,而开发智能合约代码需要熟练使用合约的编程语言。在面向大规模智能合约的应用场景时,很难让所有的开发者同时掌握形式化方法和智能合约开发方法。
[0007]3)形式化模型和智能合约存在语义不一致的情况,现有技术中可行的规约语言或模型工具无法保证建立的模型行为和智能合约的需求文档保持一致。
[0008]4)形式化验证智能合约的自动化程度低。通常建立智能合约的形式化模型需要很高的人力成本和时间成本,在面向大规模智能合约应用场景时,人工建模和手动验证导致效率低下,且很难保证建模的正确性和一致性。

技术实现思路

[0009]本专利技术的目的是提供一种基于Event

B形式化模型的智能合约代码设计生成方法及系统,解决智能合约现有安全问题以及形式化方法与智能合约结合的不足。
[0010]本专利技术一方面提供了一种基于Event

B形式化模型的智能合约代码设计生成方法,包括:
[0011]步骤1,进行智能合约的需求分析,所述需求分析需要多方协调,用自然语言或领域特定语言DSL来描述智能合约的功能、属性和场景;
[0012]步骤2,基于形式化模型Event

B的语言准确地建立智能合约形式化模型并规约智能合约的属性;
[0013]步骤3,基于形式化模型Event

B,对所述智能合约形式化模型进行验证,对于没有通过所述验证的所述智能合约形式化模型进行反向校正和模型修改,直到通过所述验证;
[0014]步骤4,基于EB2S运算子,将输入所述EB2S运算子的所述智能合约形式化模型对应输出Solidity智能合约代码。
[0015]优选的,所述步骤2包括:所述形式化模型Event

B对智能合约形式化模型的精化,提供从抽象到具体,从简单到复杂的模型生成方法,并且每次精化会验证模型之间的约束关系,从而保证最后生成的模型和最初的需求是一致和正确的。
[0016]优选的,所述EB2S运算子包括多个转换方法对应的规则和算法,所述规则和算法按照从整体到局部的顺序包括:
[0017](1)规则M:将一个完整的Event

B机器及其参考的文本转换到Solidity合约,所述规则M规定在转换之前必须验证通过所有的证明义务;
[0018](2)抽象集数据结构及查重规则:基于Solidity语法规则构造一个语义一致的数据结构,选择数组作为和抽象集对应的数据结构,限制数组中不能有相同的元素,即数组中存储的元素值不能一样;
[0019](3)集合转换规则Set:通过Set规则将集合转换为数组;
[0020](4)常量转换规则Cons规则及变量转换规则Var规则:分别用于将Event

B中的常量和变量转换到Solidity语言中对应的常量和变量;
[0021](5)公理转换规则Axiom、定理转换规则Theorem以及不变量转换规则Inv:公理转换规则Axiom用于将公理转换为断言;所述定理转换规则Theorem用于将定理转换为断言;所述不变量转换规则Inv用于将不变量转换为断言;Solidity支持两种断言:assert和require,所述公理、定理和不变量都转换为assert断言;
[0022](6)初始化事件转换规则Init:初始化事件在所有事件中最先执行,并只执行一次,用于初始化机器中的变量,将所述初始化事件直接转换为Solidity合约中的构造函数,所述构造函数是使用construct关键字声明的特殊函数,用于初始化合约中的变量;
[0023](7)普通事件转换规则:普通事件可以转换为两个Solidity函数,其中一个为守卫函数,用于测试对应事件的守卫条件是否满足,另一个为执行函数,用于执行对应事件的动作;
[0024](8)针对普通事件中有无参数的规则When规则和Any规则;
[0025](9)赋值操作转换规则Assign:考虑赋值后的表达式E

可能会发生变化,而被赋值的变量应当等于赋值前的表达式E

,定义一个常量EC,用于记录赋值前的表达式E

的值;
[0026](10)多赋值操作规则:根据Event

B的语义,对于单个事件,所有的动作(actions)是同时进行的;当事件中的多个赋值操作时,将每个赋值操作分别转换,为了验证其赋值操作的安全属性,采用合取操作来合并结果;
[0027](11)赋值操作的变量集合规则:定义了三个辅助运算子MOD,Pred和TypeOf;其中MOD运算子用于计算由事件中动作赋值的变量集;所述Pred运算子用于计算Event

B语言中的变量或表达式到对应的Solidity中定义的变量或表达式,基于Pred运算子,确定POW规则和RelationHas规则,POW规则用于转换Event

B中的属于运算表达式;RelationHas规则用于转换Event

B中的关系到Solidity语言中的mapping数据结构;该运算子允许用户定义嵌套的关系;所述TypeOf运算子将Event

B变量和常量的类型转换到对应的Solidity类型;
[0028](12)Event

B模型执行模拟算法:将合约M看作一个对象,其中的所有方法都可以通过this.method()来调用;Event

B中所有事件的执行顺序是随机的,通过随机数的方
式,来模拟其事件的执行;通过if

break控制语句保证了事件执行的原子性;其中,Solidity合约本身没有提供生成随机数的工具类本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Event

B形式化模型的智能合约代码设计生成方法,其特征在于,包括:步骤1,进行智能合约的需求分析,所述需求分析需要多方协调,用自然语言或领域特定语言DSL来描述智能合约的功能、属性和场景;步骤2,基于形式化模型Event

B的语言准确地建立智能合约形式化模型并规约智能合约的属性;步骤3,基于形式化模型Event

B,对所述智能合约形式化模型进行验证,对于没有通过所述验证的所述智能合约形式化模型进行反向校正和模型修改,直到通过所述验证;步骤4,基于EB2S运算子,将输入所述EB2S运算子的所述智能合约形式化模型对应输出Solidity智能合约代码。2.根据权利要求1所述的一种基于Event

B形式化模型的智能合约代码设计生成方法,其特征在于,所述步骤2包括:所述形式化模型Event

B对智能合约形式化模型的精化,提供从抽象到具体,从简单到复杂的模型生成方法,并且每次精化会验证模型之间的约束关系,从而保证最后生成的模型和最初的需求是一致和正确的。3.根据权利要求1所述的一种基于Event

B形式化模型的智能合约代码设计生成方法,其特征在于,所述EB2S运算子包括多个转换方法对应的规则和算法,所述规则和算法按照从整体到局部的顺序包括:(1)规则M:将一个完整的Event

B机器及其参考的文本转换到Solidity合约,所述规则M规定在转换之前必须验证通过所有的证明义务;(2)抽象集数据结构及查重规则:基于Solidity语法规则构造一个语义一致的数据结构,选择数组作为和抽象集对应的数据结构,限制数组中不能有相同的元素,即数组中存储的元素值不能一样;(3)集合转换规则Set:通过Set规则将集合转换为数组;(4)常量转换规则Cons规则及变量转换规则Var规则:分别用于将Event

B中的常量和变量转换到Solidity语言中对应的常量和变量;(5)公理转换规则Axiom、定理转换规则Theorem以及不变量转换规则Inv:公理转换规则Axiom用于将公理转换为断言;所述定理转换规则Theorem用于将定理转换为断言;所述不变量转换规则Inv用于将不变量转换为断言;Solidity支持两种断言:assert和require,所述公理、定理和不变量都转换为assert断言;(6)初始化事件转换规则Init:初始化事件在所有事件中最先执行,并只执行一次,用于初始化机器中的变量,将所述初始化事件直接转换为Solidity合约中的构造函数,所述构造函数是使用construct关键字声明的特殊函数,用于初始化合约中的变量;(7)普通事件转换规则:普通事件可以转换为两个Solidity函数,其中一个为守卫函数,用于测试对应事件的守卫条件是否满足,另一个为执行函数,用于执行对应事件的动作;(8)针对普通事件中有无参数的规则When规则和Any规则;(9)赋值操作转换规则Assign:考虑赋值后的表达式E

可能会发生变化,而被赋值的变量应当等于赋值前的表达式E

,定义一个常量EC,用于记录赋值前的表达式E

的值;(10)多赋值操作规则:根据Event

B的语义,对于单个事件,所有的动作(actions)是同时进行的;当事件中的多个赋值操作时,将每个赋值操作分别转换,为了验证其赋值操作的
安全属性,采用合取操作来合并结果;(11)赋值操作的变量集合规则:定义了三个辅助运算子MOD,Pred和TypeOf;其中MOD运算子用于计算由事件中动作赋值的变量集;所述Pred运算子用于计算Event

B语言中的变量或表达式到对应的Solidity中定义的变量或表达式,基于Pred运算子,确定POW规则和RelationHas规则,POW规则用于转换Event

B中的属于运算表达式;RelationHas规则用于转换Event

B中的关系到Solidity语言中的mapping数据结构;该运算子允许用户定义嵌套的关系;所述TypeOf运算子将Event
...

【专利技术属性】
技术研发人员:胡凯朱健李洁
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1