首页> 中国专利> 智能合约的重放举证方法、系统、电子设备及存储介质

智能合约的重放举证方法、系统、电子设备及存储介质

摘要

本发明提供一种智能合约的重放举证方法,该方法接收终端提交的签名交易,签名交易中包括数据项和由合约方法生成的人工可读内容;其中,数据项用于描述交易之间的关联关系,人工可读内容用以描述所述合约方法的预期执行结果;通过共识节点将所述签名交易发送至合约容器,合约容器基于签名交易执行合约方法以获得执行结果及第一外部访问记录数据;当执行结果与预期执行结果不一致时,基于第一外部访问记录数据并利用数据项导出关联交易数据及第二外部访问记录数据,以及利用相同的合约容器在重放模式下加载和执行关联交易数据。本发明仅用少量离线数据就可以实现正式执行过程的重放并可举证由于合约缺陷导致的非预期结果,从而对合约开发者追责。

著录项

  • 公开/公告号CN110751486A

    专利类型发明专利

  • 公开/公告日2020-02-04

    原文格式PDF

  • 申请/专利权人 北京连琪科技有限公司;

    申请/专利号CN201911324280.0

  • 发明设计人 李春晓;徐京杭;陈胜;

    申请日2019-12-17

  • 分类号

  • 代理机构北京天盾知识产权代理有限公司;

  • 代理人张彩珍

  • 地址 100085 北京市海淀区上地四街1号25号楼9单元1层112

  • 入库时间 2023-12-17 06:30:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-01

    授权

    授权

  • 2020-02-28

    实质审查的生效 IPC(主分类):G06Q20/38 申请日:20191217

    实质审查的生效

  • 2020-02-04

    公开

    公开

说明书

技术领域

本发明属于区块链技术领域,具体涉及一种智能合约的重放举证方法、系统、电子设备及存储介质。

背景技术

合约安全是困扰现有区块链系统的重要问题,主要包括以下两点安全威胁:

1.合约代码存在漏洞,攻击者利用漏洞使合约按非开发者预期的方式执行,造成合约参与者的资产被盗;

2.合约代码对于合约参与者缺乏可读性,合约的实际执行逻辑与参与者理解的规则存在不一致,导致执行结果非合约参与者预期。

现有技术中的举证方法主要存在以下几个技术问题:

1.由于签名交易中缺少对该行为预期结果的人工可读内容,无法判定合约参与者认可的预期结果;

2.即使采用李嘉图合约的思想,合约参与者阅读人工可读的预期结果后,将其附加到签名内容表明认可以实现对合约参与者行为的举证,由于对合约执行的输出结果缺少完整日志,难以判定合约实际执行结果与预期结果是否一致,无法支持对合约代码存在的问题进行举证;

3.由于合约实例的关联交易与非关联交易混杂,即使记录了合约执行输出的完整日志,也难以证明这些记录确实是合约执行过程中输出的,而非伪造或篡改。

因此,针对上述3个技术问题,目前亟需一种智能合约的重放举证方法和系统,以在合约执行过程中方便有效地进行举证。

发明内容

本发明实施例提供一种智能合约的重放举证方法、系统、电子设备及存储介质,以至少解决现有技术中的一个技术问题。

第一方面,本发明实施例提供一种智能合约的重放举证方法,包括以下步骤:

接收终端提交的签名交易,所述签名交易中包括数据项和由合约方法生成的人工可读内容;其中,所述数据项用于描述交易之间的关联关系,所述人工可读内容用以描述所述合约方法的预期执行结果;

通过共识节点将所述签名交易发送至合约容器,合约容器基于所述签名交易执行合约方法以获得执行结果及第一外部访问记录数据;

当执行结果与预期执行结果不一致时,基于所述第一外部访问记录数据并利用所述数据项导出关联交易数据及第二外部访问记录数据,以及利用相同的合约容器在重放模式下加载和执行所述关联交易数据。

