一种区块链中智能合约的监控方法及装置与流程

文档序号:18741463发布日期:2019-09-21 01:49阅读:624来源:国知局
一种区块链中智能合约的监控方法及装置与流程

本发明涉及科技金融(Fintech)领域,尤其涉及一种区块链中智能合约的监控方法及装置。



背景技术:

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Finteh)转变,区块链(Block chain)技术也不例外,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。

智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议,其执行过程以交易的形式在区块链上共识、确认。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

目前,区块链系统的安全性受到越来越多人的关注,在智能合约的漏洞检测上,目前还没有比较好的方案,以保证区块链系统的安全性。



技术实现要素:

本申请提供一种区块链中智能合约的监控方法及装置,用以提高智能合约的安全性。

本发明实施例提供的一种区块链中智能合约的监控方法,包括:

获取交易请求;

根据所述交易请求,调用对应的智能合约;

在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;

若是,则根据所述监控规则,输出所述调用的操作码的异常结果;所述异常结果包括针对所述操作码的阻断操作。

一种可能的实现方式,所述需关注的操作码为时间戳操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

若确定所述交易请求的输入参数中的交易值大于预设常数值,则确定所述时间戳操作码为满足时间戳异常的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

若在所述智能合约执行所述交易请求的过程中,所述调用操作码为非首次的调用操作码,所述调用操作码的调用节点为所述交易的首次调用的操作码的执行节点,且所述调用操作码的输入参数中的交易值大于预设常数值,则确定所述调用操作码满足函数可重入的错误条件。

一种可能的实现方式,所述需关注的操作码为委托调用操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

判断所述智能合约的操作环境是否为所述委托调用操作码的操作环境;若是,则确定所述委托调用操作码为满足危险调用的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

输入的交易值大于第一预设阈值,交易上限大于第二预设阈值,且所述调用操作码返回的结果为费用gas不足;则确定所述调用操作码满足费用不足的错误条件。

一种可能的实现方式,所述在所述智能合约执行所述交易请求之前,还包括:

根据所述交易请求,建立存储所述至少一个操作码的监控信息的数据结构;

将所述至少一个操作码的对应的至少一个监控规则,存储至所述数据结构中。

一种可能的实现方式,所述需关注的操作码为计算操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

若确定所述计算操作码的输出结果满足计算溢出的错误条件,则确定所述计算调用操作码为满足计算溢出的错误条件。

一种可能的实现方式,所述方法还包括:

若确定所述需关注的操作码的运行结果中,未出现满足监控规则的错误条件,则执行所述操作码的操作。

本发明实施例还提供一种区块链中智能合约的监控装置,包括:

用于根据所述交易请求,调用对应的智能合约;在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;若是,则根据所述监控规则,输出所述调用的操作码的异常结果;所述异常结果包括针对所述操作码的阻断操作。

一种可能的实现方式,所述需关注的操作码为时间戳操作码;所述处理单元,具体用于:

若确定所述交易请求的输入参数中的交易值大于预设常数值,则确定所述时间戳操作码为满足时间戳异常的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理单元,具体用于:

若在所述智能合约执行所述交易请求的过程中,所述调用操作码为非首次的调用操作码,且所述调用操作码的输入参数中的交易值大于预设常数值,则确定所述调用操作码满足函数可重入的错误条件。

一种可能的实现方式,所述需关注的操作码为委托调用操作码;所述处理单元,具体用于:

判断所述智能合约的操作环境是否为所述委托调用操作码的操作环境;若是,则确定所述委托调用操作码为满足危险调用的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理单元,具体用于:

输入的交易值大于第一预设阈值,交易上限大于第二预设阈值,且所述调用操作码返回的结果为费用gas不足,则确定所述调用操作码满足费用不足的错误条件。

一种可能的实现方式,所述需关注的操作码为计算操作码;所述处理单元,具体用于:若确定所述计算操作码的输出结果满足计算溢出的错误条件,则确定所述计算调用操作码为满足计算溢出的错误条件。

