CN112052235A - 一种区块链交易数据迁移的方法及装置 - Google Patents
一种区块链交易数据迁移的方法及装置 Download PDFInfo
- Publication number
- CN112052235A CN112052235A CN202010993812.6A CN202010993812A CN112052235A CN 112052235 A CN112052235 A CN 112052235A CN 202010993812 A CN202010993812 A CN 202010993812A CN 112052235 A CN112052235 A CN 112052235A
- Authority
- CN
- China
- Prior art keywords
- block
- transaction
- detailed information
- node
- execution
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Economics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块链交易数据迁移的方法及装置,该方法包括客户端通过通讯链路向第一区块链节点发送第一迁移指令,获取第一区块链节点发送的区块的详细信息,对区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码,将包含转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点。通过对从迁出交易数据的区块链节点发送的区块的详细信息中交易执行输入的二进制代码进行转化,使得其可以符合迁入交易数据的区块链节点的版本信息,从而可以保证其可以在迁入交易数据的区块链节点能够调用智能合约,保持数据的一致性,同时由于每次迁移只迁移一个区块,能够保证区块的有序性。
Description
技术领域
本发明涉及金融科技(Fintech)领域,尤其涉及一种区块链(Block Chain)交易数据迁移的方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域的区块链技术中,交易数据迁移是一个重要的问题。
由于不同的区块链软件或版本之间的数据存储是异构的,直接复制区块链节点底层存储的数据的话,区块链程序无法正确、有效地解析、处理底层存储数据。假设异构的区块链的上链接口和执行引擎是统一的或可适配来兼容的,则只要能保证部署或交易的输入数据是一致的或输入的数据能适配到新版本正常执行,就可保证区块链迁移的数据是一致的。
现有的技术方案主要采用数据重放的方式。数据重放的方案一般为,首先搭建目标迁移区块链程序版本的区块链节点组成一个新的区块链网络;其次读取原有上链的合约和交易的缓存数据或编写程序,按照区块高度依次顺序调用区块链节点客户端的查询接口,解析待迁移区块链账本上的合约和交易,获得链上所有方法和合约的执行历史及详细数据;最后,按原有的上链交易的运行时序调用新的区块链节点客户端的执行接口重新再执行一遍以完成数据重放。
目前的技术方案由于区块打包共识算法设计具有周期性,其打包数量和次序具有随机性质,重放时无法保证具体的块高下的交易数量和次序。
发明内容
本发明实施例提供一种区块链交易数据迁移的方法及装置,用以解决现有技术中由于区块打包共识算法的周期和次序具有随机性质,重放时无法保证具体的块高下的交易数量和次序的问题。
第一方面,本发明实施例提供一种区块链交易数据迁移的方法,包括:
客户端通过通讯链路通道向第一区块链节点发送第一迁移指令,所述第一迁移指令包括区块高度,以使所述第一区块链节点确定出所述区块高度对应的区块的详细信息;所述第一区块链节点为迁出交易数据的区块链节点;
所述客户端获取所述第一区块链节点发送的区块的详细信息;
所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码;
所述客户端将包含所述转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使所述第二区块链节点根据所述转化的交易执行输入的二进制代码执行所述区块中的交易并进行存储;所述第二区块链节点为迁入交易数据的区块链节点。
上述技术方案中,通过对从迁出交易数据的区块链节点发送的区块的详细信息中交易执行输入的二进制代码进行转化,使得其可以符合迁入交易数据的区块链节点的版本信息,从而可以保证其可以在迁入交易数据的区块链节点能够调用智能合约,保持数据的一致性,同时由于每次迁移只迁移一个区块,能够保证区块的有序性。
可选的,所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码,包括:
所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行符合第二区块链节点的版本条件的代码转化,得到转化后的交易执行输入的二进制代码。
可选的,所述区块高度对应的区块的详细信息包括区块的相关信息、交易列表、交易序号、随机数、发送者地址、发送目标地址和交易执行输入的二进制代码。
可选的,所述区块的相关信息包括区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表和状态根哈希。
第二方面,本发明实施例提供一种区块链交易数据迁移的方法,所述方法包括:
第二区块链节点获取客户端发送的第二迁移指令,所述第二迁移指令包括区块的详细信息,所述区块的详细信息中包括所述客户端对第一区块链节点发送的区块的详细信息中的交易执行输入的二进制代码进行转化后的交易执行输入的二进制代码;所述第一区块链节点为迁出交易数据的区块链节点,所述第二区块链节点为迁入交易数据的区块链节点;
所述第二区块链节点根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
上述技术方案中,通过将客户端发送的迁移指令中区块的详细信息进行执行和存储,无需进行交易的共识,可以提高区块链节点的执行效率和吞吐量,缩短了交易的执行时间。
可选的,所述第二区块链节点根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,包括:
所述第二区块链节点调用区块链虚拟机连接器的交易执行接口,将所述区块的详细信息的交易列表中的交易送入虚拟机中根据所述转化的交易执行输入的二进制代码创建并调用智能合约进行执行。
第三方面,本发明实施例提供一种区块链交易数据迁移的装置,包括:
发送单元,用于通过通讯链路向第一区块链节点发送第一迁移指令,所述第一迁移指令包括区块高度,以使所述第一区块链节点确定出所述区块高度对应的区块的详细信息;所述第一区块链节点为迁出交易数据的区块链节点;
获取单元,用于获取所述第一区块链节点发送的区块的详细信息;
处理单元,用于对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码;
发送单元,还用于将包含所述转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使所述第二区块链节点根据所述转化的交易执行输入的二进制代码执行所述区块中的交易并进行存储;所述第二区块链节点为迁入交易数据的区块链节点。
可选的,所述处理单元具体用于:
对所述区块的详细信息中交易执行输入的二进制代码进行符合第二区块链节点的版本条件的代码转化,得到转化后的交易执行输入的二进制代码。
可选的,所述区块高度对应的区块的详细信息包括区块的相关信息、交易列表、交易序号、随机数、发送者地址、发送目标地址和交易执行输入的二进制代码。
可选的,所述区块的相关信息包括区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表和状态根哈希。
第四方面,本发明实施例提供一种区块链交易数据迁移的装置,包括:
获取单元,用于获取客户端发送的第二迁移指令,所述第二迁移指令包括区块的详细信息,所述区块的详细信息中包括所述客户端对第一区块链节点发送的区块的详细信息中的交易执行输入的二进制代码进行转化后的交易执行输入的二进制代码;所述第一区块链节点为迁出交易数据的区块链节点,第二区块链节点为迁入交易数据的区块链节点;
处理单元,用于根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
可选的,所述处理单元具体用于:
调用区块链虚拟机连接器的交易执行接口,将所述区块的详细信息的交易列表中的交易送入虚拟机中根据所述转化的交易执行输入的二进制代码创建并调用智能合约进行执行。
第五方面,本发明实施例还提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链交易数据迁移的方法。
第六方面,本发明实施例还提供一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块链交易数据迁移的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构的示意图;
图2为本发明实施例提供的一种区块链交易数据迁移的方法的流程示意图;
图3为本发明实施例提供的一种部署合约的二进制代码的示意图;
图4为本发明实施例提供的一种区块链交易数据迁移的装置的结构示意图;
图5为本发明实施例提供的一种区块链交易数据迁移的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种系统架构。如图1所示,该系统架构可以包括第一区块链节点100、客户端200和第二区块链节点300;
其中,客户端200可以为不同的机构使用的客户端200,该客户端200主要是向各区块链节点发送交易数据以及接收各区块链节点反馈的交易结果信息。
第一区块链节点100为迁出交易数据的区块链节点,其可以根据客户端的请求对相应的区块进行组包。
第二区块链节点300为迁入交易数据的区块链节点,其可以把迁入的交易数据执行完成后进行存储。
其中,客户端200与第一区块链节点100和第二区块链节点200的通信是通过RPC通道进行通信的,需要进行RPC编解码。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2详细的示出了本发明实施例提供的一种区块链交易数据迁移的方法的流程,下面将通过客户端、第一区块链节点和第二区块链节点三方交互的形式来描述该交易数据迁移的过程。
如图2所示,该流程具体包括:
步骤201,客户端向第一区块链节点发送第一迁移指令。
在本发明实施例中,在区块链中,每个区块中包含了若干笔交易。区块链节点可通过通讯链路接收区块链客户端发起的指令,该通讯链路可以为RPC(Remote ProcedureCall,远程过程调用)、HTTP(HyperText Transfer Protocol,超文本传输协议)、TCP(Transmission Control Protocol,传输控制协议)等多种通讯协议的链路,并进行处理和响应,返回结果。RPC采用客户机/服务器模式,在区块链中请求程序就是一个区块链客户端,而服务提供程序就是一个区块链节点。区块链节点提供了以区块为维度,调用旧链的RPC客户端接口,获取区块数据并解析为结构化的数据的功能。
客户端在完成和第一区块链节点的RPC服务连接之后,客户端可填入区块高度,拼装查询区块交易信息的报文,完成组包,然后调用发送进程,通过RPC通道发送一个有进程参数和区块高度的第一迁移指令到第一区块链节点的RPC服务端,然后等待应答信息。
步骤202,第一区块链节点向客户端发送区块的详细信息。
当第一区块链节点接收到第一迁移指令之后,就可以根据第一迁移指令中的区块高度,找到该区块高度对应的区块。具体的,在第一区块链节点的RPC服务端,当一个调用信息到达,服务端会获得包含进程参数和区块高度等信息的组包信息,然后基于RPC通讯的底层数据编码协议进行解码,获得具体的区块高度。
第一区块链节点在获得区块高度后,需要计算返回的报文结果。第一区块链节点的底层存储一般为leveldb或rocksdb等文件数据库。第一区块链节点查询底层的数据文件存储数据库中的区块HASH数据表,根据该区块高度可获得该区块高度对应的区块HASH。第一区块链节点查询区块二进制数据表,通过区块HASH查询,并获得区块的二进制代码。在某些区块链中,也可对区块HASH和区块链的二进制代码数据进行缓存,以达到提升查询效率的效果。第一区块链节点根据RLP(Routing Information Protocol,路由信息协议)协议编码对二进制代码进行RLP解码,获得区块的详细信息,并封装为Json格式的数据。第一区块链节点将区块的详细信息封装为RPC协议的结果,并向客户端发送答复信息。
需要说明的是,该区块的详细信息可以包括区块的相关信息、交易列表、交易序号、随机数、发送者地址、发送目标地址和交易执行输入的二进制代码。其中,区块的相关信息包括区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表和状态根哈希等信息。
步骤203,客户端对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码。
当客户端调用进程接收到第一区块节点的答复信息之后,获得进程结果,并对结果数据进行解码,得到区块的详细信息。获取的区块详细信息中,包含了该区块的所有交易列表和区块相关信息(区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表、状态根哈希等信息)。根据区块高度和序号,可解析获得每笔交易的详细信息。交易的详细信息包括了交易的发送者地址,合约地址,交易执行的二进制代码,消耗的gas(燃料)等重要信息。
客户端可以将上述的区块相关信息、交易序号(transactionIndex)、随机数(nonce)、发送者地址、发送目标地址、交易执行输入的二进制代码(input)保存到存储中,供后续步骤使用。
以块高为维度,从区块高度1开始,到区块链旧链的当前最新区块高度,重复以上步骤组装RPC客户端的发送第一迁移指令的报文参数。依次调用旧链的客户端接口,获取每个区块的详细信息,直到获取到迁出交易数据的区块链节点的最大区块高度。
当客户端接收的区块的详细信息之后,需要将老版本的区块链参数、代码翻译成新版本所兼容的内容。例如将老区块链节点间的二进制代码翻译成(转化为)新链的二进制代码,使得旧链的二进制代码能在新链中被正确执行。因此,客户端需要对区块的详细信息中交易执行输入的二进制代码进行符合第二区块链节点的版本条件的代码转化,得到转化后的交易执行输入的二进制代码。
在区块链的交易中,可细分为部署和调用合约执行函数两大类。
以部署为例,介绍下部署的详细过程:
当智能合约源代码编写完后,可以通过智能合约编译器得到其编译合约的二进制代码。当客户端需要部署合约时,需要传入该智能合约的构造参数。客户端将部署请求(合约二进制代码,构造参数)作为交易的输入数据,以此构造出一笔交易,交易经过RLP编码,然后由发送者进行私钥签名,已签名的交易被推送到区块链上的节点。区块链节点验证交易后,存入交易池。轮到该节点出块时,打包交易构建区块,广播给其他节点。其他节点验证区块并取得共识。不同区块链可能采用不同共识算法。其他节点在获得交易编码后,进行验签,然后进行RLP编码的解码,重新获得二进制代码,传入EVM虚拟机后再度执行交易,执行的输入就是这笔部署的二进制代码(智能合约部署的二进制代码)。执行结束后,会获得该笔交易的HASH,经过与其他节点的执行结果中的交易的HASH比对后,一旦检查通过,最终,该交易执行输入的二进制代码,和交易的发送者地址,合约地址,消耗的gas等重要信息被存储到区块的交易列表中,并被存储到所有区块链的节点中。
如图3所示,该图3展示了一笔交易执行输入的二进制代码,其中浅色部分标识了合约二进制部分,深色部分标识了编码后的参数部分,参数值为0x123。
调用合约执行函数的交易和部署合约的类似,区别在于,交易输入的二进制代码变为了所需调用的合约函数定义和参数值的编码。另外,节点在执行时,需要根据合约调用的地址,在链上查找合约部署时所存储的二进制代码和状态变量,以供合约执行函数时获取。
基于上述信息,在获取到区块的详细信息之后,其中区块高度、交易序号、nonce、发送者地址、发送目标地址都是固定的。而二进制代码会被送入到新链中重新被执行,因此需要确保二进制代码能在新链中也能被正常执行,并获得预期的结果。
由于不同区块链版本之间可能会对虚拟机进行升级,相关的输入的二进制代码的协议和数据结构可能发生变化,故需要对二进制代码进行翻译和转化,改为新版本能够兼容的协议和结构。
举例来说,示例一:
在新链的客户端接口中,新增和固化了部分系统合约的地址;而在老链的客户端接口中,这部分地址是随机生成的。在这种情况下,需要对老地址替换为系统合约的地址,就需要由完成翻译二进制代码的工作。
还是以图3所示的部署合约的实例为例,深色部分原有的值为0x123,该参数原有的含义代表为某个业务合约的地址。现在,在新链的EVM中,定义了新的系统合约的业务状态的规则,在所有的部署合约的操作中,0x123的地址需要被改为0x3的系统合约地址。
这时,需要首先对客户端所获得的交易执行输入的二进制代码进行检索,检查其输入的二进制代码参数中是否存在深色部分一致的代码。如果存在,需要分析该笔交易是否为部署交易,检查交易的发送地址是否为0x0,如是,则为部署交易。如果满足这两步,可初步判断这笔交易需要改写。按照合约编码的规则,进一步检查浅色编码部分是否为合约的二进制,对二进制代码参数的前半部分进行解析,通过合约二进制的定义规则和隔断字符,检查前半部分是否为合法的合约编码二进制。如果检查格式合法,则替换该二进制编码的深色部分,为新的定义地址。
示例二:
在新链中升级了智能合约的编译器版本,相同的智能合约在老链中的二进制代码的编译后与新链的编译器生成的二进制代码不同。
在这种场景下,需要获取老链上所有部署的智能合约的代码,并使用老链的智能合约编译器对智能合约进行编译,获得老链的智能合约二进制代码C1;再使用新链的智能合约编译器对智能合约进行编译,获得新链的智能合约二进制代码C2;在两者之间建立起映射关系字典[C1,C2]。
接下来,需要对客户端获得的交易执行输入的二进制代码进行检索,检查是否存在以包含C1内容的二进制代码,如果存在,则使用C2的部分来替换C1的部分。最后,将替换后的输入二进制代码作为待执行的二进制代码。
需要注意的是,由于交易信息的适配改变,必然会导致交易的签名与之前不同。区块链节点在执行交易时可跳过验签的步骤。
示例三:
不同版本的区块链节点程序,其智能合约地址的生成规则可能发生变化。在区块链版本中,不管是部署合约还是调用合约函数,都会触发外部帐号序号追加。但在新版本中,只有部署合约才会触发序号递增。由于合约的地址的生成规则,是账户地址和序号等信息的HASH值,故而,不同的序号递增规则会导致重放后的合约地址出现不同。为此,如果检测到执行的时候是区块链迁移操作,则需要修改新版本的区块链节点的序号的递增规则,保持向前兼容。
以上仅为输入参数变化、合约编译结构变化和智能合约地址生成规则变化的3个具体示例,在实际场景中,依据区块链软件及版本的不同,存在其他众多的翻译(转化)的需求。如果新链和老链的交易输入的二进制码代码的协议和结构定义、虚拟机引擎、合约地址生成规则等完全相同,则无翻译,可直接跳过此步。
步骤204,客户端向第二区块链节点发送第二迁移指令。
当客户端把交易执行输入的二进制代码转化完成之后,就可以向第二区块链节点发送第二迁移指令,该第二迁移指令中包括包含转化后的交易执行输入的二进制代码的区块的详细信息。
客户端拼装了在获取的区块详情中的各项参数,其中包含了当前执行迁移的交易数据的参数和区块高度,区块时间戳,包含所有区块的交易详情的交易列表。其中,列表中的次序,代表了区块内各交易排序的次序。客户端所拼装的区块交易列表为一个list,每个list中的元素为交易的详情信息,是对交易中交易的发送者地址,合约地址,交易执行的二进制代码进行RLP编码后,按顺序对逐个交易添加到交易列表中。
区块的详细信息中包含了以下信息:交易序号(transactionIndex)、nonce、发送者地址、发送目标地址、交易执行输入的二进制代码(input)。其中,交易执行输入的二进制代码(input),可能是经过了转化(翻译)。
交易拼装的规则基于区块链客户端和节点RPC通讯模块或其他区块链对外交互接口中,所约定的接口规则和报文协议的规则;随后提交到第二区块链节点的RPC服务端。
步骤205,第二区块链节点根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
第二区块链节点在接收到客户端发送的区块的详细信息之后,就可以调用以区块链虚拟机连接器的交易执行接口,将区块的详细信息的交易列表中的交易送入虚拟机中根据转化的交易执行输入的二进制代码创建并调用智能合约进行执行。该区块链虚拟机连接器可以为EVMC(Ethereum Virtual Machines connector,以太坊虚拟机连接器),虚拟机可以为EVM(Ethereum Virtual Machines,以太坊虚拟机)。
在传统的方案中,区块链提供了发送交易的接口,但是,无法指定交易的执行顺序和所在的块高,这是因为区块链的参与节点在收到客户端所发送的交易并验证其交易后,会通过共识模块对外广播;在共识阶段,共识节点会从交易池中获取待执行的交易;无论是交易的提交时间、同步阶段还是共识阶段,选取哪些交易和排序顺序都存在很强的不确定性。
在本发明实施例中,支持只有一个区块链节点即可组网。在执行交易数据迁移过程中,可以只有一个区块链节点参与组建区块链节点网络。
新版本的第二区块链节点的RPC通讯模块在收到提交多笔交易的请求后,第二区块链节点会对请求进行解码,重新解析出客户端所请求的各项参数和属性内容。
第二区块链节点会解析出当前执行迁移的参数,判断当前收到的指令属于第二迁移指令,则自动关闭第二区块链节点的共识和打包模块程序的运行,关闭其报文监听和发送的服务端口。
接下来,第二区块链节点准备执行客户端所提交的区块内容,获得区块链的账本和区块执行器。第二区块链节点首先检查当前提交的区块是否合法,判断提交高度是否为当前最高高度+1,同时,检查提交区块的父区块HASH是否与现有最高区块的HASH相同。第二区块链节点初始化区块的各个要素,将客户端传入的区块高度,区块时间戳,共识节点列表,共识节点等进行赋值。共识节点以客户端传入的第一区块链节点的共识节点为准。
第二区块链节点开始准备和打包交易列表,将传入的区块列表使用rlp编码解码,按照该交易详情的交易列表打包为一个区块,按照次序组装每笔交易,获得一个交易列表。在获得交易列表后,第二区块链节点直接跳过打包和共识阶段,直接进入的执行和落盘阶段。
具体的,调用EVMC的交易执行接口,将交易送入到EVM虚拟机中执行,待完成执行后,获得交易执行结果。在智能合约虚拟机中,虚拟机会创建EVM,创建合约,调用合约,执行合约函数。现有的EVMC定义了标准的指令集,提供了解释器的接口,最终会输出执行的结果。在区块链的EVM设计中,同构节点中,输入相同的数据,其输出数据一定是相同的。EVM在收到交易的列表后,会按照列表中的次序,逐笔执行每笔交易,并在全部执行完成后,返回一个最终执行的结果回执。
执行完成后,区块高度+1,同时返回执行的结果,这样可以保证所有交易执行的时间戳与原有的区块时间戳完全一致。区块链节点将区块时间戳修改为客户端所解析的老链的该区块的时间戳,再计算最终的区块结果,基于区块执行结果产生区块HASH,直接落盘。执行落盘的过程为,第二区块链节点将上述解析和修改后的EVM执行结果的上下文,将上下文和区块信息传递给区块链落盘的模块。第二区块链节点的落盘模块会根据程序中所定义的文件数据库的逻辑,将相关的数据写入到文件数据库中。
基于上述步骤,可以从区块高度1开始,到待迁移链的最高高度,逐个区块依次执行以上操作,就可完成整体的数据迁移。
需要说明的是,以上的步骤中,每次提交到EVM中的输入是一个区块的整体,所有该区块的信息和交易列表及次序都是确定的,故而能保证一个区块内所有的区块交易的次序是符合预期的输入中定义的次序。由于调用新链的接口是基于旧链的区块维度严格顺序调用的,只有当新链接口调用执行成功并落盘,才会继续调用下一个区块的数据;故而老链和新链的区块顺序和每个区块中的交易次序都是严格一致的。这样,区别于原有的单笔交易提交一次,可以较少客户端提交交易的次数,不但能确定交易的块高和次序,还能进一步加快上链速度。
在区块链中,智能合约的地址是由当前合约的创建者地址和其账户中的Nonce值,通过HASH计算出来一个地址值,作为合约的地址。通过上述第二区块链节点依照区块顺序和交易列表顺序执行交易的操作,客户端所提交的是一个区块的整体,其交易顺序是在客户端定义的。由于老链和新链的区块顺序和每个区块中的交易次序都是严格一致的,所以新链和老链上每笔交易执行时的合约创建者的账户Nonce必然一致;而交易的from,即账户的创建者的地址也是一样的;这就保证了老链和新链所创建的合约地址一定是相同的。这也就解决现有区块链数据迁移中,存在的合约地址不同的问题。
待所有旧链数据在新链上执行成功,在区块链网络中添加和扩展新的节点。由于区块链网络中,所有的数据是同构的,因此可以在单节点重放完成后,直接将区块链节点的底层文件数据库复制和扩展到多个节点。例如,在区块链常见的底层数据库中,有leveldb或rocksdb的实现,其数据是直接存储于文件中的。只需要定位区块链节点数据文件夹,将其中的数据文件整体复制到其他同构区块链节点的数据目录下。这样,区块链网络在数据迁移完成后,可变更为“正常模式”,其功能和数据不受数据迁移的影响,不存在任何副作用。
将多节点重放改为单节点重放,以节省同步和共识的时间。利用区块链节点的快速同步和复制的功能,可以快速扩展至所需节点数量的区块链节点。
在本发明实施例中,客户端通过RPC通道向第一区块链节点发送第一迁移指令,第一迁移指令包括区块高度,以使第一区块链节点确定出区块高度对应的区块的详细信息,第一区块链节点为迁出交易数据的区块链节点,客户端获取第一区块链节点发送的区块的详细信息,客户端对区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码,客户端将包含转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使第二区块链节点根据转化的交易执行输入的二进制代码执行区块中的交易并进行存储,第二区块链节点为迁入交易数据的区块链节点。通过对从迁出交易数据的区块链节点发送的区块的详细信息中交易执行输入的二进制代码进行转化,使得其可以符合迁入交易数据的区块链节点的版本信息,从而可以保证其可以在迁入交易数据的区块链节点能够调用智能合约,保持数据的一致性,同时由于每次迁移只迁移一个区块,能够保证区块的有序性。
基于相同的技术构思,图4示例性的示出了本发明实施例提供的一种区块链交易数据迁移的装置的结构,该装置可以执行区块链交易数据迁移的流程。
如图4所示,该装置具体包括:
发送单元401,用于通过通讯链路向第一区块链节点发送第一迁移指令,所述第一迁移指令包括区块高度,以使所述第一区块链节点确定出所述区块高度对应的区块的详细信息;所述第一区块链节点为迁出交易数据的区块链节点;
获取单元402,用于获取所述第一区块链节点发送的区块的详细信息;
处理单元403,用于对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码;
发送单元401,还用于将包含所述转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使所述第二区块链节点根据所述转化的交易执行输入的二进制代码执行所述区块中的交易并进行存储;所述第二区块链节点为迁入交易数据的区块链节点。
可选的,所述处理单元403具体用于:
对所述区块的详细信息中交易执行输入的二进制代码进行符合第二区块链节点的版本条件的代码转化,得到转化后的交易执行输入的二进制代码。
可选的,所述区块高度对应的区块的详细信息包括区块的相关信息、交易列表、交易序号、随机数、发送者地址、发送目标地址和交易执行输入的二进制代码。
可选的,所述区块的相关信息包括区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表和状态根哈希。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种区块链交易数据迁移的装置的结构,该装置可以执行区块链交易数据迁移的流程。
如图5所示,该装置具体包括:
获取单元501,用于获取客户端发送的第二迁移指令,所述第二迁移指令包括区块的详细信息,所述区块的详细信息中包括所述客户端对第一区块链节点发送的区块的详细信息中的交易执行输入的二进制代码进行转化后的交易执行输入的二进制代码;所述第一区块链节点为迁出交易数据的区块链节点,第二区块链节点为迁入交易数据的区块链节点;
处理单元502,用于根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
可选的,所述处理单元502具体用于:
调用区块链虚拟机连接器的交易执行接口,将所述区块的详细信息的交易列表中的交易送入虚拟机中根据所述转化的交易执行输入的二进制代码创建并调用智能合约进行执行。
基于相同的技术构思,本发明实施例还提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用存储器中存储的程序指令,按照获得的程序执行上述区块链交易数据迁移的方法。
基于相同的技术构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行计算机可读指令时,使得计算机执行上述区块链交易数据迁移的方法。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种区块链交易数据迁移的方法,其特征在于,包括:
客户端通过通讯链路向第一区块链节点发送第一迁移指令,所述第一迁移指令包括区块高度,以使所述第一区块链节点确定出所述区块高度对应的区块的详细信息;所述第一区块链节点为迁出交易数据的区块链节点;
所述客户端获取所述第一区块链节点发送的区块的详细信息;
所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码;
所述客户端将包含所述转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使所述第二区块链节点根据所述转化的交易执行输入的二进制代码执行所述区块中的交易并进行存储;所述第二区块链节点为迁入交易数据的区块链节点。
2.如权利要求1所述的方法,其特征在于,所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码,包括:
所述客户端对所述区块的详细信息中交易执行输入的二进制代码进行符合第二区块链节点的版本条件的代码转化,得到转化后的交易执行输入的二进制代码。
3.如权利要求1所述的方法,其特征在于,所述区块高度对应的区块的详细信息包括区块的相关信息、交易列表、交易序号、随机数、发送者地址、发送目标地址和交易执行输入的二进制代码。
4.如权利要求1至3任一项所述的方法,其特征在于,所述区块的相关信息包括区块执行的时间戳、区块哈希、父区块哈希、共识节点序号、共识节点列表和状态根哈希。
5.一种区块链交易数据迁移的方法,其特征在于,所述方法包括:
第二区块链节点获取客户端发送的第二迁移指令,所述第二迁移指令包括区块的详细信息,所述区块的详细信息中包括所述客户端对第一区块链节点发送的区块的详细信息中的交易执行输入的二进制代码进行转化后的交易执行输入的二进制代码;所述第一区块链节点为迁出交易数据的区块链节点,所述第二区块链节点为迁入交易数据的区块链节点;
所述第二区块链节点根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
6.如权利要求5所述的方法,其特征在于,所述第二区块链节点根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,包括:
所述第二区块链节点调用区块链虚拟机连接器的交易执行接口,将所述区块的详细信息的交易列表中的交易送入虚拟机中根据所述转化的交易执行输入的二进制代码创建并调用智能合约进行执行。
7.一种区块链交易数据迁移的装置,其特征在于,包括:
发送单元,用于通过通讯链路通道向第一区块链节点发送第一迁移指令,所述第一迁移指令包括区块高度,以使所述第一区块链节点确定出所述区块高度对应的区块的详细信息;所述第一区块链节点为迁出交易数据的区块链节点;
获取单元,用于获取所述第一区块链节点发送的区块的详细信息;
处理单元,用于对所述区块的详细信息中交易执行输入的二进制代码进行转化,得到转化后的交易执行输入的二进制代码;
发送单元,还用于将包含所述转化后的交易执行输入的二进制代码的区块的详细信息发送给第二区块链节点,以使所述第二区块链节点根据所述转化的交易执行输入的二进制代码执行所述区块中的交易并进行存储;所述第二区块链节点为迁入交易数据的区块链节点。
8.一种区块链交易数据迁移的装置,其特征在于,包括:
获取单元,用于获取客户端发送的第二迁移指令,所述第二迁移指令包括区块的详细信息,所述区块的详细信息中包括所述客户端对第一区块链节点发送的区块的详细信息中的交易执行输入的二进制代码进行转化后的交易执行输入的二进制代码;所述第一区块链节点为迁出交易数据的区块链节点,第二区块链节点为迁入交易数据的区块链节点;
处理单元,用于根据转化的交易执行输入的二进制代码重新执行所述区块的详细信息的交易列表中的交易,并在执行完成后将执行完的交易的区块时间戳修改为所述区块的详细信息中的区块时间戳后进行存储。
9.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至6任一项所述的方法。
10.一种计算机可读非易失性存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如权利要求1至6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010993812.6A CN112052235A (zh) | 2020-09-21 | 2020-09-21 | 一种区块链交易数据迁移的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010993812.6A CN112052235A (zh) | 2020-09-21 | 2020-09-21 | 一种区块链交易数据迁移的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112052235A true CN112052235A (zh) | 2020-12-08 |
Family
ID=73604114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010993812.6A Pending CN112052235A (zh) | 2020-09-21 | 2020-09-21 | 一种区块链交易数据迁移的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052235A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765682A (zh) * | 2021-04-07 | 2021-05-07 | 暗链科技(深圳)有限公司 | 区块分布式区块链的区块数据结构、存储介质及电子设备 |
CN113065867A (zh) * | 2021-03-30 | 2021-07-02 | 上海万向区块链股份公司 | 基于数据重放的非兼容性区块链升级系统、方法及介质 |
CN113806335A (zh) * | 2021-09-28 | 2021-12-17 | 杭州溪塔科技有限公司 | 一种应用于区块链的数据迁移方法及装置 |
-
2020
- 2020-09-21 CN CN202010993812.6A patent/CN112052235A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113065867A (zh) * | 2021-03-30 | 2021-07-02 | 上海万向区块链股份公司 | 基于数据重放的非兼容性区块链升级系统、方法及介质 |
CN112765682A (zh) * | 2021-04-07 | 2021-05-07 | 暗链科技(深圳)有限公司 | 区块分布式区块链的区块数据结构、存储介质及电子设备 |
CN113806335A (zh) * | 2021-09-28 | 2021-12-17 | 杭州溪塔科技有限公司 | 一种应用于区块链的数据迁移方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112052235A (zh) | 一种区块链交易数据迁移的方法及装置 | |
CN109840429B (zh) | 智能合约部署、调用方法和装置 | |
CN101202761B (zh) | 一种分布式资源调度系统及其方法 | |
CN110825385B (zh) | React Native离线包的构建方法及存储介质 | |
JP2018530070A (ja) | クラウドベースのコンピューティング環境上の基盤を構築、最適化及び実施するシステム及び方法 | |
US11474796B1 (en) | Build system for distributed applications | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
CN112037061A (zh) | 区块链中交易的处理方法、装置、电子设备及存储介质 | |
CN111651169B (zh) | 基于web容器的区块链智能合约运行方法及系统 | |
CN111736762B (zh) | 数据存储网络的同步更新方法、装置、设备及存储介质 | |
CN111258714B (zh) | 一种区块链智能合约执行方法 | |
CN107222363B (zh) | 一种存储协议一致性测试方法及系统 | |
CN104283947A (zh) | Java script动态合并服务器及其工作过程 | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN113515303B (zh) | 一种项目转型方法、装置和设备 | |
CN112199186B (zh) | 基于智能合约的数据处理方法、装置、设备及存储介质 | |
CN113268239A (zh) | 桌面应用的视图构建方法、装置、设备及存储介质 | |
CN115390846A (zh) | 编译构建方法、装置、电子设备和存储介质 | |
CN114281341A (zh) | 数据结构定义文件的编译方法、装置、计算机设备及介质 | |
JP2019179383A (ja) | Api処理方法、端末、api処理プログラム | |
CN115796190B (zh) | 基于vue和webpack的前端国际化多语言转换方法及系统 | |
CN112035090B (zh) | 基于容器化技术实现智能合约智慧化管理系统及方法 | |
CN114091111B (zh) | 一种区块链智能合约的存储方法及装置 | |
WO2007144891A1 (en) | A method for the distribution of software processes to a plurality of computers | |
CN117348948A (zh) | 一种在自有App上运行的小程序引擎 |
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 |