第二方面,本发明实施例提供一种智能合约的重放举证系统,该重放举证系统接收模块执行模块和导出模块;其中,所述执行模块包括合约容器;

所述接收模块在线接收终端提交的签名交易,所述签名交易中包括数据项和由合约方法生成的人工可读内容;其中,所述数据项用于描述交易之间的关联关系,所述人工可读内容用以描述所述合约方法的预期执行结果;

所述接收模块用于通过共识节点将所述签名交易发送至执行模块,执行模块调用所述合约容器,合约容器基于所述签名交易执行合约方法以获得执行结果及第一外部访问记录数据;

当执行结果与预期执行结果不一致时,所述导出模块基于所述第一外部访问记录数据并利用所述数据项导出关联交易数据及第二外部访问记录数据;

所述接收模块离线读取所述关联交易数据并发送至所述执行模块,所述执行模块调用相同的合约容器在重放模式下加载和执行所述关联交易数据。

第三方面,本发明实施例提供一种电子设备包括:处理器和存储装置;所述存储装置上存储有计算机程序,所述处理器执行所述存储装置上的计算机程序时实现上述发明任一项所述的重放举证方法。

第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序在被处理器执行时实现上述发明任一项所述的重放举证方法。

本发明采用命令模式实现的外部访问接口支持两种工作模式,在正式执行模式下记录外部访问细节,在重放模式下将不再依赖在线数据及其真实外部访问的执行环境,仅用少量离线数据就可以实现正式执行过程的重放;通过比对签名交易中包含的人工可读的预期效果与第一外部访问记录数据中的写入的外部状态(即写入指令)可以举证由于合约缺陷导致的非预期结果,从而对合约开发者追责。

附图说明

图1为本发明实施例提供的一种智能合约的重放举证方法的流程示意图;

图2为本发明实施例提供的生成关联交易的过程示意图;

图3为本发明实施例提供的合约容器执行签名交易的流程示意图;

图4为本发明实施例提供的命令模式实现的类关系示意图;

图5为本发明实施例提供的关联交易数据描述项关系示意图;

图6为本发明实施例提供的合约方法接口定义的示意图;

图7为本发明实施例提供的一种智能合约的重放举证系统的结构示意图;

图8为本发明的一种电子设备的一个实施例的结构示意图。

具体实施方式

下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。

为了便于理解具体实施方式中的相关术语,下面首先对下文中出现的相关术语进行简要说明。

标识——即唯一标识,用以区分和查找数字对象的索引,在确定同类数字对象之间内容一定不同的前提下,标识可以采用对数字对象取散列值生成;也可采取通用唯一识别码(uuid)的手段生成;或者采用合约部署时那样的合约名称抢注机制(部署时查找有无相同的名称,无则抢注成功拥有该名称,有则抢注失败)。

合约——即智能合约,可以被区块链合约容器加载和执行的代码,合约拥有唯一标识、合约包含供签名交易调用的方法,包括:合约实例初始方法、合约实例动作方法以及合约实例结束方法。合约方法通过外部访问接口读写外部状态。

外部状态——也称作世界状态(World State),与区块链账户相关的一组键—值对(Key-Value),可以持久化到区块数据之外,供合约读写。除了对世界状态的读写,本文中的命令模式封装方法也适用于通过预言机对其他外部状态的读写封装。

签名——本文中的签名包含账户标识和数字签名两部分,其中数字签名是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法;账户标识用于从关联交易中提取签名者的数字证书,用以验证其数字签名。

签名交易——包含合约参与方签名的结构化数据,代表了签名者的授权行为。

合约实例——通过签名交易调用合约初始化方法建立的该合约逻辑的一个副本,合约实例拥有独立的外部状态域。

实施例一智能合约的重放举证方法

为了避免出现类似“双花”的问题,对于同一合约实例的关联交易,必须是串行处理的。——即在参与共识的分布式节点本地,按区块链输入共识达成的签名交易序列,逐条执行交易。对单条交易而言,为了达成分布式共识,其执行过程需在不同的分布式节点具备可重复性,即:在相同的外部输入环境下各节点各自执行相同的合约逻辑,应当获得相同的执行结果,即分布式执行过程中对外部状态/数据的读写调用及结果、调用顺序应完全一致。