一种可能的实现方式,所述处理单元,还用于:

根据所述交易请求,建立存储所述至少一个操作码的监控信息的数据结构;将所述至少一个操作码的对应的至少一个监控规则,存储至所述数据结构中。

一种可能的实现方式,所述处理单元,还用于:

若确定所述需关注的操作码的运行结果中,未出现满足监控规则的错误条件,则执行所述调用的操作码的操作。

本发明实施例还提供一种电子设备,包括:

至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;

其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。

本发明实施例还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上所述的方法。

本发明实施例中,通过获取交易请求;根据所述交易请求,调用对应的智能合约;在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;若是,则根据所述监控规则,输出所述调用的操作码的异常结果;所述异常结果包括针对所述操作码的阻断操作。可以实时检查运行状态,及时终止危险交易,有效提高智能合约的安全性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种区块链中智能合约的监控方法的流程示意图;

图2为本发明实施例提供的一种智能合约的虚拟机架构示意图;

图3为本发明实施例提供的一种区块链中智能合约的监控方法的执行结果示意图;

图4为本发明实施例提供的一种区块链中智能合约的监控装置的结构示意图;

图5为本发明实施例提供的电子设备的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

为了便于理解,下面对本发明实施例中可能涉及的名词进行定义和解释。

区块链:是由一系列区块组成的一条链,每个块上除了记录本块的数据还会记录上一块的Hash(哈希)值,通过这种方式组成一条链。区块链的核心理念有两个,一个是密码学技术,另一个是去中心化思想,基于这两个理念做到区块链上的历史信息无法被篡改。一个区块由块头和块体组成,其中块头定义包括该区块高度h,上一个区块的Hash值prevHash等重要字段,而块体主要存储交易数据。

智能合约:现有技术的智能合约中,以以太坊为例,在触发智能合约时,智能合约的执行可以包括:智能合约方,为执行智能合约的相关参与者,通过智能合约方的外部账户发送消息,触发智能合约;智能合约资源集合,为智能合约执行涉及的参与者资源,比如各智能合约方账户、拥有的数字财产等;智能合约中的事务主要包含需要发送的数据;而智能合约中的事件则是对这些数据的描述信息。事务及事件信息被智能合约的执行节点接收后,智能合约资源集合中的资源状态会被更新,进而触发智能合约进行状态机判断。状态机,包括当前资源状态判断、下一步智能合约事务执行选择等;智能合约系统若确定事件中包含的触发条件满足时,从智能合约的自动状态机自动发出预设的数据资源,以及包括触发条件的事件;智能合约事务集合,为智能合约的下一步动作或行为集合,控制着智能合约的资产并对接收到的信息进行回应。

具体的,基于区块链的智能合约的执行可以包括:

步骤一、定期检查区块中的智能合约,逐条遍历每个智能合约内的状态机、事务以及触发条件;将条件满足的事务推送到待验证的队列中,等待共识;未满足触发条件的事务将继续存放在区块链上。

步骤二、进入最新轮验证的事务,会扩散到每一个验证节点,与普通区块链交易或事务一样,验证节点首先进行签名验证,确保事务的有效性;验证通过的事务会进入待共识集合,等大多数验证节点达成共识后,事务会成功执行并通知用户。各节点执行智能合约是相互独立的,当各节点执行智能合约完毕时,将彼此验证结果是否一致,验证通过后,将结果返回至用户。

步骤三、事务执行成功后,智能合约的状态机会判断所属智能合约的状态,当智能合约包括的所有事务都顺序执行完后,状态机会将智能合约的状态标记为完成,并从最新的区块中移除该智能合约;反之将标记为进行中,继续保存在最新的区块中等待下一轮处理,直到处理完毕;整个事务和状态的处理都由区块链底层内置的智能合约系统自动完成,全程透明、不可攥改。

智能合约中,存储了各智能合约方的账户信息,访问接口,以及访问各接口的方法。智能合约发布时,根据各方约定将访问接口分配给指定的合作方授权使用,各智能合约方通过访问接口可实现对智能合约内数据的存取。各智能合约方执行智能合约时需要通过数据访问接口轮询智能合约,并根据轮询结果来判断所需完成的任务,任务的执行结果通过智能合约的接口保存在智能合约当中。

共识:一种区块链各节点对某个交易的正确性达成一致的算法。

Solidity:一种智能合约高级语言,运行在以太坊虚拟机(EVM)之上。

以太坊是一个基于区块链技术的平台,在以太坊中,开发者可以开发自己的去中心化的应用。随着人们对区块链技术不断深入的探索和认识,以太坊平台已经成为世界第二大区块链公链网络,规模仅次于比特币平台。在以太坊上开发的程序叫做智能合约,开发者利用一种图灵完备的语言,比如Solidity来编写智能合约,完成自己想要实现的功能。近些年来,在以太坊平台日益发展的同时,针对智能合约和平台本身的攻击也越来越多,造成的财产损失十分巨大。比如2018年2月,一个新的公链代币平台美链上线,在4月某攻击者利用一个ERC-20智能合约中的溢出漏洞攻击了美链平台,成功将美链中巨量的代币转入其他的两个账户地址,最终导致美链平台在一夜之间损失64亿人民币,相当于美链全部的市值。近些年像这样的例子层出不穷,区块链系统的安全性受到越来越多人的关注,以太坊平台作为第一个区块链开发生态环境,其安全性受到社会各界人士的关注。

为了解决这些安全性的问题,目前针对智能合约的安全保障工具使用的方法主要分为两种:模糊测试技术和符号执行技术。模糊测试是一种相对成熟的安全测试方法,它介于完全的手工测试和完全的自动化测试之间。针对智能合约的模糊测试工具比如Echidna和ContractFuzzer可以通过模拟交易执行以发现智能合约在设计上存在的漏洞。符号执行技术使用符号值来表示程序的输入,并将程序的运算过程逐指令,逐语句地转换为数学表达式,在控制流图的基础上生成符号执行树,并为每一条路径建立一系列以输入为变量的符号表达式。目前有一些面向智能合约的符号执行工具,它们可以触发关键路径并检测安全漏洞。但是,上述工具往往会遗漏某些漏洞。例如,利用ContractFuzzer运行一份已知存在时间戳错误的智能合约,经过两个小时的测试,ContractFuzzer依然没有检测到该安全漏洞的存在。这说明只在智能合约的层次上关注安全问题是不全面的。

为了解决上述现有技术中的问题,本发明实施例提供了一种区块链中智能合约的监控方法,如图1所示,本发明实施例提供的区块链中智能合约的监控方法包括以下步骤:

步骤101:获取交易请求;

其中,一笔交易可以调用多个操作码;一笔交易也可以调用多个智能合约,在此不做限定。

步骤102:根据所述交易请求,调用对应的智能合约;

步骤103:在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;

步骤104:若是,则根据所述监控规则,输出所述调用的操作码的异常结果,并执行针对所述操作码的阻断操作。

本发明实施例,针对现有技术的不足,通过实时监测智能合约的操作码,为以太坊虚拟机执行智能合约提供实时保障防护,及时发现危险交易,及时阻断问题交易的执行,并提示用户该交易存在潜在危害,有效的提高了智能合约的安全性。

本发明实施例可以通过在EVM(Ethereum Virtual Machine,以太坊虚拟机)层面解决上述问题。本发明实施例所提供的区块链中智能合约的监控方法可以由以下功能模块组成,如图2所示,包括:监控规则模块、操作码监控模块、虚拟机执行模块。其中,监控规则模块中可以存储有需关注的操作码对应的错误条件;例如,根据监控规则确定需关注的操作码和危险交易的阻断条件。具体的,可以包括:基于每种危险交易的类型确定监控规则,筛选出与该类型相关的需关注的操作码,定义其需要满足的错误条件和阻断交易需进行的操作。

