技术领域
[0001] 本
发明属于
区块链智能合约技术领域,具体涉及一种基于预言机的智能合约安全检测方法。
背景技术
[0002] 智能合约的概念几乎与互联网同时出现。1995年
密码学家尼克萨博定义智能合约是执行合约条款的可计算交易协议,但早期由于没有适合运行智能合约的平台,智能合约技术并没有得到重视和发展,直到化名为中本聪的学者提出了始于
比特币的数字资产交易平台,这种平台具有去中心化、不可篡改的特性使得智能合约有了用武之地。随着智能合约的发展,智能合约的定义清晰起来,一般而言,智能合约是一种不需要借助任何中介、可以进行自我验证、自动执行合约条款的计算机交易协议。智能合约是一种事件驱动程序,基于设定条件的触发自动执行事件,智能合约提高了合约执行的效率,一旦部署就不可篡改,具有确定性,进而保证了区块链的
稳定性。
[0003] 随着区块链技术的发展,智能合约技术也得到了发展,但是安全问题一直是限制其发展的
瓶颈。智能合约的依赖复杂的时间和次序,智能合约本身的漏洞由代码的不确定性和不一致性引起,进而导致不确定的智能合约执行结果,最终导致不确定的法律责任。现有的检测手段包括形式化验证和模糊测试。其中模糊测试的测试
用例生成具有随机性,只能涵盖有限的系统行为,路径
覆盖率达不到要求,基本上找不出所有潜在错误。形式化验证方法虽然能够完全覆盖代码的运行期行为,但也只能确保智能合约在一定范围内的绝对正确。为了确保智能合约的安全,近年来不少领域开始研究预言机(Oracle)。智能合约的执行条件触发是否满足需要借助预言机,即确定的智能合约对不确定的外界作出反应,通过预言机进行签名并引入关于外界的状态信息,从而实现智能合约不可篡改、服务稳定、可审计等的特点,预言机还具有激励机制以保证智能合约运行的动
力。
[0004] 预言机是区块链和外界的
接口,是区块链技术的一个发展方向。对智能合约而言,预言机相当于智能合约的输入参数,输入参数对智能合约的输出结果有直接的影响。预言机与智能合约相互配合,组合成一种可信任的实体,通过签名引入关于区块链外界的信息,众所周知,区块链外界信息的提供者最好不是智能合约的编写者,而是没有利益关系的第三方,从而允许智能合约对外界做出反应。智能合约预言机具有的功能包括:调整智能合约的履行义务;作为一种传达见解或支持解决私人争议的私人仲裁系统:在智能合约中引入仲裁机制,设定信息提供的第三方为仲裁机构(或从互联网上召集陪审团),第三方可以通过签名的方式介入,阻止有
风险的智能合约执行。
[0005] 智能合约预言机有单一模型和多重模型两种模型。虽然对大多数用户来说单一可信任的预言机已经可以满足要求,但高价值的资产处理需要更高的可信任度。多重预言机又称预言机网络,智能合约代码的执行分布在多个独立的预言机中,提供了更好的安全保障,但模型更复杂,成本更高。
[0006] 纠删码是一种数据保护方法,能够以更小的数据
冗余度获得更高的数据可靠性。使用较多的纠删码技术是线性纠删码技术。线性纠删码将k份原始数据增加为m份校验数据,数据和校验数据共同形成n份编码数据,并通过n份编码数据中的任意大于等于k份的编码数据还原出原始数据,若有任意小于等于m份的数据失效,仍然能通过剩余的数据还原出原始数据。基于纠删码的区块文件存储模型中的
节点在通过纠删码技术将其保存的区块文件分块编码成多个编码块时,既要使每个节点尽可能少地保留编码块,又要使全网拥有完整的编码块信息。
[0007] 将预言机应用于智能合约的安全检测受到越来越广泛的重视。现有的智能合约预言机发展还不成熟,如何在区块链分布式网络中使预言机能够高效并且准确地检测智能合约是当下研究的重点。
发明内容
[0008] 本发明基于上述背景和
现有技术所存在的问题,拟设计一种基于预言机的智能合约安全检测方法,其能够高效检测智能合约,使智能合约的执行过程更加安全。本发明还有一个目的是通过改进纠删码编码方法,提高智能合约预言机的执行效率,以便降低预言机使用成本。
[0009] 为了实现本发明的这些目的和其它优点,提供了一种基于预言机的智能合约安全检测方法:
[0010] (1)全网N个节点通过去中心化的多重预言机安全检测系统准备对智能合约进行安全检测和
修改;
[0011] (2)区块链上的共识节点将完整的智能合约通过纠删码技术编码成多个编码块。每个节点仅保留部分编码块,全网节点拥有完整的编码块信息,从而使得全网节点尽可能减少存储空间占用,同时保证不丢失原始智能合约数据;
[0012] (3)从多个见证人节点中按照审查选举机制随机选择成员作为审查节点,这些审查节点随机分配预言机接口参数;
[0013] (4)将步骤(2)中编码的执行编码块相应分布在若干独立的预言机中,设计(t,a)智能合约检测
门限,即代码的执行分布在若干独立的预言机中,达到一致条件的智能合约才能执行。
[0014] 优选的是,所述步骤(1)中,去中心化的多重预言机安全检测系统包括:
[0015] 1.1设置激励机制以鼓励全网节点积极参与智能合约代码检测和修改;
[0016] 1.2公平化审查选举机制,即平均每个节点的权重,防止某些节点的权重过高,参照激励机制中的记录结果,选举对代码安全检测贡献最大的节点作为见证人节点,选举过程必须经过投票验证,确保参与选举的见证人节点的身份;
[0017] 1.3在步骤1.1中设置预交押金机制,为了鼓励节点的接入和鼓励节点积极进行智能合约检测和修改,同时为了确保节点进行诚实的行为;
[0018] 1.4基于预言机的安全检测系统中成立与激励机制对应的惩罚机制,确保参与活动的节点考虑自身利益而进行诚实行为。
[0019] 进一步地,所述激励机制包括选:前H次进行智能合约检测时,将智能合约编码块均匀分配到各个节点,并分配预言机进行智能合约检测和修改,对参选的节点按照贡献量依次进行奖励,奖励方法按照贡献量的大小计算;达到一定稳定性之后,即超过R个节点对智能合约检测和修改贡献率为M,对这R个节点按照贡献量进行排序,排序方法和过程考虑计算成本和参与
费用。
[0020] 进一步地,所述押金机制包括:全网节点在参与前H次检测时,预交一部分押金,押金数量为由于可能的不诚实行为给全网带来的平均损失,前H次检测完成后退回落选节点的全部押金,对不诚实的节点扣除部分押金,即赔偿造成的损失;选举预选节点和审查节点完成后,退回预选节点的全部押金,完成智能合约检测后退回部分审查节点的全部押金;其中,保留有继续参与智能合约检测资格的审查节点的押金,每次重新选举的节点需要提交押金,即保证参与选举和智能合约检测的节点在区块链上预存了押金。
[0021] 进一步地,所述惩罚机制包括,在选举或智能合约检测的过程中,剔除没有贡献甚至不诚实的节点,从预选节点或普通节点中再次选举审查节点和预选节点,并对不诚实的节点进行惩罚,扣除不诚实的节点押金pi。
[0022] 本发明的目的还可以进一步由改进纠删码技术编码智能合约,将智能合约分成多个编码块,进而便于区块链网络中多重预言机检测的方法来实现,其对应所述步骤(2),该方法包括:
[0023] 2.1节点通过纠删码技术将其保存的智能合约分块编码成多个编码块;基于纠删码的区块智能合约存储模型中的节点通过纠删码技术将其保存的智能合约分块编码成多个数据块时,每个节点尽可能少地保留编码块,全网拥有完整的编码块信息,这样使得整个智能合约都能够有机会充分被网络中分布的多重预言机检测;
[0024] 2.2智能合约编码完成后,所有审查节点根据最近一次接收到的编码控制信息对智能合约进行纠删码编码存储。即设定纠删码容错率、原始智能合约切分的数据块数量、组织数,并计算在设定完成的情况下,生成的校验块和编码块数量;
[0025] 2.3生成编码块的
摘要,将相关摘要信息记录后,进行签名,计算此时每个节点保存的编码块的数量;此时单节点存储编码块占用的存储空间随网络中组织数的增加及纠删码容错率的降低而降低。在组织内仅有单节点的情况下,只有纠删码容错率影响其全网存储编码块占用的存储空间。
[0026] 2.4节点
访问记录了该智能合约编码块的编码块索引
数据库,同时向审查节点群(陪审团;由见证人选举出来的审查节点组成的陪审团)发起区块编码
请求,回溯查询或收集智能合约所在的原始数据库。
[0027] 2.5接收来自其他节点发送的账本快照,节点间通过账本快照进行智能合约对比,最终使得全网所有节点在时间T(较短)内达到账本一致状态。账本达到一致后,即区块同步成功,智能合约达到一致,节点根据智能合约编码存储方案对需要编码分块存储的合约进行纠删码编码,编码后的智能合约分配相应预言机进行检测。
[0028] 优选的是,所述步骤(3)的审查选举机制包括:全网N个节点(N≥n)验证链外数据并将数据上链,当超过h(0.5N
[0029] 优选的是,所述步骤(4)中,达到或超过t的一致性投票通过的智能合约编码块的数量,预言机检测通过,整个智能合约被证明安全,或对发现错误的智能合约代码进行修改使智能合约整体达到t一致性投票数量,其中t是智能合约可以安全执行必须满足的门限值(0.5n
[0030] 进一步地,(t,a)智能合约检测门限的检测条件包括:a个预言机(审查节点)的网络中需要至少t个预言机达成一致;真正参与一致性检测的审查节点的身份在其他节点处是保密的;参与一致性安全检测的t个审查节点从全网所有节点选出。
[0031] 本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。本发明至少包括以下有益效果:
[0032] 1.采用多重预言机对智能合约进行安全检测,并且引入纠删码技术将智能合约分为多个编码块,多个预言机对应将智能合约编码块代码进行检查,确保了智能合约的安全;
[0033] 2.同时,引入纠删码技术减少多重预言机对智能合约检测过程的内存存储,将提高智能合约安全检测的效率;
[0034] 3.在执行代码选择的过程中(多重预言机),设计的见证人机制、激励机制和惩罚机制,确保参与选举或智能合约检测和修改的相关节点进行诚实的行为;
[0035] 4.引入(t,a)门限检测规则,在有一定容错率的情况下,准确并有效进行智能合约的安全检测和执行;
[0036] 5.采用预言机连接智能合约对检测出错误的智能合约部分代码进行修改,进一步确保了整个智能合约代码的安全。
附图说明
[0037] 图1为去中心化的多重预言机安全检测系统实现
流程图;
[0038] 图2为采用纠删码技术将智能合约编码成编码块的原理图;
[0039] 图3为预言机执行智能合约安全检测的过程图;
[0040] 图4为(t,a)智能合约安全检测门限设置原理流程图。
具体实施方式
[0041] 为了清晰地阐述本发明,使本发明
实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照
说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。
[0042] 1.图1示出了根据本发明的一种实现形式,示出了本发明的去中心化的多重预言机安全检测系统,其实现过程包括:
[0043] 1.1设置激励机制以鼓励全网节点积极参与智能合约代码检测;
[0044] 1.2公平化见证人选举机制,即平均每个节点的权重,防止某些节点的权重过高,参照激励机制中的记录结果,选举对代码安全检测贡献最大的节点作为见证人节点,一共选举2a个见证人节点,选举过程必须经过投票验证,确保参与选举的见证人节点的身份;
[0045] 1.3在步骤1.1中设置押金机制,为了鼓励节点的接入和鼓励节点积极进行智能合约检测,同时为了确保节点进行诚实的行为;
[0046] 1.4基于预言机的安全检测系统中成立与激励机制对应的惩罚机制,确保参与活动的节点考虑自身利益而进行诚实的活动。
[0047] 其中,所述激励机制包括选:前H次进行智能合约检测时,将智能合约编码块均匀分配到各个节点,并分配预言机进行智能合约检测和修改,对参选的节点按照贡献量依次进行奖励,奖励方法按照贡献量的大小计算;达到一定稳定性之后,即超过R(例如设置R>0.5N)个节点对智能合约检测贡献率为M(例如设置M>0.6),对这R个节点按照贡献量进行排序,排序方法和过程考虑计算成本和参与费用。
[0048] 所述押金机制包括:全网节点在参与前H次检测时,预交一部分押金,押金数量为由于可能的不诚实行为给全网带来的平均损失p,前H次检测完成后退回落选节点的全部押金,对不诚实的节点扣除部分押金pi,即赔偿造成的损失;选举a个预选节点和a个审查节点完成后,退回a个预选节点的全部押金;完成智能合约检测后退回a’个审查节点的全部押金(a’≤a),其中,保留有继续参与智能合约检测资格的审查节点的押金,每次重新参与选举的节点需要提交押金,即保证参与选举或智能合约检测的节点在区块链上预存了押金p。
[0049] 所述惩罚机制包括,在选举或智能合约检测的过程中,剔除没有贡献甚至不诚实的节点,从预选节点或普通节点中再次选举a1个审查节点和a1个预选节点(a1≤a,a1=a-a’,即a1为每轮进行检测剔除没有贡献或不诚实的节点后的空缺),并对不诚实的节点进行惩罚,扣除不诚实的节点押金pi。
[0050] 2.本发明由改进纠删码技术编码智能合约,并将智能合约分成多个编码块,进而便于区块链网络中多重预言机检测的方法来实现提高智能合约检测的效率。采用这种方案具有降低成本的有利之处。并且,这种方式只是一种较佳实例的说明,但并不局限于此。利用纠删码进行智能合约编码的步骤如下:
[0051] 2.1节点通过纠删码技术将其保存的智能合约分块编码成多个编码块;基于纠删码的区块智能合约存储模型中的节点通过纠删码技术将其保存的智能合约分块编码成多个数据块时,每个节点尽可能少地保留编码块,全网拥有完整的编码块信息,这样使得整个智能合约都能够有机会充分被网络中分布的多重预言机检测;
[0052] 2.2智能合约编码完成后,所有审查节点根据最近一次接收到的编码控制信息对智能合约进行纠删码编码存储。设定纠删码容错率为b、原始智能合约切分为k个数据块、预言机数量为a个情况下,生成 个校验块,共s=c+k个编码块;
[0053] 2.3生成编码块的摘要,将相关摘要信息记录后,进行签名,此时每个节点保存的编码块的数量为n, 此时单节点存储编码块占用的存储空间随网络中组织数的增加及纠删码容错率的降低而降低。在组织内仅有单节点的情况下,只有纠删码容错率影响其全网存储编码块占用的存储空间。
[0054] 2.4节点访问记录了该智能合约编码块的编码块索引数据库,同时向审查节点群(陪审团;由见证人选举出来的审查节点组成的陪审团)发起区块编码请求,回溯查询或收集智能合约所在的原始数据库。
[0055] 2.5接收来自其他节点发送的账本快照,节点间通过快照进行账本进行智能合约对比,最终使得全网所有节点在时间T(较短)内达到账本一致状态。账本达到一致后,即区块同步成功,智能合约达到一致,节点根据智能合约编码存储方案对需要编码分块存储的合约进行纠删码编码,编码后的智能合约分配相应预言机进行检测。
[0056] 具体实施例1:
[0057] 3.预言机执行智能合约安全检测的过程图如图3所示。上述方案中的一种基于预言机的智能合约安全检测方法的一种实现方式为:审查选举机制包括:全网N个节点(N≥n)验证链外数据并将数据上链,当超过h(0.5N
[0058] 具体实施例2:
[0059] 4.(t,a)智能合约安全检测门限设置原理流程图如图4所示。达到或超过t的一致性投票通过的智能合约编码块的数量,预言机检测通过,整个智能合约被证明安全,或对发现错误的智能合约代码进行修改使智能合约整体达到t一致性投票数量,其中t是智能合约可以安全执行必须满足的门限值(0.5n
[0060] 例如设置a个预言机的数据作为一个可信临界值,临界值数量的智能预言机必须就结果达成一致,审查节点使用 的预言机模型,只有当a个预言机中不少于 个预言机一致时,合约才能执行,其中设置 为(t,a)智能合约检测门限。
[0061] 其中,(t,a)智能合约检测门限的检测条件包括:a个预言机(审查节点)的网络中需要至少t个预言机达成一致;真正参与一致性检测的审查节点的身份在其他节点处是保密的;参与一致性安全检测的t个审查节点从全网所有节点选出。这里说明的模块数量和处理规模是用来简化本发明的说明的。对本发明的(t,a)智能合约检测门限的应用、修改和变化对本领域的技术人员来说是显而易见的。
[0062] 如上所述,根据本发明,由于增加了预言机,并设置了(t,a)智能合约检测门限,因此具有提高智能合约代码和逻辑正确的效果,进而保证智能合约的安全执行。
[0063] 上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。