利用这一特性,本实施例主要通过以下方法来重放正式执行过程,即:

通过记录和重放外部访问结果实现合约重放与正式执行时的外部输入相同——记录正式执行过程的完整的输入输出,在重放模式下执行外部读写时,从记录中提取对应的读写结果返回给合约逻辑。

其中,所述合约逻辑是在合约部署交易中定义的,通过将正式执行时关联交易中的合约部署交易导出并重放,保证正式执行与重放执行加载的是相同的合约逻辑。

并且,在合约实例的发起交易中,包含了用于校验合约容器执行文件的校验值,用以确保正式执行和重放执行时采用相同的合约容器。

在上述基础上,要求合约提供合约方法对应的人工可读的预期结果,并且对人工可读内容与实际执行效果的一致性负责。由于合约部署交易中包含了合约开发者签名,为合约开发者过错导致的两类非预期结果提供了举证依据。

鉴于上述描述,本实施例提供一种智能合约的重放举证方法,用于在线记录合约关联交易执行过程和离线重放举证合约安全问题,所述重放举证方法主要包括三个阶段,即运行前、运行并记录阶段以及记录重放阶段(即离线后);参见图1、图2和图3;该重放举证方法包括以下步骤;

S100:接收终端提交的签名交易,所述签名交易中包括数据项和由合约方法生成的人工可读内容;其中,在运行前阶段包括以下初始化步骤:

在合约容器为合约执行建立上下文时,采用命令模式的外部访问接口;采用命令模式的外部访问接口的优点是:这种接口方式代替了现有技术中的直接方法调用,在合约正式执行过程中调用该命令模式的外部访问接口时,可以方便地记录其操作顺序、操作内容和操作结果以及与签名交易的对应关系;

本实施例中,通过采用命令模式的外部访问接口,相比于现有技术对外部状态访问的直接调用,可以实现合约正式执行过程中对外部状态访问的完整记录。在合约开发调试阶段和正式运行阶段,通过比对各分布式执行过程形成的外部访问指令记录可以发现和帮助定位导致分布式执行结果不一致的问题。

参见图6,在签名交易中增加数据项,所述数据项用于描述交易之间的关联关系,增加数据项的优点是:依据所述数据项能够从在线系统导出关联交易及执行过程记录等离线数据,这些导出的离线数据可验证其关联性、顺序性和完整性,能够支持合约执行过程的重放;其中,所述关联交易包括用于账户注册合约部署、账户注册、应用合约部署和及包含相同合约实例标识的签名交易(包括合约实例发起交易、合约实例中间交易、合约实例结束交易等);具体为:初始账户部署“账户注册合约部署的签名交易”;审核者、合约开发者、合约实例参与者进行的“账户注册的签名交易”;合约开发者的“部署应用合约的签名交易”;合约实例参与者所执行的具有相同合约实例标识的签名交易,包括合约实例的发起交易、中间交易、结束交易。

参见图6,在签名交易中增加由合约方法负责生成的人工可读内容,用以描述签名交易的预期执行结果,从而使合约为每一个业务方法返回描述预期结果的可读内容;具体的,本实施例通过合约接口方法定义,强制所有合约方法必须返回人工可读的预期执行结果,在签名交易中增加由合约方法负责生成的人工可读内容,用以描述签名交易的预期执行结果,合约开发方对该内容与实际执行效果的一致性担责;在合约的每个公开方法提供的说明模式下,返回以同样的参数调用方法执行的预期结果描述。

运行并记录阶段- S200:通过共识节点将所述签名交易发送至合约容器,合约容器基于所述签名交易执行合约方法以生成执行结果及第一外部访问记录数据;