针对不同的危险操作,监控规则模块提供相关的错误条件去判定调用的操作符是否满足错误条件。如果条件满足,监控规则模块或虚拟机执行模块可以调用阻断机制,对智能合约的执行进行阻断,并回滚区块链系统的状态。

针对以上安全漏洞类型,本发明实施例提供相应的策略进行实时监控。本发明实施例根据在交易的执行过程中,导致交易失败的主要错误类型,确定监控规则。针对不同的漏洞类型,本发明实施例提供如下监控规则:

一种可能的实现方式,所述需关注的操作码为计算操作码;所述若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件,包括:

若确定所述计算操作码的输出结果满足计算溢出的错误条件,则确定所述计算调用操作码为满足计算溢出的错误条件。

在执行计算操作时,出现溢出操作导致财产损失,为溢出错误。例如,ADD、SUB、MUL、ADDMOD、MULMOD和EXP等。如果在执行上述操作码时,满足以下条错误条件中的任意一条,就证明发生了溢出错误:两个正数执行加法运算,运算结果为负数;

两个负数执行加法运算,运算结果为正数;一个正数减去一个负数,运算结果为负数;

一个负数减去一个正数,运算结果为正数;两个正数执行乘法运算,运算结果为负数;

两个负数执行乘法运算,运算结果为负数;一个正数执行指数运算,运算结果为负数。

一种可能的实现方式,所述需关注的操作码为时间戳操作码;若确定所述交易请求的输入参数中的交易值大于预设常数值,则确定所述时间戳操作码为满足时间戳异常的错误条件。此处的预设常数值可以为0,当然,还可以根据实际需要进行设定,在此不做限定。

时间戳错误:在采用当前时间生成某种随机数的应用中,因为矿工控制时间戳而导致随机数的数值重复或泄露。例如,与时间戳错误相关的需关注的操作码为TIMESTAMP,如果在一次交易执行的开端,调用call函数时传入的参数值大于零,或者call函数尝试向其他智能合约发送资源时,出现了时间戳TIMESTAMP操作码,就可能发生了时间戳错误。

一种可能的实现方式,若在所述智能合约执行所述交易请求的过程中,所述调用操作码为非首次的调用操作码,所述调用操作码的调用节点为所述交易的首次调用的操作码的执行节点,且所述调用操作码的输入参数中的交易值大于预设常数值,则确定所述调用操作码满足函数可重入的错误条件。此处的预设常数值可以为0,当然,还可以根据实际需要进行设定,在此不做限定。

具体的,在调用其他函数的操作完成之前,被调用智能合约可能会被多次执行,造成同一操作的反复执行,可能导致的费用损失。

例如,函数可重入错误关注的操作码为CALL。当一个所述交易的首次调用的操作码的执行节点(即交易对应的调用链的起源调用者),在调用链中又调用了自己本身,同时这次调用过程中传递的交易值不为预设常数值,并且这次调用过程设置了足够多的费用上限,那么我们认为函数可重入错误可能出现。此处的预设常数值可以为0,当然,还可以根据实际需要进行设定,在此不做限定。

一种可能的实现方式,所述需关注的操作码为非首次的调用操作码;若确定首次出现的调用操作码的输出未存在异常错误,且执行过程中的调用操作码的输出未异常错误,则确定所述调用操作码满足异常处理的错误条件。

具体的,当一个智能合约以不同的方式调用另一个智能合约时,Solidity没有一个一致的方法来处理异常,导致调用智能合约无法获取被调用智能合约的异常信息。异常处理错误关注的操作码也只有CALL。当一个调用链里面的首次调用的调用操作码的输出结果没有输出为异常,而调用链中的任意一次调用的调用操作码的输出结果为异常,则认为存在异常处理错误,可能的原因是一些异常结果并没有传递到根调用的调用操作码上,导致执行过程中出现错误。

