本发明涉及智能合约和形式验证的技术领域,具体涉及一种场外交易智能合约的形式验证方法。
背景技术:
现有的场外交易的智能合约中,没有针对场外交易的智能合约进行安全校验的形式化验证的方法,一旦出现智能合约漏洞,将会对该业务平台造成严重的经济损失。对智能合约进行形式化校验能够避免合约方法实现上的一些问题,通过对合约方法进行形式化语言描述,以此来判断合约方法在实现上的漏洞,最大化避免由于智能合约开发导致的系统漏洞。
区块链技术是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,具有去中心化、开放性、独立性、安全性、匿名性的特性。
智能合约(smartcontract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。执行用代码书写的合约并且在一个不可改变的区块链中存储信息造成一定的风险和问题,因此合约的安全行尤为重要。
技术实现要素:
针对现有智能合约设计上存在的缺陷,本发明提供一种场外交易智能合约的形式验证方法,可有效提升场外交易类智能合约的安全性
本发明是通过以下技术方案实现的:一种场外交易智能合约的形式验证方法,具体包括如下步骤:
(1)定义场外交易智能合约,进行场外交易,所述场外交易的方法包括对所述场外交易智能合约的数据结构、合约方法的声明与实现。
(2)定义形式验证规范,描述步骤(1)所述场外交易的方法所实现的功能,规范所述智能合约中每个场外交易合约相关的合约方法的功能、循环体、返回值和内部状态变量的属性值变化。
(3)利用步骤(2)所述形式验证规范对所述场外交易智能合约进行形式验证,根据所述形式验证模型,检查步骤(1)所述场外交易的方法实现是否符合步骤(2)所述形式验证规范的描述。若符合则代表所述场外交易智能合约安全;若不符合则修改所述场外交易智能合约,直至形式验证描述符合场外交易功能中相关实现。
进一步地,步骤(1)所述场外交易智能合约的定义包括上传文件信息上链、接受者信息上链和反馈者信息上链;所述数据结构包括上传文件信息结构体、接受者信息结构体和反馈信息结构体。
进一步地,步骤(2)所述形式验证规范满足如下条件:
(a)所述形式验证规范依据函数方法执行,且根据所述文件信息上链、所述接受者信息上链和所述反馈者信息上链对应传入的所述上传文件信息结构体、所述接受者信息结构体和所述反馈信息结构体进行校验,得到不同的返回值;
(b)检验所述循环体不溢出;
(c)在所述场外交易智能合约定义时,调用函数,不会抛出异常;
(d)所述函数调用后,所述场外交易的方法中数据结构的状态变量发生改变,其他状态变量保持不变。
进一步地,步骤(3)所述形式验证的模型建立方法,具体为:
(1)形式验证时,传入的入参参数保持在应用层的可控范围内。
(2)忽略所述循环体数组长度的溢出,同时忽略所述循环体内的临时变量值的溢出。
(3)判断所述内部状态变量是否存在,如果已存在,形式验证返回上链失败码;如果所述内部状态变量不存在,形式验证返回上链成功标志码。
本发明的有益效果如下:本发明的场外交易智能合约的形式验证方法,提供了一套通用的场外交易流程相关的智能合约形式验证模型,为场外交易智能合约相关业务提供了一套安全形式化验证的标准。本方法基于软件形式化验证方法进行设计,在合约设计上面提高场外交易智能合约的安全性。本发明的形式化验证方法具有通用性,对于场外交易相关的智能合约都可以使用本方法进行开发和安全审计,对于场外交易一类业务系统而言,可以很好的适用。
附图说明
图1为本发明一种场外交易智能合约形式验证方法的流程图;
图2是本发明对场外交易智能合约的形式验证模型图。
具体实施方式
下面结合附图对本发明进行进一步说明。
图1为本发明一种场外交易智能合约形式验证方法的流程图,具体包括以下步骤:
(1)定义场外交易智能合约,进行场外交易,所述场外交易的方法包括对所述场外交易智能合约的数据结构、状态变量、合约方法的声明与实现。所述场外交易智能合约的定义包括上传文件信息上链、接受者信息上链和反馈者信息上链;所述数据结构包括上传文件信息结构体、接受者信息结构体和反馈信息结构体。
场外交易智能合约的定义具有如下性质:
(a)数据结构包含上传文件信息,接受者信息结构体包含接受者信息,反馈信息结构体包含反馈者信息。上传文件信息结构体至少包含项目文件主键、文件哈希这两个字段,接受者信息结构体至少包含项目文件流程进展主键这一个字段,反馈者信息结构体至少包含项目文件主键、文件哈希、是否有争议这三个字段。
(b)状态变量包含记录项目文件主键到上传文件信息,反馈者信息的映射、项目文件流程进展主键到接受者信息的映射。
(c)文件信息上链、接受者信息上链和反馈者信息上链,三个合约方法分别将传入的参数在循环体内进行循环遍历,将每一个入参参数放入对应的数据结构内的变量中。
(2)定义形式验证规范,描述步骤(1)所述场外交易的方法所实现的功能,规范所述智能合约中每个场外交易合约相关的合约方法的功能、循环体、返回值和内部状态变量的属性值变化。
所述形式验证规范满足如下条件:
(a)所述形式验证规范依据函数方法执行,并要求所述函数方法能够正确的执行,目的是为了验证智能合约是否按照了形式化验证的模型去进行设计。
(b)根据所述文件信息上链、所述接受者信息上链和所述反馈者信息上链对应传入的所述上传文件信息结构体、所述接受者信息结构体和所述反馈信息结构体进行校验,得到不同的返回值,在进行相关信息上链时,假如该信息已经存在链上,则返回错误信息;若不存在,则进行之后的上链业务流程,返回成功上链信息。
(c)检验所述循环体不会存在溢出风险;由于在应用层已经做了控制,约定循环变量不会溢出,且循环次数不会被改变。
(d)在所述场外交易智能合约定义时,调用函数,确保不会抛出异常;所述函数调用后,所述场外交易的方法中数据结构的状态变量发生改变,其他状态变量保持不变。在上传文件信息上链,接受者信息上链,反馈者信息上链发起后,经过链上验证该交易不存在,将场外交易信息按相应逻辑赋值给相应字段,候选对象和场外交易人信息状态变量的相应字段等于预期值,其他字段和状态变量等于原值。
(3)利用步骤(2)所述形式验证规范对所述场外交易智能合约进行形式验证,根据所述形式验证模型,检查步骤(1)所述场外交易的方法实现是否符合步骤(2)所述形式验证规范的描述。若符合则代表所述场外交易智能合约安全;若不符合则修改所述场外交易智能合约,直至形式验证描述符合场外交易功能中相关实现。
如图2所示为本发明的形式验证模型是基于场外智能合约方法的逻辑实现进行验证的,所述形式验证的模型建立方法,具体为:
(1)所述形式验证时,传入的入参参数保持在应用层的可控范围内,不会导致入参数组溢出,参数的溢出会导致形式化校验失败,得不到正确的形式化校验结果。
(2)忽略所述循环体数组长度的溢出,同时忽略所述循环体内的临时变量值的溢出。由于在应用层已经做了控制,所以不存在数组长度溢出的风险以及循环体内的临时变量值溢出的风险。忽略掉这两项不进行形式化校验,得到更准确的校验结果。
(3)判断所述内部状态变量是否存在,如果已存在,形式验证返回上链失败码,返回上链失败标志码,则代表该内部状态变量为重复数据,无法再次发起该方法的调用;如果所述内部状态变量不存在,形式验证返回上链成功标志码。返回上链成功标志码,则代表整个方法功能能够正确的运行,安全校验通过。