具体的,在本实施例中,不同的合约相关方将签名交易提交至共识节点后交由所述合约容器,以获得执行结果及执行过程中对外部状态的访问记录; 其中,所述不同的合约相关方将签名交易提交至共识节点是通过以下子步骤实现的;

(1):区块链组网建立时,在创世区块中使用初始账户签名部署包括“账户注册”合约在内的基础合约;

(2):审查者通过初始账户的签名交易调用“账户注册”合约注册账户;

(3):合约开发者、合约参与者通过审查者账户的签名交易调用“账户注册”合约注册账户,公开其账户标识及用于验证其签名的数字证书;

(4):合约开发者通过签名交易部署应用合约;该应用合约的内容包含合约标识,通过记录合约标识与部署交易的映射,可以依据合约标识在区块数据中找到该部署交易;对于每一个供签名交易调用的方法,在该方法的返回结果中均包含对调用该方法的预期结果人工可读描述;

(5):合约实例发起者指定合约标识,通过不包含签名的预执行交易调用合约的初始化方法获得预期执行结果描述,通过包含所述预期执行结果描述的签名交易调用所述合约的初始化方法建立合约实例,所述签名交易中指定了其他合约参与者并且包含了合约实例的唯一标识;

(6):与步骤(5)类似地,合约参与者阅读合约的具体业务方法预期执行结果之后,通过包含该具体业务方法预期执行结果描述的签名交易调用合约的具体业务方法,该签名交易中包含了合约实例的唯一标识,签名交易之间的顺序发生冲突时由区块链的输入共识算法决定,其中,这里的具体业务方法例如为:分账合约中的“提交销售记录”方法等等。

(7):合约发起者阅读合约的结束方法预期结果之后发起合约结束交易,该合约结束交易中包含了合约实例的唯一标识,合约参与者阅读合约的结束方法预期结果,通过签名交易确认合约实例结束。

上述过程中所有签名交易由于存在关联关系,必须串行顺序执行。每一条签名交易的执行过程中需要顺序调用所述命令模式的外部访问接口,并记录调用的操作顺序、操作内容和操作结果等,同时也记录这些过程记录与签名交易的对应关系。

在S200中,在线系统会生成三类数据,即合约容器在正式执行时生成三类数据,包括:a.区块(包含顺序交易)数据;b.外部状态数据;c.第一外部访问记录数据。

记录重放阶段-S300:当执行结果与预期执行结果不一致时,基于所述第一外部访问记录数据并利用所述数据项导出关联交易数据和第二外部访问记录数据,以及利用相同的合约容器在重放模式下加载和执行所述关联交易数据。

其中,S300包括以下子步骤;

(1):第一外部访问记录数据中写入的外部状态体现的实际执行结果与预期的执行结果描述不一致时,合约实例参与者利用数据项从在线系统的区块数据导出部分区块数据a中的关联交易数据d,根据这些关联交易数据从交易对应的第一外部访问记录数据c中导出第二外部访问记录数据e(即部分访问记录数据);所述实际执行结果即输出的外部状态数据b,可以从第一外部访问记录中c的外部状态写入的指令体现。

(2):合约参与者将导出的关联交易数据d和第二外部访问记录数据e存放到合约容器能够加载的位置,合约容器以重放模式启动,按顺序逐条加载和执行导出的关联交易数据d;

(3):在重放模式下执行交易时,外部访问命令的执行者由在线系统真实的外部访问执行环境切换为离线状态,读取所述第二外部访问记录数据e;通过这种重放方式将不再依赖在线数据及其访问接口,合约方法感知不到外部环境的切换,执行逻辑与正式执行时一致;而且重放过程中可以逐条比对合约发出的外部访问指令与记录中对应的外部指令,所述外部指令包括对指令顺序、参数和结果的比对。

通过本实施例,合约参与者通过重放关联交易执行过程,比照签名交易中对于预期结果的人工可读的内容,可以对合约开发者举证由于合约缺陷导致的非预期结果;

