一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

重放区块链交易的方法及装置与流程

2023-02-02 01:10:11 来源:中国专利 TAG:


1.本说明书实施例属于区块链技术领域,尤其涉及一种重放区块链交易的方法及装置。


背景技术:

2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以沟通过区块链节点参与实现区块链的相关事务,例如,区块链网络中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(secure multi-party computation,smpc)。
3.在正常运行的区块链网络中,各个区块链节点分别维护相同的区块链账本,即整个区块链网络存在一条区块链。但在区块链交易或智能合约的代码出错、区块链节点的运算性能差异过大等异常情况下,执行某一区块链交易可能导致上述区块链从某一区块开始分裂成多条区块链,即出现区块链分叉。此时,各个区块链节点分别维护的区块有所不同,从而影响区块链网络的正常运行,甚至带来隐私泄露等安全风险。
4.区块链网络的运维人员需要定位引起分叉的交易,并通过查看该交易的交易相关数据分析分叉原因。在相关技术中,当发现区块链出现分叉时,需要由区块链网络的运维人员在交易执行过程产生的日志文件中找到引起分叉的交易对应的交易相关数据,进而通过分析上述日志确定分叉原因。由于区块链节点在交易执行过程中产生的日志文件数目、种类繁杂且往往数据量较大,因此运维人员自行查找上述交易相关数据往往需要耗费较多时间和精力,分叉原因排查过程步骤繁琐,整体排查效率亟待提升。


技术实现要素:

5.本发明的目的在于提供一种重放区块链交易的方法及装置。
6.根据本说明书一个或多个实施例的第一方面,提出了一种重放区块链交易的方法,应用于区块链网络中的任一区块链节点,所述方法包括:
7.在确定所述区块链网络对应的区块链账本分叉为多条平行区块链的情况下,确定引起所述分叉的目标区块链交易,所述目标区块链交易被分别记录在所述多条平行区块链的首个分叉区块中;
8.从所述首个分叉区块中获取所述目标区块链交易并对所述目标区块链交易进行重放,且输出重放过程涉及的交易相关数据,所述交易相关数据被用于分析产生所述分叉的原因。
9.根据本说明书一个或多个实施例的第二方面,提出了一种重放区块链交易的装置,应用于区块链网络中的任一区块链节点,所述装置包括:
10.交易确定单元,用于在确定所述区块链网络对应的区块链账本分叉为多条平行区
块链的情况下,确定引起所述分叉的目标区块链交易,所述目标区块链交易被分别记录在所述多条平行区块链的首个分叉区块中;
11.交易重放单元,用于从所述首个分叉区块中获取所述目标区块链交易并对所述目标区块链交易进行重放,且输出重放过程涉及的交易相关数据,所述交易相关数据被用于分析产生所述分叉的原因。
12.根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
13.处理器;
14.用于存储处理器可执行指令的存储器;
15.其中,所述处理器通过运行所述可执行指令以实现如第一方面和第二方面中任一项所述的方法。
16.根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面和第二方面中任一项所述方法的步骤。
17.在本说明书第一方面的实施例中,由区块链网络中的任一区块链节点在出现分叉的情况下确定引起分叉的目标区块链交易,然后获取该交易并对其进行重放,进而向用户(如区块链网络的运维人员)输出重放过程涉及的交易相关数据。可见,第一方面的实施例针对引起分叉的目标交易实现了针对性重放,从而能够向用户提供该交易的交易相关数据。
18.可以理解的是,本方案由区块链节点自动确定引起分叉的目标区块链交易并对其进行重放,并直接向用户输出目标区块链交易对应的交易相关数据,而无需用户通过分析繁杂的日志文件获得该数据。提升了交易相关数据获取过程的自动化程度,大幅减少了用户的工作量,从而简化了分叉原因排查过程的逻辑和步骤,有助于提升故障排查效率。
附图说明
19.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
20.图1是一示例性实施例提供的一种区块链网络及其分叉过程的示意图。
21.图2是一示例性实施例提供的一种重放区块链交易的方法的流程。
22.图3是一示例性实施例提供的一种重放区块链交易的方法的交互流程。
23.图4是一示例性实施例提供的一种设备的结构示意图。
24.图5是一示例性实施例提供的一种重放区块链交易的装置的框图。
具体实施方式
25.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于
本说明书保护的范围。
26.为了解决相关技术中存在的问题,本说明书提出一种重放区块链交易的方法。具体的,提出了针对引起分叉的目标交易的交易重放方案。请参见图1,图1是一示例性实施例提供的一种区块链网络及其分叉过程的示意图。如图1所示,该方法应用于区块链网络中的任一区块链节点,可以包括下述步骤102-104。
27.步骤102,在确定所述区块链网络对应的区块链账本分叉为多条平行区块链的情况下,确定引起所述分叉的目标区块链交易,所述目标区块链交易被分别记录在所述多条平行区块链的首个分叉区块中。
28.本发明实施例所述的区块链网络会出现分叉,首先结合图2对区块链网络的分叉情况进行示例性介绍。如图2所示,区块链网络201中的包含多个区块链节点,如节点a、节点b、节点c和节点d等。当然,本发明实施例对于所述区块链网络中的节点数量以及网络的内部结构并不进行限定。其中,上述各个节点分别维护有所述区块链网络的区块链账本。如对于任一节点而言,该节点在本地维护有自身参与区块链网络运行的过程中共识通过的各个区块,这些区块所构成的链式结构即为该节点所维护的区块链账本。
29.如前所述,可能存在某些未知原因导致所述区块链网络出现区块链分叉现象,即该网络的区块链账本分叉为多条平行区块链。如图2所示,分叉后的区块链账本202包括两条平行区块链,即ledger1和ledger2。其中,相邻区块之间的箭头用于表征两区块之间的产生顺序,如区块1和区块2之间的箭头表征区块1先于区块2产生,且区块1是区块2的父区块,区块2的头部记录有区块1的区块哈希(hash),其他区块类似,不再赘述。
30.下面对图2所示区块链账本中的各个区块进行说明:任意两相邻区块之间的实线箭头用于表征这两个区块均为当前时刻已经通过共识过程完成上链的链上区块,如图中正常区块~3、区块4.1和区块4.2均为当前时刻的链上区块;而虚线箭头的起点连接的区块为当前时刻待共识的当前区块(尚未上链),如区块5.1和区块5.2均为当前时刻的当前区块。如图2所示,当前时刻ledger1包含正常区块(即正常区块~3)和分叉区块(即区块4.1),当前时刻ledger2包含正常区块(即正常区块~3)和分叉区块(即区块5.1)。对于任一平行区块链所包含的分叉区块,在成块顺序中最先生成的那个分叉区块即为该平行区块链的首个分叉区块,如ledger1的首个分叉区块为区块4.1,ledger2的首个分叉区块为区块4.2。其中,不同平行区块链的首个分叉区块中所包含的交易内容通常相同,而交易回执(receipt)等交易数据并不相同。对于任一平行区块链在当前时刻所包含的链上区块而言,最后上链的那个区块即为链上最新区块,特此说明。
31.另外,分叉后的各个平行区块链,会分别被区块链网络中的不同区块链节点所维护。例如,图2所示的节点a和b分别维护有ledger1,节点c和d分别维护有ledger2等。当然,区块链网络中的区块链账本也可以分叉为3条甚至更多条平行区块链,任一平行区块链可以被该区块链网络中的至少一个区块链节点所维护,本发明实施例并不对此进行限定。下文实施例以图2所示场景为例进行示例性说明。
32.在一实施例中,任一区块链节点也可以从自身连接的客户端或者其他区块链节点处接收针对所述区块链账本是否发生分叉的判断结果,从而根据该判断结果确定区块链账本是否分叉为多条平行区块链。
33.在另一实施例中,区块链节点也可以在参与区块共识时发现区块链账本出现分
叉。例如,所述任一区块链节点可以在针对当前区块(如图2所示的区块5.1和区块5.2)的共识过程中,获取任一其他区块链节点提供的所述当前区块的父哈希;然后对所述父哈希与自身维护的链上最新区块的区块哈希进行比较,在二者不一致的情况下,即可确定所述区块链网络对应的区块链账本分叉为多条平行区块链。实际上,在二者不一致的情况下,可以同时确定所述任一区块链节点和所述任一其他区块链节点分别维护有属于不同平行区块链的区块。其中,所述任一其他区块链节点可以为所述区块链网络中区别于所述任一区块链节点的任一节点。所述任一其他区块链节点所生成的当前区块的区块头部记录有该节点所维护的链上最新区块的哈希,即将自身维护的链上最新区块的哈希作为当前区块的父哈希,换言之,所述任一其他区块链节点提供的当前区块的父哈希即为该节点维护的链上最新区块的哈希。基于此,所述任一区块链节点可以从接收到的所述当前区块的区块头部中提取该区块的父哈希。
34.通过上述父哈希可以理解的是,若所述父哈希与所述任一区块链节点自身维护的链上最新区块的区块哈希不一致,则表明所述任一区块链节点维护的当前最新区块和所述任一其他区块链节点维护的当前最新区块并不相同,如区块中至少部分交易的回执等执行结果不同,所以此时可以确定所述区块链账本出现分叉。反之,若上述父哈希与所述任一区块链节点维护的链上最新区块的区块哈希一致,则可以确定所述区块链账本并未发生分叉。
35.可见,不同的区块链节点在按照相同的顺序分别执行某一区块中的各个交易时,由于未知故障可能导致至少一个交易的执行结果不同(交易回执不同),从而导致两节点分别维护的该区块(在完成上链后即称为链上最新区块)的区块哈希不一致,即导致区块链账本出现分叉。而在两节点分别参与共识下一区块的过程中,即可发现各自的链上最新区块的区块哈希不一致,从而发现区块链账本出现分叉。
36.在确定所述区块链账本发生分叉的情况下,所述任一区块链节点可以直接将所述链上最新区块确定为所述区块链账本对应的首个分叉区块。或者,也可以向维护有与自身所维护平行区块链不同的平行区块链的节点(如所述任一其他区块链节点)请求获取其所维护至少部分区块的区块哈希,如所述链上最新区块及其之前预设数量个区块的区块哈希,然后按照区块顺序将上述区块哈希与本地所维护的相应区块的区块哈希逐一比较,并在任一区块对应的两区块哈希不同的情况下,将该区块确定为所述首个分叉区块。
37.在确定区块链账本出现分叉的情况下,所述任一区块链节点可以进一步确定引起所述分叉的目标区块链交易。例如,可以先确定所述任一区块链节点执行第一平行区块链的首个分叉区块中的各个交易所产生的各个第一类交易回执,并获取任一其他区块链节点执行第二平行区块链的首个分叉区块中的各个交易产生的各个第二类交易回执;然后对各个交易对应的第一类交易回执和第二类交易回执进行比较,并在任一交易的第一类交易回执和第二类交易回执不一致的情况下,将该交易确定为引起所述分叉的目标区块链交易。可以理解的是,任一交易的第一类交易回执由所述任一区块链节点执行该交易产生,第二类交易回执由所述任一区块链节点执行该交易产生。因此,若任一交易的第一类交易回执和第二类交易回执不同,即表明两节点执行该交易的结果不同,从而导致包含该交易的两个首个分叉区块不同,因此可以确定是该交易引起了区块链账本分叉。实际上,除了比较各个交易的交易回执之外,也可以比较交易代码、交易账户等任一交易相关数据,本发明实施
例并不对此进行限定。
38.需要说明的是,在确定区块链账本分叉为多个平行区块链的情况下,所述任一区块链节点即可相应的确定引起分叉的区块链节点所在的区块,即自身维护的首个分叉区块。此时,所述任一区块链节点可以对自身维护的首个分叉区块进行预重放,以得到其中各个交易的第一类交易回执;另外,可以由其他区块链节点对自身维护的首个分叉区块进行预重放,以得到其中各个交易的第二类交易回执,然后所述任一区块链节点可以从其他区块链节点处获取上述第二类交易回执。由于所述任一区块链节点和所述其他区块链节点分别维护的首个分叉交易中的交易及其执行顺序相同,所以可以对各个交易的第一类交易回执和第二类交易回执进行比较:若任一交易的第一类交易回执和第二类交易回执不一致,即表明该交易即为引起所述分叉的目标区块链交易。另外,所述任一区块链节点可以记录所述目标区块链交易的交易哈希,以便后续通过该交易哈希对所述目标区块链交易进行针对性重放。
39.可以理解的是,上述过程实际上涉及到两次重放:在预重放过程中,所述任一区块链节点(和其他区块链节点)会执行首个分叉交易中的全部交易,以获取各个交易的交易回执。而在后续针对性重放过程中,所述任一区块链节点仅需要执行目标区块链交易,以获取该重放过程涉及的交易相关数据(当然,必要时也可以执行目标区块链交易的前序交易并获取相应的交易相关数据)。显然,上述预重放过程是针对多个首个分叉区块(中的全部交易)进行的重放,目的是获取各个交易的交易回执,以便通过对比交易回执确定引起分叉的目标区块链交易,不妨将所述预重放过程称为区块重放;而后续的针对性重放则仅针对前一过程中确定出的目标区块链交易(及其前序交易),目的是获取该交易的交易相关数据,不妨将该重放称为交易重放。
40.在通过上述方式确定所述目标区块链交易后,所述任一区块链节点即可获知目标区块链交易的交易哈希。其中,由于上述方式可能确定出至少一个目标区块链交易,且各个目标区块链节点的交易哈希可以用于唯一标识该交易。
41.步骤104,从所述首个分叉区块中获取所述目标区块链交易并对所述目标区块链交易进行重放,且输出重放过程涉及的交易相关数据,所述交易相关数据被用于分析产生所述分叉的原因。
42.在确定出引起分叉的目标区块链交易之后,所述任一区块链节点可以从所述首个分叉区块中获取该交易并对其进行重放。由于所述目标区块链交易是已经完成上链的交易,所以该交易在当前时刻之前已经被执行过至少一次,所以本发明所述的对目标区块链交易进行重放(或称重放目标区块链交易),可以被理解为重新执行目标区块链交易。
43.在本方案的实施例中,由区块链网络中的任一区块链节点在出现分叉的情况下确定引起分叉的目标区块链交易,然后获取该交易并对其进行重放,进而向用户(如区块链网络的运维人员)输出重放过程涉及的交易相关数据。可见,第一方面的实施例针对引起分叉的目标交易实现了针对性重放,从而能够向用户提供该交易的交易相关数据。
44.可以理解的是,本方案提供简便操作的区块链节点分叉信息收集方案,无需用户通过分析繁杂的日志文件获得该数据。提升了交易相关数据获取过程的自动化程度,大幅减少了用户的工作量,从而简化了分叉原因排查过程的逻辑和步骤,有助于提升故障排查效率。
45.在一实施例中,所述任一区块链节点可以对所述目标区块链交易进行本地重放。例如,所述任一区块链节点可以从本地维护的第一平行区块链的首个分叉区块中获取所述目标区块链交易,并执行获取到的所述目标区块链交易。其中,该节点可以在本地维护的所述首个分叉区块中按照所述交易哈希查询并获取目标区块链交易,具体的,可以获取该交易的交易内容等数据。例如,在所述任一区块链节点为图2所示的节点a的情况下,节点a可以从本地维护的区块4.1中获取目标区块链交易,进而在本地执行该交易。通过该方式,所述任一区块链节点可以在本地重新执行所述目标区块链交易,即实现对目标区块链交易的本地重放。
46.在另一实施例中,所述任一区块链节点也可以对所述目标区块链交易进行远程重放(或称异地重放)。例如,所述任一区块链节点可以向其他区块链节点提供所述目标区块链交易,以由所述其他区块链节点执行所述目标区块链交易;相应的,可以接收所述其他区块链节点返回的所述交易相关数据。所述其他区块链节点即为所述区块链网络中除所述任一区块链节点之外的节点,而所述任一区块链节点可以向至少一个其他区块链节点提供所述目标区块链交易进行重放,如可以向前述实施例提及的所述任一其他区块链节点提供所述目标区块链交易,也可以向区块链网络中的管理节点(在所述任一j并非管理节点的情况下)提供所述目标区块链交易等,不再赘述。例如,在所述任一区块链节点为图2所示的节点a的情况下,节点a可以将目标区块链交易提供至节点c和/或d,以由节点c和/或d在本地执行该交易。通过该方式,所述任一区块链节点可以在其他区块链节点处重新执行所述目标区块链交易,即实现对目标区块链交易的远程重放。
47.其中,作为获取所述任一区块链节点提供的目标区块链交易的节点,所述其他区块链节点所维护的平行区块链可以与所述任一区块链节点所维护的平行区块链相同或不同。例如,所述其他区块链节点维护的链上区块所属的第二平行区块链,可以与所述任一区块链节点维护的链上区块所属的第一平行区块链不同,此时,所述其他区块链节点维护有与所述任一区块链节点不同的平行区块链。或者,所述其他区块链节点维护的链上区块所属的第二平行区块链,也可以与所述任一区块链节点维护的链上区块所属的第一平行区块链相同,此时,所述其他区块链节点维护有与所述任一区块链节点相同的平行区块链。
48.承接于图2场景所对应的前述实施例,在所述任一区块链节点为节点a(其维护的ledger1为第一平行区块链)的情况下,节点a可以将节点b(其有维护ledger1)作为所述其他区块链节点,此时所述任一区块链节点与所述其他区块链节点均维护有第一平行区块链;和/或,节点a也可以将节点c和/或d(分别维护的ledger2为第二平行区块链)作为所述其他区块链节点,此时所述任一区块链节点与所述其他区块链节点均维护有第二平行区块链。
49.当然,在所述其他区块链节点的数量为多个(即所述任一区块链节点向多个节点提供目标区块链交易)的情况下,上述多个其他区块链节点可以既包括维护有上述第一平行区块链的节点(与所述任一区块链节点相同),也可以包括维护有上述第二平行区块链的节点(与所述任一区块链节点不同)。另外,所述区块链账本的分叉后的平行区块链也可能多于两条,此时(获取所述任一区块链节点提供的目标区块链交易的)任一其他区块链节点也可以维护第三平行区块链、第四平行区块链等,不再赘述。通过上述方式,所述任一区块链节点可以通过多种不同类型的区块链节点实现对目标区块链交易的远程重放,从而能够
满足更多样化的重放场景。
50.另外,所述任一区块链节点可以通过多种方式向所述其他区块链节点提供目标区块链交易。例如,可以将从本地获取的所述目标区块链交易发送至其他区块链节点,此时可以由其他区块链节点直接执行所述任一区块链节点本地保存的所述目标区块链交易,有助于确保被执行的交易确实为所述目标区块链交易,从而确保重放的准确性。再例如,考虑到所述区块链网络中的各个节点当前时刻可能还在处理其他区块链事务(如交易转发、交易共识、消息传递等),所以为了减少所述任一区块链节点与所述其他区块链节点之间的数据传输可能随上述区块链事务带来的不利影响,所述任一区块链节点也可以将所述目标区块链交易的交易哈希发送至其他区块链节点,以由所述其他区块链节点根据所述交易哈希在本地维护的平行区块链的首个分叉区块中查询所述目标区块链交易。其中,所述其他节点可以在本地维护的所述首个分叉区块中按照所述交易哈希查询并获取目标区块链交易,具体的,可以获取该交易的交易内容等数据。通过该方式,所述任一区块链节点与所述其他区块链节点之间只需要传递数据量较小的交易哈希即可,有效减少了对p2p(peer-to-peer,点对点)网络带宽的占用,从而有助于减少或避免对正常区块链事务可能造成的不利影响。
51.通过前述实施,所述任一区块链节点可以得到在本地或远程重放,并获取到相应重放过程对应的交易相关数据。在本发明实施例中,所述交易相关数据可以包括下述至少之一:
52.所述目标区块链交易关联的账户地址。例如,伛目标区块链交易为转账交易,则该交易可以关联付款账户的账户地址和收款账户的账户地址;若目标区块链交易为创建账户的交易,则该交易可以关联被创建的新账户的账户地址;若目标区块链交易为调用智能合约的交易(或称合约交易),则该交易可以关联被调用合约的合约账户的账户地址。
53.所述目标区块链交易所调用方法的方法名和方法参数。在目标区块链交易调用方法的情况下,该交易可以关联该方法的方法名和调用过程中涉及的方法参数(即方法的入参)。当然,也可以关联该方法的原始代码、执行结果等。另外,上述目标区块链交易可以调用至少一个方法,而在调用多个方法的情况下,所述任一区块链节点可以获取上述各个方法的方法名、方法参数、原始代码和/或执行结果等数据,不再赘述。当然,被调用的上述方法可以包含在智能合约中,即区块链节点需要调用智能合约执行所述目标区块链交易。
54.所述目标区块链交易所调用智能合约的合约地址、合约方法、输入参数和/或合约代码文件信息。在目标区块链交易调用智能合约的情况下,该交易可以关联该智能合约的合约地址、合约方法、输入参数和/或合约代码文件信息。上述目标区块链交易可以调用至少一个智能合约,而在调用多个智能合约的情况下,所述任一区块链节点可以获取被调用的各个智能合约的合约地址、合约方法、输入参数和/或合约代码文件信息等数据,不再赘述。可以理解的是,对于并不调用智能合约的平台合约,其重放过程涉及的交易相关数据并不包含智能合约的合约地址、合约方法、输入参数和合约代码文件信息中的任一项。
55.所述任一区块链节点执行与所述目标区块链交易相关的读/写操作产生的读写集。节点执行目标区块链交易的过程中可能涉及读/写操作,如读取交易执行前的世界状态,写入交易执行结果等。上述读/写操作所对应数据(即被读取和/或写入的数据)构成的集合,即可视为前述读写集。对此,所述任一区块链节点或所述其他区块链节点可以通过查询执行目标区块链交易前后的世界状态确定并获取上述读写集。
56.在一实施例中,所述首个分叉区块(即目标区块链交易所属的区块)中的各个交易被相应的区块链节点按照一定顺序(即所述执行顺序)依次执行,而目标区块链交易可能并非被第一个执行。基于此,所述首个分叉区块(即目标区块链交易所在的区块)中可能包含执行顺序位于所述目标区块链交易之前的至少一个前序交易,此时所述任一区块链节点可以按照所述执行顺序依次执行所述至少一个前序交易和所述目标区块链交易。其中,所述前序交易可以是按照所述执行顺序处于目标区块链交易之前的至少部分交易(即首个分叉区块中包含的在目标区块链交易之前执行的至少部分交易)。
57.可以理解的是,首个分叉区块中包含的在目标区块链交易之前执行的全部交易中,可能存在某些交易是目标区块链交易所依赖的交易(如执行目标区块链交易需要调用某一合约创建交易创建的智能合约),也可能存在目标区块链交易并不依赖的交易(与目标区块链交易无关)。对此,可以目标区块链交易所依赖的上述交易作为其前序交易,以减少需要执行的前序交易的数量,减轻重放工作量,提升针对目标区块链交易的重放效率。或者,考虑到区块o中执行顺序位于目标区块链交易之前的任一交易是否被目标区块链交易所依赖,可能需要根据所述任一交易的执行结果加以判断,因此也可以将首个分叉区块中执行顺序位于目标区块链交易之前的全部交易作为目标区块链交易的前序交易(此时并不区分各个交易是否被目标区块链交易所依赖),以避免目标区块链交易所依赖的部分交易未被执行可能导致的目标区块链交易执行结果出错甚至执行失败,提升针对目标区块链交易的重放准确度。
58.或者,在确定出前述首个分叉区块之后,所述任一区块链节点也可以重放该区块,即依次重新执行该区块中的全部交易。该区块重放方案可以参见下文图4所对应实施例的记载,此处暂不赘述。
59.由于区块链账本中的各个区块在生成时间上存在先后顺序,相应的,不同区块所包含的区块链交易在执行时间上也存在先后顺序。因此不同区块中的交易分别对应的世界状态存在延续性,对于任一平行区块链中的相邻区块而言,为保证在后区块中的交易执行结果的准确性,可以将前一区块中各个交易执行完毕后的世界状态,作为后一区块中各个交易执行的基础数据。基于此,在另一实施例中,所述任一区块链节点可以先在所述区块链账本中确定所述首个分叉区块的前一区块以及该区块对应的世界状态,然后基于所述世界状态执行所述目标区块链交易。
60.本发明所述区块链节点中的任一区块链节点可以包含多个插件(plugin),任一插件即为用于实现特定功能的功能模块。通过在区块链节点中创建功能插件,可以将区块链节点需要实现的不同功能进行解耦,有助于避免不同功能实现过程中的互相干扰,从而提升功能实现效率以及区块链节点对区块链事务的处理效率。
61.基于此,任一区块链节点执行目标区块链交易的过程可以由该节点包含的多个插件相互配合完成。在一实施例中,所述任一区块链节点可以包含服务插件(service_plugin)、预验证插件(pre_verity_plugin)、链插件(chain_plugin)和执行插件(exec_plugin),其中,所述链插件可以用于管理所述执行插件执行的历史交易。此时,所述预验证插件可以先获取所述链插件管理的所述目标区块链交易,并将所述目标区块链交易发送至所述执行插件执行。其中,在所述任一区块链节点还包含存储插件(storage_plugin)的情况下,该插件可以用于存储当前平行区块链中的各个链上区块,此时所述链插件可以调用
存储插件获取所述目标区块链交易。而所述预验证插件可以确定重放过程涉及的交易相关数据,并通过所述服务插件输出所述交易相关数据。此时,通过上述各个插件的相互配合完成了对目标区块链交易的重放。
62.其中,在所述目标区块链交易为无需调用智能合约的平台交易(如账户创建交易、转账交易等)时,所述执行插件可以直接根据交易中包含的数据完成交易的执行。而在所述目标区块链交易为需要调用智能合约的合约交易时,若所述任一区块链节点还可以包含虚拟机插件(vm_plugin),则执行插件可以调用虚拟机插件执行上述合约交易。例如,在所述目标区块链交易调用智能合约的情况下,所述执行插件可以通过所述虚拟机插件调用并执行所述智能合约;以及,接收所述虚拟机插件返回的执行所述智能合约产生的合约执行数据,并将该数据作为所述交易相关数据转发至所述预验证插件。通过该方式,所述任一区块链节点可以通过内部设置的虚拟机插件重放执行逻辑较为复杂的合约交易,避免执行出错的同时一定程度上提升交易执行效率。
63.上述各个插件相互配合实现目标区块链交易重放的具体过程,可以参见下文图3所对应实施例的详细记载,此处暂不赘述。需要说明的是,在前述远程重放的场景下,用于重放目标区块链交易的其他区块链节点中也可以部署上述插件,并由上述插件获取所述任一区块链节点提供的目标区块链交易并执行该交易,具体过程与所述任一区块链节点中各个插件相互配合执行目标区块链交易的过程并无本质区别,不再赘述。
64.在通过前述方案重放目标区块链交易并获取到相应的交易相关数据后,所述任一区块链节点可以向用户输出该数据。其中,在被执行的对象还包括目标区块链交易的至少一个前序交易的情况下,所述交易相关数据也可以包含所述至少一个前序交易对应的数据,不再赘述。例如,可以将交易相关数据发送至任一区块链节点对应的客户端或者管理设备,以由所述客户端或者所述管理设备向用户展示所述交易相关数据。其中,所述客户端或管理设备可以连接至所述任一区块链节点。所述用户即为所述客户端或管理设备的使用者,如可以为所述区块链网络的运维人员或所述任一区块链节点对应的普通用户等。通过查看上述方式展示出的交易相关数据,所述用户可以分析所述交易相关数据,从而找到引起所述分叉的故障原因。可见该方案有助于协助用户实现对分叉原因的快速定位和排查。
65.图3是一示例性实施例提供的一种重放区块链交易的方法的交互流程。参见图3,所述任一区块链节点可以包含服务插件、预验证插件、链插件、执行插件和虚拟机插件等,所述目标区块链交易的重放过程由上述各个插件相互配合实现。具体的,该过程包含下述步骤301-314。
66.步骤301,客户端向服务插件发起重放请求。
67.步骤302,服务插件响应于所述重放请求确定目标区块链交易(图3中简称目标交易)。
68.在一实施例中,运维人员可以在确定引起分叉的目标区块链交易后,将该交易的交易哈希包含在所述重放请求中发送至所述服务插件,即向服务插件发起针对目标区块链交易的重放请求。此时,服务插件可以直接从所述重放中提取所述交易哈希以确定目标区块链交易,然后转入步骤303。
69.其中,所述任一区块链节点也可以在确定出现分叉的同时,确定所述目标区块链交易的交易哈希。例如,所述任一区块链节点可以执行自身所维护链上最新区块中的各个
交易以得到各个交易对应的第一类交易回执,并从其他节点处获取该节点执行自身所维护链上最新区块中的各个交易得到的各个交易对应的第二类交易回执,然后通过比较各个交易的第一类交易回执和第二类交易,将第一交易回执与第二交易回执不一致的交易确定为引起分叉的目标区块链交易,同时记录该交易的交易哈希。然后可以将该交易哈希包含在分叉通知消息中发送至所述客户端;相应的,所述运维人员可以在查看到该消息后触发(如实施重放确认操作)客户端向所述服务插件发送包含所述交易哈希的重放请求。
70.步骤303,服务插件向预验证插件发起针对目标区块链交易的重放指令。
71.此时,服务插件可以将获取到的目标区块链交易的交易哈希包含在重放指令中发送至预验证插件,已触发预验证插件开始获取并执行目标区块链交易。
72.步骤304,预验证插件向链插件请求获取目标区块链交易。
73.步骤305,链插件查找目标区块链交易。
74.步骤306,链插件将目标区块链交易返回至预验证插件。
75.所述链插件可以用于管理所述执行插件执行的历史交易。响应于预验证插件的请求,链插件可以查找目标区块链交易并将其返回至预验证插件。另外,在所述目标区块链交易存在前序交易的情况下,所述链插件还可以查找相应的前序交易并将其返回至预验证插件。
76.具体的,在所述任一区块链节点还包含存储插件(storage_plugin)的情况下,该插件可以用于存储当前平行区块链中的各个链上区块,此时所述链插件可以调用存储插件获取所述目标区块链交易,如将前述交易哈希发送至存储插件,以由存储插件根据该哈希在自身存储的各个交易中查找相应的目标区块链交易。
77.步骤307,预验证插件获取上一区块对应的世界状态。
78.与获取所述目标区块链交易对应的,预验证插件还可以获取目标区块链交易所在的首个分叉区块的前一区块对应的(该区块中各个交易执行完毕后的)世界状态。例如,上述世界状态可以由前述链插件或存储插件维护,所以链插件可以将上述世界状态与所述目标区块链交易一并返回至预验证插件。再例如,所述世界状态也可以由所述服务插件所维护,此时预验证插件可以向服务插件请求并获取上述世界状态,不再赘述。需要说明的是,前述步骤307与步骤304-036之间并不存在必然的先后顺序。
79.步骤308,预验证插件向执行插件发送目标区块链交易。
80.此时,预验证插件可以将获取到的目标区块链交易发送至执行插件,以触发执行该交易。
81.步骤309a,在目标区块链交易为平台交易的情况下,执行插件执行所述平台交易。
82.步骤310a,执行插件向预验证插件返回账户地址。
83.在所述目标区块链交易为无需调用智能合约的平台交易(如账户创建交易、转账交易等)时,所述执行插件可以直接根据交易中包含的数据完成交易的执行。在执行完毕后,执行插件可以将涉及的账户地址返回至预验证插件。其中,上述账户地址可以为付款账户的账户地址、收款账户的账户地址、新创建的运维人员账户或合约账户的账户地址等,本发明实施例对此并不进行限定。
84.步骤309b,在目标区块链交易为合约交易的情况下,执行插件向虚拟机插件发送所述合约交易。
85.步骤310b,虚拟机插件执行所述合约交易。
86.步骤311b,虚拟机插件通过执行插件向预验证插件返回账户地址、被调用的方法名和方法参数。
87.在所述目标区块链交易为需要调用智能合约的合约交易时,若所述任一区块链节点还可以包含虚拟机插件(vm_plugin),则执行插件可以调用虚拟机插件执行上述合约交易。所述虚拟机插件可以调用并执行智能合约,具体的,其可以通过相应的方法名、方法参数等调用智能合约中的至少一个方法。在所述合约交易执行完毕后,虚拟机插件可以将账户地址(如被调用智能合约的合约账户的账户地址)、方法名、方法参数等返回至预验证插件。
88.需要说明的是,无论是步骤309a-310a执行平台交易的过程中,还是步骤309b-311b执行合约交易的过程中,执行模块和虚拟机模块都可能涉及针对世界状态的更新,上述更新均可以由预验证插件针对步骤307中获取到的世界状态实现。
89.至此,完成针对目标区块链交易的重放过程。
90.步骤312,预验证插件根据账户地址获取相应的读写集。
91.所述执行插件在执行与所述目标区块链交易相关的读/写操作时可能产生读写集。如节点执行目标区块链交易的过程中可能涉及读/写操作,如读取交易执行前的世界状态,写入交易执行结果等。上述读/写操作所对应数据(即被读取和/或写入的数据)构成的集合,即可视为前述读写集。对此,所述任一区块链节点或所述其他区块链节点可以通过查询执行目标区块链交易前后的世界状态确定并获取上述读写集。
92.步骤313,预验证插件通过服务插件向客户端返回交易相关数据。
93.步骤314,客户端展示所述交易相关数据。
94.此时,预验证插件可以将上述交易相关数据返回至客户端,以用于向运维人员展示。其中,不同类型的目标区块链交易所对应的交易相关数据可能不同。例如,对应于步骤309a-310a,所述交易相关数据可以包括执行插件返回的账户地址以及根据账户地址获取到的读写集等数据。对应于步骤309b-311b,所述交易相关数据可以包括所述虚拟机插件返回的账户地址、方法名和方法参数,以及根据该账户地址获取到的读写集等数据。
95.通过查看客户端展示出的上述交易相关数据,所述用户可以分析所述交易相关数据,从而找到引起所述分叉的障原因。可见该方案有助于协助用户实现对分叉原因的快速定位和排查。
96.图4是一示例性实施例提供的一种设备的示意结构图。请参考图4,在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
97.如图5所示,图5是本说明书根据一示例性实施例提供的一种重放区块链交易的装置的框图,该装置可以应用于如图4所示的设备中,以实现本说明书的技术方案。该装置可以应用于区块链网络中的任一区块链节点,所述装置包括:
98.交易确定单元501,用于在确定所述区块链网络对应的区块链账本分叉为多条平行区块链的情况下,确定引起所述分叉的目标区块链交易,所述目标区块链交易被分别记录在所述多条平行区块链的首个分叉区块中;
99.交易重放单元502,用于从所述首个分叉区块中获取所述目标区块链交易并对所述目标区块链交易进行重放,且输出重放过程涉及的交易相关数据,所述交易相关数据被用于分析产生所述分叉的原因。
100.可选的,所述交易确定单元501还用于:
101.在针对当前区块的共识过程中,获取任一其他区块链节点提供的所述当前区块的父哈希;
102.在所述父哈希与所述任一区块链节点维护的链上最新区块的区块哈希不一致的情况下,确定所述区块链网络对应的区块链账本分叉为多条平行区块链。
103.可选的,所述任一区块链节点维护有第一平行区块链的区块,所述交易确定单元501还用于:
104.确定所述任一区块链节点执行第一平行区块链的首个分叉区块中的各个交易所产生的各个第一类交易回执,并获取任一其他区块链节点执行第二平行区块链的首个分叉区块中的各个交易产生的各个第二类交易回执;
105.在任一交易的第一类交易回执和第二类交易回执不一致的情况下,将所述任一交易确定为引起所述分叉的目标区块链交易。
106.可选的,所述交易重放单元502还用于:
107.从本地维护的第一平行区块链的首个分叉区块中获取所述目标区块链交易,并执行获取到的所述目标区块链交易。
108.可选的,
109.所述交易重放单元502还用于:向其他区块链节点提供所述目标区块链交易,以由所述其他区块链节点执行所述目标区块链交易;
110.所述装置还包括远程数据接收单元503,用于接收所述其他区块链节点返回的所述交易相关数据。
111.可选的,所述交易重放单元502还用于:
112.将从本地获取的所述目标区块链交易发送至其他区块链节点;或者,
113.将所述目标区块链交易的交易哈希发送至其他区块链节点,以由所述其他区块链节点根据所述交易哈希在本地维护的平行区块链的首个分叉区块中查询所述目标区块链交易。
114.可选的,所述其他区块链节点维护的链上区块所属的第二平行区块链,与所述任一区块链节点维护的链上区块所属的第一平行区块链不同。
115.可选的,所述首个分叉区块中包含执行顺序位于所述目标区块链交易之前的至少一个前序交易,所述交易重放单元502还用于:
116.按照所述执行顺序依次执行所述至少一个前序交易和所述目标区块链交易。
117.可选的,所述交易重放单元502还用于:
118.在所述区块链账本中确定所述首个分叉区块的前一区块以及该区块对应的世界状态,并基于所述世界状态执行所述目标区块链交易。
119.可选的,所述任一区块链节点包含服务插件、预验证插件、链插件和执行插件,所述链插件用于管理所述执行插件执行的历史交易,所述交易重放单元502还用于:
120.由所述预验证插件获取所述链插件管理的所述目标区块链交易,并将所述目标区块链交易发送至所述执行插件执行;
121.由所述预验证插件确定重放过程涉及的交易相关数据,并通过所述服务插件输出所述交易相关数据。
122.可选的,任一区块链节点还包含虚拟机插件,所述交易重放单元502还用于:
123.在所述目标区块链交易调用智能合约的情况下,通过所述虚拟机插件调用并执行所述智能合约;以及,
124.接收所述虚拟机插件返回的执行所述智能合约产生的合约执行数据,并将所述合约执行数据作为所述交易相关数据转发至所述预验证插件。
125.可选的,所述交易重放单元502还用于:
126.将所述交易相关数据发送至任一区块链节点对应的客户端或者管理设备,以由所述客户端或者所述管理设备向用户展示所述交易相关数据。
127.可选的,所述交易相关数据,包括下述至少之一:
128.所述目标区块链交易关联的账户地址;
129.所述目标区块链交易所调用方法的方法名和方法参数;
130.所述目标区块链交易所调用智能合约的合约地址、合约方法、输入参数和/或合约代码文件信息;
131.所述任一区块链节点执行与所述目标区块链交易相关的读/写操作产生的读写集。
132.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,
就可以很容易得到实现该逻辑方法流程的硬件电路。
133.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
134.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本发明不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
135.虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
136.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
137.本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
138.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
139.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
140.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
141.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
142.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
143.本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
144.本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
145.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
146.以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献