智能合约中算法的保护方法、装置、设备及存储介质制造方法及图纸

技术编号:20546321 阅读:17 留言:0更新日期:2019-03-09 19:14
本发明专利技术公开了一种智能合约中算法的保护方法,属于区块链技术领域。该方法包括以下步骤:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件;复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;将所述二进制数据和所述加载器函数写入智能合约的源码中;将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。本发明专利技术利用go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,起到保护核心算法知识产权的作用。

Protection Method, Device, Equipment and Storage Medium of Algorithms in Intelligent Contracts

The invention discloses a protection method of an algorithm in an intelligent contract, belonging to the technical field of block chain. The method includes the following steps: compiling the source files of the algorithm library in go language, compiling and compiling the source files of the algorithm library to generate elf files; copying the repositioning table, read-only data area, data area and code area of the ELF file to form a series of binary data, and configuring the loader function for the binary data; and loading the binary data and the said loading. The loader function is written into the source code of the intelligent contract, and the source code of the intelligent contract is uploaded to docker for deployment, so that when the loader function runs on the intelligent contract, the address of the external function and the external global variable contained in the binary data can be obtained. By utilizing the Compiling Characteristics of go language, the invention bypasses the link that the intelligent contract deployment must upload source code to compile, and separates the core code to protect the intellectual property rights of the core algorithm.