另外,合约开发者则可以在合约开发阶段,利用重放过程,自查可能导致分布式执行结果不一致的缺陷,或者导致非预期结果的缺陷。

下面将结合附图2-6继续详细说明本实施的具体实现过程。

1. 生成关联交易的过程

参见图2,图2为本发明实施例提供的生成关联交易的过程示意图;图2主要

描述了合约运行阶段的关联交易的生成过程(即先部署合约才能通过交易调用该合约的方法,包括实例初始化、业务方法、实例结束),尽管关联交易之间存在顺序性,但是在区块链数据中,关联交易与非关联交易混杂,即:两个前后衔接的关联交易之间,可能混杂了其他非关联交易。

具体的,生成所述关联交易的方法包括以下步骤:

初始账户部署基础合约,初始账户通过签名交易部署区块链的基础合约;其中,该基础合约中包括账户注册合约。

具体的,初始账户是区块链节点通过配置文件或者创世区块认可的根账户,初始账户包含了账户标识、账户实名/法人信息和用于验证其签名的数字证书,初始账户通过签名交易部署区块链的基础合约,基础合约中包括账户注册合约。

审核者账户注册,审核者账户通过初始账户提交签名交易并调用账户注册合约,以完成账户注册。

具体的,上述审核者是审核者账户的实名信息,负责实名信息核实的机构-审核者账户通过初始账户并提交签名交易调用账户注册合约,以完成账户注册,该账户注册的交易包括:账户标识、账户数字证书、审核机构法人信息、账户签名、初始账户签名。

合约开发者、合约实例参与者账户注册, 合约的开发者、合约实例的各参与者通过审核者账户提交签名交易并调用账户注册合约,以完成账户注册。

合约的开发者、合约实例的各参与者(包括合约实例的发起者)通过审核者账户提交签名交易调用账户注册合约,以完成账户注册;所述账户注册交易包括:账户标识、账户数字证书、账户实名/法人信息、账户签名、负责实名信息核实的审核机构签名。

合约开发者部署应用合约A,合约开发者通过签名交易部署应用合约A。

具体的,合约开发者通过签名交易部署应用合约A,该应用合约A的交易内容包含:合约A标识、合约代码、合约A开发者账户标识、合约A开发者签名。

合约实例发起者发起合约实例,合约实例发起者通过签名交易调用合约A的初始化方法发起合约实例。

具体的,合约实例发起者通过签名交易调用合约A的初始化方法发起合约实例,交易内容包含:合约A实例L标识、合约A实例L顺序编号(发起交易的顺序号为1)、合约A标识、合约A参与者1~N标识、合约A初始化方法参数、合约A规则描述、合约A实例L发起者标识、合约A实例L发起者签名。

合约实例参与者参与合约实例, 合约实例参与者通过签名交易调用合约A的业务方法。

具体的,在合约实例交易之后,合约实例参与者(包括发起者)可通过签名交易调用合约A的其他公开方法(即业务方法),其中间交易包含:合约A实例L交易M、 合约A实例L标识、合约A实例L顺序编号、合约A方法m名称、合约A方法m参数、合约A方法m预期结果、合约A实例L参与者J标识、合约A实例L参与者J签名。本实施例中的合约实例标识确定了交易之间的关联性,合约实例顺序编号确定了交易的顺序性。调用合约A的业务方法的预期结果是合约负责生成的人工可读内容,合约参与者阅读之后将其包含在交易内容中一并签名,表明接受其描述的预期结果。

合约实例参与者结束合约实例,合约实例参与者通过签名交易调用合约A的结束方法,以结束合约实例。

具体的,合约发起者通过签名结束交易提议合约实例结束,结束交易数据项与中间交易相似,但是交易内容中合约A方法为合约的结束方法,参数为结束方法需要的参数。其他参与者顺序通过签名结束交易,顺序衔接在发起者结束交易之后。当所有参与者都签名了结束交易并上链,合约实例结束。

在上述关联交易的执行过程中,交易之间按顺序逐条串行执行。在每条交易的执行过程内部,又存在顺序执行的对外部状态的读(getWorldState)、写(setWorldState)指令。