一种可能的实现方式,若确定所述调用的操作码为委托调用操作码,则判断所述智能合约的操作环境是否为所述委托调用操作码的操作环境;若是,则确定所述委托调用操作码为满足危险调用的错误条件。

具体的,调用delegateCall操作符时,若调用过程是获取调用的智能合约在本地执行,则被调用的智能合约中的函数的部分参数将会传递至调用方,使得智能合约中的public函数暴露,攻击者可以通过该操作,使得智能合约的拥有者向攻击者的账户或其他危险账户中传递资源。例如,危险调用错误关注的操作码是DelegateCall。当一次DelegateCall调用的函数可以通过输入的参数值(比如msg.data)完全掌控原始的智能合约,那么一次危险调用错误就会出现。

一种可能的实现方式,若所述调用的操作码为调用操作码,且输入的交易值大于第一预设阈值,交易上限大于第二预设阈值,且所述调用操作码返回的结果为费用gas不足;则确定所述调用操作码满足费用不足的错误条件。

具体的,当发送者调用send函数给接收者传递资源时,会调用接收智能合约的回调函数,以太坊中规定这个过程最多可消耗预设资源额度如2300,如果接收智能合约的回调函数需要的调用的费用大于这个预设资源额度,就会发生费用不足错误,造成发送方额外的资源损失。

例如,费用不足错误关注的操作码为调用操作码Call。当一次调用操作码Call调用的时候传递的值大于或等于预设常数,例如不为0,并且设置的费用上限是预设资源额度,可以判定这次调用操作码Call是一次传递send操作。如果这次传递send操作返回的结果是ErrOutOfGas,则确定所述调用操作码满足费用不足的错误条件。

虚拟机执行模块,可以通过在虚拟机的源代码的适当位置通过插桩,插入监控规则和中断机制,以实时获取智能合约的操作码的执行信息,对交易的执行过程进行动态实时监测,捕捉危险操作并及时阻断交易。

本发明实施例中,虚拟机对智能合约进行解释执行的过程中,可以包括以下步骤:

步骤一、判断操作码是不是需关注的操作码;

其中,需关注的操作码可以为危险操作码或起始操作码。

步骤二、根据判断结果决定是否将当前调用的操作码插入操作码的数据结构;

步骤三、在每一个操作码执行之前,对该交易对应的操作码的存储结构进行分析;

具体的,可以包括若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件。

步骤四、在遍历所有的监控规则之后,如果发现危险操作,立即停止执行;否则,执行步骤五;

步骤五、正常执行当前操作码,并返回操作码的执行结果。

一种可能的实现方式,若发现可能的漏洞威胁,虚拟机会立即输出异常警告,并对区块状态进行复原,终止交易的继续执行。本发明实施例中的虚拟机就可以实时检查运行状态,及时终止危险交易。

一种可能的实现方式,所述方法还包括:

若确定所述需关注的操作码的运行结果中,未出现满足监控规则的错误条件,则执行所述操作码的操作。

本发明实施例提供一种区块链中智能合约的监测方法,通过在虚拟机层进行监测,可以在执行智能合约的过程中实施诊断出一些危险行为,并及时阻断交易执行,并发出警报,有效提高智能合约的安全性。

本发明实施例中的虚拟机可以有效地发掘智能合约中的漏洞,对传统漏洞检测工具无法甄别出来的漏洞,也可以进行阻断和报警。本发明实施例中的虚拟机可以弥补智能合约检测工具的不足,针对难以被智能合约测试工具发现的危险交易,也可以通过虚拟机及时捕捉并终止,如图3所示,经过测试,本发明实施例中的虚拟机可以及时发现智能合约测试工具检测不到的潜在威胁,并100%阻断危险交易的执行。

一种可能的实现方式,为进一步提高监控效率,在步骤202之前,还可以包括:

根据所述交易请求,建立存储所述至少一个操作码的监控信息的数据结构;

将所述至少一个操作码的对应的至少一个监控规则,存储至所述数据结构中。

操作码结构是一种用户定义的数据结构,操作码结构存储了执行过程中涉及到的需关注的操作码,记录与危险行为分析相关的需关注的操作码和运行时信息,具体的,可以通过对操作码的操作码序列进行存储,以进行进一步的错误条件分析。

操作码监控模块包括一个用于存储的数据结构,用于存储操作码。存储的数据结构的选择可以根据监控规则确定。如果监控规则关注操作码和它的操作数本身,可以采用一些线性结构对操作码进行存储。如果监控规则更关注操作码之间的关系,那么可以采用一些拓扑结构对操作码进行存储。新插入的操作码要根据监控规则,插入到数据结构的特定位置,以实现操作码结构。例如,数据结构为数据栈,根据操作码的执行顺序,存储操作码。

操作码结构的构建可以基于堆栈、队列、树等数据结构,实现方式的选择可以取决于监控规则的复杂性。例如,如果只考虑操作码之间的邻接关系,可以选择栈或队列;一种可能的实现方式,如果策略侧重于操作码之间更复杂的关系,则可以采用树结构。

在具体实施过程中,操作码结构的建立及操作可以包括三个部分:操作码结构的初始化、操作码的存储和操作码运行时的分析。

在每个调用过程中,首先对操作码结构进行初始化,本发明实施例以堆栈的数据结构为例进行说明,例如,为每笔交易建立一个新的操作码的栈结构。

操作码的存储过程包括:在执行每个操作码之前,将该操作码更新至操作码结构中。例如,将操作码压入所述栈结构中。

对所述操作码进行监控规则的分析,可以通过虚拟机执行模块,将监控规则和操作码结构通过插桩,插入到虚拟机的源码中,以通过所有监控规则对操作码结构进行分析,实现虚拟机执行智能合约的有效监测。例如,如果数据结构中的操作码的执行结果被认为是危险的,即满足监控规则中的任一错误条件,则所述操作码的执行过程将被中断。

在具体实施过程中,监控规则可以存储在虚拟机项目的目录下的一个新目录中,每种监控规则可以封装为一个返回值为布尔类型的函数,中断机制可以封装为一个抛出异常的操作。

一种可能的实现方式,对于操作码结构的执行过程,可以包括:

步骤一、若确定交易的初始调用的操作码为调用操作码CALL,则建立一个名为op_Stack的新栈并进行初始化,将第一个操作码压入栈中;

其中,一种可能的实现方式,初始化操作被插入到CALL操作码所在位置之后。

针对交易过程中的每个操作码,执行以下监控步骤:

步骤二、若确定当前调用的操作码为需关注的操作码,则将所述调用的操作码压入栈,遍历所有监控规则对当前操作码结构进行测试,判断其状态是否安全。

步骤三、如果确认未存在异常结果则确认当前操作码为安全操作码,执行当前的操作码,并开启执行下一操作码的监控;否则,执行步骤四;

步骤四、调用中断机制阻断交易执行,同时向用户提示该交易存在潜在危害。

通过虚拟机执行模块,在虚拟机的源代码的适当位置通过插桩,插入监控规则、中断机制和操作码结构,来获取实时的智能合约的操作码的执行信息,对交易的执行过程进行动态实时监测,捕捉危险操作并及时阻断交易,有效提高了监测效率。

本发明实施例提供的虚拟机,支持基于不同语言编写的虚拟机,适用于多种应用场景。区块链平台的开发者可以将监控规则嵌入到本发明实施例提供的虚拟机中;例如,以太坊使用者可以使用封装好的本发明实施例中的虚拟机进行交易,在发生异常情况时及时阻断交易,避免不必要的损失。

