本发明涉及区块链技术领域,尤其涉及一种数据迁移方法、系统和计算机可读存储介质。
背景技术:
区块链应用在业务逻辑变化或故障的情况下,需要对智能合约数据进行迁移以达到升级的目的。目前的智能合约数据迁移方案主要有以下两种:
1)硬编码迁移法,该方法是在新版本的智能合约中保存一个指向旧版本智能合约的合约地址,旧版本智能合约中保存的数据不移动,而新版本智能合约用来保存增量的数据内容,使得新旧版本的智能合约通过合约地址关联起来,保留了逻辑上的关联。该方法等同于新版本智能合约保留了一份旧版本智能合约数据的指针,其缺点是:持续不断的版本升级会导致形成较长链式的逻辑关联,使得维护成本较高。
2)硬拷贝迁移法,该方法是利用外部迁移工具,将旧版本智能合约数据全部拷贝到区块链以外的区域,然后再异步地从区块链以外的区域重新存储到新版本智能合约中,使得新旧版本智能合约之间从逻辑上不再保留任何关联。该方法等同于合约数据的完全拷贝,其缺点是:区块链存储压力的大幅度增加;在实际应用中数据迁移工具需要适配不同的智能合约,开发成本较高;在迁移过程需要停止服务,否则容易出现脏数据,并且数据量较大的情况下,耗时长,操作复杂,数据容易出错。
技术实现要素:
本发明的主要目的在于提供一种数据迁移方法、系统和计算机可读存储介质,旨在解决现有的数据迁移方式,维护和开发成本较高、耗时长、操作繁琐及数据容易出错的技术问题。
为实现上述目的,本发明提供一种数据迁移方法,应用于数据迁移系统,所述数据迁移系统设有客户端和区块链节点,所述数据迁移方法包括:
由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点;
读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值;
将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。
可选地,所述由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤之前,所述方法还包括:
在接收到发送方发起的数据迁移请求时,由客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构,其中,所述新合约的数据迁移交易结构兼容旧合约的存储结构;
由所述客户端获取发送方的外部账户地址、旧合约地址、交易数据及交易签名数据,并结合所述数据迁移交易结构组装成区块链交易信息;
由所述客户端将组装成的区块链交易信息发送至区块链节点。
可选地,所述区块链节点包括远程调用模块、点对点模块和块链框架模块,所述由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤包括:
由区块链节点的远程调用模块或点对点模块接收客户端发送的区块链交易信息,并由所述远程调用模块或点对点模块对区块链交易信息进行解码;
对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件;
在区块链交易信息对应的各个字段满足各个字段对应的预设条件时,将区块链交易信息放入交易池队列;
由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点。
可选地,所述对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件的步骤包括:
检查交易签名数据是否符合签名算法;
检查交易数据是否未在当前区块链中出现过;
检查发送方的外部账户地址是否与预存账户地址匹配;
检查旧合约地址是否为当前区块链上的智能合约账户地址;
检查交易数据中的数据字段容量是否大于旧合约地址对应的智能合约的数据字段容量。
可选地,所述由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点的步骤包括:
由块链框架模块从交易池队列中提取出区块链交易信息,并将提取的区块链交易信息添加到新区块的交易列表中;
获取发起方的账户地址以及该账户地址已建立的合约账户总个数,并根据所述账户地址以及总合约账户个数,计算新智能合约的地址;
根据新合约的地址建立新智能合约节点,并获取交易数据中的旧合约地址对应的旧智能合约节点的存储根值,并将其值赋值到新智能合约节点对应的存储根值中。
可选地,所述区块链节点还包括计算模块,所述将提取的存储根植赋值到所述新智能合约节点对应的存储根植中的步骤之后,所述方法还包括:
调用计算模块在区块链交易信息的交易数据中提取出构造参数;
以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新。
可选地,所述以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新的步骤之后,所述方法还包括:
将新智能合约节点存储到区块链中,并反馈区块链最新状态;
根据迁移交易的执行结果组装成数据迁移交易回执结构,并将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端。
可选地,所述区块链节点还包括共识模块和存储模块,所述将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端的步骤之后,所述方法还包括:
由块链框架模块将新区块提供给共识模块,以供共识模块对新区块进行签名,并将签名后的新区块广播至全网的各个节点,以实现全网共识;
在新区块共识完成后,由共识模块通知所述块链框架模块,以供所述块链框架模块调用存储模块将新区块及新区块所产生的合约数据存储到存储介质中,以完成区块链的更新。
此外,为实现上述目的,本发明还提供一种数据迁移系统,所述数据迁移系统包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的数据迁移程序,所述数据迁移程序被所述处理器执行时实现如上文所述的数据迁移方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有数据迁移程序,所述数据迁移程序应用于数据迁移系统,所述数据迁移程序被处理器执行时实现如上文所述的数据迁移方法的步骤。
本发明提出的数据迁移方法,先由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点,然后读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值,最终将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。本发明基于存储空间实现区块链智能合约的整合,使得新合约和旧合约可以同时并存互不影响,不会增加区块链存储压力,具备较强的升级容错能力,降低了维护成本,大幅度提高了安全性、可靠性和可实操性。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的系统结构示意图;
图2为本发明数据迁移方法第一实施例的流程示意图;
图3为图2中步骤S10的细化流程示意图;
图4为图3中步骤S14的细化流程示意图;
图5为本发明数据迁移方法第二实施例的流程示意图;
图6为本发明数据迁移方法第三实施例的流程示意图;
图7为本发明数据迁移方法第四实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的解决方案主要是:先由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点,然后读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值,最终将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。以解决现有的数据迁移方式,维护和开发成本较高、耗时长、操作繁琐及数据容易出错的问题。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的数据迁移系统的结构示意图。
本发明实施例的数据迁移系统可以是PC、智能手机、平板电脑、便携计算机,也可以是服务器、虚拟机设备等设备。
如图1所示,该数据迁移系统可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口(例如用于连接有线键盘、有线鼠标等)、无线接口(例如用于连接无线键盘、无线鼠标)。网络接口1004可选的可以包括标准的有线接口(用于连接有线网络)、无线接口(如WI-FI接口、蓝牙接口、红外线接口等,用于连接无线网络)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
可选地,数据迁移系统还可以包括传感器、WiFi模块等等。
本领域技术人员可以理解,图1中示出的数据迁移系统结构并不构成对数据迁移系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据迁移程序。其中,操作系统是管理和控制数据迁移系统与软件资源的程序,支持网络通信模块、用户接口模块、数据迁移程序以及其他程序或软件的运行;网络通信模块用于管理和控制网络接口1002;用户接口模块用于管理和控制用户接口1003。
在图1所示的数据迁移系统中,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现以下步骤:
由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点;
读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值;
将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。
进一步地,所述由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤之前,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现以下步骤:
在接收到发送方发起的数据迁移请求时,由客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构,其中,所述新合约的数据迁移交易结构兼容旧合约的存储结构;
由所述客户端获取发送方的外部账户地址、旧合约地址、交易数据及交易签名数据,并结合所述数据迁移交易结构组装成区块链交易信息;
由所述客户端将组装成的区块链交易信息发送至区块链节点。
进一步地,所述区块链节点包括远程调用模块、点对点模块和块链框架模块,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤:
由区块链节点的远程调用模块或点对点模块接收客户端发送的区块链交易信息,并由所述远程调用模块或点对点模块对区块链交易信息进行解码;
对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件;
在区块链交易信息对应的各个字段满足各个字段对应的预设条件时,将区块链交易信息放入交易池队列;
由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点。
进一步地,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件的步骤:
检查交易签名数据是否符合签名算法;
检查交易数据是否未在当前区块链中出现过;
检查发送方的外部账户地址是否与预存账户地址匹配;
检查旧合约地址是否为当前区块链上的智能合约账户地址;
检查交易数据中的数据字段容量是否大于旧合约地址对应的智能合约的数据字段容量。
进一步地,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点的步骤:
由块链框架模块从交易池队列中提取出区块链交易信息,并将提取的区块链交易信息添加到新区块的交易列表中;
获取发起方的账户地址以及该账户地址已建立的合约账户总个数,并根据所述账户地址以及总合约账户个数,计算新智能合约的地址;
根据新合约的地址建立新智能合约节点,并获取交易数据中的旧合约地址对应的旧智能合约节点的存储根值,并将其值赋值到新智能合约节点对应的存储根值中。
进一步地,所述区块链节点还包括计算模块,所述将提取的存储根植赋值到所述新智能合约节点对应的存储根植中的步骤之后,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现以下步骤:
调用计算模块在区块链交易信息的交易数据中提取出构造参数;
以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新。
进一步地,所述以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新的步骤之后,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现以下步骤:
将新智能合约节点存储到区块链中,并反馈区块链最新状态;
根据迁移交易的执行结果组装成数据迁移交易回执结构,并将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端。
进一步地,所述区块链节点还包括共识模块和存储模块,所述将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端的步骤之后,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现以下步骤:
由块链框架模块将新区块提供给共识模块,以供共识模块对新区块进行签名,并将签名后的新区块广播至全网的各个节点,以实现全网共识;
在新区块共识完成后,由共识模块通知所述块链框架模块,以供所述块链框架模块调用存储模块将新区块及新区块所产生的合约数据存储到存储介质中,以完成区块链的更新。
本发明提出的技术方案,所述数据迁移系统通过处理器1001调用存储器1005中存储的数据迁移程序,以实现步骤:先由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点,然后读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值,最终将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。本发明基于存储空间实现区块链智能合约的整合,使得新合约和旧合约可以同时并存互不影响,不会增加区块链存储压力,具备较强的升级容错能力,降低了维护成本,大幅度提高了安全性、可靠性和可实操性。
基于上述数据迁移系统的硬件结构,提出本发明数据迁移方法各个实施例。
参照图2,图2为本发明数据迁移方法第一实施例的流程示意图。
在本实施例中,所述数据迁移方法应用于数据迁移系统,所述数据迁移系统包括客户端和区块链节点,所述数据迁移方法包括:
步骤S10,由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点;
步骤S20,读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值;
步骤S30,将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。
在本实施例中,所述步骤S10之前,所述方法还包括:
步骤A,在接收到发送方发起的数据迁移请求时,由客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构,其中,所述新合约的数据迁移交易结构兼容旧合约的存储结构;
步骤B,由所述客户端获取发送方的外部账户地址、旧合约地址、交易数据及交易签名数据,并结合所述数据迁移交易结构组装成区块链交易信息;
步骤C,由所述客户端将组装成的区块链交易信息发送至区块链节点。
即,在接收到发送方发起的数据迁移请求时,数据迁移系统中的客户端先建立新合约,具体地,客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构。本实施例中,客户端建立新合约对应的数据迁移交易结构是利用智能合约语言支持面向对象的继承特性进行建立的,即新合约可以继承旧合约,因此,客户端在获取到旧合约的存储结构之后,根据旧合约的存储结构建立新合约的数据迁移交易结构,以使新合约的数据迁移交易结构兼容旧合约的存储结构。
客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构之后,进一步获取发送方的外部账户地址、待迁移的旧合约地址、交易数据及交易签名数据,然后根据获取的各项信息以及数据迁移交易结构组装成区块链交易信息。即区块链交易信息包含以下字段:交易发送方的外部账户地址、待迁移的旧合约地址、交易数据、交易签名数据;其中,交易数据包含了新合约编译后的操作码数据和新合约构造函数的输入参数,交易签名数据包含了交易发送方的外部账户地址对应的私钥对该交易结构的签名信息。应当理解,区块链节点可以根据该区块链交易信息的交易结构中的字段值执行新合约的部署和数据迁移。客户端根据获取的各项信息以及数据迁移交易结构组装成区块链交易信息之后,将组装的区块链交易信息发送至区块链节点中。
以下详细介绍本实施例中逐步实现数据迁移的各个步骤:
其中,步骤S10,由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点;
即,客户端将组装的区块链交易信息发送至区块链节点之后,区块链节点接收该区块链交易信息,并基于该区块链交易信息创建新智能合约节点。本实施例中,所述区块链节点包括远程调用模块、点对点模块和块链框架模块,具体地,参照图3,所述步骤S10包括:
步骤S11,由区块链节点的远程调用模块或点对点模块接收客户端发送的区块链交易信息,并由所述远程调用模块或点对点模块对区块链交易信息进行解码;
步骤S12,对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件;
步骤S13,在区块链交易信息对应的各个字段满足各个字段对应的预设条件时,将区块链交易信息放入交易池队列;
步骤S14,由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点。
即,客户端将组装的区块链交易信息发送至区块链节点之后,区块链节点的远程调用模块(Remote Procedure Call Protocol,RPC)或点对点模块(Peer to Peer,P2P)接收客户端发送的区块链交易信息,需要说明的是,远程调用模块或点对点模块只要有其中一者接收客户端发送的区块链交易信息即可,在通过所述远程调用模块或点对点模块接收到区块链交易信息之后,由远程调用模块或点对点模块对接收到的区块链交易信息进行解码,并对解码后的区块链交易信息包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件,本实施例中,所述步骤S12包括:
检查交易签名数据是否符合签名算法;其中,所述检查交易签名数据是否符合签名算法的步骤包括:对区块链交易信息进行解析,以确定解析后的交易签名数据是否与区块链交易信息中原本的交易签名数据匹配。
检查交易数据是否未在当前区块链中出现过。
检查发送方的外部账户地址是否与预存账户地址匹配。
检查旧合约地址是否为当前区块链上的智能合约账户地址。
检查交易数据中的数据字段容量是否大于旧合约地址对应的智能合约的数据字段容量。
当各个字段满足各个字段对应的预设条件时,即交易签名数据符合签名算法、交易数据未在当前区块链中出现过、发送方的外部账户地址与预存账户地址匹配、旧合约地址为当前区块链上的智能合约账户地址、交易数据中的数据字段容量大于旧合约地址对应的智能合约的数据字段容量,在满足上述各个条件之后,远程调用模块或点对点模块将区块链交易信息放入交易池队列中,以便块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点。具体地,参照图4,所述步骤S14包括:
步骤S141,由块链框架模块从交易池队列中提取出区块链交易信息,并将提取的区块链交易信息添加到新区块的交易列表中;
步骤S142,获取发起方的账户地址以及该账户地址已建立的合约账户总个数,并根据所述账户地址以及总合约账户个数,计算新智能合约的地址;
步骤S143,根据新合约的地址建立新智能合约节点,并获取交易数据中的旧合约地址对应的旧智能合约节点的存储根值,并将其值赋值到新智能合约节点对应的存储根值中。
即,块链框架模块从交易池队列中提取出区块链交易信息之后,对区块链交易信息做新区块的交易打包处理,具体地:将提取的区块链交易信息添加到新区块的交易列表中,并获取发起方的账户地址以及该账户地址已建立的合约账户总个数,以根据该账户地址以及合约账户总个数,计算新智能合约的地址,本实施例中,所述根据账户地址及合约账户总个数计算新智能合约的地址对应的方式为:对所述账户地址及合约账户总个数求哈希值,得到新智能合约的地址。为更好理解,举例如下:当前获取的发起方的账户地址为adee,该合约账户总个数为3,那么计算adee+3的哈希值,以将计算的结果作为新智能合约的地址。在块链框架模块计算出新智能合约的地址之后,块链框架模块再根据新智能合约的地址建立新智能合约节点,然后获取交易数据中的旧合约地址对应的旧智能合约节点的存储根值,以将其值赋值到新智能合约节点对应的存储根值中。
其中,步骤S20,读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值;
在创建新智能合约节点之后,区块链节点中的块链框架模块读取区块链交易信息中的旧合约地址,然后在旧合约地址中提取出存储空间的存储根值(StoreageRoot)。
其中,步骤S30,将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。
区块链节点的块链框架模块在旧合约地址中提取出存储空间的存储根值之后,将提取的存储根值赋值到所述新智能合约节点对应的存储根值中,以使新智能合约节点对应的存储根植与旧合约地址中存储空间的存储根植一致,从而实现新合约地址和旧合约地址的一致,以便后续进行数据迁移。
本实施例提出的数据迁移方法,先由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点,然后读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值,最终将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。本发明基于存储空间实现区块链智能合约的整合,使得新合约和旧合约可以同时并存互不影响,不会增加区块链存储压力,具备较强的升级容错能力,降低了维护成本,大幅度提高了安全性、可靠性和可实操性。
进一步地,基于第一实施例提出本发明数据迁移方法的第二实施例。
数据迁移方法的第二实施例与数据迁移方法的第一实施例的区别在于,所述区块链节点还包括计算模块,参照图5,所述步骤S30之后,所述方法还包括:
步骤S40,调用计算模块在区块链交易信息的交易数据中提取出构造参数;
步骤S50,以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新。
在本实施例中,所述区块链节点还包括计算模块,在区块链节点的块链框架模块将提取的存储根植赋值到所述新智能合约节点对应的存储根值中之后,块链框架模块调用计算模块对新合约执行初始化操作,具体的初始化操作为:调用计算模块在区块链交易信息的交易数据中提取出构造参数,然后以该构造参数为输入,在新智能合约节点对应的存储根植中执行新合约的构造函数,并将执行完毕后的存储根植更新到新智能合约的存储根植中,以实现智能合约节点的存储根植的更新。
在本实施例中,通过调用计算模块对新智能合约执行初始化操作,以便后续根据初始化后的新智能合约实现数据的迁移。
进一步地,基于第二实施例提出本发明数据迁移方法的第三实施例。
数据迁移方法的第三实施例与数据迁移方法的第二实施例的区别在于,参照图6,所述步骤S50之后,所述方法还包括:
步骤S60,将新智能合约节点存储到区块链中,并反馈区块链最新状态;
步骤S70,根据迁移交易的执行结果组装成数据迁移交易回执结构,并将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端。
在本实施例中,块链框架模块在调用计算模块对新智能合约执行初始化操作之后,将新智能合约节点存储到区块链中,并反馈区块链最新状态,最终根据上述各个步骤的执行结果组成数据迁移交易回执结构,并将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端。其中,数据迁移交易回执结构主要包含以下字段:交易执行所在的区块号、交易序号、交易哈希、新合约地址,该数据迁移交易回执是数据迁移交易在区块链账本中被执行的凭证,它包含了交易执行结果的关键信息。应当理解,客户端可以通过交易哈希向区块链节点服务查询对应的回执信息。
在本实施例中,通过新合约的建立存储结果组装数据迁移交易回执结构,并组装的将数据迁移交易回执结构反馈至客户端,以便客户端得知执行结果,便于后续执行数据迁移操作。
进一步地,基于第三实施例提出本发明数据迁移方法的第四实施例。
数据迁移方法的第四实施例与数据迁移方法的第三实施例的区别在于,所述区块链节点还包括共识模块和存储模块,参照图7,所述步骤S70之后,所述方法还包括:
步骤S80,由块链框架模块将新区块提供给共识模块,以供共识模块对新区块进行签名,并将签名后的新区块广播至全网的各个节点,以实现全网共识;
步骤S90,在新区块共识完成后,由共识模块通知所述块链框架模块,以供所述块链框架模块调用存储模块将新区块及新区块所产生的合约数据存储到存储介质中,以完成区块链的更新。
在本实施例中,块链框架模块将数据迁移交易回执结构的回执反馈至客户端之后,将新区块提供给共识模块,以供共识模块对新区块进行签名,并将签名后的新区块广播至全网的各个节点,以实现全网共识,在新区块共识完成后,由共识模块通知所述块链框架模块,以供所述块链框架模块调用存储模块将新区块及新区块所产生的合约数据存储到存储介质中,以完成区块链的更新,从而完成整个流程,后续即可根据更新后的区块链实现数据迁移。
本发明进一步提供一种计算机可读存储介质。
所述计算机可读存储介质上存储有数据迁移程序,所述数据迁移程序被处理器执行时实现以下步骤:
由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点;
读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值;
将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。
进一步地,所述由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤之前,所述数据迁移程序被处理器执行时,还实现以下步骤:
在接收到发送方发起的数据迁移请求时,由客户端根据旧合约的存储结构建立新合约对应的数据迁移交易结构,其中,所述新合约的数据迁移交易结构兼容旧合约的存储结构;
由所述客户端获取发送方的外部账户地址、旧合约地址、交易数据及交易签名数据,并结合所述数据迁移交易结构组装成区块链交易信息;
由所述客户端将组装成的区块链交易信息发送至区块链节点。
进一步地,所述区块链节点包括远程调用模块、点对点模块和块链框架模块,所述数据迁移程序被处理器执行时,还实现由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点的步骤:
由区块链节点的远程调用模块或点对点模块接收客户端发送的区块链交易信息,并由所述远程调用模块或点对点模块对区块链交易信息进行解码;
对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件;
在区块链交易信息对应的各个字段满足各个字段对应的预设条件时,将区块链交易信息放入交易池队列;
由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点。
进一步地,所述数据迁移程序被处理器执行时,还实现对解码后的区块链交易中包含的各个字段进行检查,以确定各个字段是否满足各个字段对应的预设条件的步骤:
检查交易签名数据是否符合签名算法;
检查交易数据是否未在当前区块链中出现过;
检查发送方的外部账户地址是否与预存账户地址匹配;
检查旧合约地址是否为当前区块链上的智能合约账户地址;
检查交易数据中的数据字段容量是否大于旧合约地址对应的智能合约的数据字段容量。
进一步地,所述数据迁移程序被处理器执行时,还实现由块链框架模块从交易池队列中提取出区块链交易信息,并对提取的区块链交易信息进行打包处理以创建新智能合约节点的步骤:
由块链框架模块从交易池队列中提取出区块链交易信息,并将提取的区块链交易信息添加到新区块的交易列表中;
获取发起方的账户地址以及该账户地址已建立的合约账户总个数,并根据所述账户地址以及总合约账户个数,计算新智能合约的地址;
根据新合约的地址建立新智能合约节点,并获取交易数据中的旧合约地址对应的旧智能合约节点的存储根值,并将其值赋值到新智能合约节点对应的存储根值中。
进一步地,所述区块链节点还包括计算模块,所述将提取的存储根植赋值到所述新智能合约节点对应的存储根植中的步骤之后,所述数据迁移程序被处理器执行时,还实现以下步骤:
调用计算模块在区块链交易信息的交易数据中提取出构造参数;
以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新。
进一步地,所述以所述构造参数为输入在新智能合约节点对应的存储根植中执行新合约的构造函数,以实现智能合约节点的存储根植的更新的步骤之后,还实现以下步骤:
将新智能合约节点存储到区块链中,并反馈区块链最新状态;
根据迁移交易的执行结果组装成数据迁移交易回执结构,并将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端。
进一步地,所述区块链节点还包括共识模块和存储模块,所述将数据迁移交易回执结构添加到新区块的回执列表中,以反馈至客户端的步骤之后,所述数据迁移程序被处理器执行时,还实现以下步骤:
由块链框架模块将新区块提供给共识模块,以供共识模块对新区块进行签名,并将签名后的新区块广播至全网的各个节点,以实现全网共识;
在新区块共识完成后,由共识模块通知所述块链框架模块,以供所述块链框架模块调用存储模块将新区块及新区块所产生的合约数据存储到存储介质中,以完成区块链的更新。
本发明提出的技术方案,所述数据迁移程序被处理器执行时,实现以下步骤:先由区块链节点接收客户端发送的区块链交易信息,并基于接收到的区块链交易信息创建新智能合约节点,然后读取所述区块链交易信息中的旧合约地址,以在所述旧合约地址中提取存储空间的存储根值,最终将提取的存储根植赋值到所述新智能合约节点对应的存储根值中,以便后续根据新合约的地址实现数据的迁移。本发明基于存储空间实现区块链智能合约的整合,使得新合约和旧合约可以同时并存互不影响,不会增加区块链存储压力,具备较强的升级容错能力,降低了维护成本,大幅度提高了安全性、可靠性和可实操性。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。