现有技术提供的名为ShimAPI的接口是以直接调用的形式执行外部状态读写,无法记录调用指令的顺序、参数和结果。而本发明实施例通过命令模式对直接调用接口进行封装,对外部状态的读写解耦了调用者与执行者的直接关联,实现了合约执行过程的离线重放,以进一步实现对合约开发者的举证。当合约容器工作在正式执行模式下,命令接收者RecordAPI调用带有记录功能的执行者,对调用指令的顺序、参数和结果进行完整记录;当合约容器工作在重放模式下,命令接收者PlayAPI调用带有重放功能的执行者,加载正式执行的指令记录,重放关联交易执行过程。

2. 命令模式的外部访问接口

图4为本发明实施例提供的命令模式实现的类关系示意图;参见图4,图4描述了以命令模式实现的类关系示意图,所有外部访问指令的执行者均实现BaseCommand接口,该接口要求执行者实现以下接口方法:

(1)执行命令(execute)——负责执行收到的指令;

(2)序列化(serialize)——负责将指令序列化,用于指令从在线系统持久化和导出;

(3)反序列化(deSerialize)——负责将指令反序列化,用于将导出的指令加载到重放模式的合约容器;

(4)显示指令内容(display)——用于显示指令内容,以便与预期结果内容对比,判断是否产生了非预期执行结果。

在正式执行模式下,两个命令执行类RecordGetState和RecordSetState分别用于代替ShimAPI的直接调用getWorldState和setWorldState,以执行对外部状态的读写,命令接收者RecordAPI提供了pushCommand方法将命令按顺序存放;

在重放模式下,另两个命令执行类PlayGetState和PlaySetState分别用于代替ShimAPI的直接调用,命令接收者PlayAPI提供了shiftCommand方法用于将记录的外部调用指令序列按顺序提供给合约执行逻辑,供比对和重放外部调用指令的参数、顺序和结果。重放模式下不需要ShimAPI的外部访问接口及其需要的在线数据。

参见图3,图3为本发明实施例提供的合约容器执行签名交易的流程示意图;具体的,执行所述签名交易主要包括以下步骤:

合约容器接收待执行的签名交易;

通过合约实例顺序号判断所述签名交易是否属于发起交易,若“是”,则根据所述签名交易调用的合约标识新建合约实例;若否,则根据所述签名交易调用的合约标识加载对应的合约实例;

具体的,新建合约实例包括以下子步骤;

根据所述待执行的签名交易调用的合约标识找到部署该合约的签名交易;

根据合约的签名交易验证该合约开发者的签名并动态加载合约代码;

根据所述合约代码新建所述合约实例;

根据合约容器的工作模式判断目前容器运行在正式执行模式下还是运行在离线重放模式下;若运行在正式执行模式下,则以命令接收者RecordAPI建立合约执行上下文;若运行在重放模式下,则以命令接收者PlayAPI建立合约执行上下文;

根据签名交易中对合约方法的指定,容器将所述合约执行上下文传递给合约方法;

具体的,根据签名交易中对合约方法的指定,容器将准备就绪的合约执行上下文传递给合约方法;其中,所述合约执行上下文包括命令接收者、合约方法参数值的待处理交易。

合约容器通过脚本引擎调用合约方法,合约方法依据传入的合约执行上下文,通过该上下文中的命令接收者发出对外部状态的读写指令;

命令接收者根据所述读写指令的类型,调用对应的命令执行者执行该读写指令,具体的,在正式执行模式下,调用包含记录功能的执行者;在重放模式下,调用包含重放功能的执行者。

若存在下一条外部调用,合约方法继续执行“命令接收者根据所述读写指令的类型,调用对应的命令执行者执行该读写指令”步骤直至合约方法结束。

3.关联交易的数据项及数据序列化的过程。

图5为本发明实施例提供的关联交易数据项关系示意图;图5展示了关联交易通过数据项,以确定相互之间的关联性、顺序性和完整性。

