CN118170771A - 面向无主共识的智能合约并行优化执行方法 - Google Patents
面向无主共识的智能合约并行优化执行方法 Download PDFInfo
- Publication number
- CN118170771A CN118170771A CN202311535241.1A CN202311535241A CN118170771A CN 118170771 A CN118170771 A CN 118170771A CN 202311535241 A CN202311535241 A CN 202311535241A CN 118170771 A CN118170771 A CN 118170771A
- Authority
- CN
- China
- Prior art keywords
- request
- execution
- requests
- read
- parallel
- 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
- 238000000034 method Methods 0.000 title claims description 25
- 238000005457 optimization Methods 0.000 title claims description 13
- 230000005540 biological transmission Effects 0.000 claims description 6
- 238000010923 batch production Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 description 4
- 244000144985 peep Species 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Multi Processors (AREA)
Abstract
一种面向无主共识的智能合约并行优化执行方法,在预执行阶段,各节点按照本地的世界状态并行预执行请求,并记录关键信息后生成有序列表,分析依赖关系并生成有向无环图(DAG)放入到块提案,节点通过共识方式广播其预执行获取的依赖关系、最优调度方式与请求集合;在执行阶段,按照预执行获取的依赖关系以最大并行度执行请求,并在检测到依赖关系更新时将更新的请求重新执行,当其新读/写集与预执行的结果相比发生了变化,将需要重新执行的请求根据其索引排序后依次串行执行、将执行结束且不需要被重新执行的请求的执行结果更新到世界状态,完成请求的提交。本发明通过简单有效且易于实现的重新执行方案,将读/写集发生变化的请求放到重放阶段的最后进行串行的重新执行,在保证并行执行可串行化语义的前提下优化了并行执行的性能,同时也避免了请求回滚的开销大和难实现问题。
Description
技术领域
本发明涉及的是一种智能合约领域的技术,具体是一种面向无主共识的智能合约并行优化执行方法。
背景技术
面向无主共识算法和水平扩展架构,智能合约并行执行主要挑战和机遇是在保证区块链的可串行化语义的前提下,最大限度发挥多核和多机的处理能力,尽量高并行度的执行用户请求。现有智能合约的并行执行方法按照与共识的先后关系大致分为两类:延迟调度(late scheduling)执行和提前调度(early scheduling)执行。延迟调度中,节点直接对请求发起共识,其他节点对共识结果尝试并行执行,当执行结果有冲突时重新执行。提前调度中,主节点预执行请求,再对预执行结果发起共识,从节点根据预执行结果并行执行请求。
发明内容
本发明针对现有延迟调度方法无法提前获取请求间的依赖关系,只能进行盲目的、受限的并行,面临较高频率的执行冲突和回滚请求的问题,以及提前调度方法在执行出错时没有冲突检测和错误恢复机制的问题,提出一种面向无主共识的智能合约并行优化执行方法,能够显著提高重放时请求执行的并行程度,避免需要回滚请求的情况。采用无主共识模块,分布式系统中的多个节点都可以参与预执行分析,并且可以在共识过程中完成数据读取的IO操作以及后续请求块的预执行分析,充分利用在多机扩展场景下各个节点的硬件性能;本发明通过简单有效且易于实现的重新执行方案,将读/写集发生变化的请求放到重放阶段的最后进行串行的重新执行,在保证并行执行可串行化语义的前提下优化了并行执行的性能,同时也避免了请求回滚的开销大和难实现问题。
本发明是通过以下技术方案实现的:
本发明涉及一种面向无主共识的智能合约并行优化执行方法,在预执行阶段,各节点按照本地的世界状态并行预执行请求,并记录关键信息后生成有序列表,分析依赖关系并生成有向无环图(DAG)放入到块提案,节点通过共识方式广播其预执行获取的依赖关系、最优调度方式与请求集合;在执行阶段,按照预执行获取的依赖关系以最大并行度执行请求,并在检测到依赖关系更新时将更新的请求重新执行,当其新读/写集与预执行的结果相比发生了变化,将需要重新执行的请求根据其索引排序后依次串行执行、将执行结束且不需要被重新执行的请求的执行结果更新到世界状态,完成请求的提交。
所述的块提案是指:用一批用户请求构建一个请求集合,将该请求集合以及请求集合的预执行结果,即预执行后获得的读/写集和表明请求间依赖关系和执行顺序的DAG打包进一个区块,作为一个完整的提案。
所述的通过共识方式广播是指:各个节点之间通过消息传递,保证所有节点可以得到一致的提案内容以及在有多个提案时,得到一致的提案顺序。
本发明涉及一种实现上述方法的系统,包括:预执行单元、无主共识单元以及重放单元,其中:预执行单元根据节点维护的本地初始状态以及用户请求内容,并行执行请求,得到各个请求的读/写集,根据读/写集排序请求列表并分析请求间的依赖关系,然后生成表明请求执行顺序的DAG;无主共识单元将请求集合以及预执行结果打包进一个区块,生成一个完整的提案,通过无主共识的信息传递确保所有节点可以得到一致的提案内容和提案顺序;重放单元从无主共识单元的提案结果中获得请求集合以及预执行结果,按照DAG并行执行和提交请求,当有请求执行的读/写集较预执行时发生改变,则在重放的最后重新执行该请求。
技术效果
本发明以预执行—无主共识—重放构成的智能合约并行执行框架,解决了现有并行执行方案无法契合无主共识的问题,提升了智能合约并行执行的速度以及系统处理请求的吞吐量。
附图说明
图1为本发明流程图;
图2为实施例流程图;
图3为实施例重新执行流程图。
具体实施方式
如图1所示,为本实施例涉及一种面向无主共识的智能合约并行优化执行方法,包括:
步骤1)预执行阶段:在构造区块之前,各节点按照本地的世界状态并行预执行请求,并记录读/写集后生成有序列表,分析依赖关系并生成有向无环图(DAG)放入到块提案供后续进行共识。
所述的有序列表是指:统计访问每个给定键的请求的数量,并将其分组到依赖链中,然后根据不同链的长度对其进行排序,将长链中的请求排在短链中的请求前面,并获得一个请求的有序列表。在该列表中,索引较小的请求的执行优先级在索引较大的请求前面。
所述的分析是指:根据读/写集和有序列表,确定请求间的依赖关系并相应地构建一个有向无环图(DAG),表明交易的执行顺序。
所述的依赖关系包括:先读后写(WAR)、先写后写(WAW)和先读后读(RAW),其中:当一个请求写的键与前一个请求读的键相同,则这两个请求在DAG中的对应位置标记为WAR依赖关系;其他两种类型的依赖关系以类似的方式被标记。
当两个请求间存在多个依赖关系,将优先考虑WAW且当两个请求同时具有WAR和RAW依赖关系,将其视为具有WAW依赖关系。
所述的块提案是指:用一批用户请求构建一个请求集合,将该请求集合以及请求集合的预执行结果,即预执行后获得的读/写集和表明请求间依赖关系和执行顺序的DAG打包进一个区块,作为一个完整的提案。
步骤2)各节点通过共识方式广播其预执行获取的依赖关系、最优调度方式与请求集合,并确保所有正确节点可以获得一致的提案内容和提案顺序,即各个节点之间通过消息传递,保证所有节点可以得到一致的提案内容以及在有多个提案时,得到一致的提案顺序。
步骤3)完成共识后,各结点按照预执行获取的依赖关系以最大并行度执行请求,并在检测到依赖关系更新时将更新的请求重新执行,以保证可串行化语义,具体为:每个节点从共识模块中获得一个请求块及其DAG,以批处理的方式进行执行和提交请求。如图3所示,在重放阶段,各节点根据预执行阶段获得的每个请求的读/写集中,请求tx1、tx2和tx4首先并行执行,因为其不依赖于前面的请求;tx4新写了键a,因此在结束时重新执行;请求tx3,tx5和tx6并行执行并因为不存在WAW,在其完成时并行提交,执行结果相当于按顺序执行tx1,tx2,tx5,tx3,tx6,tx4。
所述的批处理是指:并行执行和提交同一个批次中的请求,即每个节点不断地从请求列表中获取一批没有前向依赖关系的请求,然后并行地执行其中的每一个。
所述的没有前向依赖关系的请求是指:1)请求与任何尚未完成的前序请求没有WAW依赖,并且2)对尚未完成的前序请求没有WAR和RAW依赖。
所述的重新执行是指:当其新读/写集与预执行的结果相比发生了变化,将需要重新执行的请求根据其索引排序后依次串行执行、将执行结束且不需要被重新执行的请求的执行结果更新到世界状态,完成请求的提交。
所述的重新执行,发生在重放阶段的末尾;
优选地,当请求的读/写集发生了变化,但在重放阶段访问了更少的键时,并不一定会导致重新执行,即不需要重新执行,具体为:将所有在预执行阶段被访问过的键组合后判断:
1)当请求读/写一个新的键,其他请求在预执行阶段也访问了这个键,那么该请求很可能会引入新的依赖项,在这种情况下,该请求将被重新执行。
2)当请求读取了其他请求在预执行阶段没有访问的新键a,它可能不一定会引入新的依赖关系,但该请求必须等到前序的请求完成。当有前序请求已经写了键a,该请求将立即再次执行;否则可以提交该请求。
3)当请求写了一个其他请求在预执行阶段没有访问的新键b,它可能会影响之前的写和随后的读,所以该请求也必须等到前序的请求完成,然后提交该请求。
经过具体实际实验,在通过Golang编写并以Go-Ethereum作为智能合约代码库,结合以太坊虚拟机(EVM)用于请求执行,使用以太坊交易数据作为测试数据,无主共识方式通过HoneyBadgerBFT算法(Andrew Miller,Yu Xia,Kyle Croman,Elaine Shi,and DawnSong.2016.The Honey Badger ofBFT Protocols.In Proceedings ofthe 2016ACMSIGSAC Conference on Computerand Communications Security(Vienna,Austria)(CCS’16).Association for Computing Machinery,NewYork,NY,USA,31–42.https://doi.org/10.1145/2976749.2978399)实现,将本发明系统实验部署在Amazon EC2平台上,使用m6i.4xlarge实例,该实例使用Intel Xeon Ice Lake 8375C处理器,具有16vCPUs,64GBRAM,操作系统为Ubuntu 20.04LTS。在系统具有4个节点时,系统处理请求的吞吐量为20k交易/s,其执行请求的速度是串行执行时的6.4倍;在系统具有10个节点时,系统处理请求的吞吐量为24k交易/s,其执行请求的速度是串行执行时的6.9倍。
本发明与Block-STM算法相比,Block-STM采用延迟调度的方法,并未提前得到请求的读写集合以及依赖关系,只能进行盲目、受限的并行执行,执行遇到冲突就重新执行,这样导致请求执行的并行度较低,且会出现一个请求被反复多次重新执行的情况,影响系统性能。本发明通过预执行分析请求间的依赖关系,可以自由调整执行顺序,达到较高的并行度。
本发明在预执行阶段获取了区块内请求的读/写集,因此在对该区块进行共识时可以对需要读写的数据预读取,节省重放阶段的IO开销,相较Block-STM与共识的配合更紧密。
本发明与与PEEP算法相比,PEEP通过加锁的方式控制一个请求是否可以执行,而对锁的管理是开销较大的,严重影响系统性能。而本发明根据请求间的依赖关系构建DAG,再根据DAG控制请求的执行顺序,相较于锁管理更高效快捷。
PEEP未设计重新执行策略,为保证并行执行的可串行化语义,需要在开始并行执行前得到完全精确的请求的读/写集。而本发明设计了简单有效的重新执行方案,在预执行分析不够精确的情况下也可以保证并行执行的正确性。
与现有的OCC算法(Yi Lu,Xiangyao Yu,Lei Cao,and SamuelMadden.2020.Aria:A Fast and Practical Deterministic OLTP Database.Proc.VLDBEndow.13,12(jul 2020),2047–2060.https://doi.org/10.14778/3407790.3407808)作为测试对比。在4节点中,OCC的请求执行速度为串行执行的2.7倍,而本发明能达到6.4倍;在10节点中,OCC的请求执行速度为串行执行的2.8倍,而本发明能达到6.9倍。
综上,本发明可以搭载于任何分布式系统和联盟链系统中并在请求执行速度上有明显提升。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
Claims (7)
1.一种面向无主共识的智能合约并行优化执行方法,其特征在于,在预执行阶段,各节点按照本地的世界状态并行预执行请求,并记录关键信息后生成有序列表,分析依赖关系并生成有向无环图(DAG)放入到块提案,节点通过共识方式广播其预执行获取的依赖关系、最优调度方式与请求集合;在执行阶段,按照预执行获取的依赖关系以最大并行度执行请求,并在检测到依赖关系更新时将更新的请求重新执行,当其新读/写集与预执行的结果相比发生了变化,将需要重新执行的请求根据其索引排序后依次串行执行、将执行结束且不需要被重新执行的请求的执行结果更新到世界状态,完成请求的提交。
2.根据权利要求1所述的面向无主共识的智能合约并行优化执行方法,其特征是,所述的块提案是指:用一批用户请求构建一个请求集合,将该请求集合以及请求集合的预执行结果,即预执行后获得的读/写集和表明请求间依赖关系和执行顺序的DAG打包进一个区块,作为一个完整的提案。
3.根据权利要求1所述的面向无主共识的智能合约并行优化执行方法,其特征是,所述的通过共识方式广播是指:各个节点之间通过消息传递,保证所有节点可以得到一致的提案内容以及在有多个提案时,得到一致的提案顺序。
4.根据权利要求1所述的面向无主共识的智能合约并行优化执行方法,其特征是,所述的有序列表是指:统计访问每个给定键的请求的数量,并将其分组到依赖链中,然后根据不同链的长度对其进行排序,将长链中的请求排在短链中的请求前面,并获得一个请求的有序列表,在该列表中,索引较小的请求的执行优先级在索引较大的请求前面。
5.根据权利要求1-4中任一所述的面向无主共识的智能合约并行优化执行方法,其特征是,具体包括:
步骤1)预执行阶段:在构造区块之前,各节点按照本地的世界状态并行预执行请求,并记录读/写集后生成有序列表,分析依赖关系并生成有向无环图(DAG)放入到块提案供后续进行共识;
所述的分析是指:根据读/写集和有序列表,确定请求间的依赖关系并相应地构建一个有向无环图(DAG),表明交易的执行顺序;
所述的依赖关系包括:先读后写(WAR)、先写后写(WAW)和先读后读(RAW),其中:当一个请求写的键与前一个请求读的键相同,则这两个请求在DAG中的对应位置标记为WAR依赖关系;其他两种类型的依赖关系以类似的方式被标记,当两个请求间存在多个依赖关系,将优先考虑WAW且当两个请求同时具有WAR和RAW依赖关系,将其视为具有WAW依赖关系;
步骤2)各节点通过共识方式广播其预执行获取的依赖关系、最优调度方式与请求集合,并确保所有正确节点可以获得一致的提案内容和提案顺序,即各个节点之间通过消息传递,保证所有节点可以得到一致的提案内容以及在有多个提案时,得到一致的提案顺序;
步骤3)完成共识后,各结点按照预执行获取的依赖关系以最大并行度执行请求,并在检测到依赖关系更新时将更新的请求重新执行,以保证可串行化语义,具体为:每个节点从共识模块中获得一个请求块及其DAG,以批处理的方式进行执行和提交请求,如图3所示,在重放阶段,各节点根据预执行阶段获得的每个请求的读/写集中,请求tx1、tx2和tx4首先并行执行,因为其不依赖于前面的请求;tx4新写了键a,因此在结束时重新执行;请求tx3,tx5和tx6并行执行并因为不存在WAW,在其完成时并行提交,执行结果相当于按顺序执行tx1,tx2,tx5,tx3,tx6,tx4;
所述的批处理是指:并行执行和提交同一个批次中的请求,即每个节点不断地从请求列表中获取一批没有前向依赖关系的请求,然后并行地执行其中的每一个;
所述的没有前向依赖关系的请求是指:1)请求与任何尚未完成的前序请求没有WAW依赖,并且2)对尚未完成的前序请求没有WAR和RAW依赖;
所述的重新执行是指:当其新读/写集与预执行的结果相比发生了变化,将需要重新执行的请求根据其索引排序后依次串行执行、将执行结束且不需要被重新执行的请求的执行结果更新到世界状态,完成请求的提交;
所述的重新执行,发生在重放阶段的末尾。
6.根据权利要求5所述的面向无主共识的智能合约并行优化执行方法,其特征是,当请求的读/写集发生了变化,但在重放阶段访问了更少的键时,并不一定会导致重新执行,即不需要重新执行,具体为:将所有在预执行阶段被访问过的键组合后判断:
1)当请求读/写一个新的键,其他请求在预执行阶段也访问了这个键,那么该请求很可能会引入新的依赖项,在这种情况下,该请求将被重新执行;
2)当请求读取了其他请求在预执行阶段没有访问的新键a,它可能不一定会引入新的依赖关系,但该请求必须等到前序的请求完成,当有前序请求已经写了键a,该请求将立即再次执行;否则可以提交该请求;
3)当请求写了一个其他请求在预执行阶段没有访问的新键b,它可能会影响之前的写和随后的读,所以该请求也必须等到前序的请求完成,然后提交该请求。
7.一种实现权利要求1-6中任一所述方法的面向无主共识的智能合约并行优化执行系统,其特征在于,包括:预执行单元、无主共识单元以及重放单元,其中:预执行单元根据节点维护的本地初始状态以及用户请求内容,并行执行请求,得到各个请求的读/写集,根据读/写集排序请求列表并分析请求间的依赖关系,然后生成表明请求执行顺序的DAG;无主共识单元将请求集合以及预执行结果打包进一个区块,生成一个完整的提案,通过无主共识的信息传递确保所有节点可以得到一致的提案内容和提案顺序;重放单元从无主共识单元的提案结果中获得请求集合以及预执行结果,按照DAG并行执行和提交请求,当有请求执行的读/写集较预执行时发生改变,则在重放的最后重新执行该请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311535241.1A CN118170771A (zh) | 2023-11-17 | 2023-11-17 | 面向无主共识的智能合约并行优化执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311535241.1A CN118170771A (zh) | 2023-11-17 | 2023-11-17 | 面向无主共识的智能合约并行优化执行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118170771A true CN118170771A (zh) | 2024-06-11 |
Family
ID=91354041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311535241.1A Pending CN118170771A (zh) | 2023-11-17 | 2023-11-17 | 面向无主共识的智能合约并行优化执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118170771A (zh) |
-
2023
- 2023-11-17 CN CN202311535241.1A patent/CN118170771A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113743941B (zh) | 一种在区块链中执行交易的方法、区块链和主节点 | |
EP3111325B1 (en) | Automatically retrying transactions with split procedure execution | |
US8364909B2 (en) | Determining a conflict in accessing shared resources using a reduced number of cycles | |
US20160299760A1 (en) | Methods and systems for performing a replay execution | |
US10621156B1 (en) | Application schemas for journal-based databases | |
US9037554B2 (en) | Bloom bounders for improved computer system performance | |
US11048669B2 (en) | Replicated state management using journal-based registers | |
CN101611380A (zh) | 推测性吞吐量计算 | |
US20180300147A1 (en) | Database Operating Method and Apparatus | |
US11372837B2 (en) | Transaction repair | |
US20180300146A1 (en) | Database operating method and apparatus | |
CN113743950A (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
CN113743942A (zh) | 交易执行方法、区块链、主节点和主存储设备 | |
CN115098594A (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
TWI774643B (zh) | 資料庫操作方法及裝置 | |
CN115760405A (zh) | 交易执行方法、装置、计算机设备及介质 | |
CN113744062B (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
CN113744061A (zh) | 一种在区块链中执行交易的方法、区块链、和从节点 | |
CN117743459A (zh) | 增量数据的同步方法、装置、系统、电子设备及可读介质 | |
US8381195B2 (en) | Implementing parallel loops with serial semantics | |
CN118170771A (zh) | 面向无主共识的智能合约并行优化执行方法 | |
Lynden et al. | Dynamic data redistribution for MapReduce joins | |
CN110851178B (zh) | 一种基于分布式图可达计算的过程间程序静态分析方法 | |
US20050251795A1 (en) | Method, system, and program for optimizing code | |
CN114661756B (zh) | 基于异构架构的图上两点间k跳约束下的简单路径查询系统和方法 |
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 |