WO2021036258A1 - Procédé et appareil d'exécution de transactions en parallèle dans une chaîne de blocs - Google Patents

Procédé et appareil d'exécution de transactions en parallèle dans une chaîne de blocs Download PDF

Info

Publication number
WO2021036258A1
WO2021036258A1 PCT/CN2020/082690 CN2020082690W WO2021036258A1 WO 2021036258 A1 WO2021036258 A1 WO 2021036258A1 CN 2020082690 W CN2020082690 W CN 2020082690W WO 2021036258 A1 WO2021036258 A1 WO 2021036258A1
Authority
WO
WIPO (PCT)
Prior art keywords
transaction
task
processed
buffer
variable
Prior art date
Application number
PCT/CN2020/082690
Other languages
English (en)
Chinese (zh)
Inventor
刘晓建
张兆勇
Original Assignee
创新先进技术有限公司
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 创新先进技术有限公司 filed Critical 创新先进技术有限公司
Publication of WO2021036258A1 publication Critical patent/WO2021036258A1/fr

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Definitions

  • the embodiments of this specification relate to the field of blockchain technology, and more specifically, to a method and device for concurrently executing transactions in a blockchain.
  • Blockchain technology is built on a peer-to-peer (P2P) network. It uses a chained data structure to verify and store data, uses a distributed node consensus algorithm to generate and update data, and uses cryptography to ensure the security of data transmission and access.
  • a new distributed infrastructure and computing paradigm that uses smart contracts composed of automated script codes to program and manipulate data.
  • Blockchain technology also known as distributed ledger technology, is a decentralized distributed database technology, which is characterized by decentralization, openness and transparency, non-tampering, and trustworthiness. Every piece of data in the blockchain will be broadcast to the blockchain nodes of the entire network, and each full node has a full amount of consistent data.
  • the nodes in the blockchain conduct transactions such as transfers and deposit data by sending transactions.
  • the accounting nodes in the blockchain collect transactions in the blockchain in the transaction pool, execute the transactions, and execute the transactions After that, these transactions are packaged into blocks and spread to the blockchain.
  • the verification node in the blockchain will verify the block sent from the accounting node. After the verification is passed, each node will execute each transaction included in the block when it receives the block. In order to ensure the data consistency of each node, when multiple transactions in the block are executed in each node, the order of submission of the multiple transactions needs to be consistent, so that consistent execution results can be obtained.
  • the accounting node before executing the transaction, the accounting node will number multiple transactions to be executed according to predetermined rules, and execute multiple transactions in sequence in the order of the numbers, that is, submit multiple transactions in turn, and other After receiving the block, the node also executes and submits the multiple transactions in sequence according to the above-mentioned transaction number sequence.
  • the multiple transactions are not necessarily mutually dependent. In the case where there is no dependency between the two transactions, concurrent execution of the two transactions does not affect the final result. And if there are dependencies between two transactions executed concurrently, the concurrent execution will affect the final result.
  • one aspect of this specification provides a method for concurrently executing transactions in a blockchain.
  • the method is executed on a first node in the blockchain, and a first execution entity is preset in the first node.
  • the first executor is currently processing a first transaction, and the method executed by the first executor includes:
  • the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task are recorded in a predetermined memory, so as to be relative to the first to-be-processed task.
  • the transaction enters the waiting process, and the predetermined memory can only be accessed by the first executive body;
  • the second to-be-processed task is continued to be executed based on the execution information corresponding to the second to-be-processed task, wherein the multiple to-be-processed tasks include The second task to be processed.
  • the method further includes, in a case where it is determined that the waiting processes of the multiple to-be-processed tasks are not finished, obtaining the second transaction to be processed from the first buffer in the shared memory, and Start the execution of the second transaction.
  • the predetermined memory includes a second buffer area, wherein, after a predetermined operation is performed in the process of processing the first transaction, the first to-be-processed task corresponding to the first transaction and the first to-be-processed task corresponding to the first transaction are recorded in the predetermined memory, and
  • the execution information corresponding to the first task to be processed includes, after processing the first transaction, in the case where it is determined that the second transaction has not been submitted, the first task to be processed corresponding to the first transaction is recorded in the second buffer.
  • a processing task wherein the second transaction is the previous transaction of the first transaction according to a predetermined submission order.
  • determining whether there are pending tasks waiting for the end of the process includes: determining the first transaction based on the current transaction that should be submitted recorded in the shared memory Whether the waiting process of the pending task corresponding to the smallest transaction number in the second buffer zone is over, to determine whether there is a pending task waiting for the end of the process in the second buffer zone, wherein the transaction number corresponds to the transaction submission sequence .
  • continuing to execute the second to-be-processed task includes: In the case where the waiting process of the second to-be-processed task in the second buffer is over, continue to perform the submission of the third transaction based on the execution information corresponding to the second to-be-processed task, wherein the second to-be-processed task Corresponds to the third transaction.
  • the predetermined memory includes a third buffer
  • the first transaction includes a read operation of the first variable
  • the predetermined operation is performed after the predetermined operation is performed in the process of processing the first transaction.
  • Recording in the memory the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task includes, after requesting the reading of the first variable, in the third buffer
  • the first task to be processed corresponding to the first transaction is recorded, wherein the first task to be processed includes a record of the first variable.
  • the third buffer includes the second to-be-processed task, and the second to-be-processed task corresponds to the read operation of the second variable in the second transaction.
  • determining whether there is a pending task waiting for the end of the process includes determining whether the variable value of the second variable is returned, and in determining whether the variable value of the second variable is returned , It is determined that the waiting process of the second to-be-processed task ends.
  • determining whether there are pending tasks that are waiting for the end of the process includes: for the multiple to-be-processed tasks that have been recorded in the third buffer , Based on the descending order of the transaction number corresponding to each task to be processed, determine in turn whether the waiting process of each task to be processed is over, wherein the second task to be processed is the first determined task to be processed after the waiting process ends, where , The transaction number corresponds to the predetermined submission sequence of the transaction.
  • determining whether the variable value of the second variable is returned includes determining whether the variable value of the second variable is returned based on whether the variable value of the second variable is stored at a predetermined address, wherein The predetermined address corresponds to the first executive body and the second transaction.
  • continuing to execute the second to-be-processed task includes: When there is a second task to be processed waiting for the process to end in the third buffer, the second transaction is continued to be executed based on the execution information corresponding to the second task to be processed and the variable value of the second variable.
  • the predetermined memory includes a fourth buffer
  • the first transaction includes a read operation of the first variable, wherein, after the predetermined operation is performed in the process of processing the first transaction, the predetermined operation is performed after the predetermined operation is performed in the process of processing the first transaction.
  • Recording the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task in the memory includes, after executing the code of the read operation, determining that the submission sequence is before the first transaction, And whether each transaction that has not been submitted is a conflict transaction in which the write operation to the first variable has been performed, and the each transaction includes a second transaction, in the case of determining that the second transaction is the closest conflict transaction to the first transaction
  • the first task to be processed corresponding to the first transaction is recorded, wherein the first task to be processed includes the record of the second transaction.
  • determining whether there are pending tasks waiting for the end of the process includes: determining whether there is a transaction that should be submitted currently recorded in the shared memory Whether there is a to-be-processed task waiting for the end of the process among the multiple to-be-processed tasks recorded in the fourth buffer.
  • the predetermined memory includes a fifth buffer
  • the first transaction includes a read operation of the first variable
  • the Recording the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task in the memory includes, after executing the code of the read operation, inferring that the order of submission is before the first transaction, And whether each transaction that has not been submitted is a conflict transaction that is about to write the first variable, and each transaction includes a second transaction.
  • the first task to be processed corresponding to the first transaction is recorded in the fifth buffer zone, wherein the first task to be processed includes a record of the second transaction.
  • the predetermined memory includes at least one buffer, and the at least one buffer corresponds to at least one task to be processed, wherein, for multiple tasks to be processed that have been recorded in the predetermined memory, Determining whether there are pending tasks waiting for the end of the process includes determining whether there are pending tasks waiting for the end of the process in each buffer based on a predetermined sequence of the at least one buffer.
  • Another aspect of this specification provides a device for concurrently executing transactions in the blockchain.
  • the device is deployed in the first executive body of the first node in the blockchain, and the first node is preset with the first The executive body, the first executive body is currently processing a first transaction, and the device includes:
  • the recording unit is configured to record the first task to be processed corresponding to the first transaction and execution information corresponding to the first task to be processed in a predetermined memory after performing a predetermined operation in the process of processing the first transaction, to Compared with the first transaction entering the waiting process, the predetermined memory can only be accessed by the first executive body;
  • the determining unit is configured to, for the multiple pending tasks that have been recorded in the predetermined memory, determine whether there is a pending task waiting for the end of the process among them;
  • the continuing execution unit is configured to continue to execute the second to-be-processed task based on the execution information corresponding to the second to-be-processed task in a case where it is determined that the waiting process corresponding to the second to-be-processed task is over, wherein the The multiple to-be-processed tasks include the second to-be-processed task.
  • the device further includes a transaction execution unit configured to, in a case where it is determined that the waiting processes of the multiple pending tasks are not finished, obtain the pending tasks from the first buffer in the shared memory. Process the second transaction, and start execution of the second transaction.
  • the predetermined memory includes a second buffer area, wherein the recording unit is further configured to, after processing the first transaction, in a case where it is determined that the second transaction has not been submitted, in the first transaction
  • the first to-be-processed task corresponding to the first transaction is recorded in the second buffer zone, wherein the second transaction is the previous transaction of the first transaction according to a predetermined submission order.
  • the determining unit is further configured to determine whether the waiting process of the task to be processed corresponding to the smallest transaction number in the second buffer is over based on the transaction currently to be submitted recorded in the shared memory, to It is determined whether there is a task to be processed waiting for the end of the process in the second buffer zone, wherein the transaction number corresponds to the submission sequence of the transaction.
  • the continuing execution unit is further configured to, in a case where it is determined that there is a second to-be-processed task waiting for the end of the process in the second buffer, based on the execution corresponding to the second to-be-processed task Information, continue to perform the submission of the third transaction, wherein the second pending task corresponds to the third transaction.
  • the predetermined memory includes a third buffer area
  • the first transaction includes a read operation of the first variable
  • the recording unit is further configured to, upon request, the first variable After the variable is read, the first to-be-processed task corresponding to the first transaction is recorded in the third buffer, wherein the first to-be-processed task includes a record of the first variable.
  • the third buffer includes the second to-be-processed task, the second to-be-processed task corresponds to a reading operation of the second variable in the second transaction, and the determining unit further It is configured to determine whether the variable value of the second variable is returned, and in a case where it is determined that the variable value of the second variable is returned, it is determined that the waiting process of the second to-be-processed task ends.
  • the determining unit is further configured to, for the multiple pending tasks that have been recorded in the third buffer, based on each pending task
  • the transaction numbers corresponding to the tasks are in descending order to determine whether the waiting process of each task to be processed is completed, wherein the second task to be processed is the task to be processed at the end of the waiting process that is determined for the first time, and the transaction number is Corresponds to the predetermined submission order of the transaction.
  • the determining unit is further configured to determine whether the variable value of the second variable is returned based on whether the variable value of the second variable is stored at the predetermined address, wherein the predetermined address is the same as the variable value of the second variable.
  • the first executive body corresponds to the second transaction.
  • the continuing execution unit is further configured to, in a case where it is determined that there is a second to-be-processed task waiting for the end of the process in the third buffer, based on the execution corresponding to the second to-be-processed task Information and the variable value of the second variable, continue to execute the second transaction.
  • the predetermined memory includes a fourth buffer
  • the first transaction includes a reading operation of the first variable
  • the recording unit is further configured to: After operating the code, it is determined whether each transaction whose submission sequence is before the first transaction and is not submitted is a conflict transaction in which the write operation of the first variable has been performed, and the second transaction is included in each transaction. In the case where the second transaction is a conflicting transaction closest to the first transaction, the first pending task corresponding to the first transaction is recorded in the fourth buffer, wherein the first pending task includes the second transaction record of.
  • the determining unit is further configured to determine whether there is a pending task waiting for the end of the process among the multiple pending tasks recorded in the fourth buffer based on the transaction currently to be submitted recorded in the shared memory. Processing tasks.
  • the predetermined memory includes a fifth buffer area
  • the first transaction includes a reading operation of a first variable
  • the recording unit is further configured to: After operating the code, it is inferred whether each transaction whose submission sequence is before the first transaction and is not submitted is a conflict transaction that will write the first variable.
  • the each transaction includes a second transaction, and the second transaction is inferred.
  • the transaction is a conflicting transaction closest to the first transaction
  • the first pending task corresponding to the first transaction is recorded in the fifth buffer, wherein the first pending task includes a second transaction record of.
  • the predetermined memory includes at least one buffer, and the at least one buffer corresponds to at least one task to be processed, wherein the determining unit is further configured to, based on the at least one buffer To determine whether there are pending tasks waiting for the end of the process in each buffer.
  • Another aspect of this specification provides a computer-readable storage medium on which a computer program is stored.
  • the computer program is executed in a computer, the computer is caused to perform any of the above methods.
  • Another aspect of this specification provides a computing device, including a memory and a processor, wherein the memory stores executable code, and when the processor executes the executable code, any one of the above methods is implemented.
  • the processing of the transaction is suspended when the transaction needs to be waited during the execution of the transaction, the processing information of the transaction is recorded, and the other pending processing of the execution body is obtained from the buffer.
  • the task is processed, and after the waiting process is over, the execution body will continue to execute the transaction, thereby reducing the waiting time of the execution body and speeding up the overall speed of concurrent execution of the transaction.
  • Fig. 1 shows a schematic diagram of a blockchain system according to an embodiment of the present specification
  • Figure 2 shows a schematic diagram of each node in the blockchain executing transactions concurrently through multiple threads
  • Fig. 3 shows a flowchart of a method for concurrently executing transactions in a blockchain according to an embodiment of the present specification
  • Fig. 4 shows a device 400 for concurrently executing transactions in a blockchain according to an embodiment of the present specification.
  • Fig. 1 shows a schematic diagram of a blockchain system according to an embodiment of the present specification.
  • the system includes multiple nodes (six nodes are schematically shown in the figure) constituting a blockchain, and these nodes are connected in pairs, including node 11, node 12, and node 13, for example.
  • some nodes collect multiple transactions in the blockchain and put them into the transaction pool and compete for the right to keep accounts.
  • the node 11 in the figure becomes a billing node by acquiring the billing right.
  • node 11 becomes an accounting node, it will execute multiple transactions in its transaction pool, package the multiple transactions into blocks and send them to other nodes, for example, to node 12.
  • the node 12 will verify the block and execute multiple transactions in the block in the same way. After a predetermined number of nodes verify the block, that is, a consensus on the block is reached, other nodes in the blockchain (such as node 13) will not need to continue to verify the block, but directly The transactions in this block are executed to update local related data.
  • Figure 2 shows a schematic diagram of each node in the blockchain executing transactions concurrently through multiple threads. It can be understood that the thread can also be replaced by an execution body such as a process and a coroutine.
  • the number of CPUs is limited, and the number of preset threads is also fixed. For example, assuming that the number of CPUs of the node is 4, the number of CPUs preset in the thread pool is The number of threads is 6, so that 6 threads compete to preempt the CPU, and only after the CPU is preempted, can the tasks in the task pool begin to be executed.
  • the calculation of multiple variables may be involved in the multiple transactions.
  • the order of execution will not affect The final calculation result, and in the case of two transactions involving the same variables, the order of execution will affect the final calculation result.
  • the conflicts of access variables between transactions are considered, so that some of the threads executed in parallel are The thread needs to go through a waiting process. Or you need to wait while waiting to return to access storage.
  • the graph includes the shared memory of the first node.
  • the shared memory includes, for example, a buffer 1 for indicating transactions to be processed.
  • the shared memory is readable and writable with respect to all threads. For example, there are currently 10 pending transactions 1, 2,...10 recorded in the first buffer.
  • the bit boxes corresponding to the numbers 1, 2,..., 10 in the figure should all be 1, indicating that they are all It is a transaction to be processed, where the serial number of transaction 1-10 corresponds to the order of submission of each transaction.
  • threads 1 to 4 preempt CPUs 1 to 4, respectively, so that threads 1 to 4 can respectively obtain a task from the first buffer for processing, for example, threads 1 to 4 start processing transactions respectively 1 to 4.
  • threads 1 to 4 After threads 1 to 4 start to process transactions 1 to 4, they respectively modify the corresponding bits of transactions 1 to 4 in the first buffer to 0 to indicate that these transactions have been executed. It can be understood that although the figure schematically shows that thread 1 preempts CPU1 and executes transaction 1, thread 2 preempts CPU2 and executes transaction 2, etc., it can be understood that the content shown in the figure is only for illustrative purposes. The number, CPU number, and transaction number do not correspond to each other. For example, thread 1 may preempt CPU2, execute transaction 3, and so on.
  • Fig. 2 also shows a predetermined memory allocated only to thread 3, and the predetermined memory may include multiple buffers, where each buffer corresponds to a waiting process.
  • Figure 2 schematically shows four buffers in the predetermined memory, buffers 2 to 5, for example, buffer 2 corresponds to the waiting process of completing the transaction and waiting for submission, and buffer 3 is required to read and wait
  • the waiting process of returning the value of the variable corresponds to the waiting process of waiting for the previous transaction to be submitted based on the variable write record before the buffer 4 is corresponding to the waiting process of waiting for the previous transaction to be submitted before reading, and the buffer 5 is to waiting for the previous transaction to be submitted based on the transaction conflict probability before reading Or corresponding to the waiting process of writing.
  • the process of executing the transaction includes the process of processing the transaction and the process of submitting the transaction.
  • the process of processing the transaction is to store the result of the transaction in the buffer corresponding to the transaction.
  • the final processing result is stored in the shared memory shared by each transaction. For example, after thread 3 has processed transaction 3, in order to ensure that the final results of executing each transaction are consistent, it is necessary to ensure that each transaction is submitted in the order of its number. Therefore, transaction 3 needs to wait for the previous transaction 2 to submit before submitting. In this case, thread 3 records the position corresponding to transaction 3 in buffer 2, for example, changing the initial 0 to 1, and then thread 3 goes to the buffer to obtain a new task.
  • thread 3 may first check whether there are tasks in buffer 2 waiting for the end of the process.
  • the shared memory in FIG. 2 also records the current transaction window, and the current transaction window can be maintained by the thread that submitted the transaction, for example.
  • the first transaction in the transaction window can be modified to 2. Therefore, the transaction window moves one position backward among the multiple transactions to be submitted.
  • the thread starts to execute a new transaction (for example, transaction 7) according to the first position of the window, the last transaction in the transaction window can be updated from 6 to 7.
  • the thread 3 checks the buffer 2, it may first determine whether the transaction 2 is a transaction that should be submitted currently based on the window.
  • the transaction to be processed can be obtained from the buffer 1, for example, transaction 5.
  • thread 3 When thread 3 also encounters a waiting process during the execution of transaction 5, it will also record the corresponding pending task in the corresponding one of buffers 2 to 5, for example, as shown by the dotted arrow on the right side of the figure Thread 3 records the pending tasks corresponding to transaction 5 in buffer 4. Then, similarly, thread 3 first determines in buffers 2 to 5 whether there are pending tasks waiting for the end of the process.
  • thread 3 determines whether transaction 3 is the transaction that should be submitted currently based on the window parameters in the shared memory.
  • the left byte displays "3"
  • the thread 3 can obtain the execution information of the transaction 3 in a buffer (not shown) storing transaction execution information in a predetermined memory, and continue to execute the transaction 3 based on the execution information.
  • FIG. 2 is only schematic, and is not used to limit the scope of the embodiments of the present specification.
  • the specific forms of the buffers 1 to 5 are not necessarily the forms shown in the figure, as long as they can record corresponding information.
  • the process of concurrent execution of the transaction mentioned above will be described in detail below.
  • Figure 3 shows a flow chart of a method for concurrently executing transactions in a blockchain according to an embodiment of the present specification.
  • the method is executed on a first node in the blockchain, and the first node is preset with a first node.
  • An executive body, the first executive body is currently processing a first transaction, and the method is executed by the first executive body, including:
  • Step S302 after a predetermined operation is performed in the process of processing the first transaction, the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task are recorded in a predetermined memory, so as to compare the The first transaction enters the waiting process, and the predetermined memory can only be accessed by the first executive body;
  • Step S304 for the multiple pending tasks that have been recorded in the predetermined memory, it is determined whether there are pending tasks waiting for the end of the process.
  • Step S306 In the case where it is determined that the waiting process corresponding to the second to-be-processed task is over, continue to execute the second to-be-processed task based on the execution information corresponding to the second to-be-processed task, wherein the plurality of to-be-processed tasks
  • the tasks include the second to-be-processed task.
  • step S302 after a predetermined operation is performed in the process of processing the first transaction, the first to-be-processed task corresponding to the first transaction and the execution information corresponding to the first to-be-processed task are recorded in a predetermined memory to Compared with the first transaction entering the waiting process, the predetermined memory can only be accessed by the first executive body.
  • the first execution body may be, for example, an execution body such as a thread, a process, or a coroutine.
  • thread will be used as an example.
  • multiple waiting processes may be included, and the waiting processes may be caused by different reasons.
  • the multiple concurrently executed transactions have preset a predetermined submission order. For example, transactions 1 to 10 in Figure 2 must be numbered from small to large. Submit in order to ensure that the execution results of the multiple transactions by each node are the same.
  • the processing result is first saved in the buffer corresponding to the transaction, and after submission, the execution result is saved in the shared memory shared by each transaction.
  • the first variable needs to be written, and the value of the first variable after the write operation is first saved in the buffer corresponding to only the first transaction. It can be used in the first transaction, and the value will not be read or written when processing other transactions.
  • the value of the first transaction is stored in the shared memory, and other transactions can also read the value or modify the value by submitting it.
  • each transaction has a predetermined submission sequence, as shown in FIG. 2, for example, the first transaction is transaction 5 in FIG. 2, and the first executive body is thread 3 in the figure. If thread 3 finishes processing transaction 5, and the transaction before transaction 5 has not been submitted, at this time, thread 3 needs to wait for the completion of transaction 4 before submitting transaction 5.
  • the thread 3 can determine whether to submit the transaction 4 based on the transaction window parameters preset in the shared memory.
  • the transaction window controls the maximum total number of transactions that can be executed concurrently.
  • the two sides of the transaction window are the transaction with the smallest number and the transaction with the largest number that are currently executed concurrently. For example, 1 and 6 in Figure 2 represent the current concurrently executed transactions. For transactions 1 ⁇ 6.
  • thread 3 can modify the bit corresponding to transaction 5 in the buffer 2 in the predetermined memory corresponding to thread 3 to 1, as shown in FIG. 2, to add a pending transaction corresponding to transaction 5
  • the task to be processed can only be executed by thread 3 after transaction 4 is submitted.
  • the execution information corresponding to the task to be processed that is, the current processing information of transaction 5
  • transaction 5 includes a read operation for variable k1, and thread 3 sends a read request for variable k1 to the hardware or thread used to read the variable after starting to execute the code for the read operation. Then record "k1" in the byte corresponding to transaction 5 in the buffer 3 in the predetermined memory corresponding to thread 3 shown in FIG. 2, so as to add a pending task corresponding to transaction 5.
  • the processing task can be executed by the thread 3 after the value of the variable k1 returns.
  • transaction 5 includes a read operation on variable k1.
  • thread 3 After thread 3 starts to execute the code for the read operation, it queries the write buffer in the shared memory, and the write buffer records the current The writing status of each variable (including variable k1) during the processing of each transaction. For example, the write buffer only records that transaction 2 writes to variable k1, and transactions 3 and 4 write to variable k1 are not recorded. Because, based on this record, transaction 2 will change the value of k1 in the variable table in the shared memory after submission, therefore, transaction 5 needs to wait for transaction 2 to submit before reading the value of the variable k1, otherwise it will read the error The value of k1.
  • the thread 3 After the thread 3 performs the query of the write buffer, it records "2" in the byte corresponding to transaction 5 in the buffer 3 in the predetermined memory corresponding to the thread 3 in FIG. 2 to add an and For the pending task corresponding to transaction 5, the "2" corresponds to transaction 2, indicating that the pending task can be executed by thread 3 after transaction 2 is submitted.
  • transaction 5 includes a read operation on variable k1. After thread 3 starts to execute the code for the read operation, it infers whether each transaction (such as transactions 1 to 4 in Figure 2) that is submitted in the concurrent execution of multiple transactions before transaction 5 will write to variable k1 .
  • the transaction conflict probability of each variable can be determined in advance based on the transaction execution history in the node. When the transaction conflict probability of variable k1 is greater than a predetermined threshold, it can be inferred that transactions 1 to 4 will be performed on variable k1. Write operation. Therefore, after transaction 4 is submitted, the read operation in transaction 5 is required.
  • thread 3 can determine the conflict probability between transaction 5 and each previous transaction based on the transaction data of each transaction before transaction 5, and based on the conflict probability, infer whether each transaction will write k1, thereby Determine whether to wait for the submission or writing of the transaction. For example, in the case where it is determined that the write probability of transaction 2 to k1 is greater than or equal to a predetermined threshold, and the write probability of transactions 3 to 4 to k1 is less than the predetermined threshold, thread 3 corresponds to transaction 5 in buffer 5 in FIG. 2 "2" is recorded in the byte of to record a task to be executed corresponding to transaction 5. The task to be executed can only be executed by thread 3 after transaction 2 is submitted or written.
  • the waiting conditions in the embodiments of this specification are not limited to the above four conditions, but may be any waiting conditions triggered by a predetermined operation.
  • step S304 for the multiple pending tasks that have been recorded in the predetermined memory, it is determined whether there are pending tasks waiting for the end of the process.
  • the predetermined memory includes buffers 2 to 5, in which different types of pending tasks are recorded respectively.
  • thread 3 checks the buffers 2 to 5 in the predetermined memory in a predetermined order to obtain the end of the waiting process. Pending tasks. It can be understood that, in FIG. 2, the tasks to be processed in the buffers 2 to 5 are all tasks to be processed recorded by the thread 3.
  • thread 3 may check buffer 2 first.
  • each pending task recorded in the buffer 2 corresponds to a transaction that has been processed and is waiting to be submitted.
  • the smallest transaction with a corresponding bit of 1 can be determined as transaction 3.
  • Thread 3 can determine whether the transaction that should be submitted currently is transaction 3 based on the transaction window in the shared memory. The transaction that should be submitted is transaction 3, which means that the waiting process of the pending task corresponding to transaction 3 is over.
  • Thread 3 can obtain the execution information corresponding to transaction 3 from the buffer for storing transaction execution information in the predetermined memory. And continue to execute transaction 3 based on the execution information, that is, submit the transaction 3.
  • the thread 3 may check the buffer 3, for example. As mentioned above, each pending task recorded in the buffer 3 is waiting for the return of the corresponding variable value. For example, if the byte corresponding to transaction 3 in buffer 3 is recorded with "k2", it means that transaction 3 is waiting for the return of the value of variable k2. Thread 3 can determine whether the value of k2 has been written from the predetermined address corresponding to transaction 3. When the value of k2 is written, it means that the waiting process of the task to be processed corresponding to transaction 3 is over, where, The predetermined address corresponds to thread 3 and transaction 3.
  • the value of k2 can be written at the address by other threads performing read operations.
  • the address can be, for example, an address that can be written by thread 3 and the other thread, or the value of k2 can be read by execution.
  • the other threads of the operation are sent to the thread 3 and written at the address by the thread 3.
  • the address is, for example, an address in a predetermined memory. In the case where it is determined that the value of k2 has not been written, it can be determined whether the waiting process is over for the tasks to be processed after transaction 3. For example, if "k1" is recorded in the byte corresponding to transaction 5, it can be determined whether the value of k1 has been written in the predetermined address corresponding to transaction 5.
  • thread 3 may check buffer 4, for example.
  • the pending tasks recorded in the buffer 4 correspond to transactions that wait for other transactions to be submitted for read operations based on write conditions. Similar to checking buffer 2, thread 3 can determine whether transaction 1 waiting for transaction 3 is submitted based on the transaction window in shared memory. In the case where transaction 1 is determined to be submitted, the pending task waiting process corresponding to transaction 3 end.
  • the thread 3 may check the buffer 5, for example.
  • the pending tasks recorded in the buffer 5 correspond to transactions waiting for other transactions to be submitted or written for read operations based on the conflict probability.
  • Thread 3 can similarly determine whether transaction 1 waiting for transaction 3 is submitted, or can determine whether the waiting process of the pending task corresponding to transaction 3 is over based on the variable value written in the shared memory during transaction 1 processing.
  • the buffers 2 to 5 included in the predetermined memory are only illustrative and not restrictive, and the sequence of checking the buffers is only illustrative and not restrictive. In specific implementation, it can be based on The scene needs to set up the buffer and check the order of the buffer.
  • the thread 3 may check the buffer 1 in the shared memory shown in FIG. 2, and the buffer 1 The transaction to be processed is recorded in, so that the thread 3 can obtain the transaction to be processed with the smallest number (for example, transaction 6) from the buffer 1, and start to execute the transaction.
  • step S306 in the case where it is determined that the waiting process corresponding to the second to-be-processed task ends, the second to-be-processed task is continued to be executed based on the execution information corresponding to the second to-be-processed task, wherein the plurality of to-be-processed tasks
  • the processing task includes the second to-be-processed task.
  • the thread 3 obtains the second to-be-processed task in the buffer 2, and the thread 3 continues to execute the submission of the transaction corresponding to the second to-be-processed task based on the corresponding execution information. After the thread 3 determines that the waiting process of the second to-be-processed task ends, it removes the corresponding second to-be-processed task in the buffer, for example, changes the “1” corresponding to the second to-be-processed task in the buffer 2 to 0.
  • the thread 3 obtains the second task to be processed in the buffer 3, and the thread 3 continues to perform the operations following the read operation in the corresponding transaction based on the corresponding execution information and the value of the corresponding variable.
  • the thread 3 obtains the second task to be processed in the buffer 4, and the thread 3 continues to execute the corresponding read operation in the corresponding transaction based on the corresponding execution information.
  • the thread 3 obtains the second task to be processed in the buffer 5, and the thread 3 continues to execute the corresponding read operation in the corresponding transaction based on the corresponding execution information.
  • FIG. 4 shows a device 400 for concurrently executing transactions in a blockchain according to an embodiment of the present specification.
  • the device is deployed in a first executive body of a first node in the blockchain, and the first node A first executive body is preset in, and the first executive body is currently processing a first transaction, and the device includes:
  • the recording unit 41 is configured to record the first task to be processed corresponding to the first transaction and execution information corresponding to the first task to be processed in a predetermined memory after performing a predetermined operation in the process of processing the first transaction, In contrast to the first transaction entering the waiting process, the predetermined memory can only be accessed by the first executive body;
  • the determining unit 42 is configured to determine whether there is a pending task waiting for the end of the process among the multiple pending tasks that have been recorded in the predetermined memory;
  • the continuing execution unit 43 is configured to continue to execute the second to-be-processed task based on the execution information corresponding to the second to-be-processed task in a case where it is determined that the waiting process corresponding to the second to-be-processed task is over, wherein
  • the multiple to-be-processed tasks include the second to-be-processed task.
  • the device further includes a transaction execution unit 44 configured to obtain from the first buffer in the shared memory when it is determined that the respective waiting processes of the multiple pending tasks have not ended. The second transaction to be processed, and the execution of the second transaction is started.
  • the predetermined memory includes a second buffer area
  • the recording unit 41 is further configured to, after processing the first transaction, in a case where it is determined that the second transaction has not been submitted, in the second The first task to be processed corresponding to the first transaction is recorded in the buffer, wherein the second transaction is the previous transaction of the first transaction according to a predetermined submission sequence.
  • the determining unit 42 is further configured to determine whether the waiting process of the task to be processed corresponding to the smallest transaction number in the second buffer is over based on the transaction currently to be submitted recorded in the shared memory, To determine whether there is a task to be processed waiting for the end of the process in the second buffer zone, wherein the transaction number corresponds to the submission sequence of the transaction.
  • the continued execution unit 43 is further configured to, in a case where it is determined that there is a second to-be-processed task waiting for the end of the process in the second buffer, based on the data corresponding to the second to-be-processed task Execution information, continue to execute the submission of the third transaction, wherein the second pending task corresponds to the third transaction.
  • the predetermined memory includes a third buffer
  • the first transaction includes a read operation of the first variable
  • the recording unit 41 is further configured to, upon request, the first variable After a variable is read, the first to-be-processed task corresponding to the first transaction is recorded in the third buffer, wherein the first to-be-processed task includes a record of the first variable.
  • the third buffer includes the second to-be-processed task, and the second to-be-processed task corresponds to the reading operation of the second variable in the second transaction, and the determining unit 42 It is also configured to determine whether the variable value of the second variable is returned, and in a case where it is determined that the variable value of the second variable is returned, it is determined that the waiting process of the second to-be-processed task ends.
  • the determining unit 42 is further configured to, for the multiple pending tasks that have been recorded in the third buffer, based on each pending task.
  • the transaction number corresponding to the processing task is from small to large, and it is determined in turn whether the waiting process of each task to be processed is completed, wherein the second task to be processed is the task to be processed that is determined for the first time and the waiting process ends, and the transaction The number corresponds to the scheduled submission order of the transaction.
  • the determining unit 42 is further configured to determine whether the variable value of the second variable is returned based on whether the variable value of the second variable is stored at the predetermined address, wherein the predetermined address is the same as that of the second variable.
  • the first executive body corresponds to the second transaction.
  • the continued execution unit 43 is further configured to, in a case where it is determined that there is a second to-be-processed task waiting for the end of the process in the third buffer, based on the data corresponding to the second to-be-processed task The execution information and the variable value of the second variable continue to execute the second transaction.
  • the predetermined memory includes a fourth buffer
  • the first transaction includes a read operation of the first variable
  • the recording unit 41 is further configured to: After fetching the code of the operation, it is determined whether each transaction whose submission sequence is before the first transaction and is not submitted is a conflict transaction in which the write operation to the first variable has been performed, and each transaction includes the second transaction. In the case where the second transaction is the conflicting transaction closest to the first transaction, the first pending task corresponding to the first transaction is recorded in the fourth buffer, wherein the first pending task includes the second The record of the transaction.
  • the determining unit 42 is further configured to determine whether there is a waiting process to be completed among the multiple pending tasks recorded in the fourth buffer based on the currently submitted transaction recorded in the shared memory. Pending tasks.
  • the predetermined memory includes a fifth buffer area
  • the first transaction includes a read operation of a first variable
  • the recording unit 41 is further configured to: After fetching the code of the operation, it is inferred whether each transaction whose submission order is before the first transaction and is not submitted is a conflict transaction that will write the first variable.
  • Each transaction includes the second transaction. In the case where the second transaction is the closest conflict transaction to the first transaction, the first pending task corresponding to the first transaction is recorded in the fifth buffer, wherein the first pending task includes The record of the transaction.
  • the predetermined memory includes at least one buffer, and the at least one buffer corresponds to at least one task to be processed, wherein the determining unit 42 is further configured to, based on the at least one buffer
  • the predetermined sequence of zones determines whether there are pending tasks waiting for the end of the process in each buffer.
  • Another aspect of this specification provides a computer-readable storage medium on which a computer program is stored.
  • the computer program is executed in a computer, the computer is caused to perform any of the above methods.
  • Another aspect of this specification provides a computing device, including a memory and a processor, wherein the memory stores executable code, and when the processor executes the executable code, any one of the above methods is implemented.
  • the transaction processing is suspended when the execution body needs to wait during the execution of the transaction, and other pending tasks of the execution body are obtained from the buffer for processing, and the waiting process ends After that, the execution body will continue to execute the transaction, thereby reducing the waiting time of the execution body and speeding up the overall speed of concurrent execution of the transaction.
  • the steps of the method or algorithm described in combination with the embodiments disclosed in this document can be implemented by hardware, a software module executed by a processor, or a combination of the two.
  • the software module can be placed in random access memory (RAM), internal memory, read-only memory (ROM), electrically programmable ROM, electrically erasable programmable ROM, registers, hard disks, removable disks, CD-ROMs, or all areas in the technical field. Any other known storage media.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Finance (AREA)
  • Accounting & Taxation (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Technology Law (AREA)
  • General Business, Economics & Management (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Des modes de réalisation de la présente invention concernent un procédé et un appareil d'exécution de transactions en parallèle dans une chaîne de blocs. Le procédé est exécuté dans un premier nœud dans une chaîne de blocs, un premier corps d'exécution est prédéfini dans le premier nœud et le premier corps d'exécution traite dans l'instant une première transaction. Le procédé est exécuté par le premier corps d'exécution et consiste à : dans le processus de traitement de la première transaction, après qu'une opération prédéfinie a été effectuée, enregistrer une première tâche à traiter correspondant à la première transaction et des informations d'exécution correspondant à la première tâche à traiter dans une mémoire prédéfinie, de manière à entrer dans un processus d'attente par rapport à la première transaction, la mémoire prédéfinie étant uniquement accessible par le premier corps d'exécution ; pour une pluralité de tâches à traiter déjà enregistrées dans la mémoire prédéfinie, déterminer s'il existe une tâche à traiter pour laquelle se termine le processus d'attente ; et dans le cas où il est déterminé que le processus d'attente correspondant à une seconde tâche à traiter se termine, poursuivre l'exécution de la seconde tâche à traiter sur la base des informations d'exécution correspondant à la seconde tâche à traiter, la pluralité de tâches à traiter comprenant la seconde tâche à traiter.
PCT/CN2020/082690 2019-08-30 2020-04-01 Procédé et appareil d'exécution de transactions en parallèle dans une chaîne de blocs WO2021036258A1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201910816517.0A CN110675255B (zh) 2019-08-30 2019-08-30 在区块链中并发执行交易的方法和装置
CN201910816517.0 2019-08-30

Publications (1)

Publication Number Publication Date
WO2021036258A1 true WO2021036258A1 (fr) 2021-03-04

Family

ID=69076486

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2020/082690 WO2021036258A1 (fr) 2019-08-30 2020-04-01 Procédé et appareil d'exécution de transactions en parallèle dans une chaîne de blocs

Country Status (3)

Country Link
CN (2) CN113139873A (fr)
TW (1) TWI733390B (fr)
WO (1) WO2021036258A1 (fr)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113139873A (zh) * 2019-08-30 2021-07-20 创新先进技术有限公司 在区块链中并发执行交易的方法和装置
CN111882435B (zh) * 2020-03-12 2023-01-31 支付宝(杭州)信息技术有限公司 在区块链中执行交易的方法及装置
CN113168652B (zh) * 2020-08-03 2022-04-15 支付宝(杭州)信息技术有限公司 区块链交易处理系统和方法
CN112991061B (zh) * 2020-10-28 2023-06-09 支付宝(杭州)信息技术有限公司 在区块链中并发执行交易的方法和装置
CN112668998B (zh) * 2020-12-23 2023-12-19 树根互联股份有限公司 流程实现方法、装置、系统、电子设备和可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107402824A (zh) * 2017-05-31 2017-11-28 阿里巴巴集团控股有限公司 一种数据处理的方法及装置
US20190081793A1 (en) * 2017-09-12 2019-03-14 Kadena, LLC Parallel-chain architecture for blockchain systems
WO2019120332A2 (fr) * 2019-04-12 2019-06-27 Alibaba Group Holding Limited Mise en œuvre de l'exécution en parallèle de transactions dans un système de registre distribué
CN110135985A (zh) * 2019-04-04 2019-08-16 杭州抖音科技有限公司 一种区块链上交易的并行执行方法及系统
CN110675255A (zh) * 2019-08-30 2020-01-10 阿里巴巴集团控股有限公司 在区块链中并发执行交易的方法和装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI647636B (zh) * 2016-09-02 2019-01-11 現代財富控股有限公司 區塊鏈負載平衡系統及其方法
CN106406896B (zh) * 2016-09-27 2020-03-17 北京天德科技有限公司 一种并行PipeLine技术的区块链建块方法
CN106682984B (zh) * 2016-10-27 2019-09-10 深圳壹账通智能科技有限公司 基于区块链的交易事务处理方法及系统
US20180158034A1 (en) * 2016-12-07 2018-06-07 International Business Machines Corporation Dynamic reordering of blockchain transactions to optimize performance and scalability
CN107688999B (zh) * 2017-08-11 2020-11-13 杭州溪塔科技有限公司 一种基于区块链的并行交易执行方法
CN110083437A (zh) * 2018-01-25 2019-08-02 北京欧链科技有限公司 处理区块链事务的方法及装置
CN108804112B (zh) * 2018-05-22 2022-02-11 上海分布信息科技有限公司 一种区块链落账处理方法及系统
CN109614206A (zh) * 2018-10-25 2019-04-12 深圳壹账通智能科技有限公司 区块链事务处理的装置、方法及存储介质
CN109636384A (zh) * 2018-10-26 2019-04-16 阿里巴巴集团控股有限公司 一种并行化执行区块链交易的方法、装置及系统
ES2876926T3 (es) * 2018-11-07 2021-11-15 Advanced New Technologies Co Ltd Protección de datos de cadena de bloques utilizando cifrado homomórfico
CN109784930B (zh) * 2019-02-18 2023-07-18 深圳市迅雷网络技术有限公司 一种区块链交易数据的处理方法、装置、电子设备及介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107402824A (zh) * 2017-05-31 2017-11-28 阿里巴巴集团控股有限公司 一种数据处理的方法及装置
US20190081793A1 (en) * 2017-09-12 2019-03-14 Kadena, LLC Parallel-chain architecture for blockchain systems
CN110135985A (zh) * 2019-04-04 2019-08-16 杭州抖音科技有限公司 一种区块链上交易的并行执行方法及系统
WO2019120332A2 (fr) * 2019-04-12 2019-06-27 Alibaba Group Holding Limited Mise en œuvre de l'exécution en parallèle de transactions dans un système de registre distribué
CN110675255A (zh) * 2019-08-30 2020-01-10 阿里巴巴集团控股有限公司 在区块链中并发执行交易的方法和装置

Also Published As

Publication number Publication date
TW202109511A (zh) 2021-03-01
CN113139873A (zh) 2021-07-20
TWI733390B (zh) 2021-07-11
CN110675255A (zh) 2020-01-10
CN110675255B (zh) 2021-04-02

Similar Documents

Publication Publication Date Title
WO2021036258A1 (fr) Procédé et appareil d'exécution de transactions en parallèle dans une chaîne de blocs
WO2021036254A1 (fr) Procédé et appareil pour l'exécution simultanée de transactions dans une chaîne de blocs
JP5467661B2 (ja) トランザクション・メモリ管理における競合調停のための優先順位付けのための方法、システム、およびコンピュータ・プログラム(トランザクション・メモリ管理における競合調停のための優先順位付け)
JP6724039B2 (ja) 分散型コンピューティングシステムにおけるデータベーストランザクションの処理
US8438568B2 (en) Speculative thread execution with hardware transactional memory
CN108140028B (zh) 在具有分布式数据库系统的网络中提供数据库访问控制的方法和架构
CN112887437B (zh) 区块链交易处理方法、区块链节点和区块链系统
WO2021036260A1 (fr) Procédé et appareil pour exécuter des transactions simultanément dans une chaîne de blocs
TWI730690B (zh) 在區塊鏈中同時執行交易的方法和裝置及電腦可讀儲存媒體與計算設備
WO2021036259A1 (fr) Procédé et dispositif d'exécution de transactions en parallèle dans une chaîne de blocs
US11983168B2 (en) Block verification method, apparatus and device
US11803447B2 (en) Transaction processing method, apparatus, and electronic device for blockchain
CN110706108B (zh) 在区块链中并发执行交易的方法和装置
CN105808210A (zh) 共享资源的访问方法和装置
WO2022002128A1 (fr) Procédé de lecture de données, procédé d'écriture de données, dispositif et système
WO2007088582A1 (fr) Procédé d'appel de procédure distant asynchrone dans un multiprocesseur à mémoire partagée, programme d'appel de procédure distant asynchrone, et support d'enregistrement
WO2021057165A1 (fr) Procédé pour l'exécution simultanée de transactions en chaîne de blocs, et dispositif
JP2571298B2 (ja) データ管理制御方式
CN116450316A (zh) 交易并行处理的方法、装置、电子设备和存储介质

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 20856218

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 20856218

Country of ref document: EP

Kind code of ref document: A1