需要说明的是,图5中的“签名”是指包含账户标识和对交易内容的数字签名;标识是指全网唯一的标识、通过在标识和签名交易之间建立映射,从标识可以找到对应的签名交易。图5中的“程序文件校验值”是用于校验包含合约容器的可执行程序文件载体,确保在正式执行时和重放执行时使用的是同样的合约容器,校验值可对程序文件采用常用的MD5,SHA1,SHA256算法获得。

本实施例中,区块链组网在通过创世块初始化时,通过配置文件共同接受一个初始账户,该初始账户是合约的部署者,由它发起部署该合约的交易;其中,初始账户包括账户标识、实名信息及账户的数字证书。

参见图5,所述增加数据项包括以下步骤:

初始账户通过签名交易部署“账户注册合约”,其中的交易内容包含了“账户注册合约标识”和“合约代码”;

初始账户通过签名交易协助审核者调用账户注册合约注册账户,通过该交易中“账户注册合约标识”获取“账户注册合约”的部署交易,从而能够获得合约代码,验证部署者的签名。

审核者通过签名交易协助合约开发者、合约参与者调用账户注册合约注册账户,通过该交易中“账户注册合约标识”获取“账户注册合约”的部署交易,从而能够获得并加载执行合约代码,并验证部署者的签名。

C40:合约开发者通过签名交易部署应用合约A,通过交易内容中的“应用合约A开发者签名”中包含的合约A开发者标识,可以获取合约A开发者的注册账户交易,进而获得其数字证书,验证其对部署合约的签名;

合约A实例L交易1是该实例的发起交易,通过合约发起者的签名中包含的账户标识可以找到合约发起者的注册账户交易,进而获得其数字证书,验证其对发起合约实例交易的签名;通过交易中包含的合约标识,可以找到“合约A”的部署交易,从而能够获得并加载执行合约代码,并验证合约开发者的签名;

类似地,合约A实例L交易M作为该实例的后续交易,可以完成上述验证签名和加载执行合约代码,并且合约A实例L标识确立与上述发起交易的关联性、通过合约A实例L顺序编号确立与前向中间交易的顺序性,通过参与者签名确立单条交易的完整性和证据的可追溯性;

类似地,由合约A实例L发起的结束交易,同样可以确立交易的关联性、顺序性,通过调用合约的结束方法,作为整个合约实例的结束标志,确立整个合约实例的完整性;进一步的,通过所有合约参与者签名的结束交易,确立所有合约参与者对合约实例证据完整性的认可。

一般情况下,数据在网络传输或者磁盘持久化存储之前需要经过序列化处理,数据经过序列化之后,可以用于网络传输,解析和储存读取。

本实施例可采用Protocol Buffer序列化组件对数据进行序列化,使用其数据描述语言定义签名交易包含的数据项,即可实现对符合定义的数据结构的创建、修改、序列化和反序列化,包括序列化到磁盘成为离线存储数据,以及从磁盘加载反序列化以成为程序可以访问的数据对象。

本实施例在交易内容中增加数据项,为合约实例的完整生命周期的关联交易建立了索引指向,从而能够将其从混杂的无关交易中导出可独立验证的离线证据。

4. 合约方法接口定义

图6为本发明实施例提供的合约方法接口定义的示意图;该图展示了要求合约类实现的抽象接口,包括3个强制合约类实现的接口方法,分别如下:

(1)onInit——合约实例初始化方法,该方法接受合约上下文ctx的传入以及初始化参数,上下文中包含了用于外部访问的执行者和当前处理的签名交易;

(2)onAction——合约业务方法,该方法接受业务行为名称及其需要传入的参数;

(3)onEnd——合约实例结束方法,该方法接受结束参数。

上述3个接口方法均要求返回ActionResult形式的结果,该结果包含以下三方面的内容:

code——结果代码,方法执行正常返回零,异常则非零;

error——方法执行异常时返回的异常说明;