【技术实现步骤摘要】
智能合约中算法的保护方法、装置、设备及存储介质
本专利技术涉及区块链
,涉及一种智能合约中算法的保护方法、装置、设备及存储介质。
技术介绍
智能合约是一种数字形式的合约,也就是一段由计算机语言撰写并实现的可执行代码。随着区块链应用的普及,智能合约的使用范围变得越来越广泛,很多智能合约中,都会用到第三方的算法库来完成某种既定的、具体的、业界公认而无可争议的功能;而这些第三方的算法库,却常常因为第三方公司对于自身知识产权的保护而不便于对外公开其源码。以隐私保护方面被大量应用的零知识证明算法库为例,零知识证明算法库的功能是既定而确切的,即“我不需要亮出我的答案,但是我可以向外界证明我知道答案”。既便于对于这样业界非常确定的应用算法库,两家不同的公司实现的算法效率可能差距100倍以上甚至更大。现在,有些公司为了保护自身知识产权,不对外公开源码,通过利用go语言v1.8的一些特性完成对源码的隐藏,但是在实际商业环境中,并不是所有的客户都安装了最新的go语言版本,特别是对于某些对自身系统稳定性要求较高的客户,他们对于已经在运行的网络环境升级持有非常谨慎的态度,特别是对于涉及到整个网络环境运行基础的语言包的升级,更是慎之又慎。
技术实现思路
本专利技术要解决的技术问题是为了克服现有技术中无法在区块链中保护算法源码的问题,提出了一种智能合约中算法的保护方法、装置、设备及存储介质,利用go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,以实现核心算法知识产权的保护。本专利技术是通过下述技术方案来解决上述技术问题:一种智能合约中算法的保护方法,包括以下步骤:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件;复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;将所述二进制数据和所述加载器函数写入智能合约的源码中;将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。优选地,所述算法库为零知识证明算法库。优选地,所述elf文件的生成过程为:采用go语言编写得到*.go文件,将所述*.go文件经过编译得到*.s文件,再将所述*.s文件经过汇编得到*.o文件;所述*.go文件为算法库源文件,所述*.s文件为汇编源文件,所述*.o文件为elf文件。优选地,所述部署包括:通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。优选地,所述二进制数据的修改包括以下步骤:将所述智能合约的源码上传到docker中进行部署并初始化;通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;将确定的所要调用的外部函数和外部全局变量的地址插入至所述二进制数据中的相应位置处。优选地,所述外部函数由所述加载器函数以指针形式获取到,再由所述加载器函数将所述外部函数的函数指针插入到所述二进制数据中的相应位置处。本专利技术还公开了一种电子装置,所述电子装置上存储有智能合约中算法的保护系统,所述智能合约中算法的保护系统包括:算法库源文件,所述算法库源文件采用go语言编写;elf文件生成模块,用于将所述算法库源文件通过编译和汇编后生成elf文件;数据生成模块,用于复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;合约生成模块,用于将所述二进制数据和所述加载器函数写入智能合约的源码中;部署模块,用于将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。优选地,所述部署模块进一步包括以下子模块:修改子模块,用于通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;地址分配子模块,用于通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。本专利技术还公开了一种计算机设备,包括存储器和处理器,所述存储器上存储有可被所述处理器执行的智能合约中算法的保护系统,所述系统被所述处理器执行时实现如前述任一项所述的智能合约中算法的保护方法的步骤。本专利技术还公开了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序指令,所述计算机程序指令可被至少一个处理器所执行,以使所述至少一个处理器执行如前述任一项所述的智能合约中算法的保护方法的步骤。本专利技术的积极进步效果在于:1)本专利技术利用了go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,起到了保护核心算法知识产权的作用;2)本专利技术无需对智能合约的原有部署流程做任何修改;3)本专利技术具有普遍的适用性,可以用于所有使用go语言进行智能合约编写的区块链网络。附图说明图1示出了本专利技术智能合约中算法的保护方法实施例一的流程图;图2示出了本专利技术智能合约中算法的保护方法中关于elf文件生成的流程图;图3示出了本专利技术智能合约中算法的保护方法中elf文件格式的示意图;图4示出了本专利技术智能合约中算法的保护方法中关于部署的流程图;图5示出了本专利技术智能合约中算法的保护方法中关于二进制数据修改的流程图;图6示出了本专利技术电子装置中智能合约中算法的保护系统第一实施例的程序模块示意图;图7示出了本专利技术电子装置中智能合约中算法的保护系统中部署模块的子程序模块示意图;图8示出了本专利技术计算机设备一实施例的硬件架构示意图。具体实施方式下面通过实施例的方式进一步说明本专利技术,但并不因此将本专利技术限制在所述的实施例范围之中。首先,本专利技术提出一种智能合约中算法的保护方法。在实施例一中,如图1所示,所述的智能合约中算法的保护方法包括如下步骤:步骤01:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件。go语言是由谷歌发布的第二款开源编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。在一实施例中,所述算法库具体指零知识证明算法库。所述零知识证明算法库在智能合约中的使用非常广泛,而通常这些算法库都是有第三方公司开发的。虽然零知识证明算法库的应用非常确定,但是通过不同的代码实现的零知识证明算法库在算法效率方面可能差距百倍甚至更大,因此对于零知识证明算法库源码的保护十分有必要。在一实施例中,如图2所示,所述elf文件的生成过程具体包括以下步骤:步骤011:采用go语言编写得到*.go文件,所述*.go文件即为算法库源文件;步骤012:将所述*.go文件经过编译得到*.s文件,所述*.s文件即为汇编源文件;步骤013:将所述*.s文件本文档来自技高网...

【技术保护点】
1.一种智能合约中算法的保护方法,其特征在于,包括以下步骤:将采用go语言编写的算法库源文件通过编译和汇编后生成elf文件;复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;将所述二进制数据和所述加载器函数写入智能合约的源码中;将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。

【技术特征摘要】
1.一种智能合约中算法的保护方法,其特征在于,包括以下步骤:将采用go语言编写的算法库源文件通过编译和汇编后生成elf文件;复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;将所述二进制数据和所述加载器函数写入智能合约的源码中;将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。2.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,所述算法库为零知识证明算法库。3.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,所述elf文件的生成过程为:采用go语言编写得到*.go文件,将所述*.go文件经过编译得到*.s文件,再将所述*.s文件经过汇编得到*.o文件;所述*.go文件为算法库源文件,所述*.s文件为汇编源文件,所述*.o文件为elf文件。4.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,所述部署包括:通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。5.根据权利要求4所述的智能合约中算法的保护方法,其特征在于,所述二进制数据的修改包括以下步骤:将所述智能合约的源码上传到docker中进行部署并初始化;通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;将确定的所要调用的外部函数和外部全局变量的地址插入至所述二进制数据中的相应...

【专利技术属性】
技术研发人员:谢丹力张松松
申请(专利权)人:平安科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1