基于相同的发明构思,本发明实施例还提供了一种区块链中智能合约的监控装置,如图4所示,包括:

收发单元401,用于获取交易请求;

处理单元402,用于根据所述交易请求,调用对应的智能合约;在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;若是,则根据所述监控规则,输出所述调用的操作码的异常结果;所述异常结果包括针对所述操作码的阻断操作。

一种可能的实现方式,所述需关注的操作码为时间戳操作码;所述处理单元402,具体用于:

若确定所述交易请求的输入参数中的交易值大于预设常数值,则确定所述时间戳操作码为满足时间戳异常的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理单元402,具体用于:

若在所述智能合约执行所述交易请求的过程中,所述调用操作码为非首次的调用操作码,且所述调用操作码的输入参数中的交易值大于预设常数值,则确定所述调用操作码满足函数可重入的错误条件。

一种可能的实现方式,所述需关注的操作码为委托调用操作码;所述处理单元402,具体用于:

判断所述智能合约的操作环境是否为所述委托调用操作码的操作环境;若是,则确定所述委托调用操作码为满足危险调用的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理单元,具体用于:

输入的交易值大于第一预设阈值,交易上限大于第二预设阈值,且所述调用操作码返回的结果为费用gas不足,则确定所述调用操作码满足费用不足的错误条件。

一种可能的实现方式,所述处理单元402,还用于:

根据所述交易请求,建立存储所述至少一个操作码的监控信息的数据结构;将所述至少一个操作码的对应的至少一个监控规则,存储至所述数据结构中。

一种可能的实现方式,所述处理单元,还用于:

若确定所述需关注的操作码的运行结果中,未出现满足监控规则的错误条件,则执行所述调用的操作码的操作。

基于相同的原理,本发明还提供一种电子设备,如图5所示,包括:

包括处理器701、存储器702、收发机703、总线接口704,其中处理器701、存储器702与收发机703之间通过总线接口704连接;

所述处理器701,用于读取所述存储器702中的程序,执行下列方法:

根据所述交易请求,调用对应的智能合约;在所述智能合约执行所述交易请求的过程中,若确定调用的操作码为需关注的操作码,则判断所述需关注的操作码是否满足监控规则的错误条件;若是,则根据所述监控规则,输出所述调用的操作码的异常结果;所述异常结果包括针对所述操作码的阻断操作。

一种可能的实现方式,所述需关注的操作码为时间戳操作码;所述处理器701,具体用于:

若确定所述交易请求的输入参数中的交易值大于预设常数值,则确定所述时间戳操作码为满足时间戳异常的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理器701,具体用于:

若在所述智能合约执行所述交易请求的过程中,所述调用操作码为非首次的调用操作码,且所述调用操作码的输入参数中的交易值大于预设常数值,则确定所述调用操作码满足函数可重入的错误条件。

一种可能的实现方式,所述需关注的操作码为委托调用操作码;所述处理器701,具体用于:

判断所述智能合约的操作环境是否为所述委托调用操作码的操作环境;若是,则确定所述委托调用操作码为满足危险调用的错误条件。

一种可能的实现方式,所述需关注的操作码为调用操作码;所述处理器701,具体用于:

输入的交易值大于第一预设阈值,交易上限大于第二预设阈值,且所述调用操作码返回的结果为费用gas不足,则确定所述调用操作码满足费用不足的错误条件。

一种可能的实现方式,所述处理器701,还用于:

根据所述交易请求,建立存储所述至少一个操作码的监控信息的数据结构;将所述至少一个操作码的对应的至少一个监控规则,存储至所述数据结构中。

一种可能的实现方式,所述处理器701,还用于:

若确定所述需关注的操作码的运行结果中,未出现满足监控规则的错误条件,则执行所述调用的操作码的操作。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1