expected——方法正常执行时预期的结果描述;

在图6中,同时也列举了签名交易中包含的主要信息,分别如下:

tid——交易唯一标识;

cid——合约唯一标识;

type——交易类型,区分是用于部署合约还是调用合约的交易;其中,调用合约的交易包括:合约实例初始化、合约实例结束和合约实例动作;

action——合约实例动作名;

args——方法参数;

expected——合约方法预期的执行结果;

signature——交易签名。

本实施例通过合约方法接口定义要求合约提供的合约方法对应的人工可读的预期结果,并且对人工可读内容与实际执行效果的一致性负责,为合约开发者过错导致的两类非预期结果提供了举证依据,这里的两类非预期结果为:1.合约代码存在漏洞,攻击者利用漏洞使合约按非开发者预期的方式执行,导致的一种非预期结果;2.合约代码对于合约参与者缺乏可读性,合约的实际执行逻辑与参与者理解的规则存在不一致,导致另一种非预期结果结果。

实施例二智能合约的重放举证系统

图7为本发明的一种智能合约的重放举证系统,该重放举证系统包括接收模块、执行模块和导出模块;其中,所述执行模块包括合约容器;

所述接收模块在线接收终端提交的签名交易,所述签名交易中包括数据项和由合约方法生成的人工可读内容;其中,所述数据项用于描述交易之间的关联关系,所述人工可读内容用以描述所述合约方法的预期执行结果;

所述接收模块用于通过共识节点将所述签名交易发送至执行模块,执行模块调用所述合约容器,合约容器基于所述签名交易执行合约方法以获得执行结果及第一外部访问记录数据;

当执行结果与预期执行结果不一致时,所述导出模块基于所述第一外部访问记录数据并利用所述数据项导出关联交易数据及第二外部访问记录数据;

所述接收模块离线读取所述关联交易数据并发送至所述执行模块,所述执行模块调用相同的合约容器在重放模式下加载和执行所述关联交易数据。

上述各个模块的具体实施方式与实施例一的各个方法步骤的具体实施方式一致,在此不再赘述。

实施例三电子设备

图8为本发明的一种电子设备的一个实施例的结构示意图,参见图8,在本实施例中,提供一种电子设备,包括但不限于智能手机、固定电话、平板电脑、笔记本电脑、穿戴式设备等电子设备,所述电子设备包括:处理器和存储器,所述存储器存储有计算机可读指令,所述计算机可读指令在被所述处理器执行时实现上述本发明的识别保险欺诈的方法。

实施例四计算机可读存储介质

在本实施例中,提供一种计算机可读存储介质,可以为ROM(例如只读存储器、FLASH存储器、转移装置等)、光学存储介质(例如,CD-ROM、DVD-ROM、纸卡等)、磁存储介质(例如,磁带、磁盘驱动器等)或其他类型的程序存储器;所述计算机可读存储介质上存储有计算机程序,所述计算机程序在被处理器或计算机运行时执行上述本发明的识别保险欺诈的方法。

综上所述,本发明具有以下优点:

本发明的命令模式的外部访问与现有技术对外部状态访问的直接调用相比,在重放模式下,采用命令模式的外部访问接口在执行外部访问时,外部访问命令的执行者由在线系统真实的外部访问切换到从外部访问记录数据读取,将不再依赖在线数据及其真实外部访问的执行环境,仅用少量离线数据就可以实现正式执行过程的重放;通过比对人工可读的预期效果与实际的外部访问写入指令(即实际执行效果),可以举证由于合约缺陷导致的非预期结果,从而对合约开发者追责。

另外,由于在合约实例的结束交易中包含合约参与各方的签名认可,在合约本身没有缺陷的前提下,离线数据与重放过程也可以用于对合约参与方行为的举证。

本领域普通技术人员可以意识到,本发明中的命令模式封装方法,既适用于对区块链世界状态的读写访问封装,也适用于通过预言机对其他外部状态的读写访问封装。

本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号