CN116975850B - 合约运行方法、装置、电子设备及存储介质 - Google Patents
合约运行方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116975850B CN116975850B CN202311242235.7A CN202311242235A CN116975850B CN 116975850 B CN116975850 B CN 116975850B CN 202311242235 A CN202311242235 A CN 202311242235A CN 116975850 B CN116975850 B CN 116975850B
- Authority
- CN
- China
- Prior art keywords
- contract
- container
- target
- running
- catalog
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 109
- 238000004088 simulation Methods 0.000 claims abstract description 68
- 230000008569 process Effects 0.000 claims abstract description 33
- 239000003999 initiator Substances 0.000 claims abstract description 17
- 230000006870 function Effects 0.000 claims description 39
- 230000004044 response Effects 0.000 claims description 18
- 238000001514 detection method Methods 0.000 claims description 14
- 238000007689 inspection Methods 0.000 claims description 3
- 230000000977 initiatory effect Effects 0.000 claims 1
- 230000000875 corresponding effect Effects 0.000 description 62
- 238000004891 communication Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000002093 peripheral effect Effects 0.000 description 10
- 241001522296 Erithacus rubecula Species 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 241001315286 Damon Species 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Accounting & Taxation (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请提供了一种合约运行方法、装置、电子设备及存储介质,方法包括:利用第一容器中运行的业务服务解析合约模拟调用请求得到请求参数,生成合约运行命令;由第二容器响应于合约运行命令,启动目标合约容器,目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录,且处于禁用网络功能的模式;在目标合约容器中运行目标智能合约得到合约运行结果,并将其存储至目标合约目录所指向的文件;由第一容器中的业务服务从目标合约目录所指向的文件中获取合约运行结果,并发送至合约模拟调用请求的发起方。通过采用上述方法,可以有效避免智能合约在模拟调用的过程中恶意嗅探服务资源,提升了智能合约的模拟调用过程中的安全性。
Description
技术领域
本申请涉及区块链技术领域,更具体地,涉及一种合约运行方法、装置、电子设备及存储介质。
背景技术
目前,区块链,如长安链和至信链均可提供在线合约模拟调试功能,但是在线执行合约模拟调试过程中,可能会存在部分合约(即智能合约)在执行模拟调试过程中恶意嗅探网上服务资源的情况,基于此,提供一种能够有效避免合约调试过程中规避合约恶意嗅探服务资源的合约调试方法是目前需要解决的技术问题。
发明内容
有鉴于此,本申请实施例提出了一种合约运行方法、装置、电子设备及存储介质,可以有效避免智能合约在模拟调用的过程中恶意嗅探服务资源,提升了智能合约的模拟调用过程中的安全性。
第一方面,本申请实施例提供了一种合约运行方法,应用于部署第一容器和第二容器的合约运行系统,所述第一容器用于运行业务服务,所述第二容器用于运行至少一个合约容器,所述合约容器处于禁用网络功能的模式,所述第一容器挂载了共享文件目录;所述方法包括:利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括所述请求参数的合约运行命令,所述请求参数包括目标合约标识、合约调用信息和目标目录路径;由所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器,所述目标合约容器挂载了所述共享文件目录中所述目标智能合约对应的目标合约目录;基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约,得到合约运行结果;由所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标合约目录所指向的文件;由所述第一容器中的业务服务从所述目标合约目录所指向的文件中获取所述合约运行结果,并向所述合约模拟调用请求的发起方发送所述合约运行结果。
第二方面,本申请实施例提供了一种合约运行装置,应用于部署第一容器和第二容器的合约运行系统,所述第一容器用于运行业务服务,所述第二容器用于运行至少一个合约容器,所述合约容器处于禁用网络功能的模式,所述第一容器挂载了共享文件目录;所述装置包括:解析模块,用于利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括所述请求参数的合约运行命令,所述请求参数包括目标合约标识、合约调用信息和目标目录路径;容器启动模块,用于利用所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器,所述目标合约容器挂载了所述共享文件目录中所述目标智能合约对应的目标合约目录;合约运行模块,用于基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约,得到合约运行结果;结果存储模块,用于利用所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标合约目录所指向的文件;结果获取模块,用于利用所述第一容器中的业务服务从所述目标合约目录所指向的文件中获取所述合约运行结果,并向所述合约模拟调用请求的发起方发送所述合约运行结果。
在一种可实施方式中,所述装置还包括容器创建模块,用于利用所述第二容器响应于合约运行命令创建目标合约容器;将所述目标目录路径指向的目标合约目录挂载至所述目标合约容器。
在一种可实施方式中,所述装置装置还包括:合约获取模块,用于利用所述第二容器响应于合约运行命令创建目标合约容器;将所述目标目录路径指向的目标合约目录挂载至所述目标合约容器。
在一种可实施方式中,所述请求参数还包括请求码,所述结果存储模块,还用于利用所述目标合约容器按照所述目标目录路径,将所述合约运行结果与所述请求码和目标合约标识关联存储至所述目标目录路径所指向的文件;所述结果获取模块,还用于利用所述第一容器中的业务服务基于所述请求码和目标合约标识从目标合约目录中获取所述合约运行结果。
在一种可实施方式中,所述所述结果获取模块包括参数发送子模块以及轮巡子模块,参数发送子模块,用于利用所述第一容器中运行的业务服务启动数据轮巡线程,并向该数据轮巡线程发送所述请求参数;轮巡子模块,用于利用第一容器中运行的数据轮巡线程基于所述请求参数轮巡所述共享文件目录,若从所述共享文件目录中轮巡到与所述请求码和目标合约标识关联的合约运行结果,则向所述业务服务发送所述合约运行结果。
在一种可实施方式中,所述装置还包括结果删除模块,用于利用所述第一容器中运行的数据轮巡线程删除与所述请求码和目标合约标识相关联的合约运行结果,并停止轮巡。
在一种可实施方式中,所述结果获取模块还包括写入检测子模块以及结果获取子模块,所述写入检测子模块,用于利用所述第一容器对所述目标合约目录进行文件写入检测;所述结果获取子模块,用于在所述第一容器中的业务服务检测到文件写入事件,基于所述请求码和目标合约标识时,从所述目标合约目录中获取与所述请求码和目标合约标识对应的合约运行结果,则向所述业务服务发送所述合约运行结果。
在一种可实施方式中,所述装置还包括目录挂载模块,用于将业务服务管理的多个智能合约的合约文件的文件目录挂载至所述第一容器,得到第一容器挂载的共享文件目录。
在一种可实施方式中,所述第一容器和第二容器部署于合约运行系统中的同一个节点。
第三方面,本申请实施例提供了一种电子设备,包括处理器以及存储器;一个或多个程序被存储在所述存储器中并被配置为由所述处理器执行以实现上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行上述的方法。
第五方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质获取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的方法。
本申请实施例提供的一种合约运行方法、装置、电子设备及存储介质,方法应用于部署第一容器和第二容器的合约运行系统,所述第一容器用于运行业务服务,所述第二容器用于运行至少一个合约容器,所述合约容器处于禁用网络功能的模式,所述第一容器挂载了共享文件目录,在合约运行过程中,通过利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括所述请求参数的合约运行命令,所述请求参数包括目标合约标识、合约调用信息和目标目录路径,由所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器,所述目标合约容器挂载了所述共享文件目录中所述目标智能合约对应的目标合约目录,基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约,得到合约运行结果;由所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标合约目录所指向的文件;由所述第一容器中的业务服务从所述目标合约目录所指向的文件中获取所述合约运行结果,并向所述合约模拟调用请求的发起方发送所述合约运行结果。通过采用上述方法在进行合约模拟调用过程中,由于目标合约容器挂载了目标智能合约对应的目标合约目录,第一容器挂载了包括该目标合约目录的共享文件目录,使得该目标合约容器在基于合约调用信息运行目标智能合约得到合约运行结果后能向目标合约目录中写入合约运行结果,第一容器能够通过挂载的共享文件目录获取该合约运行结果并返回至合约模拟调用请求的发起方发,从而在目标合约容器在禁用网络功能的模式的情况下也能实现智能合约的模拟调用,进一步的,由于目标智能合约在处于禁用网络功能模式的目标合约容器中运行,使得目标智能合约在目标合约容器在中运行的过程中无法与外部通信,对应无法嗅探网上资源,由此,保证在对合约进行模拟调用过程中,目标智能合约无法对业务服务进行攻击,可以保障在合约调试过程中业务服务的安全性,因此,通过采用本申请的合约调用方法,可以有效提升智能合约进行模拟调用时的安全性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请实施例提供的一种合约运行方法的应用场景图;
图2示出了本申请实施例提供的一种合约运行方法的流程示意图;
图3示出了本申请实施例提供的一种合约运行方法的另一流程示意图;
图4示出了本申请实施例提供的一种合约运行方法的又一流程示意图;
图5示出了本申请实施例提供的一种合约运行方法的时序图;
图6示出了本申请实施例提供的一种合约运行方法的另一时序图;
图7示出了本申请实施例提供的一种智能合约的目录挂载示意图;
图8示出了本申请实施例提出的一种合约运行装置的连接框图;
图9示出了用于执行本申请实施例的方法的电子设备的结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
目前,执行合约模拟调用的方案有两种,一种方式是用户本地环境或用户自建环境,环境独立,用户可控,不存在网络嗅探问题。另外一种是预先部署合约到对应公链网络或测试链网络上进行调试,通过公链机制规避网络问题。但是,在用户本地环境或自建环境下,用户需下载安装IDE(Integrated Development Environment,集成开发环境),这种模拟调试方案较为安全但操作复杂;另一种,需预先部署合约到对应链上且需支付费用,适合合约已经调试成熟后的场景,基于此本申请旨在提供一种能够安全且适用于合约模拟调用的整个调试周期的合约运行方法。
接下来对本申请实施例提供的合约运行方法所涉及的系统架构进行介绍。
图1是本申请实施例提供的一种用于执行合约运行方法的合约运行系统10的架构图。如图1所示,合约运行系统10可以部署在宿主机20上由宿主机20运行。合约运行系统10包括第一容器12和第二容器14,且第一容器12可以与第二容器14进行通信。宿主机20上可以运行有客户端也可以关联有终端设备,客户端或终端设备可以用于接收用户输入的合约模拟调用请求。终端设备可以是手机、笔记本电脑、台式电脑、平板电脑等设备。宿主机20可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心,宿主机还可以是任意具有数据处理功能的电子设备,本申请实施例对此不作限定。
第一容器12用于运行业务服务,该第一容器12提供了供业务服务运行的运行环境。在本申请中,业务服务可以是能够调用智能合约(即本申请中的合约)的服务,示例性的,业务服务可以是用于提供创建合约、编译以及将合约部署到区块链链上的服务、还可以是支付服务、人脸识别服务、语音识别服务等,在此不进行具体限定。
第二容器14用于运行至少一个合约容器14a,该第二容器14提供了合约容器的运行环境,该合约容器14a可以由第二容器14创建,其中,一个合约容器14a用于部署一个智能合约,在本申请中,合约容器14a处于禁用网络功能的模式,即合约容器14a无法与外部进行通信,例如,不能与其他的合约容器进行通信。
第一容器12挂载了共享文件目录,可以按照如下步骤对合约容器14a中的智能合约进行调试(即模拟调用合约容器中的合约):客户端或终端设备可以响应于触发的合约调用操作生成合约模拟调用请求并向宿主机发送合约模拟调用请求;以使宿主机在接收到合约模拟调用请求时,利用第一容器12中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的合约运行命令,请求参数包括目标合约标识、合约调用信息和目标目录路径,由第二容器14响应于合约运行命令,启动目标合约标识所指示目标智能合约对应的目标合约容器,目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录,基于合约调用信息,在目标合约容器中运行目标智能合约,得到合约运行结果;由目标合约容器按照目标目录路径,将合约运行结果存储至目标合约目录所指向的文件;由第一容器12中的业务服务从目标合约目录所指向的文件中获取合约运行结果,并向合约模拟调用请求的发起方发送合约运行结果。也即,向客户端或用户终端发送合约运行结果,从而实现了合约的模拟调用。
通过采用上述合约模拟调用过程,由于目标合约容器挂载了目标智能合约对应的目标合约目录,第一容器12挂载了包括该目标合约目录的共享文件目录,使得该目标合约容器能向目标合约目录所指向的文件中写入合约运行结果,第一容器12能够通过挂载的共享文件目录获取该合约运行结果,从而实现智能合约的模拟调用,进一步的,由于目标智能合约在目标合约容器中运行,且目标合约容器处于禁用网络功能的模式,使得目标智能合约在目标合约容器在中运行的过程中无法与外部通信,对应无法嗅探网上资源,由此,保证在对合约进行模拟调用过程中,目标智能合约无法对业务服务进行攻击,可以保障在合约调试过程中业务服务的安全性,因此,通过采用本申请的合约调用方法,可以有效提升智能合约进行模拟调用时的安全性。
在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的技术术语和应用场景予以介绍。
智能合约,(Smart contract)是依托计算机在网络空间运行的合约,智能合约事实上是由计算机代码构成的一段程序,其缔结过程是:第一步,参与缔约的双方或多方用户商定后将共同合意制定成一份智能合约;第二步,该智能合约通过区块链网络向全球各个区块链的节点广播并存储;第三步,构建成功的智能合约等待条件达成后自动执行合约内容。智能合约可以以信息化方式传播、验证或执行,由计算机读取、执行,具备自助的特点。区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现。然而,在智能合约上链之前,对智能合约进行模拟调用是必不可少的环节,故,可以采用本申请的合约运行方法来执行合约的模拟调用。
容器,是一种介于进程和虚拟机之间的一种计算单元。其可以作为一个应用的包装,它最大的特点就是实现了应用的独立和便携,容器本身包含了应用所有的依赖,可以认为是应用的闭包,应用不是单一的可执行文件,稍微复杂的应用包括:代码、可执行文件、配置依赖、外部依赖(动态链接库)等。所以在应用发行包装的时候,需要考虑目标操作系统的版本、系统架构以及它所依赖的模块等因素。容器本身包含了应用所有的依赖,这使得它可以再任意的基础设施上运行,不会因为系统版本、架构的问题,而导致各种意外。本申请主要利用容器来实现本申请的合约运行方法。
下面将结合附图具体描述本申请的各实施例。
请阅图2,图2所示为本申请实施例提供一种合约运行方法,该方法应用于前述部署有第一容器和第二容器的合约运行系统,第一容器用于运行业务服务,第二容器用于运行至少一个合约容器,第一容器挂载了共享文件目录。
其中,上述的合约运行系统可以是虚拟机管控程序系统,也可以是K8S系统(Kubernetes,开源的容器编排平台),也可以是Mesos(分布式内核系统),还可以是DockerSwarm(Docker提供的容器编排系统),也可以是任意可以管理参与合约运行的容器的系统。上述的合约运行系统可以部署在前述的电子设备中。
在本申请的一种可实施方式中,第一容器和第二容器运行在同一个节点上,如运行在同一个pod中,第一容器和第二容器也可以运行在不同的节点上。
Pod里面通常包括一个主容器和至少一个辅助容器,它们共同完成一个特定的功能。具体的,把多个进程(容器也是一种隔离的进程)打包在一个Name Space(命名空间)里,就构成了一个Pod。 Pod的意义在于,它可以既保持主容器和辅助容器的密切关系,又保持主容器的独立性。由于主容器和辅助容器的生命周期相同,可以同时被创建和销毁,因此,若第一容器和第二容器运行在同一个节点上,可以使第一容器与第二容器的交互更加高效。
在本申请的一种可实施例中,第一容器和第二容器运行在同一个节点上,则pod中包括的主容器即为第一容器,用于运行业务服务,pod中的一个辅助容器即为第二容器,该第二容器与第一容器相互辅助完成本申请的合约运行方法。
其中,第一容器可以为docker容器、Containerd容器、Firecracker容器或者gVisor容器等 ,第二容器可以为与第一容器类型相同的容器。
在一种可实施方式中,第一容器为docker容器,第二容器为dind容器,其中,dind(Docker in Docker)是Docker容器中运行Docker容器的概念。它用于在Docker容器内模拟Docker环境。换句话说,它是Docker容器中的一个Docker守护进程,在其中可以运行其他容器,如,在本申请实施例中,运行部署智能合约的容器(即合约容器)可以在dind容器中运行,也即dind中可以运行有合约容器。
此外,还需要说明的是,第一容器挂载了共享文件目录,第一容器具有对共享文件目录中的文件具有读、写、删除等权限。在本申请实施例中,第一容器可以预先挂载智能合约对应的合约目录到共享文件目录,以便于后续业务服务调用智能合约,以及写入合约的运行结果,此外,业务服务还可以是用于提供创建合约、编译以及将合约部署到区块链链上等的服务,相应的, 该第一容器对应挂载的共享文件目录中还可以包括业务服务创建、编译以及部署的多个智能合约的合约文件。
本实施例中合约运行方法包括的步骤如下:
步骤S110:利用第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的合约运行命令。
请求参数包括目标合约标识、合约调用信息和目标目录路径。
其中,合约模拟调用请求的发起方可以是由部署第一容器的宿主机中的客户端,也可以是由与部署第一容器的宿主机通信连接的终端设备。
应当理解,合约调用请求中可以携带有合约模拟调用请求的发起方的标识信息以及与所需调用的智能合约的相关信息,其中,所需调用的智能合约的相关信息至少包括待调用的目标智能合约的目标合约标识、合约调用信息以及指向目标智能合约所在文件的目标目录路径,其中,目标合约标识可以用于标识目标智能合约,且通常具有的唯一性;合约调用信息为目标智能合约调用过程中所需的信息,具体的,合约调用信息可以包括合约方法、合约参数,合约方法又可以称为合约调用函数,合约调用函数可以由函数名和函数参数组成,其中,函数名是智能合约中的函数名称,通过该名称可以调动对应的函数,函数参数则是传递给函数的输入参数。
目标目录路径指向的文件是存储目标智能合约的目标文件,通过目标目录路径可以查找到存储目标智能合约的目标文件,从而获取目标智能合约。通过目标目录路径还可以获得目标智能合约所在目录,其中,目录下可能有至少一个文件或文件夹,该至少一个文件或文件夹包括了目标智能合约的目标文件或目标智能合约所在文件夹。
所需调用的智能合约的相关信息还可以包括请求码,若对目标智能合约进行多次调用,则可以利用请求码来区分每一次合约调用的过程和每次调用产生的结果。
上述所需调用的智能合约的相关信息的具体信息仅为示意性的,还可以有更多的信息,在本实施例不再一一赘述。
在本申请中,通过业务服务来模拟调用目标智能合约,以对目标智能合约进行调试,例如,例如根据业务服务调用目标智能合约所获得的合约运行结果与期望的合约运行结果是否相符,来确定目标智能合约的处理逻辑是否满足要求。由于通过业务服务来模拟调用目标智能合约,因此,可以预先指定待调试的目标智能合约,以及存储目标智能合约的文件对应的目标目录路径、以及合约调用信息,并基于所指定目标智能合约的目标合约标识、以及目标目录路径和合约调用信息进行请求封装,将封装得到的合约模拟调用请求发送到业务服务,以使业务服务解析合约模拟调用请求,得到该合约模拟调用请求携带的请求参数。值得一提的是,在本申请中目标目录路径所指向的文件为共享文件目录下的文件。当然,若需要对其他的智能合约进行调试,也可以按照类似的方式封装合约模拟调用请求,并按照本申请的方法运行合约。步骤S120:由第二容器响应于合约运行命令,启动目标合约标识所指示目标智能合约对应的目标合约容器。
目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录,目标合约容器处于禁用网络功能的模式。
其中,第二容器可以与第一容器进行联网通信,以接收第一容器发送的合约运行命令。上述目标智能合约对应的目标合约容器可以是预先创建的,也可以是第二容器响应于合约运行命令创建的。
目标合约容器是指用于运行目标合约标识所指示目标智能合约的容器。若目标合约容器由第二容器响应于合约运行命令创建的,若第一容器和第二容器在不同容器类型下,第二容器创建目标合约容器的方式可能不同,示例性的,在第一容器和第二容器为Docker容器时,第二容器模拟Docker环境并执行docker run命令在以在第二容器中创建新的容器,也即创建目标合约容器。
应当理解,本实施例中的合约运行方法具体用在对合约进行模拟调试时,目标合约容器需要包含有调试工具。基于此,第二容器还可以根据存储的包含有调试工具的排障镜像来创建目标合约容器,这样,创建得到的目标合约容器中也包含调试工具,后续可以使用目标合约容器中包含的调试工具对目标智能合约进行调试。其中,排障镜像是预先根据各种调试工具构造得到的,且该排障镜像中可以包括一种或多种调试工具。
在创建目标合约容器后,为使目标合约容器具有对目标合约目录中的文件具有读、写、删除等权限,还需将目标智能合约对应的目标目录路径指向的目标合约目录挂载至该目标合约容器下,以及将目标合约容器的网络模式设置为禁用网络功能的模式,这样,保证在调试目标合约容器中的目标智能合约过程中,该目标智能合约不能攻击第一容器中运行的业务服务。应当理解,上述的过程设置过程可以基于用户设置,也可以由第二容器设置。
需要说明的是,第二容器中可以运行有容器守护进程(如,Docker Damon),负责接受用户指令以及维护目标合约容器的生命周期,如,创建合约容器以及使合约容器运行智能合约等。
还应当理解,通过将目标合约目录挂载于目标合约容器,若目标合约容器为第二容器响应于合约运行命令创建的,则在启动目标合约容器后,目标合约容器对应基于目标合约目录获取目标智能合约,并在目标合约容器中运行该目标智能合约。具体的获取过程为:访问目标合约目录并获取与目标目录路径对应的文件中的目标智能合约。
步骤S130:基于合约调用信息,在目标合约容器中运行目标智能合约,得到合约运行结果。
其中,合约调用信息中包括了合约调用函数,在目标合约容器中运行目标智能合约时,目标智能合约用于执行合约调用函数相应的操作,得到合约运行结果。
其中,合约运行结果可以包括合约执行结果,其中,合约执行结果用于表征合约是否执行成功。合约运行结果还可以包括世界状态、事件、合约日志等,世界状态可以被视作为随着交易的执行而持续更新的全局状态;事件是以太坊提供的一种链内链外沟通的一种机制,通过触发事件,智能合约可以通知链外组件某个交易完成了什么事;合约日志代表对事件的存储。智能合约执行时每触发一次事件,就会生成一条合约日志条目,合约日志中与事件触发上下文相关的信息,若智能合约在区块链上执行,则合约日志可以包括合约地址、所在区块哈希、所在区块号、所属交易哈希等等。应当理解,上述的世界状态、事件以及合约日志具体可以是目标智能合约被部署在区块链上运行时的结果,因此,若本实施例的合约运行结果包括上述的世界状态、事件以及合约日志,则上述的世界状态、事件以及合约日志仅为模拟调用时生成的参考信息,而非目标智能合约在区块链上运行的结果。
步骤S140:由目标合约容器按照目标目录路径,将合约运行结果存储至目标合约目录所指向的文件。
具体的,目标合约容器按照目标目录路径可以查找到该目录路径指向的文件,在将合约运行结果存储至目标目录路径指向的文件时,可以将合约运行结果与合约标识进行关联后存储至该目标目录路径指向的文件。
其中,目标合约目录所指向的文件是指目标合约目录中包括的文件,该文件可以是目标合约目录中任意可读写的文件,还可以是由目标合约容器在将合约运行结果存储至目标合约目录所指向的文件之前,由目标合约容器在目标合约目录中创建的文件,该文件用于存储合约运行结果,也即,该文件为结果文件,并在文件创建完成后,将合约运行结果存储至该结果文件。应当理解,目标合约容器创建的文件的文件名称可以是任意设置的,也可以包括合约标识和请求码,根据实际需求进行设置即可,在本申请实施例不作具体限定。
步骤S150:由第一容器中的业务服务从目标合约目录所指向的文件中获取合约运行结果,并向合约模拟调用请求的发起方发送合约运行结果。
其中,第一容器的业务服务可以轮巡第一容器挂载的共享文件目录,以从目标合约目录指向的文件中获取合约运行结果,也可以是观测目标合约目录指向的文件中是否有写入合约运行结果。应当理解,上述从目标合约目录中获取合约运行结果的方式仅仅是示意性的,还可以有更多的获取方式,在本实施例不作一一赘述。
通过采用上述的合约方法,由于目标合约容器挂载了目标智能合约对应的目标合约目录,第一容器挂载了包括该目标合约目录的共享文件目录,使得该目标合约容器在基于合约调用信息运行目标智能合约得到合约运行结果后能向目标合约目录中写入合约运行结果,即使在目标合约容器处于禁用网络功能的模式,第一容器能够通过挂载的共享文件目录获取该合约运行结果,从而实现智能合约的模拟调用,进一步的,由于目标智能合约在目标合约容器中运行,且目标合约容器处于禁用网络功能的模式,使得目标智能合约在目标合约容器中运行的过程中无法嗅探网上资源,因此,通过采用本申请的合约调用方法,可以有效提升智能合约进行模拟调用过程中业务服务的安全性,避免在模拟调用过程中业务服务或者业务服务所在容器中的资源被智能合约攻击。
为实现在对目标智能合约进行多次调用后,能够区分每次调用产生的合约运行结果,在一种可实施方式中,请求参数中还可以包括请求码,请求码应当具有唯一性,不同合约模拟调用请求对应的的请求码不同。上述步骤S140还可以是:由目标合约容器将请求码、合约标识以及合约运行结果关联存储于目标目录路径指向的文件。相应的,上述步骤S150可以是,由第一容器中的业务服务基于请求码和合约标识从目标合约目录所指向的文件中获取合约运行结果,并向合约模拟调用请求的发起方发送合约运行结果。
请参阅图3,本申请另一实施例提供了一种合约运行方法,应用于部署第一容器和第二容器的合约运行系统,第一容器用于运行业务服务,第二容器用于运行至少一个合约容器,第一容器挂载了共享文件目录;方法包括:
步骤S210:利用第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的合约运行命令。
其中,请求参数包括目标合约标识、合约调用信息和目标目录路径。
步骤S220:由第二容器响应于合约运行命令,启动目标合约标识所指示目标智能合约对应的目标合约容器。
其中,目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录,目标合约容器处于禁用网络功能的模式。
步骤S230:基于合约调用信息,在目标合约容器中运行目标智能合约,得到合约运行结果。
步骤S240:由目标合约容器按照目标目录路径,将合约运行结果与请求码和目标合约标识关联存储至目标目录路径所指向的文件。
关于步骤S210-S240的具体执行过程的描述可以参阅前文对步骤S110-S140的具体描述,在本申请实施例不作一一赘述。
步骤S250:由第一容器中运行的业务服务启动数据轮巡线程,并向该数据轮巡线程发送请求参数。
其中,数据轮巡线程可以是在业务服务解析合约模拟调用请求,得到请求参数时由第一容器中运行的业务服务启动。还可以是在得到请求参数之后预设时长内由第一容器中运行的业务服务启动。通过向数据轮巡线程发送请求参数,以使数据轮巡线程基于请求参数执行轮巡操作。
其中,数据轮巡线程可以用于轮巡第一容器挂载的共享文件目录下的所有文件,应当理解,数据轮巡线程还可以仅轮巡请求参数中目标目录路径所指向的文件。
步骤S260:利用第一容器中运行的数据轮巡线程基于请求参数轮巡共享文件目录,若从共享文件目录中轮巡到与请求码和目标合约标识关联的合约运行结果,则向业务服务发送合约运行结果。
其中,数据轮巡可以每间隔预设时长轮巡共享文件目录,预设时长可以是0.5秒、1秒或者2秒等,根据实际需求进行设置。
应当理解,在轮巡到与请求码和目标合约标识关联的合约运行结果,则可以不再执行轮巡操作,故,在本申请的一种可实施方式中,向业务服务发送合约运行结果之后,方法还包括:由第一容器中运行的数据轮巡线程删除与请求码和目标合约标识相关联的合约运行结果,并停止轮巡。
通过采用本申请的上述方法,由于目标合约容器挂载了目标智能合约对应的目标合约目录,第一容器挂载了包括该目标合约目录的共享文件目录,使得目标合约容器中运行目标智能合约得到合约运行结果可以存储至目标目录路径所指向的文件,便后续第一容器中运行的数据轮巡线程能够基于请求参数轮巡共享文件目录,若从共享文件目录中轮巡到与请求码和目标合约标识关联的合约运行结果,则向业务服务发送合约运行结果,以使业务服务向合约模拟调用请求的发起方发送合约运行结果,从而实现在目标合约容器在无法与其他容器进行网络通信的情况下,也能反馈合约运行结果。进一步的,由于目标智能合约在目标合约容器中运行,且目标合约容器处于禁用网络功能的模式,使得目标智能合约在目标合约容器在中运行的过程中无法嗅探网上资源,同时,也无法与其他合约容器直接通信,因此,通过采用本申请的合约调用方法,可以有效提升智能合约进行模拟调用时的安全性的同时,保障合约运行结果获取的便捷性。
请参阅图4所示,本申请另一实施例提供了一种合约运行方法,应用于部署第一容器和第二容器的合约运行系统,第一容器用于运行业务服务,第二容器用于运行至少一个合约容器,第一容器挂载了共享文件目录;方法包括:
步骤S310:利用第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的合约运行命令。
其中,请求参数包括目标合约标识、合约调用信息和目标目录路径。
步骤S320:由第二容器响应于合约运行命令,启动目标合约标识所指示目标智能合约对应的目标合约容器。
其中,目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录,目标合约容器处于禁用网络功能的模式。
步骤S330:基于合约调用信息,在目标合约容器中运行目标智能合约,得到合约运行结果。
步骤S340:由目标合约容器按照目标目录路径,将合约运行结果与请求码和目标合约标识关联存储至目标目录路径所指向的文件。
关于上述步骤S310-S340的具体描述,可以参阅前文对步骤S110-S140的具体描述,在本申请实施例不再一一赘述。
步骤S350:由第一容器对目标合约目录进行文件写入检测。
上述步骤S350可以是,在业务程序具有文件写入检测功能时,由第一容器中运行的业务程序对目标合约目录进行文件写入检测。
上述步骤S350还可以是,第一容器中运行有进行文件写入检测的文件系统观测工具(文件系统观测程序),由第一容器中运行的文件系统观测工具观测共享文件目录中的文件或者目标合约目录中的文件中是否有改变,上述的改变是指,有新的数据写入、有数据被替换或者有数据被删除。
其中,文件系统观测工具可以是任意可以文件中是否有改变的软件程序,如Inotify或 fsnotify等。其中,Inotify是一种用于通知用户空间程序文件系统变化的机制。它观测文件系统的变化,如文件新建、修改、删除等,并可以将相应的事件通知给应用程序。Inotify 既可以观测文件,也可以观测目录。当观测目录时,它可以同时观测目录及目录中的各子目录及文件,以及获知活动的源头和目标等细节。fsnotify也是是一种用于通知用户空间程序文件系统变化的机制,fsnotify相比于Inotify而言,fsnotify能够实现全文件的系统的监测,以及能够实现基于通道的、跨平台的实时观测,其可以观测合约运行结果文件的创建和写入事件,当合约运行结果写入到文件后,fsnotify能够及时告知到对应事件,然后读取其中的结果内容,并告知业务服务,由业务服务返回到至合约模拟调用请求的发起方,从而实现合约运行结果的实时同步。
步骤S360:若第一容器检测到文件写入事件,基于请求码和目标合约标识,从目标合约目录中获取与请求码和目标合约标识对应的合约运行结果,则向业务服务发送合约运行结果。
上述步骤S360具体可以是,在在业务程序具有文件写入检测功能时,若由第一容器中运行的业务程序检测到文件写入事件,则由第一容器中运行的业务程序基于请求码和目标合约标识,从目标合约目录中获取与请求码和目标合约标识对应的合约运行结果,则向业务服务发送合约运行结果。上述步骤S360具体可以是,在第一容器中运行有进行文件写入检测的文件系统观测工具(文件系统观测程序)时,若由第一容器中运行的文件系统观测工具检测到文件写入事件,由第一容器中运行的文件系统观测工具基于请求码和目标合约标识,从目标合约目录中获取与请求码和目标合约标识对应的合约运行结果并发送至业务程序,由第一容器中运行的业务程序向业务服务发送合约运行结果。
通过采用本申请的上述方法,由于目标合约容器挂载了目标智能合约对应的目标合约目录,第一容器挂载了包括该目标合约目录的共享文件目录,使得目标合约容器中运行目标智能合约得到合约运行结果可以存储至目标目录路径所指向的文件,便后续第一容器能够对目标合约目录进行文件写入检测,并在检测到文件写入事件时,获取与请求码和目标合约标识对应的合约运行结果,从而实现在目标合约容器在无法与其他容器进行网络通信的情况下,也能实时反馈合约运行结果。进一步的,由于目标智能合约在目标合约容器中运行,且目标合约容器处于禁用网络功能的模式,使得目标智能合约在目标合约容器在中运行的过程中无法嗅探网上资源,同时,也无法与其他合约容器直接通信,因此,通过采用本申请的合约调用方法,可以有效提升智能合约进行模拟调用时的安全性的同时,保障合约运行结果获取的实时性。
以在本申请的合约运行方法具体应用在区块链IDE上执行远程的模拟合约调试。至信链IDE提供在线合约模拟调试功能,相对于长安链IDE和其他合约IDE(Remix IDE)提供工具类的IDE模拟合约调试使用用户本地环境进行,至信链IDE提供sass服务,使得用户登录至信链开放联盟链平台,在线编辑和模拟调试合约,以使智能合约相关的服务(业务服务)运行在云上集群中,避免了用户繁琐的环境安装和资源成本。且对智能合约模拟调试不会实际上链,所以不会产生gas费用,构建智能合约后即可调试。请结合参阅图5和图6所示,具体合约模拟调试实现的过程如下:
第一容器和第二容器同时部署在K8S系统的同一节点(pod)上,以使同一pod中运行两个容器,也即运行第一容器和第二容器。其中,第一容器为ide容器,用于提供ide业务服务,也即提供智能合约IDE接口服务,其挂载了业务服务管理的各智能合约的文件目录(共享文件目录)。第二容器为dind容器,用于运行docker环境的容器,提供docker-go容器(合约容器)的运行环境。
Ide容器在运行业务服务时,接收用户通过客户端或终端设备(发起方)发送的合约模拟调用请求,利用Ide容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的docker run命令(合约运行命令),请求参数包括目标合约标识、合约调用信息和目标目录路径。其中,docker run命令通过emptyDir文件sock发送到dind容器,dind容器中的docker deamon(容器守护进程)在dind容器中创建与目标智能合约对应的docker-go容器(目标合约容器),由于同pod内的容器(也即,第一容器和第二容器)是共享网络资源的,所以若不对第二容器中创建的docker-go容器(目标合约容器)进行网络限制,docker-go容器可以直接攻击ide业务服务,甚至集群或同VPC(Virtual Private Cloud,虚拟私有云)下的其他服务。为避免智能合约运行过程中,第二容器中创建的目标合约容器内运行的智能合约恶意访问云上资源或pod内的其他服务(如第一容器中的业务服务),可以在运行目标智能合约的目标合约容器后将目标合约容器的网络模式设置为禁用网络功能的模式,之后基于目标目录路径得到目标智能合约对应的目标合约目录并将该目标合约目录挂载至docker-go容器,之后启动docker-go容器,基于合约调用信息在docker-go容器中运行目标智能合约,得到合约运行结果,并由docker-go容器按照目标目录路径,将合约运行结果与请求参数中的合约标识和请求码关联存储至目标目录路径所指向的文件。
示例性的,如图7所示,若目标智能合约包括合约A和合约B时,dind容器中对应可以创建有合约A对应的docker-go容器以及合约B对应的docker-go容器,合约A对应的docker-go容器挂载了合约A对应的合约目录,合约B对应的docker-go容器挂载了合约B对应的合约目录。合约A对应的docker-go容器在启动后,可以基于合约A的合约调用信息运行合约A,把合约A对应的合约运行结果写回到合约A对应的合约目录下的文件(合约A的目录路径指向的文件)中。同理,合约B对应的docker-go容器在启动后,可以基于合约B的合约调用信息对合约B进行模拟调试完成后,把合约B对应的合约运行结果写回到合约B对应的合约目录下的文件(合约B的目录路径指向的文件)中。
因为Ide容器挂载的共享文件目录中包括目标智能合约的目标合约目录,所以可以直接读取目标合约目录中存储的目标智能合约对应的合约运行结果,然后返回给请求的发起方,实现了在目标智能合约对应的docker-go容器在没有网络通信能力的情况下,把执行合约结果返回给IDE业务服务中。
具体的,在读取目标合约目录中存储的目标智能合约对应的合约运行结果时,可以利用如图5所示的方式,在业务服务接收到合约模拟调用请求后,还可以启动数据轮巡线程,利用Ide容器中运行的数据轮巡线程基于请求参数轮巡Ide容器挂载的共享文件目录,若从共享文件目录中轮巡到与请求码和目标合约标识关联的合约运行结果,则向业务服务发送合约运行结果。业务服务收到合约执行结果,转化成业务响应数据,返回到合约模拟调用请求的发送方(客户端或终端设备)。
在读取目标合约目录中存储的目标智能合约对应的合约运行结果时,还可以利用如图6所示的方式,由Ide容器中运行的文件系统观测工具检测共享文件目录中是否有文件写入,并在检测到文件写入事件时由Ide容器中运行的文件系统观测工具基于请求码和目标合约标识,从目标合约目录中获取与请求码和目标合约标识对应的合约运行结果并发送至业务程序,由第一容器中运行的业务程序向业务服务发送合约运行结果,业务服务收到合约执行结果,转化成业务响应数据,返回到合约模拟调用请求的发送方(客户端或终端设备)。
通过采用本申请的上述合约运行流程,可以使得目标智能合约在目标合约容器在中运行的过程中无法与外部通信,对应无法嗅探网上资源,由此,保证在对合约进行模拟调用过程中,目标智能合约无法对业务服务进行攻击,可以保障在合约调试过程中业务服务的安全性,也即,保护ide业务服务和云上其他服务,使ide远程合约调试成为一种可能,同时,通过采用上述方法可以使为用户提供免费的、方便的合约模拟调试功能成为可能。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
请参阅图8,本申请另一实施例提供了一种合约运行装置400,应用于部署第一容器和第二容器的合约运行系统,第一容器用于运行业务服务,第二容器用于运行至少一个合约容器,合约容器处于禁用网络功能的模式,第一容器挂载了共享文件目录;装置400包括:解析模块410,用于利用第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括请求参数的合约运行命令,请求参数包括目标合约标识、合约调用信息和目标目录路径;容器启动模块420,用于利用第二容器响应于合约运行命令,启动目标合约标识所指示目标智能合约对应的目标合约容器,目标合约容器挂载了共享文件目录中目标智能合约对应的目标合约目录;合约运行模块430,用于基于合约调用信息,在目标合约容器中运行目标智能合约,得到合约运行结果;结果存储模块440,用于利用目标合约容器按照目标目录路径,将合约运行结果存储至目标合约目录所指向的文件;结果获取模块450,用于利用第一容器中的业务服务从目标合约目录所指向的文件中获取合约运行结果,并向合约模拟调用请求的发起方发送合约运行结果。
在一种可实施方式中,装置400还包括容器创建模块,用于利用第二容器响应于合约运行命令创建目标合约容器;将目标目录路径指向的目标合约目录挂载至目标合约容器。
在一种可实施方式中,装置400还包括:合约获取模块,用于利用第二容器响应于合约运行命令创建目标合约容器;将目标目录路径指向的目标合约目录挂载至目标合约容器。
在一种可实施方式中,请求参数还包括请求码,结果存储模块440,还用于利用目标合约容器按照目标目录路径,将合约运行结果与请求码和目标合约标识关联存储至目标目录路径所指向的文件;结果获取模块450,还用于利用第一容器中的业务服务基于请求码和目标合约标识从目标合约目录中获取合约运行结果。
在一种可实施方式中,结果获取模块450包括参数发送子模块以及轮巡子模块,参数发送子模块,用于利用第一容器中运行的业务服务启动数据轮巡线程,并向该数据轮巡线程发送请求参数;轮巡子模块,用于利用第一容器中运行的数据轮巡线程基于请求参数轮巡共享文件目录,若从共享文件目录中轮巡到与请求码和目标合约标识关联的合约运行结果,则向业务服务发送合约运行结果。
在一种可实施方式中,装置400还包括结果删除模块,用于利用第一容器中运行的数据轮巡线程删除与请求码和目标合约标识相关联的合约运行结果,并停止轮巡。
在一种可实施方式中,结果获取模块450还包括写入检测子模块以及结果获取子模块,写入检测子模块,用于利用第一容器对目标合约目录进行文件写入检测;结果获取子模块,用于在第一容器中的业务服务检测到文件写入事件,基于请求码和目标合约标识时,从目标合约目录中获取与请求码和目标合约标识对应的合约运行结果,则向业务服务发送合约运行结果。
在一种可实施方式中,装置400还包括目录挂载模块,用于将业务服务管理的多个智能合约的合约文件的文件目录挂载至第一容器,得到第一容器挂载的共享文件目录。
在一种可实施方式中,第一容器和第二容器部署于合约运行系统中的同一个节点。
上述装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图9对本申请提供的一种电子设备进行说明。
请参阅图9,基于上述实施例提供的合约运行方法,本申请实施例还提供的另一种包括可以执行前述方法的处理器102的电子设备100,该电子设备100可以为服务器或服务器集群。
电子设备100还包括存储器104。其中,该存储器104中存储有可以执行前述实施例中内容的程序,而处理器102可以执行该存储器104中存储的程序。
其中,处理器102可以包括一个或者多个用于处理数据的核以及消息矩阵单元。处理器102利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器104内的指令、程序、代码集或指令集,以及调用存储在存储器104内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器102可以采用数字信号处理(DigitalSignal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器102可集成中央处理器(Central Processing Unit,CPU)、图像处理器(GraphicsProcessing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器102中,单独通过一块通信芯片进行实现。
存储器104可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器104可用于存储指令、程序、代码、代码集或指令集。存储器104可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备100在使用中所获取的数据(如,请求参数)等。
电子设备100还可以包括网络模块以及屏幕,网络模块用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。网络模块可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。网络模块可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。
在一些实施例中,电子设备100还可以包括有:外设接口106和至少一个外围设备。处理器102、存储器104和外设接口106之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外设接口连接。
外设接口106可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器102和存储器104。在一些实施例中,处理器102、存储器104和外设接口106被集成在同一芯片或电路板上;在一些其他实施例中,处理器102、存储器104和外设接口106中的任意一个或两个可以在单独的芯片或电路板上实现,本申请实施例对此不加以限定。
示例性的,在本实施例中,外围设备可以包括网络模块108,网络模块108用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。网络模块108可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。网络模块108可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。
本申请实施例还提供一种计算机可读存储介质的结构框图。该计算机可读介质中存储有程序代码,程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质具有执行上述方法中的任何方法步骤的程序代码的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码可以例如以适当形式进行压缩。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中描述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种合约运行方法,其特征在于,应用于部署第一容器和第二容器的合约运行系统,所述第一容器用于运行业务服务,所述第二容器用于运行至少一个合约容器,所述第一容器挂载了共享文件目录;所述方法包括:
利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括所述请求参数的合约运行命令,所述请求参数包括目标合约标识、合约调用信息和目标目录路径;
由所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器,所述目标合约容器挂载了所述共享文件目录中所述目标智能合约对应的目标合约目录,所述目标合约容器处于禁用网络功能的模式;
基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约,得到合约运行结果;
由所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标目录路径所指向的文件;
由所述第一容器中的业务服务从所述目标合约目录所指向的文件中获取所述合约运行结果,并向所述合约模拟调用请求的发起方发送所述合约运行结果。
2.根据权利要求1所述的方法,其特征在于,由所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器之前,所述方法还包括:
由所述第二容器响应于合约运行命令创建目标合约容器;将所述目标目录路径指向的目标合约目录挂载至所述目标合约容器。
3.根据权利要求2所述的方法,其特征在于,所述基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约之前,所述方法还包括:
由所述目标合约容器基于其挂载的目标合约目录获取所述目标智能合约。
4.根据权利要求1所述的方法,其特征在于,所述请求参数还包括请求码,所述由所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标目录路径所指向的文件,包括:
由所述目标合约容器按照所述目标目录路径,将所述合约运行结果与所述请求码和目标合约标识关联存储至所述目标目录路径所指向的文件;
所述由所述第一容器中的业务服务从所述目标合约目录中获取所述合约运行结果,包括:
由所述第一容器中的业务服务基于所述请求码和目标合约标识从目标合约目录中获取所述合约运行结果。
5.根据权利要求4所述的方法,其特征在于,所述由所述第一容器中的业务服务基于所述请求码和目标合约标识从目标合约目录中获取所述合约运行结果,包括:
由所述第一容器中运行的业务服务启动数据轮巡线程,并向该数据轮巡线程发送所述请求参数;
利用第一容器中运行的数据轮巡线程基于所述请求参数轮巡所述共享文件目录,若从所述共享文件目录中轮巡到与所述请求码和目标合约标识关联的合约运行结果,则向所述业务服务发送所述合约运行结果。
6.根据权利要求5所述的方法,其特征在于,所述向所述业务服务发送所述合约运行结果之后,方法还包括:
由所述第一容器中运行的数据轮巡线程删除与所述请求码和目标合约标识相关联的合约运行结果,并停止轮巡。
7.根据权利要求4所述的方法,其特征在于,由所述第一容器中的业务服务从所述目标合约目录中获取所述合约运行结果,包括:
由所述第一容器对所述目标合约目录进行文件写入检测;
若所述第一容器检测到文件写入事件,基于所述请求码和目标合约标识,从所述目标合约目录中获取与所述请求码和目标合约标识对应的合约运行结果,则向所述业务服务发送所述合约运行结果。
8.根据权利要求1所述的方法,其特征在于,所述利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到合约参数之前,所述方法还包括:
将业务服务管理的多个智能合约的合约文件的文件目录挂载至所述第一容器,得到第一容器挂载的共享文件目录。
9.根据权利要求1所述的方法,其特征在于,所述第一容器和第二容器部署于合约运行系统中的同一个节点。
10.一种合约运行装置,其特征在于,应用于部署第一容器和第二容器的合约运行系统,所述第一容器用于运行业务服务,所述第二容器用于运行至少一个合约容器,所述合约容器处于禁用网络功能的模式,所述第一容器挂载了共享文件目录;所述装置包括:
解析模块,用于利用所述第一容器中运行的业务服务解析合约模拟调用请求,得到请求参数,生成包括所述请求参数的合约运行命令,所述请求参数包括目标合约标识、合约调用信息和目标目录路径;
容器启动模块,用于利用所述第二容器响应于合约运行命令,启动所述目标合约标识所指示目标智能合约对应的目标合约容器,所述目标合约容器挂载了所述共享文件目录中所述目标智能合约对应的目标合约目录;
合约运行模块,用于基于所述合约调用信息,在所述目标合约容器中运行所述目标智能合约,得到合约运行结果;
结果存储模块,用于利用所述目标合约容器按照所述目标目录路径,将所述合约运行结果存储至所述目标合约目录所指向的文件;
结果获取模块,用于利用所述第一容器中的业务服务从所述目标合约目录所指向的文件中获取所述合约运行结果,并向所述合约模拟调用请求的发起方发送所述合约运行结果。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-9中任意一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-9中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311242235.7A CN116975850B (zh) | 2023-09-25 | 2023-09-25 | 合约运行方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311242235.7A CN116975850B (zh) | 2023-09-25 | 2023-09-25 | 合约运行方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116975850A CN116975850A (zh) | 2023-10-31 |
CN116975850B true CN116975850B (zh) | 2024-01-05 |
Family
ID=88471657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311242235.7A Active CN116975850B (zh) | 2023-09-25 | 2023-09-25 | 合约运行方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116975850B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109240900A (zh) * | 2018-08-16 | 2019-01-18 | 北京京东尚科信息技术有限公司 | 区块链网络服务平台及其智能合约检测方法、存储介质 |
CN109408373A (zh) * | 2018-09-26 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 智能合约的测试方法、计算机可读存储介质及测试终端 |
CN111258714A (zh) * | 2020-01-13 | 2020-06-09 | 电子科技大学 | 一种区块链智能合约执行方法 |
CN111339201A (zh) * | 2020-02-28 | 2020-06-26 | 中国工商银行股份有限公司 | 基于区块链的测评方法及系统 |
CN111427555A (zh) * | 2020-03-30 | 2020-07-17 | 中科全维科技(苏州)有限公司 | 一种轻量化智能合约框架及合约开发方法 |
CN112631803A (zh) * | 2020-12-21 | 2021-04-09 | 杭州趣链科技有限公司 | 区块链的智能合约调用方法、装置、服务器和存储介质 |
CN113360893A (zh) * | 2021-08-11 | 2021-09-07 | 北京微芯感知科技有限公司 | 基于容器的智能合约执行方法、装置及存储介质 |
CN114064594A (zh) * | 2021-11-22 | 2022-02-18 | 马上消费金融股份有限公司 | 数据处理方法和装置 |
WO2022261244A1 (en) * | 2021-06-09 | 2022-12-15 | Intel Corporation | Radio equipment directive solutions for requirements on cybersecurity, privacy and protection of the network |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200143337A1 (en) * | 2018-11-02 | 2020-05-07 | Figure Technologies, Inc. | Secure computer network-based platform |
US11372987B1 (en) * | 2020-12-17 | 2022-06-28 | Alan Rodriguez | System and method for controlling data using containers |
TWI806341B (zh) * | 2022-01-06 | 2023-06-21 | 威聯通科技股份有限公司 | 主機的容器系統、動態掛載主機資料至容器的方法及應用程式 |
-
2023
- 2023-09-25 CN CN202311242235.7A patent/CN116975850B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109240900A (zh) * | 2018-08-16 | 2019-01-18 | 北京京东尚科信息技术有限公司 | 区块链网络服务平台及其智能合约检测方法、存储介质 |
CN109408373A (zh) * | 2018-09-26 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 智能合约的测试方法、计算机可读存储介质及测试终端 |
CN111258714A (zh) * | 2020-01-13 | 2020-06-09 | 电子科技大学 | 一种区块链智能合约执行方法 |
CN111339201A (zh) * | 2020-02-28 | 2020-06-26 | 中国工商银行股份有限公司 | 基于区块链的测评方法及系统 |
CN111427555A (zh) * | 2020-03-30 | 2020-07-17 | 中科全维科技(苏州)有限公司 | 一种轻量化智能合约框架及合约开发方法 |
CN112631803A (zh) * | 2020-12-21 | 2021-04-09 | 杭州趣链科技有限公司 | 区块链的智能合约调用方法、装置、服务器和存储介质 |
WO2022261244A1 (en) * | 2021-06-09 | 2022-12-15 | Intel Corporation | Radio equipment directive solutions for requirements on cybersecurity, privacy and protection of the network |
CN113360893A (zh) * | 2021-08-11 | 2021-09-07 | 北京微芯感知科技有限公司 | 基于容器的智能合约执行方法、装置及存储介质 |
CN114064594A (zh) * | 2021-11-22 | 2022-02-18 | 马上消费金融股份有限公司 | 数据处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116975850A (zh) | 2023-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109766696B (zh) | 软件权限的设置方法及装置、存储介质、电子装置 | |
US10810055B1 (en) | Request simulation for ensuring compliance | |
CN112653618B (zh) | 微服务应用api端点的网关注册方法及装置 | |
WO2019072008A1 (zh) | 小程序的安全扫描方法、装置以及电子设备 | |
CN113849808B (zh) | 容器安全管理方法、系统、终端及存储介质 | |
US10404568B2 (en) | Agent manager for distributed transaction monitoring system | |
JP2023523242A (ja) | データ処理方法、データ処理装置、コンピュータ機器、及びコンピュータプログラム | |
CN110661853A (zh) | 一种数据代理方法、装置、计算机设备及可读存储介质 | |
CN112699034B (zh) | 虚拟登录用户构建方法、装置、设备及存储介质 | |
CN112685055A (zh) | 一种集群的构建方法和装置 | |
CN110045998B (zh) | 加载动态库的方法及装置 | |
CN114189553B (zh) | 一种流量回放方法、系统及计算设备 | |
Zungur et al. | Borderpatrol: Securing byod using fine-grained contextual information | |
CN114996750A (zh) | 数据共享方法以及装置 | |
WO2024125108A1 (zh) | 移动端安全切面的按需开启方法及装置 | |
CN109815202B (zh) | 日志编辑方法及相关装置 | |
CN116975850B (zh) | 合约运行方法、装置、电子设备及存储介质 | |
CN111722994A (zh) | 一种任务请求的响应方法及设备 | |
WO2021102849A1 (zh) | 资源获取方法、装置以及电子设备 | |
CN107967423B (zh) | 一种权限获取的方法以及终端设备 | |
CN109783156B (zh) | 一种应用的启动控制方法及装置 | |
CN108229150B (zh) | 客户端的信息校验方法和装置 | |
CN102156646B (zh) | 特征库升级方法和装置 | |
CN111967058A (zh) | 支持用户白名单的防篡改方法、电子装置和存储介质 | |
CN107508783A (zh) | 一种数据的处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |