RU2775994C2 - Methods and device for effective implementation of a distributed database in a network - Google Patents

Methods and device for effective implementation of a distributed database in a network Download PDF

Info

Publication number
RU2775994C2
RU2775994C2 RU2020133528A RU2020133528A RU2775994C2 RU 2775994 C2 RU2775994 C2 RU 2775994C2 RU 2020133528 A RU2020133528 A RU 2020133528A RU 2020133528 A RU2020133528 A RU 2020133528A RU 2775994 C2 RU2775994 C2 RU 2775994C2
Authority
RU
Russia
Prior art keywords
event
computing devices
events
computing device
group
Prior art date
Application number
RU2020133528A
Other languages
Russian (ru)
Other versions
RU2020133528A (en
RU2020133528A3 (en
Inventor
III Лимон С. БЭРД
Манс ХАРМОН
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 RU2020133528A publication Critical patent/RU2020133528A/en
Publication of RU2020133528A3 publication Critical patent/RU2020133528A3/ru
Application granted granted Critical
Publication of RU2775994C2 publication Critical patent/RU2775994C2/en

Links

Images

Abstract

FIELD: computer technology.
SUBSTANCE: invention relates to computer technology. The device for implementing a distributed database contains: a memory and a processor adapted to: determine the first group of computing devices based on a deterministic pseudo-random function; receiving an event associated with the first set of events; identifying an order associated with the second set of events; identifying an order associated with a plurality of transactions; and storing in the distributed database instance an order associated with the plurality of transactions.
EFFECT: increasing the speed of convergence, while reducing the amount of data transferred between devices.
24 cl, 15 dwg

Description

Перекрестная ссылка на родственные заявкиCross-reference to related applications

[1001] Эта заявка испрашивает приоритет и преимущество предварительной заявки на патент США № 62/531153, поданной 11 июля 2017 г. и озаглавленной «Methods and Apparatus for Efficiently Implementing a Distributed Database within a Network», которая включена в настоящий документ посредством ссылки во всей своей полноте.[1001] This application claims the priority and benefit of U.S. Provisional Application No. 62/531153, filed July 11, 2017, and entitled "Methods and Apparatus for Efficiently Implementing a Distributed Database within a Network", which is incorporated herein by reference in in all its fullness.

Предпосылки изобретенияBackground of the invention

[1002] Варианты осуществления, описанные в настоящем документе, относятся в целом к системе базы данных и более конкретно к способам и устройству для реализации системы базы данных на множестве устройств в сети.[1002] The embodiments described herein relate generally to a database system, and more specifically to methods and apparatus for implementing a database system on a plurality of devices on a network.

[1003] Некоторые известные системы распределенных баз данных пытаются достичь консенсуса для значений в системах распределенных баз данных (например, относительно порядка, в котором происходят транзакции). Например, многопользовательская онлайн-игра может иметь множество компьютерных серверов, доступ к которым пользователи могут получать, чтобы играть в игру. Если два пользователя одновременно пытаются поднять конкретный предмет в игре, то важно, чтобы серверы в системе распределенной базы данных в итоге достигли согласия относительно того, какой из двух пользователей поднял предмет первым. [1003] Some well-known distributed database systems attempt to reach consensus for values in distributed database systems (eg, regarding the order in which transactions occur). For example, an online multiplayer game may have a plurality of computer servers that users may access to play the game. If two users simultaneously attempt to pick up a particular item in the game, it is important that the servers in the distributed database system eventually agree on which of the two users picked up the item first.

[1004] Такой распределенный консенсус может быть обработан посредством способов и/или процессов, таких как алгоритм Паксос или его варианты. При использовании таких способов и/или процессов один сервер системы базы данных устанавливается в качестве «лидера», и лидер принимает решения относительно порядка событий. События (например, в многопользовательских играх) передаются лидеру, лидер избирает упорядоченную последовательность для событий, и лидер передает эту упорядоченную последовательность на другие серверы системы базы данных.[1004] Such distributed consensus may be handled by methods and/or processes such as the Paxos algorithm or variants thereof. Using such methods and/or processes, one database system server is established as the "leader" and the leader makes decisions about the order of events. Events (eg, in multiplayer games) are passed to the leader, the leader selects an ordered sequence for the events, and the leader passes this ordered sequence to other database system servers.

[1005] Однако при таких известных подходах используется сервер, управляемый некоторой стороной (например, центральным сервером управления), которой доверяют пользователи системы базы данных (например, игроки в игре). Соответственно существует необходимость в способах и устройстве для системы распределенной базы данных, для которых не будут требоваться лидер или доверенная третья сторона, чтобы управлять системой базы данных.[1005] However, such known approaches use a server managed by a party (eg, a central control server) that is trusted by users of the database system (eg, game players). Accordingly, there is a need for methods and apparatus for a distributed database system that do not require a leader or trusted third party to control the database system.

Сущность изобретенияThe essence of the invention

[1006] В некоторых вариантах осуществления устройство содержит процессор и память, функционально соединенную с процессором и связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в группу вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с группой вычислительных устройств. Процессор приспособлен для выбора анонимного пути связи, связанного с (a) вторым вычислительным устройством из группы вычислительных устройств, которые реализуют распределенную базу данных, и (b) набором идентификаторов вычислительных устройств. Анонимный путь связи определен посредством последовательности замаскированных открытых ключей. Каждый замаскированный открытый ключ из последовательности замаскированных открытых ключей связан с псевдонимом вычислительного устройства из набора вычислительных устройств, которые реализуют анонимный путь связи. Процессор приспособлен для генерирования зашифрованного сообщения, зашифрованного с помощью первого замаскированного открытого ключа, включенного в последовательность замаскированных открытых ключей. Первый замаскированный открытый ключ связан со вторым вычислительным устройством. Процессор приспособлен для генерирования зашифрованного пакета данных, содержащего зашифрованное сообщение и идентификатор вычислительного устройства из набора идентификаторов вычислительных устройств. Идентификатор вычислительного устройства связан со вторым вычислительным устройством. Зашифрованный пакет данных зашифрован с помощью второго замаскированного открытого ключа из последовательности замаскированных открытых ключей. Процессор приспособлен для отправки зашифрованного пакета данных на третье вычислительное устройство из набора вычислительных устройств, которые реализуют анонимный путь связи.[1006] In some embodiments, a device includes a processor and memory operatively coupled to the processor and coupled to a distributed database instance on a first computing device adapted to be included in a group of computing devices that implement the distributed database via a network operatively coupled to the group of computing devices. devices. The processor is adapted to select an anonymous communication path associated with (a) a second computing device from a group of computing devices that implement a distributed database, and (b) a set of computing device identifiers. An anonymous communication path is defined by a sequence of masked public keys. Each masked public key in the sequence of masked public keys is associated with a computing device alias from a set of computing devices that implement an anonymous communication path. The processor is adapted to generate an encrypted message encrypted with the first masked public key included in the masked public key sequence. The first masked public key is associated with the second computing device. The processor is adapted to generate an encrypted data packet containing an encrypted message and a computing device identifier from a set of computing device identifiers. The computing device identifier is associated with the second computing device. The encrypted data packet is encrypted with the second masked public key from the sequence of masked public keys. The processor is adapted to send the encrypted data packet to a third computing device from a set of computing devices that implement an anonymous communication path.

Краткое описание графических материаловBrief description of graphic materials

[1007] На фиг. 1 представлена структурная схема высокого уровня, на которой проиллюстрирована система распределенной базы данных согласно варианту осуществления.[1007] FIG. 1 is a high-level block diagram illustrating a distributed database system according to an embodiment.

[1008] На фиг. 2 представлена структурная схема, на которой проиллюстрировано вычислительное устройство системы распределенной базы данных согласно варианту осуществления.[1008] FIG. 2 is a block diagram illustrating a computing device of a distributed database system according to an embodiment.

[1009] На фиг. 3–6 проиллюстрированы примеры хешграфа согласно варианту осуществления. [1009] FIG. 3-6 illustrate examples of a hashgraph according to an embodiment.

[1010] На фиг. 7 представлена функциональная схема, на которой проиллюстрирован информационный поток между первым вычислительным устройством и вторым вычислительным устройством согласно варианту осуществления.[1010] In FIG. 7 is a block diagram illustrating the information flow between a first computing device and a second computing device according to an embodiment.

[1011] На фиг. 8 представлен пример хешграфа согласно варианту осуществления.[1011] FIG. 8 shows an example of a hashgraph according to an embodiment.

[1012] На фиг. 9 представлен пример хешграфа согласно варианту осуществления.[1012] FIG. 9 shows an example of a hashgraph according to an embodiment.

[1013] На фиг. 10A–10B проиллюстрирован примерный способ достижения консенсуса для использования с хешграфом согласно варианту осуществления.[1013] FIG. 10A-10B illustrate an exemplary consensus method for use with a hashgraph according to an embodiment.

[1014] На фиг. 11A–11B проиллюстрирован примерный способ достижения консенсуса для использования с хешграфом согласно другому варианту осуществления.[1014] FIG. 11A-11B illustrate an exemplary consensus method for use with a hashgraph according to another embodiment.

[1015] На фиг. 12A–12B проиллюстрирован примерный способ достижения консенсуса для использования с хешграфом согласно другому варианту осуществления.[1015] FIG. 12A-12B illustrate an exemplary consensus method for use with a hashgraph according to another embodiment.

Подробное описание изобретенияDetailed description of the invention

[1016] В некоторых вариантах осуществления устройство содержит процессор и память, функционально соединенную с процессором и связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в группу вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с группой вычислительных устройств. Процессор приспособлен для выбора анонимного пути связи, связанного с (a) вторым вычислительным устройством из группы вычислительных устройств, которые реализуют распределенную базу данных, и (b) набором идентификаторов вычислительных устройств. Анонимный путь связи определен посредством последовательности замаскированных открытых ключей. Каждый замаскированный открытый ключ из последовательности замаскированных открытых ключей связан с псевдонимом вычислительного устройства из набора вычислительных устройств, которые реализуют анонимный путь связи. Процессор приспособлен для генерирования зашифрованного сообщения, зашифрованного с помощью первого замаскированного открытого ключа, включенного в последовательность замаскированных открытых ключей. Первый замаскированный открытый ключ связан со вторым вычислительным устройством. Процессор приспособлен для генерирования зашифрованного пакета данных, содержащего зашифрованное сообщение и идентификатор вычислительного устройства из набора идентификаторов вычислительных устройств. Идентификатор вычислительного устройства связан со вторым вычислительным устройством. Зашифрованный пакет данных зашифрован с помощью второго замаскированного открытого ключа из последовательности замаскированных открытых ключей. Процессор приспособлен для отправки зашифрованного пакета данных на третье вычислительное устройство из набора вычислительных устройств, которые реализуют анонимный путь связи.[1016] In some embodiments, a device includes a processor and memory operably coupled to the processor and coupled to a distributed database instance on a first computing device adapted to be included in a group of computing devices that implement the distributed database via a network operatively coupled to the group of computing devices. devices. The processor is adapted to select an anonymous communication path associated with (a) a second computing device from a group of computing devices that implement a distributed database, and (b) a set of computing device identifiers. An anonymous communication path is defined by a sequence of masked public keys. Each masked public key in the sequence of masked public keys is associated with a computing device alias from a set of computing devices that implement an anonymous communication path. The processor is adapted to generate an encrypted message encrypted with the first masked public key included in the masked public key sequence. The first masked public key is associated with the second computing device. The processor is adapted to generate an encrypted data packet containing an encrypted message and a computing device identifier from a set of computing device identifiers. The computing device identifier is associated with the second computing device. The encrypted data packet is encrypted with the second masked public key from the sequence of masked public keys. The processor is adapted to send the encrypted data packet to a third computing device from a set of computing devices that implement an anonymous communication path.

[1017] В некоторых вариантах осуществления первый замаскированный ключ генерируется путем выбора первого случайного значения (R1) из предварительно определенного набора (G) значений, который представляет собой алгебраическую группу, так, чтобы R1 представляло собой генератор для G, и выбора второго случайного значения (R2) из предварительно определенного набора (G) значений. Открытый ключ определяется как пара (B, H) на основе первого случайного значения (R1) и второго случайного значения (R2). Пара (B, H) определяется как (R1, R1^R2). Третье случайное значение (R3) выбирается из предварительно определенного набора (G) значений. Третье случайное значение (R3) выбирается так, чтобы B^R3 представляло собой генератор для G. Первый замаскированный ключ определяется как пара (B’, H’) на основе открытого ключа и третьего случайного значения (R3). Пара (B’, H’) определяется как (B^R3, H^R3). В контексте настоящего документа «^» означает степень и/или возведение в степень (повторяемые применения оператора *). Таким образом, B^R3 означает B в степени R3 и/или применение R3-1 раз оператора * к B. [1017] In some embodiments, the first masked key is generated by selecting a first random value (R1) from a predefined set (G) of values that is an algebraic group such that R1 is a generator for G and selecting a second random value ( R2) from a predefined set (G) of values. The public key is defined as a pair (B, H) based on the first random value (R1) and the second random value (R2). A pair (B, H) is defined as (R1, R1^R2). The third random value (R3) is selected from a predetermined set (G) of values. The third random value (R3) is chosen so that B^R3 is the generator for G. The first masked key is defined as the pair (B', H') based on the public key and the third random value (R3). The pair (B', H') is defined as (B^R3, H^R3). In the context of this document, "^" means power and/or exponentiation (repeated uses of the * operator). So B^R3 means B to the power of R3 and/or applying the * operator R3-1 times to B.

[1018] В некоторых вариантах осуществления энергонезависимый считываемый процессором носитель содержит код, который при исполнении процессором предписывает процессору выбрать на первом вычислительном устройстве первое случайное значение (R1) из предварительно определенного набора (G) значений, который представляет собой алгебраическую группу, так, чтобы R1 представляло собой генератор для G, и выбрать второе случайное значение (R2) из предварительно определенного набора (G) значений. Код дополнительно содержит код для предписывания процессору определить открытый ключ как пару (B, H) на основе первого случайного значения (R1) и второго случайного значения (R2). Пара (B, H) определяется как (R1, R1^R2). Код дополнительно содержит код для предписывания процессору предоставить открытый ключ (B, H) на второе вычислительное устройство так, что второе вычислительное устройство безопасно предоставляет сообщение (M) на первое вычислительное устройство путем: выбора третьего случайного значения (R3) из предварительно определенного набора (G) значений; шифрования сообщения (M) с использованием открытого ключа (B, H) и третьего случайного значения (R3) для определения зашифрованного шифротекста как (X, Y)=(B^R3, M * H^R3); и отправки зашифрованного шифротекста (X, Y) на первое вычислительное устройство. Код дополнительно содержит код для предписывания процессору принять зашифрованный шифротекст (X, Y) со второго вычислительного устройства и расшифровать зашифрованный шифротекст (X, Y) для идентификации сообщения (M) с использованием второго случайного значения (R2). В некоторых случаях открытый ключ (B, H) представляет собой замаскированный открытый ключ.[1018] In some embodiments, the nonvolatile processor-readable medium comprises code that, when executed by the processor, causes the processor to select, on a first computing device, a first random value (R1) from a predefined set (G) of values that is an algebraic group such that R1 was a generator for G, and choose a second random value (R2) from a predefined set of (G) values. The code further comprises code for causing the processor to determine the public key as a pair (B, H) based on a first random value (R1) and a second random value (R2). A pair (B, H) is defined as (R1, R1^R2). The code further comprises code for causing the processor to provide the public key (B, H) to the second computing device such that the second computing device securely provides the message (M) to the first computing device by: selecting a third random value (R3) from a predetermined set (G ) values; encrypting the message (M) using the public key (B, H) and a third random value (R3) to determine the encrypted ciphertext as (X, Y)=(B^R3, M * H^R3); and sending the encrypted ciphertext (X, Y) to the first computing device. The code further comprises code for causing the processor to receive the encrypted ciphertext (X, Y) from the second computing device and decrypt the encrypted ciphertext (X, Y) to identify the message (M) using the second random value (R2). In some cases, the public key (B, H) is a public key in disguise.

[1019] В некоторых вариантах осуществления энергонезависимый считываемый процессором носитель содержит код, который при исполнении процессором предписывает процессору определить анонимный путь связи посредством последовательности замаскированных открытых ключей для набора вычислительных устройств из группы вычислительных устройств, которые реализуют распределенную базу данных. Набор вычислительных устройств определяет анонимный путь связи. Каждый замаскированный открытый ключ из последовательности замаскированных открытых ключей связан с псевдонимом отличного вычислительного устройства из группы вычислительных устройств, которая реализует распределенную базу данных. Код дополнительно содержит код для предписывания процессору сгенерировать набор идентификаторов вычислительных устройств, содержащий (1) незашифрованный идентификатор вычислительного устройства, идентифицирующий вычислительное устройство из группы вычислительных устройств, и (2) последовательность зашифрованных идентификаторов вычислительных устройств. Каждый зашифрованный идентификатор вычислительного устройства из последовательности зашифрованных идентификаторов вычислительных устройств зашифрован с помощью отличного замаскированного открытого ключа из последовательности замаскированных открытых ключей. Код дополнительно содержит код для предписывания процессору предоставить последовательность замаскированных открытых ключей и набор идентификаторов вычислительных устройств на по меньшей мере одно вычислительное устройство из группы вычислительных устройств, так что по меньшей мере одно вычислительное устройство может определять сообщение для процессора для отправки по анонимному пути связи. Код дополнительно содержит код для предписывания процессору принять по анонимному пути связи сообщение, зашифрованное с помощью замаскированного открытого ключа из последовательности замаскированных открытых ключей, и расшифровать сообщение с помощью закрытого ключа, связанного с замаскированным открытым ключом из последовательности замаскированных открытых ключей.[1019] In some embodiments, the non-volatile processor-readable medium comprises code that, when executed by the processor, causes the processor to determine an anonymous communication path via a masked public key sequence for a set of computing devices from a group of computing devices that implement a distributed database. A set of computing devices defines an anonymous communication path. Each masked public key in the sequence of masked public keys is associated with an alias for a different computing device from a group of computing devices that implements a distributed database. The code further comprises code for causing the processor to generate a set of computing device identifiers comprising (1) an unencrypted computing device identifier identifying a computing device from a group of computing devices, and (2) a sequence of encrypted computing device identifiers. Each encrypted computing device identifier in the sequence of encrypted computing device identifiers is encrypted with a different masked public key from the sequence of masked public keys. The code further comprises code for causing the processor to provide a masked public key sequence and a set of computing device identifiers to at least one computing device from a group of computing devices such that the at least one computing device can determine a message for the processor to send over an anonymous communication path. The code further comprises code for causing the processor to receive, over an anonymous communication path, a message encrypted with the masked public key of the masked public key sequence and decrypt the message with the private key associated with the masked public key of the masked public key sequence.

[1020] В некоторых вариантах осуществления устройство содержит память, связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, приспособленном для включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств и процессором, функционально соединенным с памятью. Процессор приспособлен для определения первой группы вычислительных устройств из множества вычислительных устройств и второй группы вычислительных устройств из множества вычислительных устройств на основе детерминированной псевдослучайной функции. Процессор приспособлен для приема со второго вычислительного устройства из множества вычислительных устройств события, привязанного к первому набору событий, определенному набором вычислительных устройств из множества вычислительных устройств. Набор вычислительных устройств содержит по меньшей мере одно вычислительное устройство из первой группы вычислительных устройств и по меньшей мере одно вычислительное устройство из второй группы вычислительных устройств. Процессор приспособлен для идентификации порядка, связанного со вторым набором событий, в результате того, что протокол консенсуса (1) использует значение для параметра события из первого набора событий, которое было определено вычислительным устройством из первой группы вычислительных устройств, и (2) не использует значение для параметра события из первого набора событий, которое было определено вычислительным устройством из второй группы вычислительных устройств. Процессор приспособлен для идентификации порядка, связанного с набором транзакций, указанным в экземпляре распределенной базы данных, на основе по меньшей мере частично порядка, связанного со вторым набором событий, и сохранения в экземпляре распределенной базы данных порядка, связанного с набором транзакций.[1020] In some embodiments, a device comprises memory associated with a distributed database instance on a first computing device adapted to be included in a plurality of computing devices that implements the distributed database via a network operatively coupled to the plurality of computing devices and a processor operatively coupled to memory. The processor is adapted to determine the first group of computing devices from the plurality of computing devices and the second group of computing devices from the plurality of computing devices based on a deterministic pseudo-random function. The processor is adapted to receive from a second computing device of the plurality of computing devices an event associated with a first set of events defined by the set of computing devices of the plurality of computing devices. The set of computing devices contains at least one computing device from the first group of computing devices and at least one computing device from the second group of computing devices. The processor is adapted to identify the order associated with the second set of events as a result of the consensus protocol (1) using the value for the event parameter from the first set of events that was determined by the computing device from the first group of computing devices, and (2) not using the value for the event parameter from the first set of events, which was determined by the computing device from the second group of computing devices. The processor is adapted to identify the order associated with the set of transactions specified in the distributed database instance based at least in part on the order associated with the second set of events and store in the distributed database instance the order associated with the set of transactions.

[1021] В некоторых вариантах осуществления устройство содержит экземпляр распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Устройство также содержит процессор, функционально соединенный с памятью, хранящей экземпляр распределенной базы данных. Процессор приспособлен для определения в первый момент времени первого события, привязанного к первому набору событий. Процессор приспособлен для приема во второй момент времени после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств сигнала, представляющего второе событие, (1) определенное вторым вычислительным устройством и (2) привязанное ко второму набору событий. Процессор приспособлен для идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере одного результата протокола. Каждое событие из третьего набора событий представляет собой событие из по меньшей мере одного из первого набора событий или второго набора событий. Процессор приспособлен для сохранения в экземпляре распределенной базы данных порядка, связанного с третьим набором событий.[1021] In some embodiments, the device comprises an instance of the distributed database on a first computing device adapted to be included in a set of computing devices that implement the distributed database via a network operatively coupled to the set of computing devices. The apparatus also includes a processor operatively coupled to a memory storing an instance of the distributed database. The processor is adapted to determine at a first time a first event associated with the first set of events. The processor is adapted to receive, at a second time after the first time, and from a second computing device of the set of computing devices, a signal representing a second event (1) determined by the second computing device and (2) associated with the second set of events. The processor is adapted to identify the order associated with the third set of events based on at least one protocol result. Each event from the third set of events is an event from at least one of the first set of events or the second set of events. The processor is adapted to maintain in the distributed database instance the order associated with the third set of events.

[1022] В некоторых случаях каждое событие из третьего набора событий связано с набором атрибутов (например, порядковый номер, номер поколения, номер раунда, принятый номер и/или метка времени и т. д.). Результат протокола может содержать значение для каждого атрибута из набора атрибутов для каждого события из третьего набора событий. Значение для первого атрибута из набора атрибутов может включать первое числовое значение, и значение для второго атрибута из набора атрибутов может включать двоичное значение, связанное с первым числовым значением. Двоичное значение для второго атрибута (например, значение приращения раунда) для события из третьего набора событий может быть основано на том, соответствует ли взаимосвязь между тем событием и четвертым набором событий, привязанным к тому событию, критерию (например, количеству событий, строго идентифицированных тем событием). Каждое событие из четвертого набора событий (1) является предком события из третьего набора событий и (2) связано с первым общим атрибутом, как и остальные события из четвертого набора событий (например, общим номером раунда, указанием о том, что представляет собой первое событие раунда R, и т. д.). Первый общий атрибут может являться указанием о первом случае, в котором событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано с первым конкретным значением (например, указанием о том, что представляет собой первое событие раунда R, и т. д.). [1022] In some cases, each event from the third set of events is associated with a set of attributes (eg, sequence number, generation number, round number, received number and/or timestamp, etc.). The protocol result may contain a value for each attribute in the attribute set for each event in the third event set. The value for the first attribute from the attribute set may include a first numeric value, and the value for the second attribute from the attribute set may include a binary value associated with the first numeric value. A binary value for a second attribute (e.g., round increment value) for an event from a third set of events may be based on whether the relationship between that event and the fourth set of events associated with that event matches a criterion (e.g., the number of events strongly identified by the topics event). Each event in the fourth event set (1) is an ancestor of the event in the third event set, and (2) is associated with the first common attribute, as are the rest of the events in the fourth event set (e.g., a general round number, an indication of what constitutes the first event round R, etc.). The first general attribute may be an indication of the first instance in which an event identified by each computing device in the set of computing devices is associated with a first specific value (eg, an indication of what constitutes the first event of round R, etc.).

[1023] Значение для третьего атрибута (например, номера принятого раунда) из набора атрибутов может включать второе числовое значение, основанное на взаимосвязи между событием и пятым набором событий, привязанным к событию. Каждое событие из пятого набора событий является потомком события и связано со вторым общим атрибутом (например, является известным), как и остальные события из пятого набора событий. Второй общий атрибут может быть связан с (1) третьим общим атрибутом (например, указанием о том, что представляет собой первое событие раунда R или свидетеля), который является указанием о первом случае, в котором второе событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано со вторым конкретным значением, отличным от первого конкретного значения, и (2) результатом, основанным на наборе указаний. Каждое указание из набора указаний может быть связано с событием из шестого набора событий. Каждое событие из шестого набора событий может быть связано с четвертым общим атрибутом, который является указанием о первом случае, в котором третье событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано с третьим конкретным значением, отличным от первого конкретного значения и второго конкретного значения. В некоторых случаях первое конкретное значение является первым целым числом (например, первым номером раунда R), второе конкретное значение является вторым целым числом (например, вторым номером раунда, R+n), превышающим первое целое число, и третье конкретное значение является третьим целым числом (например, третьим номером раунда, R+n+m), превышающим второе целое число.[1023] The value for the third attribute (eg, the accepted round number) of the attribute set may include a second numeric value based on the relationship between the event and the fifth event set associated with the event. Each event in the fifth event set is a child of an event and is associated with a second common attribute (eg, known), like the rest of the events in the fifth event set. The second common attribute may be associated with (1) a third common attribute (e.g., an indication of what constitutes the first event of an R round or witness), which is an indication of the first occurrence in which the second event specified by each computing device in the set of computing devices, is associated with a second specific value other than the first specific value, and (2) a result based on a set of indications. Each indication from the set of indications may be associated with an event from the sixth set of events. Each event in the sixth event set may be associated with a fourth common attribute, which is an indication of the first occurrence in which the third event identified by each computing device in the computing device set is associated with a third specific value other than the first specific value and the second specific value. . In some cases, the first specific value is the first integer (for example, the first round number R), the second specific value is the second integer (for example, the second round number, R+n) greater than the first integer, and the third specific value is the third integer. number (for example, the third round number, R+n+m) greater than the second integer.

[1024] В некоторых вариантах осуществления устройство содержит память и процессор. Память содержит экземпляр распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Процессор функционально соединен с памятью, хранящей экземпляр распределенной базы данных, и приспособлен для приема сигнала, представляющего событие, привязанное к набору событий. Процессор приспособлен для идентификации порядка, связанного с набором событий, на основе по меньшей мере результата протокола. Процессор приспособлен для сохранения в экземпляре распределенной базы данных порядка, связанного с набором событий.[1024] In some embodiments, the device includes a memory and a processor. The memory contains an instance of the distributed database on a first computing device adapted to be included in a set of computing devices that implements the distributed database via a network operatively connected to the set of computing devices. The processor is operatively coupled to a memory holding an instance of the distributed database and adapted to receive a signal representing an event associated with the set of events. The processor is adapted to identify the order associated with the set of events based on at least the result of the protocol. The processor is adapted to maintain the order associated with a set of events in a distributed database instance.

[1025] В некоторых вариантах осуществления энергонезависимый считываемый процессором носитель хранит код, представляющий инструкции, которые должны быть исполнены процессором для приема сигнала, представляющего событие, привязанное к набору событий, и идентификации порядка, связанного с набором событий, на основе раунда, связанного с каждым событием из набора событий, и указания, указывающего на то, когда необходимо наращивать раунд, связанный с каждым событием. Код дополнительно содержит код для предписывания процессору сохранить в экземпляре распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств, порядок, связанный с набором событий. Экземпляр распределенной базы данных функционально соединен с процессором.[1025] In some embodiments, a non-volatile processor-readable medium stores code representing instructions to be executed by a processor to receive a signal representing an event associated with an event set and identify the order associated with the event set based on the round associated with each an event from the set of events, and an indication indicating when to increment the round associated with each event. The code further comprises code for causing the processor to store in a distributed database instance on a first computing device adapted to be included in a set of computing devices that implements a distributed database via a network operably connected to the set of computing devices, the order associated with the set of events. The distributed database instance is operatively coupled to the processor.

[1026] В некоторых вариантах осуществления экземпляр распределенной базы данных на первом вычислительном устройстве может быть приспособлен для включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Первое вычислительное устройство сохраняет множество транзакций в экземпляре распределенной базы данных. Модуль конвергенции базы данных может быть реализован в памяти или процессоре первого вычислительного устройства. Модуль конвергенции базы данных может быть функционально соединен с экземпляром распределенной базы данных. Модуль конвергенции базы данных может быть приспособлен для определения в первый момент времени первого события, привязанного к первому набору событий. Каждое событие из первого набора событий представляет собой последовательность байтов и связано с (1) набором транзакций из множества наборов транзакций и (b) порядком, связанным с набором транзакций. Каждая транзакция из набора транзакций представляет собой транзакцию из множества транзакций. Модуль конвергенции базы данных может быть приспособлен для приема во второй момент времени после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств второго события, (1) определенного вторым вычислительным устройством и (2) привязанного ко второму набору событий. Модуль конвергенции базы данных может быть приспособлен для определения третьего события, привязанного к первому событию и второму событию. Модуль конвергенции базы данных может быть приспособлен для идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере первого набора событий и второго набора событий. Каждое событие из третьего набора событий представляет собой событие из по меньшей мере одного из первого набора событий или второго набора событий. Модуль конвергенции базы данных может быть приспособлен для идентификации порядка, связанного с множеством транзакций, на основе по меньшей мере (1) порядка, связанного с третьим набором событий, и (2) порядка, связанного с каждым набором транзакций из множества наборов транзакций. Модуль конвергенции базы данных может быть приспособлен для сохранения в экземпляре распределенной базы данных порядка, связанного с множеством транзакций, сохраненных на первом вычислительном устройстве.[1026] In some embodiments, an instance of a distributed database on a first computing device may be adapted to be included in a set of computing devices that implements the distributed database via a network operatively coupled to the set of computing devices. The first computing device stores a plurality of transactions in a distributed database instance. The database convergence module may be implemented in the memory or processor of the first computing device. The database convergence module may be operatively connected to a distributed database instance. The database convergence module may be adapted to determine at a first time the first event associated with the first set of events. Each event from the first set of events is a sequence of bytes and is associated with (1) a set of transactions from a set of transactions and (b) an order associated with a set of transactions. Each transaction in the set of transactions is a transaction in the set of transactions. The database convergence module may be adapted to receive at a second time after the first time and from a second computing device of the set of computing devices a second event (1) determined by the second computing device and (2) associated with the second set of events. The database convergence module may be adapted to define a third event associated with the first event and the second event. The database convergence module may be adapted to identify the order associated with the third set of events based on at least the first set of events and the second set of events. Each event from the third set of events is an event from at least one of the first set of events or the second set of events. The database convergence module may be adapted to identify an order associated with a plurality of transactions based on at least (1) an order associated with a third set of events and (2) an order associated with each transaction set of the plurality of transaction sets. The database convergence module may be adapted to store in the distributed database instance the order associated with the plurality of transactions stored on the first computing device.

[1027] В некоторых вариантах осуществления экземпляр распределенной базы данных на первом вычислительном устройстве может быть приспособлен для включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Модуль конвергенции базы данных может быть реализован в памяти или процессоре первого вычислительного устройства. Модуль конвергенции базы данных может быть приспособлен для определения в первый момент времени первого события, привязанного к первому набору событий. Каждое событие из первого набора событий представляет собой последовательность байтов. Модуль конвергенции базы данных может быть приспособлен для приема во второй момент времени после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств второго события, (1) определенного вторым вычислительным устройством и (2) привязанного ко второму набору событий. Каждое событие из второго набора событий представляет собой последовательность байтов. Модуль конвергенции базы данных может быть приспособлен для определения третьего события, привязанного к первому событию и второму событию. Модуль конвергенции базы данных может быть приспособлен для идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере первого набора событий и второго набора событий. Каждое событие из третьего набора событий представляет собой событие из по меньшей мере одного из первого набора событий или второго набора событий. Модуль конвергенции базы данных может быть приспособлен для сохранения в экземпляре распределенной базы данных порядка, связанного с третьим набором событий. [1027] In some embodiments, an instance of a distributed database on a first computing device may be adapted to be included in a set of computing devices that implements the distributed database via a network operatively coupled to the set of computing devices. The database convergence module may be implemented in the memory or processor of the first computing device. The database convergence module may be adapted to determine at a first time the first event associated with the first set of events. Each event from the first set of events is a sequence of bytes. The database convergence module may be adapted to receive at a second time after the first time and from a second computing device of the set of computing devices a second event (1) determined by the second computing device and (2) associated with the second set of events. Each event from the second set of events is a sequence of bytes. The database convergence module may be adapted to define a third event associated with the first event and the second event. The database convergence module may be adapted to identify the order associated with the third set of events based on at least the first set of events and the second set of events. Each event from the third set of events is an event from at least one of the first set of events or the second set of events. The database convergence module may be adapted to preserve the order associated with the third set of events in the distributed database instance.

[1028] В некоторых вариантах осуществления данные, связанные с первой транзакцией, могут быть приняты на первом вычислительном устройстве из набора вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Каждое вычислительное устройство из набора вычислительных устройств имеет отдельный экземпляр распределенной базы данных. Порядковое значение первой транзакции, связанное с первой транзакцией, может быть определено в первый момент времени. Данные, связанные со второй транзакцией, могут быть приняты со второго вычислительного устройства из набора вычислительных устройств. Набор транзакций может быть сохранен в экземпляре распределенной базы данных на первом вычислительном устройстве. Набор транзакций может содержать по меньшей мере первую транзакцию и вторую транзакцию. Набор порядковых значений транзакций, содержащий по меньшей мере порядковое значение первой транзакции и порядковое значение второй транзакции, может быть выбран во второй момент времени после первого момента времени. Порядковое значение второй транзакции может быть связано со второй транзакцией. Переменная состояния базы данных может быть определена на основе по меньшей мере набора транзакций и набора порядковых значений транзакций.[1028] In some embodiments, data associated with a first transaction may be received on a first computing device of a set of computing devices that implement a distributed database via a network operatively coupled to the set of computing devices. Each computing device in the set of computing devices has a separate distributed database instance. The ordinal value of the first transaction associated with the first transaction can be determined at the first time. The data associated with the second transaction may be received from a second computing device of the set of computing devices. The set of transactions may be stored in a distributed database instance on the first computing device. The set of transactions may contain at least a first transaction and a second transaction. A set of transaction ordinal values containing at least a first transaction ordinal value and a second transaction ordinal value may be selected at a second time point after the first time point. The ordinal value of the second transaction may be associated with the second transaction. The database state variable may be determined based on at least a set of transactions and a set of transaction ordinal values.

[1029] В контексте настоящего документа модуль может представлять собой, например, любой узел и/или набор функционально соединенных электрических компонентов, связанных с выполнением конкретной функции, и может содержать, например, память, процессор, электрические каналы связи, оптические соединители, программное обеспечение (исполняемое в аппаратном обеспечении) и/или т. п.[1029] As used herein, a module may be, for example, any assembly and/or set of operatively connected electrical components associated with performing a particular function, and may include, for example, memory, processor, electrical communication channels, optical connectors, software (executable in hardware) and/or the like.

[1030] В контексте настоящего описания форма единственного числа включает ссылки, определяемые объекты во множественном числе, если в контексте явно не указано иное. Таким образом, например, предполагается, что термин «модуль» означает один модуль или комбинацию модулей. Например, предполагается, что «сеть» означает одну сеть или комбинацию сетей.[1030] In the context of the present description, the singular form includes references defined by objects in the plural, unless the context clearly indicates otherwise. Thus, for example, the term "module" is intended to mean one module or a combination of modules. For example, "network" is intended to mean one network or combination of networks.

[1031] На фиг. 1 представлена структурная схема высокого уровня, на которой проиллюстрирована система 100 распределенной базы данных согласно варианту осуществления. На фиг. 1 проиллюстрирована распределенная база 100 данных, реализованная на четырех вычислительных устройствах (вычислительное устройство 110, вычислительное устройство 120, вычислительное устройство 130 и вычислительное устройство 140), но следует понимать, что распределенная база 100 данных может использовать набор из любого количества вычислительных устройств, содержащий вычислительные устройства, не показанные на фиг. 1. Сеть 105 может представлять собой сеть любого типа (например, локальную вычислительную сеть (LAN), глобальную вычислительную сеть (WAN), виртуальную сеть, телекоммуникационную сеть), реализованную в виде проводной сети и/или беспроводной сети и используемую для функционального соединения вычислительных устройств 110, 120, 130, 140. Как более подробно описано в настоящем документе, в некоторых вариантах осуществления, например, вычислительные устройства представляют собой персональные компьютеры, соединенные друг с другом посредством поставщика услуг Интернет (ISP) и Интернета (например, сети 105). В некоторых вариантах осуществления соединение может быть установлено посредством сети 105 между любыми двумя вычислительными устройствами 110, 120, 130, 140. Как показано на фиг. 1, например, соединение может быть установлено между вычислительным устройством 110 и любым из вычислительного устройства 120, вычислительного устройства 130 или вычислительного устройства 140.[1031] FIG. 1 is a high-level block diagram illustrating a distributed database system 100 according to an embodiment. In FIG. 1 illustrates a distributed database 100 implemented on four computing devices (computing device 110, computing device 120, computing device 130, and computing device 140), but it should be understood that distributed database 100 may use a set of any number of computing devices containing computing devices not shown in Fig. 1. Network 105 may be any type of network (eg, local area network (LAN), wide area network (WAN), virtual network, telecommunications network) implemented as a wired network and/or wireless network and used to functionally interconnect computing devices 110, 120, 130, 140. As described in more detail herein, in some embodiments, for example, the computing devices are personal computers connected to each other via an Internet Service Provider (ISP) and the Internet (e.g., networks 105) . In some embodiments, a connection may be established via network 105 between any two computing devices 110, 120, 130, 140. As shown in FIG. 1, for example, a connection may be established between computing device 110 and any of computing device 120, computing device 130, or computing device 140.

[1032] В некоторых вариантах осуществления вычислительные устройства 110, 120, 130, 140 могут осуществлять связь друг с другом (например, отправлять данные на и/или принимать данные с) и с сетью посредством промежуточных сетей и/или альтернативных сетей (не показаны на фиг. 1). Такие промежуточные сети и/или альтернативные сети могут принадлежать к тому же типу и/или другому типу сети в сравнении с сетью 105. [1032] In some embodiments, computing devices 110, 120, 130, 140 may communicate with each other (eg, send data to and/or receive data from) and with the network via intermediate networks and/or alternate networks (not shown in the figure). Fig. 1). Such intermediate networks and/or alternative networks may be of the same type and/or a different type of network compared to network 105.

[1033] Каждое вычислительное устройство 110, 120, 130, 140 может представлять собой устройство любого типа, приспособленное для отправки данных по сети 105, чтобы отправлять и/или принимать данные с одного или более других вычислительных устройств. Примеры вычислительных устройств показаны на фиг. 1. Вычислительное устройство 110 содержит память 112, процессор 111 и устройство 113 вывода. Память 112 может представлять собой, например, оперативное запоминающее устройство (RAM), буфер памяти, жесткий диск, базу данных, стираемое программируемое постоянное запоминающее устройство (EPROM), электрически стираемое постоянное запоминающее устройство (EEPROM), постоянное запоминающее устройство (ROM) и/или т. д. В некоторых вариантах осуществления память 112 вычислительного устройства 110 содержит данные, связанные с экземпляром распределенной базы данных (например, экземпляром 114 распределенной базы данных). В некоторых вариантах осуществления память 112 хранит инструкции, предписывающие процессору исполнить модули, процессы и/или функции, связанные с отправкой на другой экземпляр и/или приемом с другого экземпляра распределенной базы данных (например, экземпляра 124 распределенной базы данных на вычислительном устройстве 120) записи события синхронизации, и/или записи предыдущих событий синхронизации с другими вычислительными устройствами, и/или порядка событий синхронизации, и/или порядка транзакций в событиях, параметров, связанных с идентификацией порядка событий синхронизации и/или транзакций, и/или значения для параметра (например, поля базы данных, количественно характеризующего транзакцию, поля базы данных, количественно характеризующего порядок, в котором происходят события, и/или любого другого подходящего поля, для которого значение может быть сохранено в базе данных). [1033] Each computing device 110, 120, 130, 140 may be any type of device adapted to send data over network 105 to send and/or receive data from one or more other computing devices. Examples of computing devices are shown in FIG. 1. Computing device 110 includes a memory 112, a processor 111, and an output device 113. The memory 112 may be, for example, random access memory (RAM), memory buffer, hard drive, database, erasable programmable read only memory (EPROM), electrically erasable read only memory (EEPROM), read only memory (ROM), and/ or so on. In some embodiments, memory 112 of computing device 110 contains data associated with a distributed database instance (eg, distributed database instance 114). In some embodiments, memory 112 stores instructions that cause the processor to execute modules, processes, and/or functions associated with sending to and/or receiving from another distributed database instance (e.g., distributed database instance 124 on computing device 120) a record synchronization events, and/or records of previous synchronization events with other computing devices, and/or the order of synchronization events, and/or the order of transactions in events, parameters associated with identifying the order of synchronization events and/or transactions, and/or a value for the parameter ( for example, a database field that quantifies a transaction, a database field that quantifies the order in which events occur, and/or any other suitable field for which a value can be stored in the database).

[1034] Экземпляр 114 распределенной базы данных может, например, быть приспособлен для проведений операций с данными, включая сохранение, модификацию и/или удаление данных. В некоторых вариантах осуществления экземпляр 114 распределенной базы данных может представлять собой набор массивов, набор структур данных, реляционную базу данных, объектную базу данных, постреляционную базу данных и/или базу данных или хранилище любого другого подходящего типа. Например, экземпляр 114 распределенной базы данных может хранить данные, относящиеся к любой конкретной функции и/или области. Например, экземпляр 114 распределенной базы данных может хранить финансовые транзакции (например, пользователя вычислительного устройства 110), включая значение и/или вектор значений, относящиеся к истории владения конкретным финансовым инструментом. В целом, вектор может представлять собой любой набор значений для параметра, и параметр может представлять собой любые объект данных и/или поле базы данных, которые могут принимать разные значения. Таким образом, экземпляр 114 распределенной базы данных может иметь ряд параметров и/или полей, каждое из которых связано с вектором значений. Вектор значений используется для определения фактического значения для параметра и/или поля в том экземпляре 114 базы данных. В некоторых случаях экземпляр 114 распределенной базы данных хранит запись события синхронизации, запись предыдущих событий синхронизации с другими вычислительными устройствами, порядок событий синхронизации, порядок транзакций в событиях, параметры и/или значения, связанные с идентификацией порядка событий синхронизации и/или транзакций (например, используемые при вычислении порядка с использованием способа достижения консенсуса, как описано в настоящем документе), значение для параметра (например, поле базы данных, количественно характеризующее транзакцию, поле базы данных, количественно характеризующее порядок, в котором происходят события, и/или любое другое подходящее поле, для которого значение может быть сохранено в базе данных). [1034] The distributed database instance 114 may, for example, be adapted to perform operations on data, including storing, modifying, and/or deleting data. In some embodiments, distributed database instance 114 may be a set of arrays, a set of data structures, a relational database, an object database, a per-relational database, and/or any other suitable type of database or store. For example, distributed database instance 114 may store data related to any particular function and/or area. For example, distributed database instance 114 may store financial transactions (eg, of a user of computing device 110), including a value and/or vector of values related to the ownership history of a particular financial instrument. In general, a vector can be any set of values for a parameter, and a parameter can be any data object and/or database field that can take on different values. Thus, distributed database instance 114 may have a number of parameters and/or fields, each associated with a vector of values. The value vector is used to determine the actual value for the parameter and/or field in that database instance 114 . In some cases, the distributed database instance 114 stores a sync event record, a record of previous sync events with other computing devices, the order of sync events, the order of transactions in events, parameters and/or values associated with identifying the order of sync events and/or transactions (e.g., used when calculating the order using the consensus method as described herein), a value for a parameter (e.g., a database field that quantifies the transaction, a database field that quantifies the order in which events occur, and/or any other suitable a field for which a value can be stored in the database).

[1035] В некоторых случаях экземпляр 114 распределенной базы данных может также хранить переменную состояния базы данных и/или текущее состояние. Текущим состоянием могут быть состояние, баланс, условие и/или т. п., связанные с результатом транзакций. Подобным образом, состояние может включать структуру данных и/или переменные, модифицированные транзакциями. В других случаях текущее состояние можно хранить в отдельной базе данных и/или части памяти 112. В еще других случаях текущее состояние можно хранить в памяти вычислительного устройства, отличного от вычислительного устройства 110. [1035] In some cases, distributed database instance 114 may also store a database state variable and/or current state. The current state may be a state, balance, condition, and/or the like associated with the result of transactions. Similarly, the state may include a data structure and/or variables modified by transactions. In other cases, the current state may be stored in a separate database and/or portion of memory 112. In still other cases, the current state may be stored in a memory of a computing device other than computing device 110.

[1036] В некоторых случаях экземпляр 114 распределенной базы данных может также быть использован для реализации других структур данных, таких как набор пар (ключ, значение). Транзакцией, записанной экземпляром 114 распределенной базы данных, может быть, например, добавление, удаление или модификация пары (ключ, значение) в наборе пар (ключ, значение). [1036] In some cases, distributed database instance 114 may also be used to implement other data structures, such as a set of (key, value) pairs. The transaction recorded by the distributed database instance 114 may be, for example, adding, deleting, or modifying a (key, value) pair in a set of (key, value) pairs.

[1037] В некоторых случаях в систему 100 распределенной базы данных или в любой из экземпляров 114, 124, 134, 144 распределенной базы данных может быть отправлен запрос. Например, запрос может состоять из ключа, и результат, возвращаемый системой 100 распределенной базы данных или экземплярами 114, 124, 134, 144 распределенной базы данных, может представлять собой значение, связанное с ключом. В некоторых случаях система 100 распределенной базы данных или любой из экземпляров 114, 124, 134, 144 распределенной базы данных могут быть также модифицированы посредством транзакции. Например, транзакция для модификации базы данных может содержать цифровую подпись, выполненную стороной, авторизирующей транзакцию модификации.[1037] In some cases, a query may be sent to the distributed database system 100 or to any of the distributed database instances 114, 124, 134, 144. For example, a query may consist of a key, and the result returned by the distributed database system 100 or distributed database instances 114, 124, 134, 144 may be a value associated with the key. In some cases, the distributed database system 100 or any of the distributed database instances 114, 124, 134, 144 may also be modified by a transaction. For example, a transaction for modifying a database may contain a digital signature performed by the party authorizing the modification transaction.

[1038] Система 100 распределенной базы данных может быть использована для многих целей, таких как, например, хранение атрибутов, связанных с различными пользователями в распределенной системе идентификации. Например, такая система может использовать идентификатор пользователя в качестве «ключа», и список атрибутов, связанных с пользователями, в качестве «значения». В некоторых случаях идентификатор может представлять собой криптографический открытый ключ с соответствующим закрытым ключом, известным тому пользователю. Каждый атрибут может, например, быть подписан с помощью цифровой подписи органом, имеющим право на утверждение того атрибута. Каждый атрибут может быть также, например, зашифрован с помощью открытого ключа, связанного с физическим лицом или группой физических лиц, которые обладают правом на считывание атрибута. Некоторые ключи или значения могут также иметь прикрепленный к ним список открытых ключей сторон, которые уполномочены модифицировать или удалять ключи или значения. [1038] The distributed database system 100 can be used for many purposes, such as storing attributes associated with different users in a distributed identity system, for example. For example, such a system might use a user ID as a "key" and a list of attributes associated with users as a "value". In some cases, the identifier may be a cryptographic public key with a corresponding private key known to that user. Each attribute may, for example, be signed with a digital signature by an authority having the authority to approve that attribute. Each attribute may also, for example, be encrypted with a public key associated with the individual or group of individuals who have the right to read the attribute. Some keys or values may also have a list of public keys of parties that are authorized to modify or delete the keys or values attached to them.

[1039] В другом примере экземпляр 114 распределенной базы данных может хранить данные, относящиеся к массовым многопользовательским играм (MMG), такие как текущий статус и принадлежность игровых предметов. В некоторых случаях экземпляр 114 распределенной базы данных может быть реализован в вычислительном устройстве 110, как показано на фиг. 1. В других случаях вычислительное устройство может иметь доступ к экземпляру распределенной базы данных (например, по сети), но он не реализован в вычислительном устройстве (не показано на фиг. 1).[1039] In another example, distributed database instance 114 may store data related to massively multiplayer games (MMGs), such as the current status and ownership of game items. In some cases, distributed database instance 114 may be implemented on computing device 110, as shown in FIG. 1. In other cases, the computing device may have access to a distributed database instance (eg, over a network), but it is not implemented in the computing device (not shown in FIG. 1).

[1040] Процессор 111 вычислительного устройства 110 может представлять собой любое подходящее устройство обработки, приспособленное для запуска и/или исполнения экземпляра 114 распределенной базы данных. Например, процессор 111 может быть приспособлен для обновления экземпляра 114 распределенной базы данных в ответ на прием сигнала с вычислительного устройства 120 и/или предписывания отправить сигнал на вычислительное устройство 120, как более подробно описано в настоящем документе. Более конкретно, как более подробно описано в настоящем документе, процессор 111 может быть приспособлен для исполнения модулей, функций и/или процессов для обновления экземпляра 114 распределенной базы данных в ответ на прием события синхронизации, связанного с транзакцией, с другого вычислительного устройства, записи, связанной с порядком событий синхронизации, и/или т. п. В других вариантах осуществления процессор 111 может быть приспособлен для исполнения модулей, функций и/или процессов для обновления экземпляра 114 распределенной базы данных в ответ на прием значения для параметра, сохраненного в другом экземпляре распределенной базы данных (например, экземпляре 124 распределенной базы данных на вычислительном устройстве 120), и/или предписывания отправить значение для параметра, сохраненного в экземпляре 114 распределенной базы данных на вычислительном устройстве 110, на вычислительное устройство 120. В некоторых вариантах осуществления процессор 111 может представлять собой процессор общего назначения, программируемую пользователем вентильную матрицу (FPGA), интегральную схему специального назначения (ASIC), процессор цифровой обработки сигналов (DSP) и/или т. п.[1040] The processor 111 of the computing device 110 may be any suitable processing device adapted to start and/or execute the distributed database instance 114. For example, processor 111 may be adapted to update distributed database instance 114 in response to receiving a signal from computing device 120 and/or an instruct to send a signal to computing device 120, as described in more detail herein. More specifically, as described in more detail herein, processor 111 may be adapted to execute modules, functions, and/or processes to update distributed database instance 114 in response to receiving a transaction-related synchronization event from another computing device, write, associated with the order of synchronization events, and/or the like. In other embodiments, the processor 111 may be adapted to execute modules, functions, and/or processes to update the distributed database instance 114 in response to receiving a value for a parameter stored in another instance. distributed database instance (eg, distributed database instance 124 on computing device 120), and/or directing a value for a parameter stored in distributed database instance 114 on computing device 110 to be sent to computing device 120. In some embodiments, processor 111 may represent a a general purpose processor, a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), a digital signal processor (DSP), and/or the like.

[1041] Дисплей 113 может представлять собой любой подходящий дисплей, такой как, например, жидкокристаллический дисплей (LCD), дисплей на электронно-лучевой трубке (CRT) или т. п. В других вариантах осуществления любое из вычислительных устройств 110, 120, 130, 140 содержит другое устройство вывода вместо дисплеев 113, 123, 133, 143 или в дополнение к ним. Например, любое из вычислительных устройств 110, 120, 130, 140 может содержать звуковое устройство вывода (например, динамик), тактильное устройство вывода и/или т. п. В еще одних вариантах осуществления любое из вычислительных устройств 110, 120, 130, 140 содержит устройство ввода вместо дисплеев 113, 123, 133, 143 или в дополнение к ним. Например, любое из вычислительных устройств 110, 120, 130, 140 может содержать клавиатуру, мышь и/или т. п.[1041] The display 113 may be any suitable display such as, for example, a liquid crystal display (LCD), a cathode ray tube display (CRT), or the like. In other embodiments, any of the computing devices 110, 120, 130 , 140 contains another output device instead of or in addition to the displays 113, 123, 133, 143. For example, any of the computing devices 110, 120, 130, 140 may include an audio output device (e.g., a speaker), a tactile output device, and/or the like. In still other embodiments, any of the computing devices 110, 120, 130, 140 contains an input device instead of displays 113, 123, 133, 143 or in addition to them. For example, any of the computing devices 110, 120, 130, 140 may include a keyboard, mouse, and/or the like.

[1042] Несмотря на то что на фиг. 1 показано, что все находится в одном вычислительном устройстве, в некоторых случаях процессор, приспособленный для исполнения модулей, функций и/или процессов для обновления распределенной базы данных, может находиться в вычислительном устройстве, отдельном от связанной с ним распределенной базы данных. В таком случае, например, процессор может быть функционально соединен с экземпляром распределенной базы данных посредством сети. Например, процессор может исполнять способ достижения консенсуса для идентификации порядка событий и/или транзакций (например, в результате синхронизации с другими экземплярами распределенной базы данных) и может отправлять сигнал, содержащий порядок событий и/или транзакций, на связанный экземпляр распределенной базы данных по сети. Связанный экземпляр распределенной базы данных может затем сохранять порядок событий, порядок транзакций и/или переменную состояния на основе порядка транзакций в связанном экземпляре распределенной базы данных. По существу, функции и хранение, связанные с распределенной базой данных, могут быть распределены. Более того, процессор может запрашивать информацию из связанного с ним экземпляра распределенной базы данных, сохранять переменные состояний и/или текущие состояния базы данных и другие подходящие операции, описанные в настоящем документе, в своем экземпляре распределенной базы данных, даже когда база данных реализована в вычислительном устройстве, отдельном от вычислительного устройства, имеющего процессор, реализующий модули, функции и/или процессы (например, способ достижения консенсуса), связанные с системой распределенной базы данных. В других случаях функции и/или способы, описанные в настоящем документе, могут быть исполнены на любом количестве вычислительных устройств (например, в распределенной вычислительной среде и/или кластере), и результаты и/или значения таких функций и/или способов могут быть сохранены в памяти и/или хранилище на любом подходящем вычислительном устройстве. [1042] Although in FIG. 1 shows that everything resides in a single computing device, in some cases a processor adapted to execute modules, functions and/or processes for updating a distributed database may reside in a computing device separate from its associated distributed database. In such a case, for example, the processor may be operatively connected to the distributed database instance via a network. For example, the processor may execute a consensus method to identify the order of events and/or transactions (eg, as a result of synchronization with other distributed database instances) and may send a signal containing the order of events and/or transactions to an associated distributed database instance over the network. . The associated distributed database instance may then store the order of events, the order of transactions, and/or a state variable based on the order of transactions in the associated distributed database instance. As such, the functions and storage associated with a distributed database can be distributed. Moreover, a processor may query information from its associated distributed database instance, store state variables and/or current database states, and other suitable operations described herein in its distributed database instance, even when the database is implemented in a computing a device separate from a computing device having a processor that implements modules, functions, and/or processes (eg, a consensus method) associated with the distributed database system. In other instances, the functions and/or methods described herein may be executed on any number of computing devices (e.g., in a distributed computing environment and/or cluster) and the results and/or values of such functions and/or methods may be stored. in memory and/or storage on any suitable computing device.

[1043] Вычислительное устройство 120 имеет процессор 121, память 122 и дисплей 123, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 124 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных. [1043] Computing device 120 has a processor 121, memory 122, and display 123, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Also, distributed database instance 124 may be structurally and/or functionally similar to distributed database instance 114.

[1044] Вычислительное устройство 130 имеет процессор 131, память 132 и дисплей 133, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 134 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных. [1044] Computing device 130 has a processor 131, memory 132, and display 133, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Also, distributed database instance 134 may be structurally and/or functionally similar to distributed database instance 114.

[1045] Вычислительное устройство 140 имеет процессор 141, память 142 и дисплей 143, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 144 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных. [1045] Computing device 140 has a processor 141, memory 142, and display 143, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Also, distributed database instance 144 may be structurally and/or functionally similar to distributed database instance 114.

[1046] Хотя вычислительные устройства 110, 120, 130, 140 показаны как подобные друг другу, каждое вычислительное устройство системы 100 распределенной базы данных может отличаться от других вычислительных устройств. Каждое вычислительное устройство 110, 120, 130, 140 системы 100 распределенной базы данных может представлять собой любое из, например, вычислительного элемента (например, персонального вычислительного устройства, такого как настольный компьютер, портативный компьютер и т. д.), мобильного телефона, карманного персонального компьютера (PDA) и т. д. Например, вычислительное устройство 110 может представлять собой настольный компьютер, вычислительное устройство 120 может представлять собой смартфон, и вычислительное устройство 130 может представлять собой сервер.[1046] Although the computing devices 110, 120, 130, 140 are shown as similar to each other, each computing device of the distributed database system 100 may be different from other computing devices. Each computing device 110, 120, 130, 140 of the distributed database system 100 may be any of, for example, a computing element (e.g., a personal computing device such as a desktop computer, laptop computer, etc.), a mobile phone, a handheld personal computer (PDA), etc. For example, computing device 110 may be a desktop computer, computing device 120 may be a smartphone, and computing device 130 may be a server.

[1047] В некоторых вариантах осуществления одна или более частей вычислительных устройств 110, 120, 130, 140 могут включать аппаратный модуль (например, процессор цифровой обработки сигналов (DSP), программируемую пользователем вентильную матрицу (FPGA)) и/или программный модуль (например, модуль компьютерного кода, хранящегося в памяти и/или исполняемого на процессоре). В некоторых вариантах осуществления одна или более функций, связанных с вычислительными устройствами 110, 120, 130, 140 (например, функции, связанные с процессорами 111, 121, 131, 141), могут быть включены в один или более модулей (см., например, фиг. 2). [1047] In some embodiments, one or more portions of computing devices 110, 120, 130, 140 may include a hardware module (e.g., a digital signal processor (DSP), a field programmable gate array (FPGA)) and/or a software module (e.g., , a unit of computer code stored in memory and/or executed on a processor). In some embodiments, one or more functions associated with computing devices 110, 120, 130, 140 (eg, functions associated with processors 111, 121, 131, 141) may be included in one or more modules (see, for example, , Fig. 2).

[1048] Свойства системы 100 распределенной базы данных, включая свойства вычислительных устройств (например, вычислительных устройств 110, 120, 130, 140), количество вычислительных устройств, и сеть 105 могут быть выбраны любыми способами. В некоторых случаях свойства системы 100 распределенной базы данных могут быть выбраны администратором системы 100 распределенной базы данных. В других случаях свойства системы 100 распределенной базы данных могут быть совместно выбраны пользователями системы 100 распределенной базы данных.[1048] Properties of distributed database system 100, including properties of computing devices (eg, computing devices 110, 120, 130, 140), number of computing devices, and network 105 may be selected in any manner. In some cases, the properties of the distributed database system 100 may be selected by an administrator of the distributed database system 100. In other cases, the properties of the distributed database system 100 may be jointly selected by the users of the distributed database system 100.

[1049] Поскольку используется система 100 распределенной базы данных, среди вычислительных устройств 110, 120, 130 и 140 не назначен лидер. В частности, ни одно из вычислительных устройств 110, 120, 130 или 140 не идентифицируется и/или не выбирается в качестве лидера для разрешения конфликтов между значениями, хранящимися в экземплярах 111, 12, 131, 141 распределенной базы данных вычислительных устройств 110, 120, 130, 140. Вместо этого, с использованием процессов синхронизации событий, процессов голосования и/или способов, описанных в настоящем документе, вычислительные устройства 110, 120, 130, 140 могут совместно согласовывать значение для параметра.[1049] Because the distributed database system 100 is used, no leader is assigned among the computing devices 110, 120, 130, and 140. In particular, none of the computing devices 110, 120, 130, or 140 is identified and/or chosen as the leader to resolve conflicts between values stored in the distributed database instances 111, 12, 131, 141 of the computing devices 110, 120, 130, 140. Instead, using the event timing processes, voting processes, and/or methods described herein, computing devices 110, 120, 130, 140 may collaboratively negotiate a value for a parameter.

[1050] Отсутствие лидера в системе распределенной базы данных повышает безопасность системы распределенной базы данных. В частности, при наличии лидера существует единая точка атаки и/или сбоя. Если вредоносное программное обеспечение заражает лидера и/или значение для параметра на экземпляре распределенной базы данных лидера изменяют со злым умыслом, ошибочное и/или неправильное значение распространяется по другим экземплярам распределенной базы данных. Однако в системе без лидера нет единой точки атаки и/или сбоя. В частности, если параметр в экземпляре распределенной базы данных системы без лидера содержит значение, значение изменится после того, как тот экземпляр распределенной базы данных обменяется значениями с другими экземплярами распределенной базы данных в системе, как более подробно описано в настоящем документе. Дополнительно системы распределенной базы данных без лидера, описанные в настоящем документе, повышают скорость конвергенции, при этом уменьшая объем данных, передаваемых между устройствами, как более подробно описано в настоящем документе.[1050] The absence of a leader in the distributed database system improves the security of the distributed database system. In particular, in the presence of a leader, there is a single point of attack and/or failure. If malware infects the leader and/or the value for a parameter on the leader's distributed database instance is maliciously modified, the erroneous and/or incorrect value is propagated to other distributed database instances. However, in a leaderless system, there is no single point of attack and/or failure. In particular, if a parameter in a distributed database instance of a leaderless system contains a value, the value will change after that distributed database instance exchanges values with other distributed database instances in the system, as described in more detail herein. Additionally, the leaderless distributed database systems described herein increase the speed of convergence while reducing the amount of data transferred between devices, as described in more detail herein.

[1051] На фиг. 2 проиллюстрировано вычислительное устройство 200 системы распределенной базы данных (например, системы 100 распределенной базы данных) согласно варианту осуществления. В некоторых вариантах осуществления вычислительное устройство 200 может быть подобным вычислительным устройствам 110, 120, 130, 140, показанным и описанным в отношении фиг. 1. Вычислительное устройство 200 содержит процессор 210 и память 220. Процессор 210 и память 220 функционально соединены друг с другом. В некоторых вариантах осуществления процессор 210 и память 220 могут быть подобными процессору 111 и памяти 112 соответственно, подробно описанным в отношении фиг. 1. Как показано на фиг. 2, процессор 210 содержит модуль 211 конвергенции базы данных и модуль 210 связи, и память 220 содержит экземпляр 221 распределенной базы данных. Модуль 212 связи позволяет вычислительному устройству 200 осуществлять связь с другими вычислительными устройствами (например, отправлять данные на них и/или принимать данные с них). В некоторых вариантах осуществления модуль 212 связи (не показан на фиг. 1) позволяет вычислительному устройству 110 осуществлять связь с вычислительными устройствами 120, 130, 140. Модуль 210 связи может содержать и/или обеспечивать, например, контроллер сетевого интерфейса (NIC), беспроводное соединение, проводной порт и/или т. п. По существу, модуль 210 связи может устанавливать и/или поддерживать сеанс связи между вычислительным устройством 200 и другим устройством (например, посредством сети, такой как сеть 105, представленная на фиг. 1, или Интернет (не показано)). Подобным образом модуль 210 связи может позволять вычислительному устройству 200 отправлять данные на другое устройство и/или принимать данные с него.[1051] FIG. 2 illustrates a computing device 200 of a distributed database system (eg, distributed database system 100) according to an embodiment. In some embodiments, computing device 200 may be similar to computing devices 110, 120, 130, 140 shown and described with respect to FIG. 1. Computing device 200 includes a processor 210 and a memory 220. The processor 210 and memory 220 are operatively coupled to each other. In some embodiments, processor 210 and memory 220 may be similar to processor 111 and memory 112, respectively, as detailed with respect to FIG. 1. As shown in FIG. 2, processor 210 includes a database convergence module 211 and communication module 210, and memory 220 includes a distributed database instance 221. Communications module 212 allows computing device 200 to communicate with (eg, send data to and/or receive data from) other computing devices. In some embodiments, communication module 212 (not shown in FIG. 1) allows computing device 110 to communicate with computing devices 120, 130, 140. Communication module 210 may include and/or provide, for example, a network interface controller (NIC), wireless connection, wired port, and/or the like. As such, communication module 210 may establish and/or maintain a communication session between computing device 200 and another device (eg, via a network, such as network 105 shown in FIG. 1, or Internet (not shown). Similarly, communication module 210 may allow computing device 200 to send data to and/or receive data from another device.

[1052] В некоторых случаях модуль 211 конвергенции базы данных может обмениваться событиями и/или транзакциями с другими вычислительными устройствами, сохранять события и/или транзакции, которые принимает модуль 211 конвергенции базы данных, и вычислять упорядоченную последовательность событий и/или транзакций на основе частичного порядка, определенного схемой ссылок между событиями. Каждое событие может представлять собой запись, содержащую криптографический хеш двух более ранних событий (привязывающий то событие к двум более ранним событиями и их событиям-предкам и наоборот), данные полезной нагрузки (такие как транзакции, которые должны быть записаны), другую информацию, такую как текущее время, метка времени (например, дата и время по UTC), которую утвердил ее создатель, представляющая время, в которое событие было впервые определено, и/или т. п. Каждые из осуществляющих связь вычислительных устройств называются «участниками» или «участниками хешграфа». В некоторых случаях первое событие, определенное участником, содержит хеш только одного события, определенного другим участником. В таких случаях участник еще не имеет предыдущего собственного хеша (например, хеша события, ранее определенного тем участником). В некоторых случаях первое событие в распределенной базе данных не содержит хеша никакого предыдущего события (поскольку отсутствует предыдущее событие для той распределенной базы данных).[1052] In some cases, the database convergence module 211 may exchange events and/or transactions with other computing devices, store the events and/or transactions that the database convergence module 211 receives, and calculate an ordered sequence of events and/or transactions based on a partial the order defined by the link scheme between events. Each event can be a record containing a cryptographic hash of the two earlier events (linking that event to the two earlier events and their parent events and vice versa), payload data (such as transactions to be recorded), other information such as as the current time, a timestamp (e.g. UTC date and time) approved by its creator representing the time at which the event was first defined, and/or the like. Each of the communicating computing devices is called "participants" or " hashgraph participants. In some cases, the first event defined by a participant contains a hash of only one event defined by another participant. In such cases, the participant does not yet have a previous hash of its own (eg, an event hash previously determined by that participant). In some cases, the first event in a distributed database does not contain the hash of any previous event (because there is no previous event for that distributed database).

[1053] В некоторых вариантах осуществления такой криптографический хеш двух более ранних событий может представлять собой значение хеша, определенное на основе криптографической хеш-функции с использованием события в качестве входных данных. В частности, в таких вариантах осуществления событие содержит конкретную последовательность или строку байтов (которые представляют собой информацию этого события). Хеш события может представлять собой значение, возвращаемое хеш-функцией, использующей последовательность байтов для того события в качестве входных данных. В других вариантах осуществления любые другие подходящие данные, связанные с событием (например, идентификатор, серийный номер, байты, представляющие конкретную часть события, и т. д.), могут быть использованы в качестве входных данных для хеш-функции для вычисления хеша того события. Любая подходящая хеш-функция может быть использована для определения хеша. В некоторых вариантах осуществления каждый участник использует одну и ту же хеш-функцию, так что один и тот же хеш генерируется у каждого участника для заданного события. Событие может быть затем подписано с помощью цифровой подписи участником, определяющим и/или создающим событие. [1053] In some embodiments, such a cryptographic hash of the two earlier events may be a hash value determined based on a cryptographic hash function using the event as input. In particular, in such embodiments, the implementation of the event contains a specific sequence or string of bytes (which represent the information of this event). An event hash can be a value returned by a hash function that uses the byte sequence for that event as input. In other embodiments, any other suitable data associated with the event (e.g., ID, serial number, bytes representing a particular part of the event, etc.) can be used as input to a hash function to compute a hash of that event. . Any suitable hash function can be used to determine the hash. In some embodiments, each participant uses the same hash function so that the same hash is generated for each participant for a given event. The event may then be digitally signed by the participant defining and/or creating the event.

[1054] В некоторых случаях набор событий и их взаимосвязей может формировать направленный ациклический граф (DAG). В некоторых случаях каждое событие в DAG ссылается на несколько (например, два) более ранних событий (привязывая то событие к более ранним событиям и их событиям-предкам и наоборот) или не ссылается ни на одно из них, и каждая ссылка осуществляется строго на более ранние события, так что циклов нет. В некоторых вариантах осуществления DAG основан на криптографических хешах, так что структура данных может называться хешграфом (также называется в настоящем документе «DAG на основе хешей»). Хешграф непосредственно кодирует частичный порядок, обозначая, что известно, что событие X происходит до события Y, если Y содержит хеш X, или если Y содержит хеш события, которое содержит хеш X, или для таких путей произвольной длины. Однако, если путь от X к Y или от Y к X отсутствует, то частичный порядок не определяет, какое событие произошло первым. Следовательно, модуль конвергенции базы данных может вычислять общий порядок из частичного порядка. Это может быть выполнено с помощью любой подходящей детерминированной функции, которая используется вычислительными устройствами, так что вычислительные устройства вычисляют один и тот же порядок. В некоторых вариантах осуществления каждый участник может повторно вычислять этот порядок после каждой синхронизации, и в итоге эти порядки могут сходиться таким образом, что возникает консенсус.[1054] In some cases, a set of events and their relationships may form a directed acyclic graph (DAG). In some cases, each event in the DAG refers to several (for example, two) earlier events (binding that event to earlier events and their parent events and vice versa) or does not refer to any of them, and each reference is strictly to more early events, so there are no cycles. In some embodiments, the DAG is based on cryptographic hashes, so that the data structure may be referred to as a hashgraph (also referred to herein as a "hash-based DAG"). The hashgraph directly encodes a partial order, denoting that an event X is known to occur before an event Y if Y contains a hash of X, or if Y contains a hash of an event that contains a hash of X, or for such paths of arbitrary length. However, if there is no path from X to Y or from Y to X, then the partial order does not determine which event happened first. Therefore, the database convergence module can calculate the total order from the partial order. This can be done with any suitable deterministic function that is used by the computing devices such that the computing devices compute the same order. In some embodiments, each participant may recalculate this order after each synchronization, and eventually these orders may converge such that a consensus occurs.

[1055] Алгоритм и/или способ консенсуса могут быть использованы для определения порядка событий в хешграфе и/или порядка транзакций, сохраненных в событиях. Порядок транзакций в свою очередь может определять состояние базы данных в результате выполнения тех транзакций в соответствии с порядком. Определенное состояние базы данных может быть сохранено в качестве переменной состояния базы данных. В некоторых вариантах осуществления экземпляр распределенной базы данных (например, экземпляр 114 распределенной базы данных) сохраняет хешграф, и/или транзакции, и/или порядок транзакций, и/или события, и/или порядок событий, и/или состояние, полученное в результате выполнения транзакций.[1055] An algorithm and/or consensus method may be used to determine the order of events in a hashgraph and/or the order of transactions stored in events. The order of the transactions, in turn, can determine the state of the database as a result of those transactions being executed according to the order. A particular database state can be stored as a database state variable. In some embodiments, a distributed database instance (e.g., distributed database instance 114) stores a hashgraph and/or transactions and/or order of transactions and/or events and/or order of events and/or state resulting from execution of transactions.

[1056] В некоторых случаях модуль конвергенции базы данных может использовать следующую функцию для вычисления общего порядка из частичного порядка в хешграфе. Для каждого из других вычислительных устройств (называемых «участниками») модуль конвергенции базы данных может изучать хешграф для установления порядка, в котором события (и/или указания о тех событиях) были приняты тем участником. Модуль конвергенции базы данных может затем выполнять вычисления таким образом, словно тот участник присвоил числовой «ранг» каждому событию, при этом ранг равен 1 для первого события, которое принял участник, 2 для второго события, которое принял участник, и так далее. Модуль конвергенции базы данных может выполнять это для каждого участника в хешграфе. Затем для каждого события модуль конвергенции базы данных может вычислять медиану присвоенных рангов и может сортировать события по их медианам. Сортировка может разрушать равенства детерминированным образом, например, сортируя два равных события по числовому порядку их хешей или некоторым другим способом, в котором модуль конвергенции базы данных каждого участника использует одинаковый способ. Результатом этой сортировки является общий порядок.[1056] In some cases, the database convergence module may use the following function to calculate the total order from the partial order in the hashgraph. For each of the other computing devices (called "participants"), the database convergence module may examine the hashgraph to determine the order in which events (and/or indications of those events) were received by that participant. The database convergence module can then perform calculations as if that participant had assigned a numerical "rank" to each event, with the rank being 1 for the first event that the participant accepted, 2 for the second event that the participant accepted, and so on. The database convergence module can do this for each participant in the hashgraph. Then, for each event, the database convergence module may calculate the median of the assigned ranks and may sort the events by their medians. Sorting may break the equalities in a deterministic way, for example by sorting two equal events by the numerical order of their hashes, or in some other way in which each participant's database convergence module uses the same way. The result of this sort is the overall order.

[1057] На фиг. 6 проиллюстрирован хешграф 640 одного примера для определения общего порядка. Хешграф 640 иллюстрирует два события (самый нижний круг с полосками и самый нижний круг с точками) и первый момент времени, когда каждый участник принимает указание на те события (остальные круги с полосками и точками). Имя каждого участника в верхней части окрашено согласно тому, какое событие является первым в их медленном порядке. Первоначальных голосов с полосками больше, чем с точками; следовательно, голоса консенсуса для каждого из участников имеют вид с полосками. Другими словами, участники в итоге приходят к согласию, что событие с полосками произошло до события с точками.[1057] FIG. 6 illustrates a hashgraph 640 of one example for determining the overall order. Hashgraph 640 illustrates two events (the bottommost circle with stripes and the bottommost circle with dots) and the first time each participant receives an indication of those events (the remaining circles with stripes and dots). Each member's name at the top is colored according to which event is first in their slow order. There are more initial voices with stripes than with dots; therefore, the consensus votes for each of the participants are striped. In other words, the participants eventually agree that the stripe event happened before the dot event.

[1058] В этом примере участники (вычислительные устройства, обозначенные как Алиса, Боб, Кэрол, Дэйв и Эд) будут работать таким образом, чтобы достичь консенсуса относительно того, произошло ли первым событие 642 или событие 644. Каждый круг с полосками указывает на событие, когда участник впервые принял событие 644 (и/или указание о том событии 644). Подобным образом каждый круг с точками указывает на событие, когда участник впервые принял событие 642 (и/или указание о том событии 642). Как показано в хешграфе 640, каждый из Алисы, Боба и Кэрол принял событие 644 (и/или указание о событии 644) до события 642. Как Дэйв, так и Эд приняли событие 642 (и/или указание о событии 642) до события 644 (и/или указания о событии 644). Таким образом, поскольку большее количество участников приняли событие 644 до события 642, общий порядок может быть определен каждым участником для указания того, что событие 644 произошло до события 642.[1058] In this example, the participants (computing devices labeled Alice, Bob, Carol, Dave, and Ed) will work to reach a consensus on whether event 642 or event 644 occurred first. Each circle with stripes indicates an event when the participant first received event 644 (and/or an indication of that event 644). Similarly, each dotted circle indicates the event when the participant first received event 642 (and/or an indication of that event 642). As shown in hashgraph 640, Alice, Bob, and Carol each received event 644 (and/or an indication of event 644) before event 642. Both Dave and Ed received event 642 (and/or an indication of event 642) before event 644 (and/or indications of event 644). Thus, since more participants received event 644 prior to event 642, a general order may be specified by each participant to indicate that event 644 occurred prior to event 642.

[1059] В других случаях модуль конвергенции базы данных может использовать другую функцию для вычисления общего порядка из частичного порядка в хешграфе. В таких вариантах осуществления, например, модуль конвергенции базы данных может использовать следующие функции для вычисления общего порядка, при этом положительное целое число Q представляет собой параметр, совместно используемый участниками.[1059] In other cases, the database convergence module may use another function to calculate the total order from the partial order in the hashgraph. In such embodiments, for example, the database convergence module may use the following functions to calculate the overall order, with the positive integer Q being a parameter shared by the participants.

Figure 00000001
Figure 00000001

[1060] В этом варианте осуществления fast(x,y) дает положение y в общем порядке событий по мнению creator(x) по существу сразу после создания и/или определения x. Если Q равно бесконечности, то вышеописанное вычисляет такой же общий порядок, как получается и в ранее описанном варианте осуществления. Если Q является конечным числом и все участники находятся в режиме онлайн, то вышеописанное вычисляет такой же общий порядок, как получается и в ранее описанном варианте осуществления. Если Q является конечным числом и меньшая часть участников находится в режиме онлайн в заданный момент времени, то эта функция позволяет находящимся онлайн участникам достигать консенсуса между собой, который будет сохраняться неизменным по мере постепенного, поочередного перехода в режим онлайн новых участников. Однако, если речь идет о разделе сети, то участники каждого раздела могут прийти к своему собственному консенсусу. Затем, когда раздел заполняется, участники меньшего раздела примут консенсус большего раздела.[1060] In this embodiment, fast(x,y) gives the position of y in the overall order of events in the opinion of the creator(x) substantially immediately after the creation and/or determination of x. If Q is equal to infinity, then the above calculates the same overall order as obtained in the previously described embodiment. If Q is a finite number and all participants are online, then the above calculates the same general order as obtained in the previously described embodiment. If Q is a finite number and a minority of participants are online at a given point in time, then this function allows online participants to reach a consensus among themselves, which will remain unchanged as new participants gradually, one by one, come online. However, if it is a section of the network, then the participants in each section can come to their own consensus. Then, when the section is full, the members of the smaller section will accept the consensus of the larger section.

[1061] В еще других случаях, как описано в отношении фиг. 8–12B, модуль конвергенции базы данных может использовать еще другую функцию для вычисления общего порядка из частичного порядка в хешграфе. Как показано на фиг. 8–9, каждый участник (Алиса, Боб, Кэрол, Дэйв и Эд) создает и/или определяет события (1401–1413, как показано на фиг. 8; 1501–1506, показанные на фиг. 9). При использовании функции и подфункций, описанных в отношении фиг. 8–12B, общий порядок для событий может быть вычислен посредством сортировки событий по их принятому раунду, с разрушением равенств по их принятой метке времени и разрушением тех равенств по их подписям, как более подробно описано в настоящем документе. В других случаях общий порядок для событий может быть вычислен посредством сортировки событий по их принятому раунду, с разрушением равенств по их принятому поколению (вместо их принятой метки времени) и с разрушением тех равенств по их подписям. В следующих абзацах подробно изложены функции, используемые для вычисления и/или определения принятого раунда и принятого поколения события для определения порядка для событий. Следующие термины используются и иллюстрируются в связи с фиг. 8–12B. [1061] In yet other cases, as described with respect to FIG. 8-12B, the database convergence module may use yet another function to calculate the total order from the partial order in the hashgraph. As shown in FIG. 8-9, each participant (Alice, Bob, Carol, Dave, and Ed) creates and/or defines events (1401-1413, as shown in Fig. 8; 1501-1506, shown in Fig. 9). When using the function and sub-functions described with respect to FIG. 8-12B, a general order for events can be computed by sorting the events by their received round, breaking equals by their received timestamp, and breaking those equals by their signatures, as described in more detail herein. In other cases, the overall order for events can be computed by sorting the events by their adopted round, collapsing the equals by their adopted generation (instead of their adopted timestamp), and collapsing those equals by their signatures. The following paragraphs detail the functions used to compute and/or determine the received round and received event generation to determine the order for the events. The following terms are used and illustrated in connection with FIG. 8–12B.

[1062] «Родитель» («Parent»): событие X является родителем события Y, если Y содержит хеш X. Например, на фиг. 8 родители события 1412 включают событие 1406 и событие 1408.[1062] "Parent": Event X is the parent of event Y if Y contains a hash of X. For example, in FIG. 8, the parents of event 1412 include event 1406 and event 1408.

[1063] «Предок» («Ancestor»): предками события X являются X, его родители, родители его родителей и так далее. Например, как показано на фиг. 8, предками события 1412 являются события 1401, 1402, 1403, 1406, 1408 и 1412. Можно сказать, что предки события привязаны к тому событию и наоборот.[1063] "Ancestor": The ancestors of event X are X, its parents, its parents' parents, and so on. For example, as shown in FIG. 8, the ancestors of event 1412 are events 1401, 1402, 1403, 1406, 1408, and 1412. An event's ancestors can be said to be attached to that event, and vice versa.

[1064] «Потомок» («Descendant»): потомками события X являются X, его дети, дети его детей и так далее. Например, как показано на фиг. 8, потомком события 1401 является каждое событие, показанное на фигуре. В качестве другого примера, потомками события 1403 являются события 1403, 1404, 1406, 1407, 1409, 1410, 1411, 1412 и 1413. Можно сказать, что потомки события привязаны к тому событию и наоборот. [1064] "Descendant": The descendants of event X are X, its children, its children's children, and so on. For example, as shown in FIG. 8, a child of event 1401 is each event shown in the figure. As another example, the children of event 1403 are events 1403, 1404, 1406, 1407, 1409, 1410, 1411, 1412, and 1413. An event's children can be said to be attached to that event and vice versa.

[1065] «N»: общее количество участников в популяции. Например, как показано на фиг. 8, участники представляют собой вычислительные устройства, обозначенные как Алиса, Боб, Кэрол, Дэйв и Эд, и N равняется пяти. [1065] "N": the total number of participants in the population. For example, as shown in FIG. 8, the participants are computing devices designated as Alice, Bob, Carol, Dave, and Ed, and N is five.

[1066] «M»: наименьшее целое число, которое превышает определенную процентную долю N (например, превышает 2/3 от N). Например, как показано на фиг. 8, если процентная доля определена как 2/3, то M равняется четырем. В других случаях M может быть определено, например, как другая процентная доля N (например, 1/3, 1/2 и т. д.), конкретное предварительно определенное число и/или любым другим подходящим способом.[1066] "M": the smallest integer that is greater than a certain percentage of N (eg, greater than 2/3 of N). For example, as shown in FIG. 8, if the percentage is defined as 2/3, then M is four. In other cases, M may be defined, for example, as another percentage of N (eg, 1/3, 1/2, etc.), a specific predetermined number, and/or any other suitable method.

[1067] «Собственный родитель» («Self-parent»): собственным родителем события X является его событие-родитель Y, созданное и/или определенное тем же участником. Например, как показано на фиг. 8, собственным родителем события 1405 является 1401. [1067] Self-parent: Event X's own parent is its parent event Y, created and/or defined by the same participant. For example, as shown in FIG. 8, event 1405's own parent is 1401.

[1068] «Собственный предок» («Self-ancestor»): собственными предками события X являются X, его собственный родитель, собственный родитель его собственного родителя и так далее.[1068] "Self-ancestor": Event X's own ancestors are X, its own parent, its own parent's own parent, and so on.

[1069] «Порядковый номер» («Sequence Number», или «SN»): целочисленный атрибут события, определенный как порядковый номер собственного родителя события плюс один. Например, как показано на фиг. 8, собственным родителем события 1405 является 1401. Поскольку порядковый номер события 1401 равен одному, порядковый номер события 1405 равен двум (т. е. один плюс один).[1069] "Sequence Number" or "SN": An integer attribute of the event, defined as the sequence number of the event's own parent plus one. For example, as shown in FIG. 8, event 1405's own parent is 1401. Since event 1401 sequence number is one, event 1405 sequence number is two (ie, one plus one).

[1070] «Номер поколения» («Generation Number», или «GN»): целочисленный атрибут события, определенный как максимальное значение номеров поколений родителей события плюс один. Например, как показано на фиг. 8, событие 1412 имеет двух родителей, события 1406 и 1408, имеющих номера поколений четыре и два соответственно. Таким образом, номер поколения события 1412 равен пяти (т. е. четыре плюс один).[1070] "Generation Number" or "GN": An integer attribute of the event, defined as the maximum value of the generation numbers of the event's parents plus one. For example, as shown in FIG. 8, event 1412 has two parents, events 1406 and 1408, having generation numbers four and two, respectively. Thus, the generation number of event 1412 is five (that is, four plus one).

[1071] «Приращение раунда» («Round Increment», или «RI»): атрибут события, который может равняться либо нулю, либо единице. [1071] "Round Increment" or "RI": An event attribute that can be either zero or one.

[1072] «Номер раунда» («Round Number», или «RN»): целочисленный атрибут события. В некоторых случаях он также относится к раунду, который создан, или созданному раунду. В некоторых случаях номер раунда может быть определен как максимальное значение номеров раундов родителей события плюс приращение раунда события. Например, как показано на фиг. 8, событие 1412 имеет двух родителей, события 1406 и 1408, которые оба имеют номер раунда, равный одному. Событие 1412 также имеет приращение раунда, равное одному. Таким образом, номер раунда события 1412 равняется двум (т. е. один плюс один). В других случаях событие может иметь номер раунда R, если R является минимальным целым числом, так что событие может строго видеть (как описано в настоящем документе) по меньшей мере M событий, определенных и/или созданных разными участниками, которые все имеют номер раунда R-1. Если такое целое число отсутствует, номер раунда для события может быть значением по умолчанию (например, 0, 1 и т. д.). В таких случаях номер раунда для события может быть вычислен без использования приращения раунда. Например, как показано на фиг. 8, если M определено как наименьшее целое число, превышающее N в 1/2 раза, то M равняется трем. Тогда событие 1412 строго видит M событий 1401, 1402 и 1408, каждое из которых было определено отличным участником и имеет номер раунда, равный 1. Событие 1412 не может строго видеть по меньшей мере M событий с номером раунда, равным 2, которые были определены отличными участниками. Следовательно, номер раунда для события 1412 равняется 2. В некоторых случаях первое событие в распределенной базе данных имеет номер раунда, равный 1. В других случаях первое событие в распределенной базе данных может иметь номер раунда, равный 0, или любой другой подходящий номер.[1072] "Round Number" ("Round Number" or "RN"): An integer attribute of the event. In some cases, it also refers to the round that is created or the round that was created. In some cases, the round number can be defined as the maximum value of the round numbers of the event's parents plus the event's round increment. For example, as shown in FIG. 8, event 1412 has two parents, events 1406 and 1408, both of which have a round number of one. Event 1412 also has a round increment of one. Thus, the round number of event 1412 is two (i.e., one plus one). In other cases, an event may have a round number R if R is the minimum integer such that the event can strictly see (as described herein) at least M events defined and/or created by different participants, all of which have a round number R -one. If there is no such integer, the round number for the event can be a default value (for example, 0, 1, etc.). In such cases, the round number for the event can be calculated without using the round increment. For example, as shown in FIG. 8, if M is defined as the smallest integer greater than 1/2 times N, then M is three. Then event 1412 strictly sees M events 1401, 1402 and 1408, each of which was determined by a different participant and has a round number of 1. Event 1412 cannot strictly see at least M events with a round number of 2, which were determined to be different. participants. Therefore, the round number for event 1412 is 2. In some cases, the first event in the distributed database has a round number of 1. In other cases, the first event in the distributed database may have a round number of 0, or any other suitable number.

[1073] «Ответвление» («Forking»): событие X вместе с событием Y являются ответвлением, если они определены и/или созданы одним участником, и ни одно из них не является собственным предком другого. Например, как показано на фиг. 9, участник Дэйв создает ответвление, создавая и/или определяя события 1503 и 1504, оба из которых имеют одного собственного родителя (т. е. событие 1501), так что событие 1503 не является собственным предком события 1504, и событие 1504 не является собственным предком события 1503.[1073] "Forking": An event X together with an event Y are a fork if they are defined and/or created by one participant, and neither is the other's own ancestor. For example, as shown in FIG. 9, participant Dave creates a branch by creating and/or defining events 1503 and 1504, both of which have the same parent of their own (i.e., event 1501), so that event 1503 is not its own ancestor of event 1504, and event 1504 is not its own ancestor of event 1503.

[1074] «Идентификация» («Identification») ответвления: ответвление может быть «идентифицировано» третьим событием, созданным и/или определенным после двух событий, которые вместе являются ответвлениями, если оба те два события являются предками третьего события. Например, как показано на фиг. 9, участник Дэйв создает ответвление, создавая события 1503 и 1504, ни одно из которых не является собственным предком другого. Это ответвление может быть идентифицировано более поздним событием 1506, поскольку оба события 1503 и 1504 являются предками события 1506. В некоторых случаях идентификация ответвления может указывать на то, что конкретный участник (например, Дэйв) мошенничает. [1074] Branch "Identification": A branch can be "identified" by a third event created and/or determined after two events that together are branches, if both of those two events are ancestors of the third event. For example, as shown in FIG. 9, participant Dave creates a fork by creating events 1503 and 1504, neither of which is the other's own parent. This branch can be identified by a later event 1506, since both events 1503 and 1504 are ancestors of event 1506. In some cases, the identification of a branch may indicate that a particular participant (eg, Dave) is cheating.

[1075] «Идентификация» («Identification») события: событие X «идентифицирует» или «видит» событие-предка Y, если X не имеет события-предка Z, которое является ответвлением вместе с Y. Например, как показано на фиг. 8, событие 1412 идентифицирует (то есть «видит») событие 1403, поскольку событие 1403 является предком события 1412, и событие 1412 не имеет событий-предков, которые являются ответвлениями вместе с событием 1403. В некоторых случаях событие X может идентифицировать событие Y, если X не идентифицирует ответвление до события Y. В таких случаях, даже если событие X идентифицирует ответвление, создаваемое участником, определяющим событие Y, после события Y, событие X может видеть событие Y. Событие X не идентифицирует события того участника после ответвления. Более того, если участник определяет два разных события, которые оба являются первыми событиями того участника в истории, событие X может идентифицировать ответвление и не идентифицировать никакое событие того участника. [1075] "Event Identification": An event X "identifies" or "sees" an ancestor event Y if X does not have an ancestor event Z that branches along with Y. For example, as shown in FIG. 8, event 1412 identifies (i.e. "sees") event 1403 because event 1403 is an ancestor of event 1412 and event 1412 does not have parent events that branch off event 1403. In some cases, event X may identify event Y, if X does not identify a branch prior to event Y. In such cases, even if event X identifies a branch created by the member that defines event Y after event Y, event X may see event Y. Event X does not identify events of that member after the branch. Moreover, if a participant identifies two different events that are both that participant's first events in history, the X event may identify a branch and not identify any of that participant's events.

[1076] «Строгая идентификация» («Strong identification», также называемая в настоящем документе «strongly seeing» или «строгое видение») события: событие X «строго идентифицирует» (или «строго видит») событие-предка Y, созданное и/или определенное тем же участником, что и X, если X идентифицирует Y. Событие X «строго идентифицирует» событие-предка Y, которое не было создано и/или определено тем же участником, что и X, если существует набор S событий, которые (1) включают как X, так и Y, и (2) являются предками события X, и (3) являются потомками события-предка Y, и (4) идентифицируются X, и (5) каждое из которых может идентифицировать Y, и которые (6) созданы и/или определены по меньшей мере M разными участниками. Например, как показано на фиг. 8, если M определено как наименьшее целое число, которое превышает 2/3 от N (т. е. M=1+floor(2N/3), что будет равно четырем в этом примере), то событие 1412 строго идентифицирует событие-предка 1401, поскольку набор событий 1401, 1402, 1406 и 1412 представляет собой набор из по меньшей мере четырех событий, которые являются предками события 1412 и потомками события 1401, и они созданы и/или определены четырьмя участниками Дэйвом, Кэрол, Бобом и Эдом соответственно, и событие 1412 идентифицирует каждое из событий 1401, 1402, 1406 и 1412, и каждое из событий 1401, 1402, 1406 и 1412 идентифицирует событие 1401. Подобным образом, событие X (например, событие 1412) может «строго видеть» событие Y (например, событие 1401), если X может видеть по меньшей мере M событий (например, события 1401, 1402, 1406 и 1412), созданных или определенных разными участниками, каждый из которых может видеть Y. [1076] "Strong identification" (also referred to herein as "strongly seeing" or "strict vision") of an event: event X "strongly identifies" (or "strongly sees") an ancestor event Y created and /or defined by the same participant as X if X identifies Y. An event X "strongly identifies" an ancestor event of Y that was not created and/or defined by the same participant as X if there is a set S of events that (1) include both X and Y, and (2) are ancestors of event X, and (3) are children of event ancestor Y, and (4) are identified by X, and (5) each of which can identify Y, and which (6) are created and/or defined by at least M different contributors. For example, as shown in FIG. 8, if M is defined as the smallest integer that is greater than 2/3 of N (i.e., M=1+floor(2N/3), which would be four in this example), then event 1412 strongly identifies an ancestor event 1401, since the set of events 1401, 1402, 1406, and 1412 is a set of at least four events that are ancestors of event 1412 and children of event 1401, and they are created and/or defined by the four participants Dave, Carol, Bob, and Ed, respectively, and event 1412 identifies each of events 1401, 1402, 1406, and 1412, and each of events 1401, 1402, 1406, and 1412 identifies event 1401. Similarly, event X (e.g., event 1412) may "strongly see" event Y (e.g. , event 1401) if X can see at least M events (for example, events 1401, 1402, 1406, and 1412) created or defined by different participants, each of which can see Y.

[1077] «Первое событие раунда R» (также называемое в настоящем документе «свидетелем», или «witness»): событие представляет собой «первое событие раунда R» (или «свидетеля»), если событие (1) имеет номер раунда R и (2) имеет собственного родителя, имеющего номер раунда, который меньше R, или не имеет собственного родителя. Например, как показано на фиг. 8, событие 1412 представляет собой «первое событие раунда 2», поскольку оно имеет номер раунда, равный двум, и его собственным родителем является событие 1408, которое имеет номер раунда, равный одному (т. е. меньше двух).[1077] "First event of round R" (also referred to herein as "witness" or "witness"): the event is the "first event of round R" (or "witness") if event (1) has a round number R and (2) has its own parent having a round number that is less than R, or does not have its own parent. For example, as shown in FIG. 8, event 1412 is the "first event of round 2" because it has a round number of two and its own parent is event 1408, which has a round number of one (i.e., less than two).

[1078] В некоторых случаях приращение раунда для события X определяют как 1, если и только если X «строго идентифицирует» по меньшей мере M «первых событий раунда R», где R является максимальным номером раунда его родителей. Например, как показано на фиг. 8, если M определено как наименьшее целое число, превышающее N в 1/2 раза, то M равняется трем. Тогда событие 1412 строго идентифицирует M событий 1401, 1402 и 1408, которые все являются первыми событиями раунда 1. Оба родителя события 1412 принадлежат к раунду 1, и 1412 строго идентифицирует по меньшей мере M первых событий раунда 1, следовательно, приращение раунда для 1412 равно одному. Каждое из событий на схеме с отметкой «RI=0» не может строго идентифицировать по меньшей мере M первых событий раунда 1, следовательно, их приращения раунда равны 0. [1078] In some cases, the round increment for an event X is defined as 1 if and only if X "strongly identifies" at least M "first round events R", where R is the maximum round number of its parents. For example, as shown in FIG. 8, if M is defined as the smallest integer greater than 1/2 times N, then M is three. Then event 1412 strongly identifies M events 1401, 1402, and 1408, which are all first events of round 1. Both parents of event 1412 belong to round 1, and 1412 strongly identifies at least M first events of round 1, hence the round increment for 1412 is alone. Each of the events in the diagram labeled "RI=0" cannot strictly identify at least M first events of round 1, hence their round increments are 0.

[1079] В некоторых случаях следующий способ может быть использован для определения того, может ли событие X строго идентифицировать событие-предка Y. Для каждого первого события-предка Y раунда R поддерживается массив A1 целых чисел, по одному на участника, который задает наименьший порядковый номер события X, где тот участник создал и/или определил событие X, и X может идентифицировать Y. Для каждого события Z поддерживается массив A2 целых чисел, по одному на участника, который задает наибольший порядковый номер события W, созданного и/или определенного тем участником, так что Z может идентифицировать W. Для определения того, может ли Z строго идентифицировать событие-предка Y, подсчитывается количество таких положений E элемента, что A1[E] <= A2[E]. Событие Z может строго идентифицировать Y, если и только если эта подсчитанная величина превышает M. Например, как показано на фиг. 8, участники Алиса, Боб, Кэрол, Дэйв и Эд каждый могут идентифицировать событие 1401, при этом самым ранним событием, которое может это сделать, является их событие {1404, 1403, 1402, 1401, 1408} соответственно. Эти события имеют порядковые номера A1={1,1,1,1,1}. Подобным образом, самым поздним событием каждого из них, которое идентифицируется событием 1412, является событие {ОТСУТСТВУЕТ, 1406, 1402, 1401, 1412}, где у Алисы указано «ОТСУТСТВУЕТ», поскольку 1412 не может идентифицировать ни одно из событий Алисы. Эти события имеют порядковые номера A2={0,2,1,1,2} соответственно, при этом все события имеют положительные порядковые номера, так что 0 означает, что у Алисы нет событий, которые идентифицируются событием 1412. При сравнении списка A1 со списком A2 получают результаты {1<=0, 1<=2, 1<=1, 1<=1, 1<=2}, что эквивалентно {ложь, истина, истина, истина, истина}, где имеется четыре значения, которые являются истинными. Следовательно, существует набор S из четырех событий, которые являются предками события 1412 и потомками события 1401. Четыре соответствует по меньшей мере M, следовательно, 1412 строго идентифицирует 1401.[1079] In some cases, the following method can be used to determine whether an event X can strongly identify an ancestor event Y. event number X, where that participant created and/or defined event X, and X can identify Y. For each event Z, an array A2 of integers, one per participant, is maintained that specifies the highest sequence number of event W created and/or defined by topic member so that Z can identify W. To determine whether Z can strongly identify an ancestor event of Y, the number of element positions E such that A1[E] <= A2[E] is counted. An event Z can strongly identify Y if and only if this count is greater than M. For example, as shown in FIG. 8, participants Alice, Bob, Carol, Dave, and Ed can each identify event 1401, with the earliest event that can do so being their event {1404, 1403, 1402, 1401, 1408}, respectively. These events have serial numbers A1={1,1,1,1,1}. Similarly, the latest event of each of them, which is identified by event 1412, is the event {NONE, 1406, 1402, 1401, 1412}, where Alice has "NONE" because 1412 cannot identify any of Alice's events. These events have sequence numbers A2={0,2,1,1,2} respectively, with all events having positive sequence numbers, so 0 means that Alice has no events that are identified by event 1412. When comparing list A1 with list A2 get the results {1<=0, 1<=2, 1<=1, 1<=1, 1<=2}, which is equivalent to {false, true, true, true, true}, where there are four values, which are true. Therefore, there is a set S of four events that are ancestors of event 1412 and descendants of event 1401. Four matches at least M, so 1412 strongly identifies 1401.

[1080] Еще один вариант реализации способа определения с помощью A1 и A2 того, может ли событие X строго идентифицировать событие-предка Y, является следующим. Если целочисленные элементы в обоих массивах меньше 128, то можно сохранить каждый элемент в одном байте и упаковать 8 таких элементов в одно 64-битное слово, и допустить, что A1 и A2 являются массивами таких слов. Самый старший бит каждого байта в A1 может быть установлен в 0, и самый старший бит каждого байта в A2 может быть установлен в 1. Два соответствующих слова вычитают, затем выполняют побитовую операцию И с использованием маски для обнуления всего, кроме самых старших битов, затем выполняют сдвиг вправо на 7 битовых позиций для получения значения, которое выражается на языке программирования C как: ((A2[i] - A1[i]) & 0x8080808080808080) >> 7). Это может быть добавлено в регистровый стек S, который был инициализирован в нуль. После выполнения этого действия множество раз преобразуют регистр в счетчик посредством сдвига и добавления байтов для получения ((S & 0xff) + ((S >> 8) & 0xff) + ((S >> 16) & 0xff) + ((S >> 24) & 0xff) + ((S >> 32) & 0xff) + ((S >> 40) & 0xff) + ((S >> 48) & 0xff) + ((S >> 56) & 0xff)). В некоторых случаях эти вычисления могут быть выполнены на таких языках программирования, как C, Java и/или т. п. В других случаях вычисления могут быть выполнены с использованием специфических для процессора инструкций, таких как инструкции Advanced Vector Extensions (AVX), предоставленные Intel и AMD, или эквивалента в графическом процессоре (GPU) или графическом процессоре общего назначения (GPGPU). На некоторых архитектурах вычисления могут быть выполнены быстрее с использованием слов, которые длиннее 64 битов, например, длиной 128, 256, 512 или более битов. [1080] Another implementation of a method for determining, using A1 and A2, whether an event X can strongly identify an ancestor event Y is as follows. If the integer elements in both arrays are less than 128, then you can store each element in one byte and pack 8 such elements into one 64-bit word, and assume that A1 and A2 are arrays of such words. The most significant bit of each byte in A1 may be set to 0, and the most significant bit of each byte in A2 may be set to 1. The two corresponding words are subtracted, then a bitwise AND operation is performed using a mask to set all but the most significant bits to zero, then perform a right shift by 7 bit positions to obtain a value that is expressed in the C programming language as: ((A2[i] - A1[i]) & 0x8080808080808080) >> 7). This can be added to a register stack S that has been initialized to zero. After performing this action, convert the register to a counter many times by shifting and adding bytes to obtain ((S & 0xff) + ((S >> 8) & 0xff) + ((S >> 16) & 0xff) + ((S > > 24) & 0xff) + ((S >> 32) & 0xff) + ((S >> 40) & 0xff) + ((S >> 48) & 0xff) + ((S >> 56) & 0xff) ). In some cases, these calculations may be performed in programming languages such as C, Java, and/or the like. In other cases, the calculations may be performed using processor-specific instructions such as the Advanced Vector Extensions (AVX) instructions provided by Intel. and AMD, or equivalent in graphics processing unit (GPU) or general purpose graphics processing unit (GPGPU). On some architectures, calculations can be performed faster using words that are longer than 64 bits, such as 128, 256, 512 or more bits.

[1081] «Известное» («Famous») событие: событие X раунда R является «известным», если (1) событие X является «первым событием раунда R» (или «свидетелем»), и (2) решение «ДА» достигается путем выполнения протокола византийского соглашения, описанного ниже. В некоторых вариантах осуществления протокол византийского соглашения может быть выполнен экземпляром распределенной базы данных (например, экземпляром 114 распределенной базы данных) и/или модулем конвергенции базы данных (например, модулем 211 конвергенции базы данных). Например, как показано на фиг. 8, показаны пять первых событий раунда 1: 1401, 1402, 1403, 1404 и 1408. Если M определено как наименьшее целое число, превышающее N в 1/2 раза, что равняется трем, то 1412 представляет собой первое событие раунда 2. Если протокол продолжается дальше, то хешграф будет расти вверх, и в итоге другие четыре участника будут также иметь первые события раунда 2 над верхней частью этой фигуры. Каждое первое событие раунда 2 будет иметь «голос» («vote») относительно того, является ли каждое из первых событий раунда 1 «известным». Событие 1412 будет голосовать ДА за то, что 1401, 1402 и 1403 являются известными, поскольку они являются первыми событиями раунда 1, которые оно может идентифицировать. Событие 1412 будет голосовать НЕТ против того, что 1404 является известным, поскольку 1412 не может идентифицировать 1404. Для заданного первого события раунда 1, такого как 1402, решение относительно того, является ли его статус «известным» или нет, будет принято на основе подсчета голосов каждого первого события раунда 2 относительно того, является оно известным или нет. Те голоса будут затем распространяться на первые события раунда 3, затем на первые события раунда 4 и так далее до тех пор, пока в итоге не будет достигнуто согласие относительно того, является ли 1402 известным. Подобный процесс повторяется для других первых событий.[1081] "Famous" event: event X of round R is "known" if (1) event X is the "first event of round R" (or "witness"), and (2) the decision is "YES" achieved by following the protocol of the Byzantine agreement described below. In some embodiments, the byzantine agreement protocol may be executed by a distributed database instance (eg, distributed database instance 114) and/or a database convergence module (eg, database convergence module 211). For example, as shown in FIG. 8, the first five events of round 1 are shown: 1401, 1402, 1403, 1404, and 1408. If M is defined as the smallest integer greater than 1/2 times N, which is three, then 1412 is the first event of round 2. If the protocol continues further, then the hashgraph will grow upwards, and as a result, the other four participants will also have the first events of round 2 above the top of this figure. Each first round 2 event will have a "vote" as to whether each of the first round 1 events is "known". Event 1412 will vote YES for 1401, 1402 and 1403 being known as they are the first round 1 events it can identify. Event 1412 will vote NO against 1404 being known because 1412 cannot identify 1404. For a given first round 1 event such as 1402, the decision as to whether its status is known or not will be made based on the count votes for each first round 2 event as to whether it is known or not. Those votes will then be propagated to the first events of Round 3, then to the first events of Round 4, and so on, until there is eventually agreement as to whether 1402 is known. A similar process is repeated for other first events.

[1082] Протокол византийского соглашения может собирать и использовать голоса и/или решения «первых событий раунда R» для идентификации «известных» событий. Например, «первое событие Y раунда R+1» будет голосовать «ДА», если Y может «идентифицировать» событие X, в ином случае оно проголосует «НЕТ». Голоса затем подсчитываются для каждого раунда G, для G = R+2, R+3, R+4 и т. д. до тех пор, пока не будет принято решение любым участником. Голоса подсчитываются для каждого раунда G до тех пор, пока не принято решение. Некоторые из тех раундов могут представлять собой «мажоритарные» раунды, тогда как некоторые из других раундов могут представлять собой раунды «с подбрасыванием монеты». В некоторых случаях, например, раунд R+2 является мажоритарным раундом, и будущие раунды определяются либо как мажоритарный раунд, либо как раунд с подбрасыванием монеты (например, согласно предварительно определенной схеме). Например, в некоторых случаях произвольно может быть определено, является ли будущий раунд мажоритарным раундом или раундом с подбрасыванием монеты, при условии что не может быть двух последовательных раундов с подбрасыванием монеты. Например, может быть предварительно определено, что будет пять мажоритарных раундов, затем один раунд с подбрасыванием монеты, затем пять мажоритарных раундов, затем один раунд с подбрасыванием монеты, с повторением до тех пор, пока не будет достигнуто согласие.[1082] The Protocol of the Byzantine Agreement may collect and use the votes and/or decisions of the "first round R events" to identify "known" events. For example, "first event Y of round R+1" will vote "YES" if Y can "identify" event X, otherwise it will vote "NO". The votes are then counted for each G round, for G = R+2, R+3, R+4, etc. until a decision is made by either participant. The votes are counted for each round of G until a decision is made. Some of those rounds may be "majority" rounds, while some of the other rounds may be "coin toss" rounds. In some cases, for example, the R+2 round is a majority round and future rounds are defined as either a majority round or a coin toss round (eg, according to a predetermined pattern). For example, in some cases it may be arbitrarily determined whether a future round is a majority round or a coin toss, provided that there cannot be two consecutive coin tosses. For example, it may be predetermined that there will be five majority rounds, then one coin toss, then five majority rounds, then one coin toss, repeating until agreement is reached.

[1083] В некоторых случаях, если раунд G является мажоритарным раундом, голоса могут быть подсчитаны следующим образом. Если существует событие раунда G, которое строго идентифицирует по меньшей мере M первых событий раунда G-1, голосующих V (где V представляет собой либо «ДА», либо «НЕТ»), то согласованным решением является V, и протокол византийского соглашения завершается. В ином случае каждое первое событие раунда G вычисляет новый голос, представляющий собой решение большинства первых событий раунда G-1, которые каждое первое событие раунда G может строго идентифицировать. В случаях равенства голосов и отсутствия большинства решение может быть обозначено как «ДА». [1083] In some cases, if round G is a majoritarian round, the votes may be counted as follows. If there is a G round event that strongly identifies at least M first G-1 round events voting V (where V is either "YES" or "NO"), then the consensus decision is V, and the Byzantine agreement protocol ends. Otherwise, each first event of round G computes a new vote, which is the solution of the majority of first events of round G-1 that each first event of round G can strongly identify. In cases of equality of votes and lack of a majority, the decision may be marked as "YES".

[1084] Подобным образом, если X является свидетелем раунда R (или первым событием раунда R), то результаты голосования в раундах R+1, R+2 и так далее могут быть вычислены, при этом свидетели в каждом раунде голосуют относительно того, является ли X известным. В раунде R+1 каждый свидетель, который может видеть X, голосует ДА, а другие свидетели голосуют НЕТ. В раунде R+2 каждый свидетель голосует согласно большинству голосов свидетелей раунда R+1, которые он может строго видеть. Подобным образом, в раунде R+3 каждый свидетель голосует согласно большинству голосов свидетеля раунда R+2, которого он может строго видеть. Это может продолжаться несколько раундов. В случае равенства голосов голос может быть установлен в ДА. В других случаях равенство голосов может быть установлено в НЕТ или может быть установлено случайным образом. Если какой-либо раунд имеет по меньшей мере M свидетелей, голосующих НЕТ, то выборы завершаются, и X не является известным. Если какой-либо раунд имеет по меньшей мере M свидетелей, голосующих ДА, то выборы завершаются, и X является известным. Если ни ДА, ни НЕТ не имеет по меньшей мере M голосов, выборы переходят к следующему раунду. [1084] Similarly, if X is a witness of round R (or the first event of round R), then the voting results in rounds R+1, R+2, and so on can be computed, with the witnesses in each round voting on whether whether X is known. In the R+1 round, each witness who can see X votes YES and the other witnesses vote NO. In the R+2 round, each witness votes according to the majority of the votes of the R+1 round witnesses that he can strictly see. Similarly, in the R+3 round, each witness votes according to the majority vote of the R+2 witness that he can strictly see. This may go on for several rounds. In the event of a tie vote, the vote may be set to YES. In other cases, a tie vote may be set to NO or may be set at random. If any round has at least M witnesses voting NO, then the election ends and X is not known. If any round has at least M witnesses voting YES, then the election ends and X is known. If neither YES nor NO has at least M votes, the election proceeds to the next round.

[1085] В качестве примера, на фиг. 8 предполагается первое событие X некоторого раунда, которое находится ниже показанной фигуры. Тогда каждое первое событие раунда 1 будет иметь голос относительно того, является ли X известным. Событие 1412 может строго идентифицировать первые события 1401, 1402 и 1408 раунда 1. Таким образом, его голос будет основан на их голосах. Если это мажоритарный раунд, то 1412 будет проверять, имеют ли по меньшей мере M событий {1401, 1402, 1408} голос ДА. Если имеют, то решением является ДА, и согласие было достигнуто. Если по меньшей мере M из них голосует НЕТ, то решением является НЕТ, и согласие было достигнуто. Если количество голосов не составляет по меньшей мере M в любую из сторон, то 1412 получает голос, который представляет собой большинство голосов событий 1401, 1402 и 1408 (и разрушает равенство голосов посредством голосования ДА, если было равенство голосов). Тот голос затем будет использован в следующем раунде, продолжающемся до тех пор, пока не будет достигнуто согласие.[1085] As an example, in FIG. 8 assumes the first event X of some round, which is below the figure shown. Then every first event of round 1 will have a vote as to whether X is known. Event 1412 can strictly identify the first events 1401, 1402 and 1408 of round 1. Thus, his vote will be based on their votes. If it is a majority round, then 1412 will check if at least M events {1401, 1402, 1408} have a YES vote. If they do, then the decision is YES and agreement has been reached. If at least M of them vote NO, then the decision is NO and agreement has been reached. If the number of votes is not at least M to either side, then 1412 receives a vote that represents a majority of the votes of events 1401, 1402, and 1408 (and breaks the tie with a YES vote if there was a tie). That vote will then be used in the next round, continuing until an agreement is reached.

[1086] В некоторых случаях, если раунд G является раундом с подбрасыванием монеты, голоса могут быть подсчитаны следующим образом. Если событие X может идентифицировать по меньшей мере M первых событий раунда G-1, голосующих V (где V представляет собой либо «ДА», либо «НЕТ»), то событие X изменит свой голос на V. Иначе, если раунд G является раундом с подбрасыванием монеты, то каждое первое событие X раунда G меняет свой голос на результат псевдослучайного определения (подобно подбрасыванию монеты в некоторых случаях), который определяется как самый младший бит подписи события X. [1086] In some cases, if round G is a coin toss, the votes may be counted as follows. If event X can identify at least M first round G-1 events voting V (where V is either "YES" or "NO"), then event X will change its vote to V. Otherwise, if round G is a round with a coin toss, then every first event X of round G changes its vote to the result of a pseudo-random determination (similar to a coin toss in some cases), which is determined as the least significant bit of the signature of event X.

[1087] Подобным образом, в таких случаях, если выборы достигают раунда R+K (раунда с подбрасыванием монеты), где K – определенный коэффициент (например, кратный числу, такому как 3, 6, 7, 8, 16, 32 или любому другому подходящему числу), то выборы не завершаются на том раунде. Если выборы достигают этого раунда, они могут продолжиться по меньшей мере на еще один раунд. В таком раунде, если событие Y является свидетелем раунда R+K, то, если оно может строго видеть по меньшей мере M свидетелей из раунда R+K-1, которые голосуют V, Y проголосует V. Иначе Y проголосует согласно случайному значению (например, согласно биту подписи события Y (например, самому младшему биту, самому старшему биту, случайно выбранному биту), где 1=ДА и 0=НЕТ или наоборот, согласно метке времени события Y, с использованием криптографического протокола «shared coin» и/или любого другого случайного определения). Это случайное определение является непредсказуемым до создания Y, и, таким образом, можно повысить безопасность событий и протокола консенсуса. [1087] Similarly, in such cases, if the election reaches an R+K (coin toss) round, where K is a certain coefficient (e.g., a multiple of a number such as 3, 6, 7, 8, 16, 32, or any another suitable number), then the election does not end on that round. If the election reaches this round, it may continue for at least one more round. In such a round, if event Y is a witness to the R+K round, then if it can strictly see at least M witnesses from the R+K-1 round who vote V, Y will vote V. Otherwise, Y will vote according to a random value (e.g. , according to the Y event signature bit (e.g., least significant bit, most significant bit, random bit), where 1=YES and 0=NO, or vice versa, according to the Y event timestamp, using a shared coin cryptographic protocol and/or any other random definition). This random definition is unpredictable until Y is created, and thus the security of the events and the consensus protocol can be improved.

[1088] Например, как показано на фиг. 8, если раунд 2 является раундом с подбрасыванием монеты, и происходит голосование относительно того, было ли некоторое событие до раунда 1 известным, то событие 1412 будет сначала проверять, проголосовало ли по меньшей мере M событий {1401, 1402, 1408} ДА, или по меньшей мере M из них проголосовало НЕТ. Если это так, то 1412 проголосует так же. Если отсутствует по меньшей мере M голосов в любую из сторон, то 1412 будет иметь случайный или псевдослучайный голос (например, на основе самого младшего бита цифровой подписи, которую Эд создал для события 1412, когда он подписал его во время его создания и/или определения).[1088] For example, as shown in FIG. 8, if round 2 is a coin toss and there is a vote as to whether some event prior to round 1 was known, then event 1412 will first check if at least M events {1401, 1402, 1408} voted YES, or at least M of them voted NO. If so, then 1412 will vote the same. If at least M votes to either side are missing, then 1412 will have a random or pseudo-random vote (e.g. based on the least significant bit of the digital signature that Ed created for event 1412 when he signed it at the time of its creation and/or definition ).

[1089] В некоторых случаях результат псевдослучайного определения может быть результатом криптографического протокола shared coin, который может быть, например, реализован как самый младший бит пороговой подписи номера раунда. [1089] In some cases, the result of the pseudo-random determination may be the result of a shared coin cryptographic protocol, which may, for example, be implemented as the least significant bit of the round number threshold signature.

[1090] Как описано выше, в некоторых реализациях способ достижения консенсуса хешграфа может включать принятие решения, например, относительно известности свидетеля X в раунде R. Как описано выше, первоначальные голоса могут быть собраны из раунда R+1, подсчитывая голоса ДА или НЕТ каждого события согласно тому, является ли оно потомком X. Альтернативный подход может включать сбор первоначальных голосов из «R+2» вместо «R+1» (или «R+3», «R+4» и т. д. вместо «R+1»). В том подходе может быть факультативно добавлен дополнительный этап. В частности, в такой реализации, каждый раз когда первое событие X раунда R (или свидетель X раунда R) является предком свидетелей раунда R+1, созданных и/или определенных более чем двумя третями популяции (т. е. более чем 2N/3 участников), X сразу объявляется известным, и выборы сразу завершаются, даже до того как любые голоса для X будут подсчитаны. Второй альтернативный подход может включать запуск выборов для R с первоначальными голосами, собранными из R+1, затем, если количество участников, которые создали и/или определили свидетелей в раунде R, относительно которых приняли решение, что они известные, меньше заданного порога T, повторно запускают выборы во второй раз с первоначальными голосами, собранными из R+2. [1090] As described above, in some implementations, the hashgraph consensus method may involve deciding, for example, on the notoriety of witness X in the R round. As described above, the initial votes may be collected from the R+1 round by counting the YES or NO votes of each event according to whether it is a child of X. An alternative approach might involve collecting initial votes from "R+2" instead of "R+1" (or "R+3", "R+4", etc. instead of "R +1"). In that approach, an additional step can optionally be added. In particular, in such an implementation, each time the first event X of round R (or witness X of round R) is an ancestor of round R+1 witnesses created and/or defined by more than two-thirds of the population (i.e., more than 2N/3 participants), X is immediately declared known, and the election is immediately concluded, even before any votes for X have been counted. A second alternative approach could involve running an election for R with the initial votes collected from R+1, then if the number of participants who created and/or identified witnesses in the R round who were determined to be known is less than a given threshold T, rerun the election a second time with the original votes collected from R+2.

[1091] Система может быть основана на любом из способов вычисления результата псевдослучайного определения, описанных выше. В некоторых случаях система выполняет цикл по разным способам в некотором порядке. В других случаях система может избирать среди разных способов согласно предварительно определенной схеме. [1091] The system may be based on any of the methods for calculating the result of the pseudo-random determination described above. In some cases, the system loops through different ways in some order. In other cases, the system may select among different methods according to a predetermined pattern.

[1092] «Принятый раунд» («Received round»): событие X имеет «принятый раунд» R, если R является таким минимальным целым числом, что по меньшей мере половина известных первых событий раунда R (или известных свидетелей) с номером раунда R являются потомками X и/или могут видеть X. В других случаях может быть использована любая другая подходящая процентная доля. Например, в другом случае событие X имеет «принятый раунд» R, если R является таким минимальным целым числом, что по меньшей мере предопределенная процентная доля (например, 40 %, 60 %, 80 % и т. д.) известных первых событий раунда R (или известных свидетелей) с номером раунда R являются потомками X и/или могут видеть X. [1092] "Received round": An event X has a "received round" R if R is the minimum integer such that at least half of the known first round R events (or known witnesses) with round number R are descendants of X and/or can see X. In other cases, any other suitable percentage may be used. For example, in another case, event X has an "accepted round" R if R is the minimum integer such that at least a predetermined percentage (e.g., 40%, 60%, 80%, etc.) of known first round events R (or known witnesses) with round number R are descendants of X and/or can see X.

[1093] В некоторых случаях «принятое поколение» события X может быть вычислено следующим образом. Находят, какой участник создал и/или определил каждое первое событие раунда R, которое может идентифицировать событие X. Затем определяют номер поколения для самого раннего события того участника, которое может идентифицировать X. Затем определяют «принятое поколение» X как медиану того списка.[1093] In some cases, the "accepted generation" of event X can be calculated as follows. Find which participant created and/or determined each first round event R that can identify event X. Then determine the generation number for that participant's earliest event that can identify X. Then determine the "accepted generation" X as the median of that list.

[1094] В некоторых случаях «принятая метка времени» T события X может быть медианой меток времени в событиях, которые включают первое событие каждого участника, которое идентифицирует и/или видит X. Например, принятая метка времени события 1401 может быть медианой значения меток времени для событий 1402, 1403, 1403 и 1408. В некоторых случаях метка времени для события 1401 может быть включена в вычисление медианы. В других случаях принятая метка времени для X может быть любым другим значением или комбинацией значений меток времени в событиях, которые являются первыми событиями каждого участника для идентификации или видения X. Например, принятая метка времени для X может быть основана на среднем значении меток времени, среднеквадратичном отклонении меток времени, модифицированном среднем значении (например, путем убирания из вычисления самой ранней и самой поздней меток времени) и/или т. п. В еще других случаях может быть использована расширенная медиана. [1094] In some cases, the "received timestamp" T of event X may be the median of the timestamps in events that include the first event of each participant that identifies and/or sees X. For example, the received timestamp of event 1401 may be the median of the timestamp value for events 1402, 1403, 1403, and 1408. In some cases, the timestamp for event 1401 may be included in the median calculation. In other cases, the received timestamp for X may be any other value, or a combination of the timestamp values in the events that are the first events of each participant to identify or see X. For example, the received timestamp for X may be based on the average of the timestamps, rms timestamp deviation, a modified mean (eg, by removing the earliest and latest timestamps from the calculation), and/or the like. In yet other cases, an extended median may be used.

[1095] В некоторых случаях общий порядок и/или порядок консенсуса для событий вычисляется посредством сортировки событий по их принятому раунду, с разрушением равенств по их принятой метке времени и с разрушением тех равенств по их подписям. В других случаях общий порядок для событий может быть вычислен посредством сортировки событий по их принятому раунду, с разрушением равенств по их принятому поколению и с разрушением тех равенств по их подписям. В вышеизложенных абзацах подробно изложены функции, используемые для вычисления и/или определения принятого раунда, принятой метки времени и/или принятого поколения события.[1095] In some cases, the overall order and/or consensus order for events is computed by sorting the events by their accepted round, collapsing the equalities by their adopted timestamp, and collapsing those equalities by their signatures. In other cases, the overall order for events can be computed by sorting the events by their accepted round, breaking down the equalities by their taken generation, and breaking down those equalities by their signatures. The above paragraphs detail the functions used to calculate and/or determine the received round, received timestamp, and/or received event generation.

[1096] В других случаях вместо использования подписи каждого события может быть использована подпись того события, подвергнутая операции исключающего ИЛИ с подписями известных событий или известных свидетелей с тем же принятым раундом и/или принятым поколением в том раунде. В других случаях любая другая подходящая комбинация подписей событий может быть использована для разрушения равенств, чтобы определять порядок консенсуса событий. Результат подписей, подвергнутых операции исключающего ИЛИ, известных свидетелей в заданном раунде представляет псевдослучайное число, которое сложно предсказать и/или которым сложно манипулировать потенциальным злоумышленникам и другим субъектам. Таким образом, в некоторых реализациях подписи, подвергнутые операции исключающего ИЛИ, могут быть использованы как источник непредсказуемых случайных чисел (т. е. «случайная отметка»). Случайные числа могут быть использованы в нескольких процессах хешграфа, включая исполнение умных контрактов, как обсуждено ниже.[1096] In other cases, instead of using the signature of each event, the signature of that event XORed with signatures of known events or known witnesses with the same received round and/or received generation in that round may be used. In other cases, any other suitable combination of event signatures can be used to break the equalities to determine the event consensus order. The result of XOR signatures of known witnesses in a given round is a pseudo-random number that is difficult to predict and/or difficult to manipulate by potential attackers and other actors. Thus, in some implementations, XOR signatures can be used as a source of unpredictable random numbers (i.e., "random flag"). Random numbers can be used in several hashgraph processes, including the execution of smart contracts, as discussed below.

[1097] В некоторых реализациях способ достижения консенсуса могут приспособить так, что исполняемый скрипт или программу («умный контракт») исполняет каждый участник хешграфа (например, процессор каждого участника или вычислительного устройства). Умный контракт может быть самоисполняемым контрактом, контрактом цепочки блоков или цифровым контрактом, преобразованным в компьютерный код, сохраненный и дублированный в хешграфе и контролируемый участниками хешграфа. Умные контракты могут быть использованы, например, для обмена денег, имущества, акций и других подходящих операций. Участники могут записывать результаты исполненного умного контракта в распределенной базе данных или распределенном реестре. В некоторых других реализациях алгоритм консенсуса может быть приспособлен так, что часть участников (а не каждый участник) запускает умный контракт на основе недетерминированного кода, исходом котором является функция распределения времени компьютера, или результатов осуществления связи с еще одним компьютером (например, помимо участников распределенной базы данных). Соответственно, набор участников, выбранных для того и/или имеющих право на то, чтобы исполнять умный контракт, может быть выбран на основе детерминированной псевдослучайной функции случайной отметки (выданной, например, на основе результата подписей, подвергнутых операции исключающего ИЛИ, известных свидетелей). Каждый из выбранных участников может генерировать транзакцию для записывания выходных данных или результатов, полученных вследствие запуска умного контракта. В некоторых случаях, если более чем две трети выбранных участников получают совпадающие результаты, то такие результаты рассматриваются как официальные выходные данные контракта, и состояние распределенной базы данных или реестра может быть модифицировано для отражения консенсуса на умный контракт соответственно. В некоторых других случаях, когда нет единых выходных данных или результата, совпадающего или согласованного у более чем двух третей выбранных участников, то считается, что умный контракт дает сбой, и состояние распределенной базы данных или реестра не меняется. В других реализациях порог, составляющий две трети выбранных участников, может представлять собой любой другой подходящий порог. Например, в некоторых реализациях порог может быть разным для каждого запуска умного контракта.[1097] In some implementations, the method of achieving consensus can be adapted so that the executable script or program ("smart contract") is executed by each participant in the hashgraph (for example, the processor of each participant or computing device). A smart contract can be a self-executing contract, a blockchain contract, or a digital contract converted into computer code, stored and duplicated in a hashgraph, and controlled by hashgraph participants. Smart contracts can be used, for example, to exchange money, property, shares, and other suitable transactions. Participants can record the results of an executed smart contract in a distributed database or distributed ledger. In some other implementations, the consensus algorithm can be adapted so that some of the participants (rather than each participant) run a smart contract based on non-deterministic code, the outcome of which is a computer time distribution function, or the results of communicating with another computer (for example, in addition to participants in a distributed Database). Accordingly, the set of participants selected to and/or eligible to execute a smart contract may be selected based on a deterministic pseudo-random random flag function (given, for example, based on the result of XOR signatures of known witnesses). Each of the selected participants can generate a transaction to record the output or results obtained as a result of running a smart contract. In some cases, if more than two-thirds of the selected participants receive matching results, then such results are considered as the official output of the contract, and the state of the distributed database or registry can be modified to reflect the consensus on the smart contract, respectively. In some other cases, where there is no single output or result that more than two-thirds of the selected participants agree or agree on, then the smart contract is considered to have failed and the state of the distributed database or ledger does not change. In other implementations, the threshold of two-thirds of the selected participants may be any other suitable threshold. For example, in some implementations, the threshold may be different for each smart contract launch.

[1098] В некоторых случаях умные контракты могут быть недетерминированными из-за того, что они используют чисто случайные числа, полученные с аппаратного устройства, путем доступа к сети или внешнему компьютеру, такому как веб-сервер («oracle»), и/или за заданный лимит времени. В некоторых случаях, когда участник или вычислительное устройство исполняет умный контракт и такой контракт не выдает выходных данных в течение заданного количества миллисекунд, то вычислительное устройство прекращает или останавливает работу умного контракта и отправляет отчет о том, что он не имеет выходных данных. В некоторых случаях вычислительные устройства участников могут запускаться с разными скоростями, делая процесс недетерминированным. Кроме того, в некоторых случаях вычислительные устройства участников могут быть приспособлены для запуска со своей полной скоростью скомпилированного кода, без запуска интерпретатора и/или подсчета количества показателей, которые были исполнены до настоящего времени вычислительным устройством.[1098] In some cases, smart contracts may be non-deterministic due to the fact that they use purely random numbers received from a hardware device by accessing a network or an external computer such as a web server (“oracle”), and/or for a given time limit. In some cases, when a participant or computing device is executing a smart contract and the contract produces no output for a given number of milliseconds, then the computing device terminates or stops the smart contract and reports that it has no output. In some cases, the computing devices of the participants may start at different speeds, making the process non-deterministic. In addition, in some cases, the computing devices of the participants may be adapted to run at their full speed the compiled code, without running the interpreter and/or counting the number of indicators that have been executed so far by the computing device.

[1099] В еще других случаях вместо определения «принятого поколения» как медианы списка «принятое поколение» может быть определено как сам список. Тогда при сортировке по принятому поколению два принятых поколения могут быть сравнены по средним элементам их списков, с разрушением равенств по элементу непосредственно перед серединой, с разрушением тех равенств по элементу непосредственно после середины и с продолжением чередования между элементом перед используемым до этого и элементом после, пока равенство не будет разрушено. [1099] In still other cases, instead of defining "accepted generation" as the median of the list, "accepted generation" may be defined as the list itself. Then, when sorted by the accepted generation, the two accepted generations can be compared by the middle elements of their lists, with breaking the equalities by the element just before the middle, breaking those equalities by the element just after the middle, and continuing to alternate between the element before the one used before and the element after, until equality is destroyed.

[1100] В некоторых случаях медианная метка времени может быть заменена «расширенной медианой». В таких случаях список меток времени может быть определен для каждого события, вместо одной принятой метки времени. Список меток времени для события X может включать первое событие каждого участника, которое идентифицирует и/или видит X. Например, как показано на фиг. 8, список меток времени для события 1401 может включать метки времени для событий 1402, 1403, 1403 и 1408. В некоторых случаях также может быть включена метка времени для события 1401. При разрушении равенства со списком меток времени (т. е. два события имеют один и тот же принятый раунд) могут быть сравнены средние метки времени списка каждого события (или предопределенные первая или вторая из двух средних меток времени, если длина четная). Если эти метки времени являются одинаковыми, могут быть сравнены метки времени непосредственно после средних меток времени. Если эти метки времени являются одинаковыми, могут быть сравнены метки времени непосредственно перед средними метками времени. Если эти метки времени также являются одинаковыми, сравнивают метки времени после трех уже сравненных меток времени. Это чередование может продолжаться до тех пор, пока равенство не будет разрушено. Подобно вышеизложенному обсуждению, если два списка идентичны, равенство может быть разрушено по подписям двух элементов.[1100] In some cases, the median timestamp may be replaced by "extended median". In such cases, a list of timestamps may be defined for each event, instead of a single received timestamp. The list of timestamps for event X may include the first event of each participant that identifies and/or sees X. For example, as shown in FIG. 8, the list of timestamps for event 1401 may include the timestamps for events 1402, 1403, 1403, and 1408. In some cases, the timestamp for event 1401 may also be included. the same received round) the average timestamps of the list of each event (or the predefined first or second of the two average timestamps if the length is even) can be compared. If these timestamps are the same, the timestamps directly after the middle timestamps can be compared. If these timestamps are the same, the timestamps just before the average timestamps can be compared. If these timestamps are also the same, the timestamps after the three timestamps already compared are compared. This alternation can continue until the equality is destroyed. Similar to the above discussion, if two lists are identical, the equality can be broken by the signatures of the two elements.

[1101] В еще других случаях «усеченная расширенная медиана» может быть использована вместо «расширенной медианы». В таком случае весь список меток времени не сохраняют для каждого события. Вместо этого лишь несколько значений рядом с центром списка сохраняют и используют для сравнения. [1101] In still other cases, "truncated extended median" may be used instead of "extended median". In such a case, the entire list of timestamps is not stored for each event. Instead, only a few values near the center of the list are stored and used for comparison.

[1102] Принятая медианная метка времени может быть потенциально использована для других целей в дополнение к вычислению общего порядка событий. Например, Боб мог подписать контракт, в котором говорится, что он берет на себя обязательства по соблюдению контракта, если и только если существует событие X, содержащее транзакцию, в которой Алиса подписывает тот же контракт, причем принятая метка времени для X соответствует определенному крайнему сроку или более раннему моменту времени. В том случае Боб не возьмет на себя обязательства по соблюдению контракта, если Алиса подпишет его после крайнего срока, указанного «принятой медианной меткой времени», как описано выше.[1102] The received median timestamp can potentially be used for other purposes in addition to calculating the overall order of events. For example, Bob could sign a contract stating that he is committed to the contract if and only if there is an event X containing a transaction in which Alice signs the same contract, and the received timestamp for X matches a certain deadline. or an earlier point in time. In that case, Bob will not be bound by the contract if Alice signs it after the deadline indicated by the "accepted median timestamp" as described above.

[1103] В некоторых случаях состояние распределенной базы данных может быть определено после достижения консенсуса. Например, если S(R) является набором событий, который могут видеть известные свидетели в раунде R, в итоге все события в S(R) будут иметь известные принятый раунд и принятую метку времени. На этом этапе порядок консенсуса для событий в S(R) известен и меняться не будет. Когда этот этап достигнут, участник может вычислить и/или определить представление событий и их порядок. Например, участник может вычислить значение хеша событий в S(R) в их порядке консенсуса. Участник может затем подписать с помощью цифровой подписи значение хеша и включить значение хеша в следующее событие, которое определяет участник. Это может быть использовано для оповещения других участников о том, что тот участник определил, что события в S(R) имеют заданный порядок, который не будет меняться. После того как по меньшей мере M участников (или любое другое подходящее количество или процентная доля участников) подписали значение хеша для S(R) (и, таким образом, согласились с порядком, представленным значением хеша), тот список консенсуса событий вместе со списком подписей участников могут образовать один файл (или другую структуру данных), который может быть использован для доказательства того, что порядок консенсуса был таковым, как заявлено, для событий в S(R). В других случаях, если события содержат транзакции, которые обновляют состояние системы распределенной базы данных (как описано в настоящем документе), то значение хеша может представлять состояние системы распределенной базы данных после применения транзакций событий в S(R) в порядке консенсуса.[1103] In some cases, the state of a distributed database may be determined after a consensus has been reached. For example, if S(R) is a set of events that known bystanders in round R can see, the result is that all events in S(R) will have a known received round and received timestamp. At this stage, the consensus order for events in S(R) is known and will not change. When this stage is reached, the participant can calculate and/or determine the representation of events and their order. For example, a participant can compute the hash value of the events in S(R) in their consensus order. The participant can then digitally sign the hash value and include the hash value in the next event that the participant specifies. This can be used to alert other participants that that participant has determined that the events in S(R) are in a given order that will not change. After at least M participants (or any other suitable number or percentage of participants) have signed the hash value for S(R) (and thus agree on the order represented by the hash value), that event consensus list, along with the list of signatures participants can form a single file (or other data structure) that can be used to prove that the consensus order was as claimed for the events in S(R). In other cases, if the events contain transactions that update the state of the distributed database system (as described herein), then the hash value may represent the state of the distributed database system after applying the event transactions in S(R) in consensus order.

[1104] В некоторых реализациях хешграф может быть использован для реализации услуги аннулирования. Услуга аннулирования может записывать или сохранять информацию о том, являются ли определенные объекты все еще подлинными. В некоторых случаях услуга аннулирования может быть использована для сохранения подлинных или неистекших хешей удостоверяющих данных, выданных органом, которые орган может позже аннулировать (например, водительские права, выданные DMV, которые могут быть позже аннулированы DMV; паспорта, выданные государством, которые могут быть позже аннулированы государством; информация о составе участников для клуба; и т. д.). В некоторых случаях услуга аннулирования может использовать тип транзакции для добавления новой записи в распределенную базу данных или реестр, имеющий форму (H, T, L), где H представляет собой криптографический хеш, связанный с объектом или субъектом, T представляет собой обозначение для «типа» объекта или субъекта, L представляет собой список открытых ключей, и запись подписана с помощью нескольких закрытых ключей, связанных с открытыми ключами, включенными в список L, или не подписана ни с помощью одного из них. Дополнительный тип транзакции, который может быть использован услугой аннулирования, может удалять или убирать заданный хеш H. Такая транзакция может быть приспособлена так, чтобы быть подписанной с помощью закрытого ключа, связанного с одним (или множеством) из открытых ключей в списке L, связанном с хешем H, который должен быть удален или убран. Другие типы специальных транзакций, которые могут быть использованы услугой аннулирования, включают транзакции для извлечения записи с учетом ее хеша H и транзакции для извлечения, например, всех записей с определенных момента времени и даты, которые имеют заданное значение T, и другие подходящие транзакции. Несмотря на то что вышеизложенные транзакции были обсуждены в отношении услуги аннулирования, такие транзакции могут быть использованы другими подходящими услугами в хешграфе. [1104] In some implementations, a hashgraph may be used to implement a revocation service. The revocation service may record or store information about whether certain objects are still genuine. In some cases, the revocation service can be used to store authentic or unexpired hashes of authority-issued credentials that the authority can later revoke (e.g., DMV-issued driver's licenses that may be later revoked by DMV; government-issued passports, which may be later annulled by the state; membership information for the club; etc.). In some cases, a revocation service may use a transaction type to add a new entry to a distributed database or ledger of the form (H, T, L) where H is a cryptographic hash associated with an object or subject, T is a notation for "type » object or subject, L is a list of public keys, and the entry is signed with more than one private key associated with the public keys included in the list L, or not signed with any of them. An additional type of transaction that may be used by the revocation service may remove or remove a given hash H. Such a transaction may be adapted to be signed with a private key associated with one (or multiple) of the public keys in the list L associated with hash H to be removed or removed. Other types of special transactions that can be used by the revocation service include transactions to retrieve a record given its hash H, and transactions to retrieve, for example, all records from a certain time and date that have a given value T, and other suitable transactions. Although the above transactions have been discussed in relation to the revocation service, such transactions may be used by other suitable services in the hashgraph.

[1105] В некоторых случаях M (как описано выше) может быть основано на весовых значениях, присвоенных каждому участнику, нежели всего лишь на части, процентном отношении и/или значении количества всех участников. В таком случае каждый участник имеет долю, связанную с его заинтересованностью и/или влиянием в системе распределенной базы данных. Такая доля может представлять собой весовое значение. Можно сказать, что каждое событие, определенное тем участником, имеет весовое значение его определяющего участника. Тогда M может быть частью от общей доли всех участников. События, описанные выше как зависимые от M, будут происходить, когда набор участников с суммарным количеством долей по меньшей мере M придет к согласию. Таким образом, на основе своей доли определенные участники могут иметь большее влияние на систему и на то, каким образом получается порядок консенсуса. В некоторых случаях транзакция в событии может менять долю одного или более участников, добавлять новых участников и/или удалять участников. Если такая транзакция имеет принятый раунд R, то после вычисления принятого раунда события после свидетелей раунда R будут повторно вычислять свои номера раундов и другую информацию с использованием модифицированных долей и модифицированного списка участников. Голоса относительно того, являются ли события раунда R известными, будут использовать старые доли и список участников, но голоса относительно раундов после R будут использовать новые доли и список участников. Дополнительные подробности относительно использования весовых значений для определения консенсуса описаны в предварительной заявке на патент США № 62/344682, поданной 2 июня 2016 г. и озаглавленной «Methods And Apparatus For A Distributed Database With Consensus Determined Based On Weighted Stakes», которая включена в настоящий документ посредством ссылки во всей своей полноте.[1105] In some cases, M (as described above) may be based on the weights assigned to each participant, rather than just a fraction, percentage, and/or value of the number of all participants. In such a case, each participant has a share associated with his interest and/or influence in the distributed database system. Such a proportion may be a weight value. We can say that each event defined by that participant has the weight value of its defining participant. Then M can be a part of the total share of all participants. The events described above as dependent on M will occur when a set of participants with a total number of shares of at least M comes to an agreement. Thus, based on their stake, certain participants can have more influence over the system and how the consensus order is obtained. In some cases, a transaction in an event may change the stake of one or more participants, add new participants, and/or remove participants. If such a transaction has an accepted round R, then after calculating the accepted round, the events after round witnesses R will recalculate their round numbers and other information using the modified shares and the modified participant list. Votes regarding whether the events of round R are known will use the old stakes and list of participants, but votes regarding rounds after R will use the new stakes and list of participants. Additional details regarding the use of weights to determine consensus are described in U.S. Provisional Application No. 62/344,682, filed June 2, 2016, entitled "Methods And Apparatus For A Distributed Database With Consensus Determined Based On Weighted Stakes", which is incorporated herein. document by reference in its entirety.

[1106] В некоторых случаях определенные участники могут быть идентифицированы и/или назначены как «ленивые участники». В таких случаях ленивые участники могут определять и/или создавать события, подобно нормальным участникам или неленивым участникам. Кроме того, события, определенные и/или созданные ленивыми участниками, могут быть включены в хешграф, и порядок консенсуса для таких событий может быть вычислен и/или идентифицирован. Однако приращение раунда для событий, определенных ленивыми участниками, равняется нулю. Соответственно, номер раунда (или раунд, который создан) для события, определенного ленивым участником, равняется максимуму номеров раундов родителей события. Подобным образом, поскольку приращение раунда для событий, определенных ленивыми участниками, равняется нулю, номер раунда (или раунд, который создан) для события, определенного ленивым участником, не может превышать максимум номеров раундов родителей события. [1106] In some cases, certain participants may be identified and/or designated as "lazy participants". In such cases, lazy participants can define and/or create events in the same way as normal participants or non-lazy participants. In addition, events defined and/or created by lazy participants can be included in the hashgraph, and the consensus order for such events can be computed and/or identified. However, the round increment for events defined by lazy participants is zero. Accordingly, the round number (or the round that is created) for the event defined by the lazy participant is equal to the maximum of the round numbers of the event's parents. Similarly, since the round increment for events defined by lazy participants is zero, the round number (or round that is created) for an event defined by a lazy participant cannot exceed the maximum round numbers of the event's parents.

[1107] Более того, в некоторых случаях события, определенные ленивыми участниками, не имеют права голосовать на выборах, и события, определенные ленивыми участниками, не имеют права становиться первыми событиями или свидетелями раунда R и/или не учитываются как промежуточные события для события, определенного нормальным или неленивым участником, чтобы строго видеть другое событие. Соответственно, ограничения, накладываемые на ленивых участников, приводят в результате к сокращению вычислений, выполняемых хешграфом, при этом все еще поддерживается безопасность и целостность порядка консенсуса. Участники могут быть выбраны как ленивые участники на основе любых подходящих критериев. Например, в некоторых случаях участники могут быть назначены как ленивые участники на основе детерминированного псевдослучайного выбора, выполняемого в каждом раунде, предварительно определенного в начале раунда, на основе уровней доверия, на основе объема доли, на основе голоса других участников и/или выбора случайным образом. В некоторых случаях участники, назначенные как ленивые участники, могут быть разными для каждого раунда, тогда как в некоторых других случаях участники, назначенные как ленивые участники, остаются таковыми на протяжении разных раундов. В некоторых других случаях события, а не участники могут быть назначены как «ленивые» события. В таком случае ленивые события могут выбираться в каждом раунде вместо выбора участников.[1107] Moreover, in some cases, events defined by lazy participants are not eligible to vote in elections, and events defined by lazy participants are not eligible to become the first events or witnesses of the R round and / or are not counted as intermediate events for the event, defined by a normal or non-lazy participant in order to strictly see another event. Accordingly, restrictions placed on lazy participants result in a reduction in the computations performed by the hashgraph while still maintaining the security and integrity of the consensus order. Members can be selected as lazy members based on any suitable criteria. For example, in some cases, participants may be assigned as lazy participants based on a deterministic pseudo-random selection performed in each round, predetermined at the start of the round, based on trust levels, based on share volume, based on the vote of other participants, and/or selection randomly. . In some cases, participants designated as lazy participants may be different for each round, while in some other cases, participants designated as lazy participants remain so throughout different rounds. In some other cases, events rather than participants may be designated as "lazy" events. In such a case, lazy events can be selected in each round instead of selecting participants.

[1108] Соответственно, в некоторых случаях процессор первого участника может определять первую группу участников (например, вычислительных устройств) и вторую группу участников (например, вычислительных устройств) на основе детерминированной псевдослучайной функции. Первая группа участников может представлять неленивых участников, и вторая группа участников может представлять ленивых участников. В некоторых случаях первая группа участников является абсолютным дополнением второй группы участников в отношении участников (например, вычислительных устройств) распределенной базы данных. Первый участник (или процессор первого участника) может принимать от второго участника (например, с вычислительного устройства) событие, привязанное к первому набору событий, определенному набором участников (например, набором вычислительных устройств). Набор участников содержит по меньшей мере одного участника из первой группы участников и по меньшей мере одного участника из второй группы участников. Процессор может идентифицировать порядок, связанный со вторым набором событий, в результате того, что протокол консенсуса (например, как описано в настоящем документе) использует значение для параметра (например, номера раунда, приращения раунда, голоса, указания того, что кто-то является свидетелем, указания того, что кто-то является известным свидетелем, и т. д.) события из первого набора событий, которое было определено участником из первой группы участников, и не использует значение для параметра события из первого набора событий, которое было определено участником из второй группы участников. Процессор может идентифицировать порядок, связанный с набором транзакций, указанным в экземпляре распределенной базы данных, на основе по меньшей мере частично порядка, связанного со вторым набором событий, и может сохранять порядок, связанный с набором транзакций, в экземпляре распределенной базы данных.[1108] Accordingly, in some cases, the processor of the first participant may determine the first group of participants (eg, computing devices) and the second group of participants (eg, computing devices) based on a deterministic pseudo-random function. The first group of participants may represent non-lazy participants, and the second group of participants may represent lazy participants. In some cases, the first group of participants is the absolute complement of the second group of participants with respect to the participants (eg, computing devices) of the distributed database. The first participant (or the processor of the first participant) may receive from the second participant (eg, from a computing device) an event associated with a first set of events defined by a set of participants (eg, a set of computing devices). The member set contains at least one member from the first member group and at least one member from the second member group. The processor can identify the order associated with the second set of events as a result of the consensus protocol (eg, as described herein) using a value for a parameter (eg, round number, round increment, vote, indication that someone is a witness, indicating that someone is a known witness, etc.) of an event from the first event set that was defined by a participant from the first group of participants, and does not use a value for the event parameter from the first event set that was defined by the participant from the second group of participants. The processor may identify the order associated with the transaction set specified in the distributed database instance based at least in part on the order associated with the second set of events and may store the order associated with the transaction set in the distributed database instance.

[1109] Вышеизложенные термины, определения и алгоритмы используются для иллюстрации вариантов осуществления и концепций, описанных в отношении фиг. 8–10B. На фиг. 10A и фиг. 10B проиллюстрировано первое примерное применение способа и/или процесса достижения консенсуса, показанное в математической форме. На фиг. 11A и фиг. 11B проиллюстрировано второе примерное применение способа и/или процесса достижения консенсуса, показанное в математической форме, и на фиг. 12A и фиг. 12B проиллюстрировано третье примерное применение способа и/или процесса достижения консенсуса, показанное в математической форме.[1109] The foregoing terms, definitions, and algorithms are used to illustrate the embodiments and concepts described with respect to FIG. 8–10B. In FIG. 10A and FIG. 10B illustrates a first exemplary application of the consensus method and/or process, shown in mathematical form. In FIG. 11A and FIG. 11B illustrates a second exemplary application of the consensus method and/or process shown in mathematical form, and FIG. 12A and FIG. 12B illustrates a third exemplary application of the consensus method and/or process, shown in mathematical form.

[1110] На фиг. 2 модуль 211 конвергенции базы данных и модуль 212 связи показаны на фиг. 2 как реализованные в процессоре 210. В других вариантах осуществления модуль 211 конвергенции базы данных и/или модуль 212 связи могут быть реализованы в памяти 220. В еще других вариантах осуществления модуль 211 конвергенции базы данных и/или модуль 212 связи могут быть основаны на аппаратном обеспечении (например, ASIC, FPGA и т. д.).[1110] FIG. 2, the database convergence module 211 and the communication module 212 are shown in FIG. 2 as implemented in processor 210. In other embodiments, database convergence module 211 and/or communication module 212 may be implemented in memory 220. In still other embodiments, database convergence module 211 and/or communication module 212 may be hardware-based. software (eg ASIC, FPGA, etc.).

[1111] В некоторых случаях распределенная база данных (например, показанная и описанная в отношении фиг. 1) может позволять выполнять обработку «посреднических транзакций». В некоторых случаях такие посреднические транзакции могут быть совершены участником распределенной базы данных от имени лица, которое не является участником распределенной базы данных, участника распределенной базы данных с правами, не являющимися полными (например, имеющего права чтения, но не права записи, не оказывающего влияние на согласованные решения и т. д.), и/или т. п. Например, предположим, что Алиса желает подать транзакцию TR в распределенную базу данных, но она не является полноправным участником распределенной базы данных (например, Алиса не является участником или имеет ограниченные права). Предположим, что Боб является полноправным участником и имеет полные права в распределенной базе данных. В этом случае Алиса может отправлять транзакцию TR Бобу, и Боб может подавать TR в сеть с целью оказания влияния на распределенную базу данных. В некоторых случаях Алиса может подписывать TR с помощью цифровой подписи. В некоторых случаях TR может содержать, например, платеж Бобу (например, комиссию за его услугу подачи TR в распределенную базу данных). В некоторых случаях Алиса может передавать TR Бобу посредством анонимизирующей сети, такой как сеть луковой маршрутизации TOR, чтобы ни Боб, ни другие наблюдатели не могли определить, что TR поступило от Алисы.[1111] In some cases, a distributed database (eg, shown and described in relation to Fig. 1) may allow the processing of "intermediary transactions". In some cases, such intermediary transactions may be made by a distributed database participant on behalf of a person who is not a distributed database participant, a distributed database participant with less than full rights (for example, having read rights but not write rights, not having influence to consensus decisions, etc.), and/or the like. limited rights). Let's assume that Bob is a full member and has full rights in the distributed database. In this case, Alice can send a TR transaction to Bob, and Bob can send a TR to the network in order to influence the distributed database. In some cases, Alice may sign the TR with a digital signature. In some cases, the TR may contain, for example, a payment to Bob (eg, a fee for his service of submitting the TR to a distributed database). In some cases, Alice may send a TR to Bob via an anonymizing network, such as the TOR onion routing network, so that neither Bob nor other observers can determine that the TR came from Alice.

[1112] В некоторых случаях распределенная база данных (например, показанная и описанная в отношении фиг. 1) может быть использована для реализации криптовалюты. В таком случае каждый экземпляр 114, 124, 134, 144 распределенной базы данных может определять одну или более структур данных кошелька (также называемых в настоящем документе кошельками) для хранения криптовалюты. В некоторых случаях пользователи, которые не связаны с распределенной базой данных (например, вычислительные устройства, которые не являются участниками распределенной базы данных), могут также создавать и/или определять такие кошельки. Структура данных кошелька может содержать пару ключей (открытый ключ и закрытый ключ). В некоторых случаях пара ключей для кошелька может быть сгенерирована вычислительным устройством, на котором создают этот кошелек. Например, если Алиса определяет кошелек (W, K), при этом W является открытым ключом (который также может служить идентификатором для кошелька), и K является закрытым ключом, она может опубликовать W (например, в событии) в остальных экземплярах распределенной базы данных, сохранив при этом свой идентификатор анонимным, чтобы другие экземпляры распределенной базы данных (или их пользователи) не могли идентифицировать, что кошелек W связан с Алисой. Однако в некоторых случаях переводы криптовалюты являются открытыми. Таким образом, если ее работодатель переводит деньги на W (например, путем использования транзакции в событии), и затем Алиса совершает покупку путем перевода денег с W в магазин (например, с использованием отличной транзакции в отличном событии), то работодатель и магазин могут договориться с целью определения того, что W принадлежит Алисе и что покупка была совершена именно Алисой. Таким образом, во избежание этого для Алисы может быть полезным переводить деньги на новый анонимный кошелек для сохранения анонимности своих транзакций.[1112] In some instances, a distributed database (eg, as shown and described in relation to FIG. 1) may be used to implement a cryptocurrency. In such a case, each distributed database instance 114, 124, 134, 144 may define one or more wallet data structures (also referred to herein as wallets) for storing cryptocurrency. In some cases, users who are not associated with the distributed database (for example, computing devices that are not members of the distributed database) may also create and/or define such wallets. The wallet data structure may contain a key pair (public key and private key). In some cases, a key pair for a wallet may be generated by the computing device on which the wallet is created. For example, if Alice defines a wallet (W, K), where W is the public key (which can also serve as an identifier for the wallet) and K is the private key, she can publish W (e.g. in an event) to the rest of the distributed database instances. , while keeping its identity anonymous so that other distributed database instances (or their users) cannot identify that purse W is associated with Alice. However, in some cases, cryptocurrency transfers are open. Thus, if her employer transfers money to W (for example, by using a transaction in an event), and then Alice makes a purchase by transferring money from W to a store (for example, using a different transaction in a different event), then the employer and the store can agree for the purpose of determining that W belongs to Alice and that the purchase was made by Alice. Thus, in order to avoid this, it may be useful for Alice to transfer money to a new anonymous wallet in order to keep her transactions anonymous.

[1113] В следующем примере исходят из того, что C монет криптовалюты переводят с кошелька W на кошелек R, если опубликована следующая транзакция (например, в событии), где _K на конце означает, что транзакция подписана с помощью цифровой подписи с помощью закрытого ключа K. Может быть использована следующая форма записи:[1113] The following example assumes that C crypto coins are transferred from wallet W to wallet R if the next transaction is published (for example, in an event), where _K at the end means that the transaction is digitally signed with a private key K. The following notation may be used:

TRANSFER(C, W, R)_KTRANSFER(C, W, R)_K

[1114] В некоторых случаях для достижения анонимности в переводе криптовалюты могут быть определены новый тип транзакции и/или функция распределенной базы данных. Например, следующие транзакции будут выполнять перевод C1 монет с кошелька W1 на кошелек R1, а также перевод C2 монет с кошелька W2 на кошелек R2. В некоторых случаях, например, каждый из кошельков W1, R1, W2, R2 может быть связан с участником (или вычислительным устройством) распределенной базы данных или с пользователем, который не связан с распределенной базой данных (или вычислительным устройством, связанным с распределенной базой данных). Четыре кошелька могут быть связаны с одним участником или пользователем или могут быть связаны с разными участниками или пользователями. В некоторых случаях транзакции могут включать произвольный идентификатор N (например, идентификатор преобразования и/или идентификатор процесса), который предназначен для их соединения.[1114] In some cases, a new transaction type and/or a distributed database function may be defined to achieve anonymity in a cryptocurrency transfer. For example, the following transactions will transfer C1 coins from wallet W1 to wallet R1, as well as transfer C2 coins from wallet W2 to wallet R2. In some cases, for example, each of the wallets W1, R1, W2, R2 may be associated with a member (or computing device) of a distributed database, or with a user that is not associated with a distributed database (or a computing device associated with a distributed database). ). The four wallets may be associated with the same member or user, or may be associated with different members or users. In some cases, transactions may include an arbitrary identifier N (eg, a transformation identifier and/or a process identifier) that is intended to connect them.

TRANSFER_DOUBLE(N, C1, W1, R1, C2, W2, R2, T)_K1TRANSFER_DOUBLE(N, C1, W1, R1, C2, W2, R2, T)_K1

TRANSFER_DOUBLE(N, C1, W1, R1, C2, W2, R2, T)_K2TRANSFER_DOUBLE(N, C1, W1, R1, C2, W2, R2, T)_K2

[1115] В некоторых случаях эти транзакции не оказывают влияния, пока кошелек W1 не будет содержать по меньшей мере C1 монет и кошелек W2 не будет содержать по меньшей мере C2 монет. В некоторых случаях эти транзакции не оказывают влияния, пока не будут опубликованы и распределены по другим экземплярам распределенной базы данных две идентичные копии (например, в одном или более событиях), одна подписывается K1 (с использованием закрытого ключа, связанного с открытым ключом W1), и другая подписывается K2 (с использованием закрытого ключа, связанного с открытым ключом W2). В некоторых случаях каждая транзакция может также содержать защищенную метку времени, как описано выше. Эта защищенная метка времени может быть защищенной меткой времени события, с которым связана транзакция, или отдельной защищенной меткой времени транзакции. Если обе транзакции опубликованы с метками времени в течение T секунд друг за другом (например, защищенная метка времени транзакций в пределах предопределенного периода времени друг за другом), то произойдут оба перевода валюты. В противном случае не происходит ни один из переводов. В некоторых случаях транзакция может быть создана и/или определена с датой и временем T истечения срока, и перевод не произойдет, пока обе подписанные транзакции не будут иметь метки времени консенсуса, предшествующие T.[1115] In some cases, these transactions have no effect until purse W1 contains at least C1 coins and purse W2 contains at least C2 coins. In some cases, these transactions have no effect until they are published and distributed to other distributed database instances, two identical copies (for example, in one or more events), one signed by K1 (using the private key associated with the public key of W1), and the other is signed by K2 (using the private key associated with W2's public key). In some cases, each transaction may also contain a secure timestamp, as described above. This secure timestamp can be the secure timestamp of the event to which the transaction is associated, or a separate secure timestamp of the transaction. If both transactions are posted with timestamps within T seconds of each other (eg secure timestamp of transactions within a predefined time period of each other), then both currency transfers will occur. Otherwise, none of the translations takes place. In some cases, a transaction may be created and/or defined with an expiration date and time T, and the transfer will not occur until both signed transactions have consensus timestamps prior to T.

[1116] В других случаях T не используют, и перевод валюты происходит только в том случае, если обе транзакции произойдут до того, как любая из сторон внесет транзакцию, отменяющую перевод. Например, Алиса может опубликовать свою подписанную транзакцию (например, свою транзакцию TRANSFER_DOUBLE), затем опубликовать другую подписанную транзакцию, содержащую сообщение об отмене в отношении этой первой транзакции, затем Боб публикует свою подписанную транзакцию. Перевод не произойдет, если транзакция Боба была позже, чем сообщение Алисы об отмене, но перевод произойдет, если транзакция Боба была раньше, чем сообщение Алисы об отмене. Таким способом система может работать без T и без меток времени, используя упорядоченную последовательность консенсуса транзакций. В других случаях могут поддерживаться как T, так и сообщения об отмене.[1116] In other cases, T is not used, and the currency transfer occurs only if both transactions occur before either party makes a transaction that reverses the transfer. For example, Alice may publish her signed transaction (eg, her TRANSFER_DOUBLE transaction), then publish another signed transaction containing a cancel message for that first transaction, then Bob publishes her signed transaction. The transfer will not occur if Bob's transaction was later than Alice's cancel message, but the transfer will occur if Bob's transaction was earlier than Alice's cancel message. In this way, the system can operate without T and without timestamps, using an ordered sequence of transaction consensus. In other cases, both T and cancel messages may be supported.

[1117] Следующий пример иллюстрирует, как транзакция типа «TRANSFER_DOUBLE» и/или функция распределенной базы данных могут быть использованы для того, чтобы анонимно и защищенным образом начать передачу данных (таких как валюта). В следующем примере Алиса имеет кошелек W1, на который ее работодатель перевел деньги. Она желает перевести C монет с W1 на анонимный кошелек W2, который она создает, который позже будет использован для покупок. Но она желает иметь защищенную анонимность, чтобы никто из просматривающих транзакции не узнал, что W1 связан с анонимным кошельком W2. Он должен быть защищенным, даже если ее работодатель сотрудничает с магазином с целью совершения атаки на анонимность. В дополнение к этому, например, Боб желает такой же защищенной анонимности при переводе монет со своего кошелька W3 на анонимный кошелек W4, который он создает. [1117] The following example illustrates how a transaction of type "TRANSFER_DOUBLE" and/or a distributed database function can be used to anonymously and securely initiate a transfer of data (such as currency). In the following example, Alice has purse W1, to which her employer has transferred money. She wishes to transfer C coins from W1 to an anonymous purse W2 she creates, which will later be used for purchases. But she wants to have secure anonymity so that no one viewing the transactions knows that W1 is linked to W2's anonymous wallet. It must be secure, even if her employer is partnering with the store to attack anonymity. In addition to this, for example, Bob desires the same secure anonymity when transferring coins from his W3 wallet to an anonymous W4 wallet he creates.

[1118] Алиса и Боб могут достичь формы анонимности путем исполнения следующего протокола. Он может включать любую форму осуществления связи друг с другом, такую как непосредственная электронная переписка друг с другом, отправка сообщений друг другу через сайт для обмена текстовыми сообщениями или через сайт онлайн-форума или посредством транзакций, опубликованных в открытой распределенной базе данных или реестре (например, в событиях). Следующий пример исходит из того, что протокол исполняют через открытый реестр. Предположим, что Алиса и Боб вначале являются незнакомцами, но оба обладают способностью публиковать транзакции на открытом реестре и могут читать транзакции, которые другие публикуют на открытом реестре. Алиса и Боб могут публиковать следующие транзакции на открытом реестре (например, в одном или более событиях): [1118] Alice and Bob can achieve a form of anonymity by executing the following protocol. It may include any form of communication with each other, such as direct email correspondence with each other, sending messages to each other through a text messaging site or online forum site, or through transactions published in a public distributed database or registry (for example, , in events). The following example assumes that the protocol is executed through a public registry. Suppose that Alice and Bob are strangers at first, but both have the ability to publish transactions on a public ledger and can read transactions that others post on a public ledger. Alice and Bob may publish the following transactions on the public ledger (for example, in one or more events):

Алиса публикует: Anonymize1(N, C, W1)_K1 Alice posts: Anonymize1(N, C, W1)_K1

Боб подсчитывает: B = encrypt(W4, W1)Bob counts: B = encrypt(W4, W1)

Боб публикует: Anonymize2(N, W3, B)_K3Bob posts: Anonymize2(N, W3, B)_K3

Алиса подсчитывает: A = encrypt(W2, W3)Alice counts: A = encrypt(W2, W3)

Алиса публикует: Anonymize3(N, A)_K1Alice posts: Anonymize3(N, A)_K1

Оба подсчитывают: MIN = min(W2, W4)Both count: MIN = min(W2, W4)

Оба подсчитывают: MAX = max(W2, W4)Both count: MAX = max(W2, W4)

Боб публикует: TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K3Bob posts: TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K3

Алиса публикует: TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K1Alice publishes: TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K1

[1119] В этом примере Алиса желает перевести C монет с кошелька W1 на W2, и Боб желает перевести C монет с кошелька W3 на W4. Каждый из Алисы и Боба генерирует свои собственные кошельки путем генерирования пары ключей (открытый ключ, закрытый ключ) для каждого кошелька. Здесь открытый ключ для кошелька также используют в качестве названия кошелька (в других случаях для идентификации кошелька может быть использован отдельный идентификатор). Алиса и Боб желают выполнить эти переводы таким способом, чтобы наблюдатели могли идентифицировать, что владелец кошелька W1 также является владельцем либо W2, либо W4, но не могли идентифицировать, какого именно. Подобным образом, Алиса и Боб желают выполнить эти переводы таким способом, чтобы наблюдатели могли идентифицировать, что владелец кошелька W3 также является владельцем либо W2, либо W4, но не могли идентифицировать, какого именно. Кошелек с открытым ключом W1 имеет закрытый ключ K1. Подобным образом, кошельки W2, W3 и W4 имеют закрытые ключи K2, K3 и K4 соответственно. Каждую транзакцию или инструкцию выше подписывают с помощью закрытого ключа, указанного в конце. Например, первоначальные транзакцию или инструкцию подписывают с помощью цифровой подписи с помощью закрытого ключа K1. [1119] In this example, Alice wants to transfer C coins from purse W1 to W2, and Bob wants to transfer C coins from purse W3 to W4. Alice and Bob each generate their own wallets by generating a key pair (public key, private key) for each wallet. Here, the public key for the wallet is also used as the name of the wallet (in other cases, a separate identifier can be used to identify the wallet). Alice and Bob want to make these transfers in such a way that observers can identify that the owner of wallet W1 is also the owner of either W2 or W4, but cannot identify which one. Similarly, Alice and Bob want to make these transfers in such a way that observers can identify that the owner of wallet W3 is also the owner of either W2 or W4, but cannot identify which one. The public key wallet W1 has the private key K1. Similarly, wallets W2, W3 and W4 have private keys K2, K3 and K4 respectively. Each transaction or instruction above is signed with the private key listed at the end. For example, the initial transaction or instruction is digitally signed using the private key K1.

[1120] Первую транзакцию (Anonymize1(N, C, W1)_K1) используют для анонсирования того, что Алиса желает перевести C монет с W1 на анонимный кошелек. Эта транзакция содержит номер N идентификатора, который может представлять собой хеш транзакции, случайное число, содержащееся в транзакции, и/или любой другой подходящий идентификатор. Этот N (например, идентификатор преобразования и/или идентификатор процесса) используют в последующих транзакциях для обратного обращения к транзакции, которая начала процесс, во избежание путаницы (и для обеспечения возможности идентифицировать процесс или преобразование), если имеются несколько подобных процессов и/или преобразований, происходящих в одно и то же время. В некоторых случаях N может содержать крайний срок времени ожидания, после которого транзакции, включающие N, игнорируют. Эту транзакцию подписывают с помощью цифровой подписи с помощью K1. [1120] The first transaction (Anonymize1(N, C, W1)_K1) is used to announce that Alice wants to transfer C coins from W1 to an anonymous wallet. This transaction contains an identifier number N, which may be the hash of the transaction, a random number contained in the transaction, and/or any other suitable identifier. This N (e.g., transformation ID and/or process ID) is used in subsequent transactions to refer back to the transaction that started the process, to avoid confusion (and to allow the process or transformation to be identified) if there are multiple similar processes and/or transformations. occurring at the same time. In some cases, N may contain a timeout deadline after which transactions involving N are ignored. This transaction is digitally signed by K1.

[1121] Функция encrypt(W4, W1) зашифровывает W4 (открытый ключ кошелька, принадлежащего Бобу и определяемого им в качестве его целевого анонимного кошелька) с использованием открытого ключа W1, что дает результат B, который может быть расшифрован только с помощью соответствующего закрытого ключа K1 (удерживаемого Алисой). Это обеспечивает то, что ни один из других экземпляров распределенной базы данных, просматривающих транзакцию, не сможет идентифицировать W4, за исключением владельца W1 (в этом примере Алисы). [1121] The function encrypt(W4, W1) encrypts W4 (the public key of the wallet owned by Bob and designated by him as his target anonymous wallet) using the public key of W1, resulting in B, which can only be decrypted with the corresponding private key K1 (held by Alice). This ensures that none of the other distributed database instances viewing the transaction can identify W4, except for the owner of W1 (Alice in this example).

[1122] Транзакция Anonymize2(N, W3, B)_K3 указывает на то, что в качестве части процесса или преобразования N, Боб желает выполнить перевод C монет с W3 на анонимный кошелек, идентифицируемый посредством B. Эту транзакцию подписывают с помощью цифровой подписи с использованием закрытого ключа K3. Алиса может затем расшифровать B с использованием закрытого ключа K1 для идентификации целевого анонимного кошелька Боба как W4. [1122] The transaction Anonymize2(N, W3, B)_K3 indicates that, as part of a process or transformation N, Bob wishes to transfer C coins from W3 to an anonymous wallet identified by B. This transaction is digitally signed with using the K3 private key. Alice can then decrypt B using the private key K1 to identify Bob's target anonymous wallet as W4.

[1123] Алиса может выполнить функцию encrypt(W2, W3). Это зашифровывает W2 (открытый ключ кошелька, принадлежащего Алисе и определяемого ею в качестве ее целевого анонимного кошелька) с помощью открытого ключа W3 (первоначальный кошелек Боба). Алиса может затем опубликовать транзакцию Anonymize3(N, A)_K1. Боб может идентифицировать W2 как целевой анонимный кошелек Алисы путем расшифровывания с помощью закрытого ключа K3. [1123] Alice can execute encrypt(W2, W3). This encrypts W2 (the public key of the wallet owned by Alice and designated by her as her target anonymous wallet) with the public key of W3 (Bob's original wallet). Alice can then post the transaction Anonymize3(N, A)_K1. Bob can identify W2 as Alice's target anonymous wallet by decrypting it with K3's private key.

[1124] Функция min(W2, W4) возвращает тот из двух открытых ключей W3 и W4, который является первым лексикографически (в алфавитном порядке). Функция max(W2, W4) возвращает тот из двух открытых ключей W3 и W4, который является последним лексикографически (в алфавитном порядке). Таким образом, MIN может быть либо W2, либо W4, и MAX может быть либо W2, либо W4. Функции min и max позволяют упорядочивать кошельки W2 и W4, оба из которых могут идентифицировать Алиса и Боб, но которые не показывают, какой кошелек был создан и/или определен Алисой, а какой был создан и/или определен Бобом. В других случаях любая другая детерминированная функция может быть использована для идентификации в отношении Алисы и Боба, каким образом упорядочивать анонимные кошельки W2 и W4, например, в виде сортировки по хешу ключа, ранжирования и/или т. п. [1124] The min(W2, W4) function returns which of the two public keys W3 and W4 is the first lexicographically (in alphabetical order). The max(W2, W4) function returns whichever of the two public keys W3 and W4 is the last one lexicographically (in alphabetical order). Thus, MIN can be either W2 or W4, and MAX can be either W2 or W4. The min and max functions allow ordering of wallets W2 and W4, both of which can be identified by Alice and Bob, but which do not indicate which wallet was created and/or defined by Alice and which was created and/or defined by Bob. In other cases, any other deterministic function can be used to identify, with respect to Alice and Bob, how to order the anonymous wallets W2 and W4, such as sorting by key hash, ranking, and/or the like.

[1125] Транзакции TRANSFER_DOUBLE могут быть опубликованы как Бобом, так и Алисой и подписаны с помощью их соответствующих закрытых ключей K1 и K3. В связи с тем, что как Боб, так и Алиса переводят одинаковое количество монет C на каждый из своих соответствующих анонимных кошельков, не имеет значения, какой исходный кошелек W1 или W3 переводит монеты в какой целевой кошелек W2 или W4. Таким образом, в некоторых случаях Алиса переводит C монет на свой собственный анонимный кошелек, и Боб переводит C монет на свой собственный анонимный кошелек. В других случаях Алиса переводит C монет на анонимный кошелек Боба, и Боб переводит C монет на анонимный кошелек Алисы. Это определяется функциями MIN и MAX. Это также обеспечивает то, что наблюдатели могут идентифицировать как W2, так и W4, но не смогут идентифицировать, какой кошелек был определен владельцем W1, а какой кошелек был определен владельцем W3. После того как транзакции опубликованы, наблюдатель знает, что владельцы кошельков W1 и W3 взаимодействуют для перевода C монет на каждый из кошельков W2 и W4, но наблюдатель не будет знать, какому отправителю принадлежит тот или иной получающий кошелек, и, таким образом, кошельки W2 и W4 будут слегка более анонимными, чем кошельки W1 и W3.[1125] TRANSFER_DOUBLE transactions can be published by both Bob and Alice and signed with their respective private keys K1 and K3. Due to the fact that both Bob and Alice transfer the same amount of coins C to each of their respective anonymous wallets, it does not matter which source wallet W1 or W3 transfers coins to which destination wallet W2 or W4. So in some cases Alice transfers C coins to her own anonymous wallet and Bob transfers C coins to his own anonymous wallet. In other cases, Alice transfers C coins to Bob's anonymous wallet, and Bob transfers C coins to Alice's anonymous wallet. This is determined by the MIN and MAX functions. This also ensures that observers can identify both W2 and W4, but will not be able to identify which wallet was identified by the owner of W1 and which wallet was identified by the owner of W3. After the transactions are published, the observer knows that the owners of wallets W1 and W3 are interacting to transfer C coins to each of the wallets W2 and W4, but the observer will not know which sender owns which receiving wallet, and thus wallets W2 and W4 will be slightly more anonymous than the W1 and W3 wallets.

[1126] В некоторых случаях транзакции могут представлять собой «посреднические транзакции», что означает, что узел в сети подает транзакции от имени другой стороны. В вышеприведенном примере Алиса является владельцем кошельков W1 и W2 и желает опубликовать несколько транзакций. Если Кэрол является участником распределенной базы данных, имеющим полные права, то Алиса может отправлять транзакции Кэрол для подачи в сеть от имени Алисы. В некоторых случаях посредническая транзакция может включать разрешение на перевод небольшой комиссии с кошелька W1 Кэрол в качестве платежа за эту услугу. В некоторых случаях Алиса может осуществлять связь с Кэрол посредством сети, которая анонимизирует связь, такой как, например, сеть луковой маршрутизации TOR. В некоторых случаях Алиса может также быть участником, но работать через Кэрол для анонимности. В некоторых случаях Алиса не является участником.[1126] In some cases, transactions may be "intermediary transactions", which means that a node in the network submits transactions on behalf of the other party. In the example above, Alice is the owner of wallets W1 and W2 and wants to publish multiple transactions. If Carol is a member of the distributed database with full rights, then Alice can send transactions to Carol to be submitted to the network on behalf of Alice. In some cases, an intermediary transaction may include permission to transfer a small fee from Carol's W1 wallet as payment for this service. In some cases, Alice may communicate with Carol over a network that anonymizes the communication, such as, for example, the TOR onion routing network. In some cases, Alice may also be a member but work through Carol for anonymity. In some cases, Alice is not a member.

[1127] В некоторых случаях, например, Алиса может затем повторить вышеописанный протокол анонимности с Дэйвом, и Боб может повторить протокол с Эдом. В тот момент другие экземпляры распределенной базы данных смогут идентифицировать, что Алиса является владельцем одного из 4 кошельков, но не узнают, какого именно. После 10 таких прогонов Алиса является владельцем одного кошелька из 210, что составляет 1024. После 20 прогонов набор составляет более миллиона. После 30 он составляет более миллиарда. После 40 он составляет более триллиона. Прогон протокола должен занимать долю секунды. Но даже если прогон каждого протокола занимает целую секунду, любой, кто предпримет попытку анонимизировать свой кошелек, будет в случайном порядке меняться местами с кем-то другим намного быстрее, чем за минуту. Наблюдатели знают, что Алиса является владельцем одного из полученных в результате кошельков, но не знают, какого именно.[1127] In some cases, for example, Alice may then repeat the above anonymity protocol with Dave, and Bob may repeat the protocol with Ed. At that moment, other instances of the distributed database will be able to identify that Alice is the owner of one of the 4 wallets, but will not know which one. After 10 such runs, Alice is the owner of one wallet out of 210, which is 1024. After 20 runs, the set is over a million. After 30, it is over a billion. After 40, it is over a trillion. The protocol run should take a fraction of a second. But even if each protocol takes a full second to run, anyone who attempts to anonymize their wallet will randomly switch places with someone else in much less than a minute. The observers know that Alice is the owner of one of the resulting purses, but do not know which one.

[1128] Эта система может быть менее безопасной, если лишь несколько человек пытаются анонимизировать свои кошельки. В качестве дополнительной меры безопасности Алиса может ждать определенный период времени (например, день, час, неделю и т. д.) и затем дальше анонимизировать свой конечный кошелек, когда участие принимают дополнительные пользователи. Таким способом она может в конечном итоге скрываться среди толпы, которая включает других пользователей, которые пыталась анонимизироваться в течение очень длительного периода времени. Чем больше пользователей, пользующихся системой, тем быстрее она может достичь своей цели. Эта система может быть безопасной, если существует большое количество пользователей, анонимизирующих свои кошельки, даже если существует очень мало участников, действующих как посредники для них.[1128] This system may be less secure if only a few people attempt to anonymize their wallets. As an additional security measure, Alice can wait for a certain period of time (for example, a day, an hour, a week, etc.) and then further anonymize her final wallet when additional users participate. In this way, she may end up hiding among the crowd, which includes other users who have been trying to anonymize for a very long period of time. The more users using the system, the faster it can reach its goal. This system can be secure if there are a large number of users anonymizing their wallets, even if there are very few participants acting as intermediaries for them.

[1129] Эта система потенциально может быть скомпрометирована, если злоумышленник сможет идентифицировать IP-адрес Алисы, когда она осуществляет связь с сетью, реализующей распределенную базу данных (например, сетью Интернет). Если злоумышленник идентифицирует, что Алиса запустила протокол с определенного IP-адреса, и знает, что она является владельцем либо W2, либо W4, а затем немедленно видит, что кто-то запустил протокол на кошельке W2 с того же самого адреса, он может прийти к выводу, что Алиса является владельцем кошелька W2. Решением является анонимизация IP-адресов. Например, для достижения анонимной связи может быть использована анонимная сеть связи (например, сеть Tor). Затем оставшиеся экземпляры распределенной базы данных могут идентифицировать, что W2 запустил протокол и подписал транзакции, но не смогут идентифицировать, использует ли W2 компьютер Алисы или компьютер Боба.[1129] This system can potentially be compromised if an attacker can identify Alice's IP address when she communicates with a network implementing a distributed database (eg, the Internet). If an attacker identifies that Alice ran the protocol from a specific IP address and knows that she is the owner of either W2 or W4, and then immediately sees that someone has run the protocol on W2's wallet from the same address, he can come to the conclusion that Alice is the owner of the W2 wallet. The solution is to anonymize IP addresses. For example, an anonymous communication network (eg, the Tor network) can be used to achieve anonymous communication. The remaining distributed database instances can then identify that W2 started the protocol and signed transactions, but cannot identify whether W2 is using Alice's computer or Bob's computer.

[1130] В некоторых случаях, после того как Алиса перевела свою криптовалюту на действительно анонимизированный кошелек, она может затем потратить криптовалюту на множество транзакций так, чтобы транзакции не отследили до нее. Дополнительно Алиса может разделить свою криптовалюту между многими анонимизированными кошельками, а затем купить множество предметов, каждый с использованием разного кошелька, не показывая, что они были куплены одним и тем же человеком и/или субъектом.[1130] In some cases, after Alice has transferred her cryptocurrency to a truly anonymized wallet, she can then spend the cryptocurrency on multiple transactions without the transactions being traced back to her. Additionally, Alice can split her cryptocurrency among many anonymized wallets and then buy multiple items, each using a different wallet, without showing that they were purchased by the same person and/or entity.

[1131] Как описано выше, пользователи могут анонимизировать свой IP-адрес, когда осуществляют связь с участником хешграфа, который выступает в качестве посредника. В некоторых реализациях они могут достигать этого посредством существующей анонимизирующей сети, такой как сеть TOR. В других реализациях они могут достигать этого с использованием типа анонимизирующей сети, описанного ниже, который основан на шифре с открытым ключом, описанном ниже. [1131] As described above, users can anonymize their IP address when communicating with a hashgraph participant that acts as an intermediary. In some implementations, they may achieve this through an existing anonymizing network, such as the TOR network. In other implementations, they may achieve this using the type of anonymizing network described below, which is based on the public key cipher described below.

[1132] Шифр с открытым ключом предназначен для выполнения следующего, где «участник» представляет собой компьютер, который действует как часть анонимизирующей сети и/или является частью сети хешграфа и готов действовать как посредник для нее:[1132] The public key cipher is designed to do the following, where a "participant" is a computer that acts as part of an anonymizing network and/or is part of a hashgraph network and is willing to act as an intermediary for it:

участник может создавать и/или определять пару открытого-закрытого ключей;the participant can create and/or define a pair of public-private keys;

участник может брать существующий открытый ключ (замаскированный или нет) и создавать и/или определять замаскированную версию существующего открытого ключа, то есть версию открытого ключа с отличающимся свойством маскировки (несвязываемость), путем, например, сочетания открытого ключа с маскирующим фактором (например, случайным маскирующим фактором). Замаскированный открытый ключ является несвязываемым в том смысле, что владелец замаскированного открытого ключа не может идентифицировать открытый ключ из замаскированного открытого ключа без специфического маскирующего фактора;a participant can take an existing public key (masked or not) and create and/or determine a masked version of the existing public key, i.e. a version of the public key with a different masking property (unbindability), by, for example, combining the public key with a masking factor (e.g., random masking factor). The masked public key is unbindable in the sense that the owner of the masked public key cannot identify the public key from the masked public key without a specific masking factor;

участник может брать существующий открытый ключ (замаскированный или нет) и шифротекст, зашифрованный с помощью существующего открытого ключа, и генерировать замаскированную версию такого шифротекста;the participant can take an existing public key (masked or not) and a ciphertext encrypted with the existing public key and generate a masked version of that ciphertext;

зашифрованное сообщение может быть расшифровано только оригинальным закрытым ключом, даже если открытый ключ был замаскирован несколько раз перед шифрованием или не был замаскирован ни разу и даже если шифротекст был замаскирован несколько раз после шифрования или не был замаскирован ни разу;the encrypted message can only be decrypted with the original private key, even if the public key was masked several times before encryption or never masked, and even if the ciphertext was masked several times after encryption or never masked;

не зная закрытого ключа, невозможно определить, имеют ли два открытых ключа один и тот же закрытый ключ, или были ли зашифрованы два шифротекста с помощью одного и того же открытого ключа, или имеют ли два шифротекста один и тот же открытый текст, или имеет ли шифротекст заданный открытый текст. without knowing the private key, it is impossible to determine whether two public keys have the same private key, or whether two ciphertexts have been encrypted with the same public key, or whether two ciphertexts have the same plaintext, or whether ciphertext is the specified plaintext.

[1133] Примерный шифр для достижения вышеупомянутых условий обсужден ниже. Участники (например, вычислительные устройства и/или процессоры) могут исполнять этапы для выполнения этого шифра. Во-первых, члены и/или участники осведомлены о математической группе и/или наборе G значений, сохраняют, генерируют и/или могут определять их, вместе с достаточным количеством информации для быстрого распознавания генераторов G. Например, члены могут быть осведомлены о предварительно определенном наборе G значений (например, каждый член и/или участник может независимо генерировать и/или получать общий набор G значений). В некоторых случаях предварительно определенный набор G значений может представлять собой любую алгебраическую группу (например, числа, эллиптические кривые и т. д.). Например, в некоторых случаях набор значений может представлять собой набор чисел G={1,2,3,…,2P} с умножением по модулю 2P+1, где как P, так и 2P+1 представляют собой простой элемент. В таких случаях групповой оператор * может быть определен как умножение по модулю 2P+1, и возведение в степень может быть определено как повторяемое умножение по модулю 2P+1. В таком примере элемент D из G представляет собой генератор, если и только если ни D^2, ни D^P не является конгруэнтным 1 по модулю (2P+1). Из 2P элементов в G, именно phi(2P)=P-1 из них являются генераторами, что составляет приблизительно половину.[1133] An exemplary cipher to achieve the above conditions is discussed below. Participants (eg, computing devices and/or processors) may execute the steps to execute this cipher. First, members and/or members are aware of, store, generate, and/or define a mathematical group and/or set of G values, along with enough information to quickly recognize G generators. For example, members may be aware of a predefined a set of G values (eg, each member and/or participant can independently generate and/or receive a common set of G values). In some cases, the predefined set of G values may be any algebraic group (eg, numbers, elliptic curves, etc.). For example, in some cases, the set of values may be the set of numbers G={1,2,3,…,2P} multiplied modulo 2P+1, where both P and 2P+1 represent a prime element. In such cases, the group operator * can be defined as multiplication modulo 2P+1, and exponentiation can be defined as repeated multiplication modulo 2P+1. In such an example, an element D of G is a generator if and only if neither D^2 nor D^P is congruent to 1 modulo (2P+1). Of the 2P elements in G, phi(2P)=P-1 of them are generators, which is about half.

[1134] Члены и/или участники знают, сохраняют и/или могут определять G и знают достаточное количество информации для распознавания генераторов. Так что для вышеизложенного примера, члены знают P и знают G={1,2,3,…,2P} с умножением и возведением в степень по модулю 2P+1. В некоторых реализациях шифр определяют следующим образом:[1134] Members and/or participants know, store and/or can determine G and know enough information to recognize generators. So for the above example, the members know P and know G={1,2,3,…,2P} with multiplication and exponentiation modulo 2P+1. In some implementations, the cipher is defined as follows:

генерирование ключа: избирают или выбирают случайные R1, R2 из G (например, случайные значения R1 и R2). Если R1 не представляет собой генератор для G, то повторно избирают новое случайное R1 до тех пор, пока не будет найден генератор. Таким образом, R1 представляет собой генератор для G. Открытый ключ может быть определен как пара (B,H), которая основана на первом случайном значении R1 и втором случайном значении R2, так что (B,H)=(R1, R1^R2), и закрытый ключ представляет собой S=R2; key generation: choose or choose random R1, R2 from G (for example, random values of R1 and R2). If R1 is not a generator for G, then a new random R1 is re-selected until a generator is found. Thus, R1 is a generator for G. The public key can be defined as a pair (B,H) which is based on the first random value of R1 and the second random value of R2, so that (B,H)=(R1, R1^R2 ), and the private key is S=R2;

шифрование сообщения: при наличии (возможно замаскированного) открытого ключа (B,H) и сообщения F в виде открытого текста (возможно с детерминированным преобразованием или заполнением, но не с недетерминированным случайным преобразованием или заполнением) избирают или выбирают случайное R3 (например, случайное значение R3) из G. Сообщение F в виде открытого текста может затем быть зашифровано с использованием открытого ключа (B,H) и случайного значения R3 для определения зашифрованного шифротекста как (X,Y)=(B^R3, F * H^R3). В некоторых случаях зашифрованный шифротекст может быть зашифрован с использованием замаскированного открытого ключа (B’,H’) или открытого ключа (B,H), который не был замаскирован. Маскировка ключа описана ниже;message encryption: given a (possibly disguised) public key (B,H) and a plaintext message F (possibly with a deterministic transformation or padding, but not a non-deterministic random transformation or padding), choose or choose a random R3 (for example, a random value R3) from G. The plaintext message F can then be encrypted using the public key (B,H) and the random value R3 to determine the ciphertext as (X,Y)=(B^R3, F * H^R3) . In some cases, the encrypted ciphertext can be encrypted using a masked public key (B',H') or a public key (B,H) that has not been masked. Key masking is described below;

маскировка ключа: при наличии (возможно замаскированного) открытого ключа (B,H) избирают или выбирают случайное R4 (например, случайное значение R4) из G. Замаскированный открытый ключ может быть определен как пара (B’,H’), которая основана на открытом ключе (B,H) и случайном значении R4, так что (B’,H’)= (B^R4, H^R4). Если B^R4 не представляет собой генератор для G, то повторно избирают новое случайное R4 до тех пор, пока B^R4 не будет представлять собой генератор для G. Таким образом, B^R4 представляет собой генератор для G;key masking: given a (possibly masked) public key (B,H), a random R4 (e.g., a random value of R4) is selected from G. The masked public key can be defined as a pair (B',H') that is based on the public key (B,H) and a random value R4, so (B',H')= (B^R4, H^R4). If B^R4 is not a generator for G, then a new random R4 is re-selected until B^R4 is a generator for G. Thus, B^R4 is a generator for G;

маскировка сообщения: при наличии шифротекста (X,Y) и (возможно замаскированного) открытого ключа (B,H), который был использован для шифрования шифротекста (X,Y), замаскированное зашифрованное сообщение (X’,Y’) может быть сгенерировано. Например, случайное R5 (например, случайное значение R5) может быть избрано и/или выбрано из G. Замаскированные зашифрованные сообщение и/или шифротекст могут затем быть определены как (X’,Y’)=(X*(B^R5), Y*(H^R5)). В некоторых случаях шифротекст может быть замаскирован с использованием замаскированного открытого ключа (B’,H’) или открытого ключа (B,H), который не был замаскирован. message masking: Given the ciphertext (X,Y) and the (possibly masked) public key (B,H) that was used to encrypt the ciphertext (X,Y), a masked encrypted message (X',Y') can be generated. For example, a random R5 (eg, a random value of R5) can be chosen and/or selected from G. The masked ciphertext and/or ciphertext can then be defined as (X',Y')=(X*(B^R5), Y*(H^R5)). In some cases, the ciphertext can be masked using a masked public key (B',H') or a public key (B,H) that has not been masked.

[1135] В некоторых случаях шифр, описанный выше, может быть использован для шифрования и безопасной отправки сообщения (например, напрямую или путем внесения сообщения в распределенную базу данных и/или распределенный реестр) с первого вычислительного устройства (например, первым участником) на второе вычислительное устройство (например, второму участнику). Например, в некоторых случаях процессор второго вычислительного устройства может выбирать первое случайное значение R1 из предварительно определенного набора G значений, который представляет собой алгебраическую группу. Первое случайное значение R1 выбирается как генератор для G. Процессор может выбирать второе случайное значение R2 из предварительно определенного набора G значений. Процессор может затем определять открытый ключ как пару (B, H) на основе первого случайного значения R1 и второго случайного значения R2. Пара (B, H), представляющая собой открытый ключ, может быть определена как (R1, R1^R2). [1135] In some cases, the cipher described above may be used to encrypt and securely send a message (e.g., directly or by posting the message to a distributed database and/or distributed registry) from a first computing device (e.g., the first participant) to a second computing device (for example, to the second participant). For example, in some cases, the processor of the second computing device may select a first random value R1 from a predetermined set of values G, which is an algebraic group. The first random value R1 is selected as a generator for G. The processor may select a second random value R2 from a predetermined set of G values. The processor may then determine the public key as a pair (B, H) based on the first random value R1 and the second random value R2. The pair (B, H) representing the public key can be defined as (R1, R1^R2).

[1136] В некоторых случаях процессор второго вычислительного устройства может предоставлять открытый ключ на первое вычислительное устройство. Процессор первого вычислительного устройства может выбирать третье случайное значение R3 и шифровать сообщение M с использованием открытого ключа (B, H) и третьего случайного значения R3 для определения зашифрованного шифротекста как (X, Y)=(B^R3, M * H^R3). Процессор первого вычислительного устройства может затем отправлять зашифрованный шифротекст на второе вычислительное устройство. Процессор второго вычислительного устройства может принимать зашифрованный шифротекст и расшифровывать зашифрованный шифротекст для идентификации сообщения M с использованием закрытого ключа, определенного на основе второго случайного значения.[1136] In some cases, the processor of the second computing device may provide a public key to the first computing device. The processor of the first computing device may choose a third random value R3 and encrypt the message M using the public key (B, H) and the third random value R3 to determine the encrypted ciphertext as (X, Y)=(B^R3, M * H^R3) . The processor of the first computing device may then send the encrypted ciphertext to the second computing device. The processor of the second computing device may receive the encrypted ciphertext and decrypt the encrypted ciphertext to identify the message M using the private key determined based on the second random value.

[1137] В других случаях процессор второго вычислительного устройства может маскировать открытый ключ для определения замаскированного открытого ключа для предоставления на первое вычислительное устройство (вместо открытого ключа, который не был замаскирован). Процессор первого вычислительного устройства может затем использовать замаскированный открытый ключ для шифрования сообщения для определения зашифрованного шифротекста. В таких случаях процессор второго вычислительного устройства может маскировать открытый ключ путем выбора четвертого случайного значения R4 из предварительно определенного набора G значений так, чтобы B^R4 представляло собой генератор для G. Процессор может определять замаскированный открытый ключ как пару (B’, H’) на основе открытого ключа (B, H) и четвертого случайного значения R4, так что (B’, H’)=(B^R4, H^R4).[1137] In other cases, the processor of the second computing device may mask the public key to determine a masked public key to provide to the first computing device (instead of a public key that has not been masked). The processor of the first computing device may then use the masked public key to encrypt the message to determine the encrypted ciphertext. In such cases, the processor of the second computing device may mask the public key by selecting a fourth random value R4 from a predetermined set of G values such that B^R4 is a generator for G. The processor may determine the masked public key as a pair (B', H') based on the public key (B, H) and a fourth random value R4, so (B', H')=(B^R4, H^R4).

[1138] В некоторых случаях процессор первого вычислительного устройства может маскировать зашифрованный шифротекст (X, Y) до отправки зашифрованного шифротекста на второе вычислительное устройство. Например, процессор первого вычислительного устройства может выбирать пятое случайное значение R5 из предварительно определенного набора G значений. На основе открытого ключа, принятого со второго вычислительного устройства (незамаскированного или замаскированного), и пятого случайного значения R5 процессор первого вычислительного устройства может определять замаскированное зашифрованное сообщение как (X’,Y’)=(X*(B^R5), Y*(H^R5)). Процессор первого вычислительного устройства может затем генерировать зашифрованный пакет данных, содержащий замаскированное зашифрованное сообщение, и отправлять зашифрованный шифротекст как замаскированное зашифрованное сообщение на второе вычислительное устройство.[1138] In some cases, the processor of the first computing device may mask the encrypted ciphertext (X, Y) before sending the encrypted ciphertext to the second computing device. For example, the processor of the first computing device may select a fifth random value R5 from a predetermined set of G values. Based on the public key received from the second computing device (unmasked or masked) and the fifth random value R5, the processor of the first computing device may determine the masked encrypted message as (X',Y')=(X*(B^R5), Y* (H^R5)). The processor of the first computing device may then generate an encrypted data packet containing the masked encrypted message and send the encrypted ciphertext as a masked encrypted message to the second computing device.

[1139] Шифр, описанный выше, может быть использован для создания новой системы для осуществления связи среди участников, показывая только псевдонимы, без необходимости раскрывать такую информацию, как IP-адреса. Например, участники {Алиса, Боб, Кэрол, Дэйв, Эд} могут публиковать свой IP-адрес вместе со своим публичным именем. Каждый участник может генерировать пару ключей, открытый ключ которой действует как его псевдоним при осуществлении анонимизированной связи по сети. В некоторых случаях Эд может позволять другим участникам отправлять ему сообщения так, чтобы Эду не приходилось идентифицировать свой IP-адрес или делиться им. Эд может публиковать свой псевдоним (например, свой открытый ключ) вместе с одним или более путями. «Путь» представляет собой последовательность участников, через которых сообщения должны быть маршрутизированы, чтобы дойти до него. Например, Эд может избирать последовательность {Боб, Кэрол, Дэйв, Эд} как путь, что означает, что второе вычислительное устройство может отправлять сообщение Бобу, который будет отправлять его Кэрол, которая будет отправлять его Дэйву, который будет отправлять его Эду. Возвращаемые сообщения могут следовать по тому же пути в обратную сторону. Пути могут быть указаны с использованием псевдонимов вместо другой информации, которая может показывать идентификатор пользователя. По существу, такой путь может представлять собой анонимный путь связи. Например, Эд может создавать и публиковать путь {Боб, Кэрол, Дэйв, Эд} путем выполнения следующих этапов. Эд может сначала замаскировать каждый из четырех открытых ключей для тех четырех участников (например, путем использования шифра, упомянутого выше). Эд может затем брать список имен {Кэрол, Дэйв, Эд} (который представляет собой тот же самый список за исключением его первого элемента, т. е. Боба) и шифровать каждое из тех имен с использованием замаскированного открытого ключа, который Эд создал для {Боба, Кэрол, Дэйва} соответственно. Эд может затем публиковать «путь», который содержит (1) четыре замаскированных ключа (например, последовательность замаскированных открытых ключей) и (2) набор идентификаторов вычислительных устройств участника (например, вычислительного устройства). Такой набор идентификаторов вычислительных устройств содержит три зашифрованных имени (последовательность зашифрованных идентификаторов вычислительных устройств, которые уникально связаны с разными участниками) и публичное имя Боб без каких-либо шифрования или маскировки (незашифрованный идентификатор вычислительного устройства). Такие идентификаторы вычислительных устройств могут представлять собой псевдонимы и связаны с замаскированным открытым ключом. В некоторых реализациях Эд может пропускать этап маскировки ключа для первого имени (Боба в этом примере) и маскировать только остальные ключи.[1139] The cipher described above can be used to create a new system for communication among participants, showing only aliases, without the need to disclose information such as IP addresses. For example, members {Alice, Bob, Carol, Dave, Ed} can publish their IP address along with their public name. Each participant can generate a key pair whose public key acts as its alias when making anonymized communication over the network. In some cases, Ed may allow other members to send messages to him without Ed having to identify or share his IP address. Ed can publish his alias (eg his public key) along with one or more paths. A "path" is a sequence of participants through which messages must be routed in order to reach it. For example, Ed can choose the sequence {Bob, Carol, Dave, Ed} as a path, which means that the second computing device can send a message to Bob, who will send it to Carol, who will send it to Dave, who will send it to Ed. Returned messages can follow the same path in reverse. Paths may be specified using aliases instead of other information that may indicate a user ID. As such, such a path may be an anonymous communication path. For example, Ed can create and publish the path {Bob, Carol, Dave, Ed} by performing the following steps. Ed can first mask each of the four public keys for those four participants (for example, by using the cipher mentioned above). Ed can then take the list of names {Carol, Dave, Ed} (which is the same list minus its first element, i.e. Bob) and encrypt each of those names using the masked public key Ed created for { Bob, Carol, Dave} respectively. The ed may then publish a "path" that contains (1) four masked keys (eg, a sequence of masked public keys) and (2) a set of participant computing device identifiers (eg, computing device). Such a set of computing device identifiers contains three encrypted names (a sequence of encrypted computing device identifiers that are uniquely associated with different participants) and the public name Bob without any encryption or obfuscation (an unencrypted computing device identifier). Such computing device identifiers may be aliases and are associated with a masked public key. In some implementations, Ed may skip the key masking step for the first name (Bob in this example) and only mask the rest of the keys.

[1140] Если Алиса (например, первое вычислительное устройство) желает отправить сообщение на псевдоним, который использует Эд (например, второе вычислительное устройство), Алиса может осуществить поиск путей, связанных с псевдонимом Эда, и выбрать один из таких путей. Например, Алиса может избрать или выбрать путь, созданный из {Боба, Кэрол, Дэйва, Эда}. Соответственно, Алиса может определять и/или генерировать зашифрованное сообщение путем шифрования сообщения с помощью замаскированного открытого ключа для Эда, созданного Эдом, в частности, этим путем. Алиса может брать имя (или псевдоним) «Эд» (например, идентификатор вычислительного устройства для второго вычислительного устройства) и шифровать имя (или псевдоним) «Эд» с помощью замаскированного открытого ключа Дэйва. Это зашифрованное имя может быть замаскировано и затем приложено к зашифрованному сообщению для Эда для генерирования и/или определения зашифрованного пакета данных. После этого Алиса может повторять это для обработки сообщения в порядке, обратном порядку, указанному в выбранном пути. Соответственно, Алиса может шифровать пакет (например, зашифрованное имя, приложенное к зашифрованному сообщению) с использованием замаскированного открытого ключа для Дэйва. Затем Алиса может прилагать к пакету замаскированную версию имени Дэйва, зашифрованного с помощью ключа Кэрол. Алиса затем зашифровывает тот весь пакет с использованием ключа Кэрол. Затем прилагает замаскированную версию имени Кэрол, зашифрованного с помощью ключа Боба. Боб находится в начале пути или списка, таким образом, процесс шифрования для выбранного пути останавливается здесь.[1140] If Alice (eg, the first computing device) wishes to send a message to the alias that Ed is using (eg, the second computing device), Alice may search for paths associated with Ed's alias and select one of those paths. For example, Alice may take or choose a path created from {Bob, Carol, Dave, Ed}. Accordingly, Alice may determine and/or generate an encrypted message by encrypting the message with a disguised public key for Ed created by Ed, specifically in this way. Alice can take the name (or alias) "Ed" (eg, the computing device identifier for the second computing device) and encrypt the name (or alias) "Ed" using Dave's disguised public key. This encrypted name may be masked and then appended to an encrypted message for Ed to generate and/or define an encrypted data packet. Alice can then repeat this to process the message in the reverse order of the chosen path. Accordingly, Alice can encrypt a packet (eg, an encrypted name attached to an encrypted message) using a masked public key for Dave. Alice can then attach a masked version of Dave's name, encrypted with Carol's key, to the packet. Alice then encrypts that entire packet using Carol's key. Then he attaches a disguised version of Carol's name encrypted with Bob's key. Bob is at the beginning of the path or list, so the encryption process for the selected path stops here.

[1141] На этом этапе Алиса создала большой пакет. Имя Боба является единственным, которое Эд включил как открытый текст, так что Алиса знает, что путь начинается с Боба. Следовательно, Алиса отправляет весь конечный пакет Бобу. Он затем расшифровывает пакет с помощью своего закрытого ключа, затем расшифровывает имя Кэрол с помощью своего закрытого ключа, затем удаляет ее имя и отправляет Кэрол то, что осталось. Кэрол делает то же самое, отправляя Дэйву меньший пакет. Дэйв делает то же самое и отправляет Эду. Наконец, Эд расшифровывает то, что он принимает, и может прочитать сообщение.[1141] At this point, Alice has created a large package. Bob's name is the only one that Ed included in plaintext, so Alice knows that the path starts with Bob. Therefore, Alice sends the entire final packet to Bob. He then decrypts the packet with his private key, then decrypts Carol's name with his private key, then removes her name and sends what's left to Carol. Carol does the same by sending Dave a smaller package. Dave does the same and sends to Eda. Finally, Ed decodes what he receives and is able to read the message.

[1142] С использованием вышеописанного шифра, который обеспечивает замаскированные ключи и замаскированные сообщения, например, Эд может публиковать путь, который должен быть пройден другими участниками, сохраняя при этом свою анонимность. В отличие от скрытых служб Tor, с помощью вышеупомянутого протокола анонимизированной IP-связи Эд не должен связываться с Бобом заранее, чтобы договориться об этом пути, и Боб ничего не должен сохранять при проведении подготовки в отношении пути. Вместо этого, Эд публикует свои пути, и, когда кто-либо использует один из них, сообщение доходит до него.[1142] Using the cipher described above, which provides obfuscated keys and obfuscated messages, for example, Ed can publish the path to be taken by other participants while maintaining his anonymity. Unlike the Tor hidden services, with the aforementioned anonymized IP communication protocol, Ed does not have to contact Bob in advance to negotiate this path, and Bob does not have to save anything while preparing the path. Instead, Ed publishes his paths, and when someone uses one of them, the message reaches him.

[1143] Подобным образом, с использованием вышеописанного способа другие участники (например, Алиса) могут публиковать анонимный путь связи и принимать зашифрованный пакет данных от других участников по анонимному пути связи. В конечном счете, Алиса может расшифровывать принятое сообщение посредством закрытого ключа, специфического для Алисы, и получает оплату с помощью открытого ключа, используемого Алисой в этом анонимном пути связи. Соответственно, любое количество участников (например, вычислительных устройств) может определять любое количество анонимных путей связи. Дополнительно такие анонимные пути связи могут быть определены для включения любого количества промежуточных участников (например, вычислительных устройств). Это может гарантировать, что IP-адрес конечного получателя сообщения остается нераскрытым.[1143] Similarly, using the method described above, other participants (eg, Alice) can publish an anonymous communication path and receive an encrypted data packet from other participants over the anonymous communication path. Ultimately, Alice can decrypt the received message with an Alice-specific private key and is paid with the public key used by Alice in this anonymous communication path. Accordingly, any number of participants (eg, computing devices) may define any number of anonymous communication paths. Additionally, such anonymous communication paths may be defined to include any number of intermediate participants (eg, computing devices). This can ensure that the IP address of the final recipient of the message remains undiscovered.

[1144] В некоторых случаях протокол связи может быть оптимизирован путем добавления чисел цепи в протокол. Например, когда Алиса предоставляет Бобу первоначальный пакет, Боб может ответить с помощью случайного числа, которое он избирает для уникальной идентификации цепи. Когда Боб отправляет меньший пакет Кэрол, то Кэрол отвечает Бобу с помощью случайного числа для цепи. Другие участники тоже так делают. Когда Алиса желает отправить больше сообщений Эду в ближайшем будущем, она может зашифровать каждое сообщение с помощью всех открытых ключей в пути (начиная с ключа Эда) и отправить каждое сообщение Бобу вместе с числом цепи, которое он ей дал. Боб может, например, помнить, что это число цепи связано с Кэрол, так что он будет расшифровывать каждое сообщение с помощью своего собственного закрытого ключа и направлять каждое сообщение Кэрол вместе с числом цепи, которое Кэрол дала ему. Каждый участник может сохранять список чисел цепи вместе с тем, кто непосредственно предшествует им и следует за ними в пути для той цепи. В некоторых случаях эта информация хранится в течение ограниченного периода времени. Если никакие сообщения не отправлялись посредством заданного числа цепи в течение периода времени (например, в течение определенного количества секунд или минут), то та запись может быть стерта. После чего Алиса может воссоздавать новую цепь, когда она в следующий раз захочет связаться с Эдом.[1144] In some cases, the communication protocol can be optimized by adding chain numbers to the protocol. For example, when Alice provides Bob with the initial packet, Bob can respond with a random number that he chooses to uniquely identify the chain. When Bob sends a smaller packet to Carol, Carol replies to Bob with a random number for the chain. Other members do the same. When Alice wishes to send more messages to Ed in the near future, she can encrypt each message with all the public keys in the path (starting with Ed's key) and send each message to Bob along with the chain number he gave her. Bob can, for example, remember that this chain number is associated with Carol, so he will decrypt each message with his own private key and forward each message to Carol, along with the chain number that Carol gave him. Each participant can keep a list of chain numbers along with whoever immediately precedes and follows them in the path for that chain. In some cases, this information is kept for a limited period of time. If no messages have been sent by a given chain number for a period of time (eg, for a specified number of seconds or minutes), then that entry may be deleted. Alice can then recreate a new circuit the next time she wants to contact Ed.

[1145] В некоторых случаях, когда Эд отвечает Алисе, его ответ может быть зашифрован с помощью открытых ключей {Алисы, Боба, Кэрол, Дэйва} в том порядке. Затем Эд может отправлять тот ответ Дэйву с использованием того же числа цепи, которое Дэйв дал Эду в первый раз. Дэйв расшифровывает ответ, затем отправляет ответ обратно Кэрол, и это продолжается, пока не дойдет обратно до Алисы. В таком случае Алиса может включать замаскированный открытый ключ для нее самой в первоначальное сообщение, так что никто не может прочитать сообщение от Эда Алисе.[1145] In some cases, when Ed responds to Alice, his response can be encrypted using the public keys of {Alice, Bob, Carol, Dave} in that order. Ed can then send that response to Dave using the same chain number that Dave gave Ed the first time. Dave decrypts the answer, then sends the answer back to Carol, and this continues until it gets back to Alice. In such a case, Alice can include a disguised public key for herself in the original message, so that no one can read the message from Ed to Alice.

[1146] В некоторых случаях Бобу, Кэрол и Дэйву могут быть предоставлены компенсация или поощрение за предоставление вышеуказанных услуг Алисе и Эду. Это может быть осуществлено с помощью криптовалюты, причем Алиса платит Бобу сразу, как только она принимает обратно сообщение от Эда. На том этапе Алиса может заплатить Бобу достаточно, чтобы заплатить всем из {Боба, Кэрол, Дэйва}. Боб может затем заплатить Кэрол достаточно для {Кэрол, Дэйва}, и затем Кэрол может заплатить Дэйву. Подобные платежи могут осуществляться при отправке каждого нового сообщения по каналу. В некоторых случаях единая цена может быть установлена глобально, например, на основе голосования за такую цену участников в сообществе или хешграфе. Цена может устанавливаться за каждого участника в пути, причем одна цена за установление цепи, и отдельная цена за каждое сообщение, отправленное по цепи. В других случаях цена может быть вычислена за каждый байт, а не за каждое сообщение. [1146] In some cases, Bob, Carol, and Dave may be compensated or rewarded for providing the above services to Alice and Ed. This can be done with a cryptocurrency, with Alice paying Bob as soon as she receives back a message from Ed. At that point, Alice can pay Bob enough to pay all of {Bob, Carol, Dave}. Bob can then pay Carol enough for {Carol, Dave} and then Carol can pay Dave. Such payments can be made when each new message is sent through the channel. In some cases, a single price can be set globally, for example, based on voting for such a price by participants in a community or a hashgraph. The price can be set for each participant along the way, with one price for establishing the chain, and a separate price for each message sent along the chain. In other cases, the price may be calculated per byte rather than per message.

[1147] В некоторых случаях Боб может периодически платить Кэрол единовременно выплачиваемую сумму, то есть либо платить заранее за сообщения, отправленные вскоре после этого, либо платить за сообщения, отправленные недавно. Таким образом, микроплатежи могут происходить периодически (например, раз в день или раз в неделю), и поэтому запись платежей показывает очень мало относительно того, как трафик протекает через сеть, предотвращая утечки или выведения информации об идентификаторах участников на основе времени, когда участники осуществляют микроплатежи. Подобным образом, сами сообщения могут быть отложены на случайные объемы времени, когда трафика мало, для предотвращения того, чтобы устройства подслушивания не использовали временной анализ для отслеживания сообщений по сети.[1147] In some cases, Bob may periodically pay Carol a lump sum, that is, either pay upfront for messages sent soon after, or pay for messages sent recently. Thus, micropayments can occur periodically (e.g., once a day or once a week), and therefore the record of payments reveals very little about how traffic flows through the network, preventing information about participant IDs from leaking or inferring information based on the time participants make payments. micropayments. Similarly, the messages themselves can be delayed for random amounts of time when there is little traffic to prevent eavesdropping devices from using timing analysis to track messages across the network.

[1148] В некоторых случаях вышеупомянутый протокол связи дает одностороннюю анонимность. Например, Алиса не может выяснить IP-адрес Эда, если только она не вступила в сговор со всеми из {Боба, Кэрол, Дэйва}. В некоторых случаях Эд может избирать или выбирать Боба, Кэрол и Дэйва случайным образом, так что маловероятно, что Алиса угадает элемент пути, избранный Эдом. И наоборот, Эд может выяснить IP-адрес Алисы, например, путем выбора или избирания {Боба, Кэрол, Дэйва} из числа своих собственных объектов взаимодействия, и вместе они могут затем вступить в сговор или поделиться информацией, раскрывая IP Алисы. Однако в некоторых случаях Алиса может маршрутизировать свои сообщения через нескольких участников, которых она сама же и избрала, прежде чем сообщения дойдут до Боба. Эта методика удваивает количество этапов, выполняемых Алисой при создании первоначального пакета, но это гарантирует двустороннюю анонимность. В еще одних случаях односторонняя анонимность может быть применена в противоположном направлении, например, если Алиса знает публичное имя Боба и желает отправить сообщение ему, скрывая при этом свой собственный идентификатор, то она может создавать первоначальный пакет так, чтобы он передавался через нескольких участников по пути к Бобу, а затем цепь заканчивалась на Бобе. Алиса может затем узнать идентификатор Боба (или по меньшей мере IP-адрес Боба), но Боб не узнает, кто такая Алиса. [1148] In some cases, the above communication protocol provides one-way anonymity. For example, Alice can't figure out Ed's IP address unless she colludes with everyone in {Bob, Carol, Dave}. In some cases, Ed may choose or select Bob, Carol, and Dave at random, so it is unlikely that Alice will guess the path element that Ed chose. Conversely, Ed can find out Alice's IP address, for example, by selecting or electing {Bob, Carol, Dave} from among his own interaction objects, and together they can then collude or share information by revealing Alice's IP. However, in some cases, Alice may route her messages through several participants, whom she herself has chosen, before the messages reach Bob. This technique doubles the number of steps Alice goes through when creating the initial package, but it guarantees two-way anonymity. In still other cases, one-way anonymity can be applied in the opposite direction, for example, if Alice knows Bob's public name and wishes to send a message to him while hiding her own identifier, then she can design the initial packet so that it passes through several participants along the way. to Bob, and then the chain ended on Bob. Alice can then find out Bob's ID (or at least Bob's IP address), but Bob doesn't know who Alice is.

[1149] В некоторых случаях, если Алиса создает и/или определяет новую цепь, Алиса может создавать и/или определять свое оригинальное сообщение, содержащее новый симметричный ключ для каждого уровня зашифрованного сообщения. Затем, каждый узел вдоль пути цепи может сохранять тот симметричный ключ вместе с двумя числами цепи (например, числами цепи для узлов, которые непосредственно предшествуют тому узлу и следуют за ним в пути для той цепи). Затем Алиса может шифровать будущие сообщения с помощью симметричных ключей вместо использования открытых ключей. В некоторых случаях это может быть быстрее, а также гарантировать, что множество уровней шифрования не приводят к тому, что будущие сообщения становятся слишком большими. Шифрование с помощью симметричного ключа может быть выполнено таким способом, который не приводит к тому, что размер сообщения существенно увеличивается при шифровании. Факультативно при использовании симметричных ключей Алиса может включать случайное заполнение в самое внутреннее сообщение. Это убирает необходимость в рандомизации каждого уровня шифрования, и сообщение не обязательно увеличивается в размере на каждом уровне. Когда Алиса отправляет сообщение через цепь, сообщение расшифровывается на каждом узле вдоль пути, таким образом, убирая один уровень симметричного шифрования. Когда конечный получатель осуществляет ответ, ответ может быть зашифрован на каждом уровне с помощью надлежащего симметричного ключа, так что Алиса принимает ответ, зашифрованный с помощью всех симметричных ключей.[1149] In some cases, if Alice creates and/or defines a new chain, Alice may create and/or define her original message containing a new symmetric key for each level of the encrypted message. Then, each node along the chain path can store that symmetric key along with two chain numbers (eg, chain numbers for nodes that immediately precede and follow that node in the path for that chain). Alice can then encrypt future messages with symmetric keys instead of using public keys. This can be faster in some cases, and also ensure that multiple layers of encryption don't cause future messages to become too large. Encryption with a symmetric key can be done in a manner that does not cause the message size to increase significantly when encrypted. Optionally, when using symmetric keys, Alice MAY include random padding in the innermost message. This removes the need to randomize each level of encryption, and the message does not necessarily increase in size at each level. When Alice sends a message across the chain, the message is decrypted at each node along the path, thus removing one layer of symmetric encryption. When the final recipient makes a response, the response can be encrypted at each level with the proper symmetric key, so that Alice receives the response encrypted with all symmetric keys.

[1150] Таким образом, обсужденный протокол связи обеспечивает по меньшей мере три режима анонимности: a) односторонняя защита отправителя, b) односторонняя защита получателя и c) двусторонняя защита отправителя и получателя. В некоторых реализациях протокол связи может быть использован для реализации анонимайзера криптовалюты, описанного выше. В некоторых других реализациях протокол связи может быть использован для анонимизирования протокола способа достижения консенсуса хешграфа и/или других подходящих процессов, выполняемых внутри хешграфа.[1150] Thus, the discussed communication protocol provides at least three modes of anonymity: a) one-way sender security, b) one-way receiver security, and c) two-way sender and receiver security. In some implementations, the communication protocol may be used to implement the cryptocurrency anonymizer described above. In some other implementations, the communication protocol may be used to anonymize the hashgraph consensus method protocol and/or other suitable processes performed within the hashgraph.

[1151] Далее следует краткое изложение еще одного примера того, как вышеописанный шифр может быть использован для осуществления анонимной связи. Закрытый ключ представляет собой элемент y случайной группы. Соответствующий открытый ключ представляет собой (a, b) = (g,g^y). Зашифрованное сообщение – (c, d) = (g^x, m*g^{xy}), где x случайным образом избран отправителем, и m представляет собой оригинальное сообщение. Зашифрованное сообщение n = (e, f) зашифровано подобным образом с помощью отличного случайного x. Образован один «кортеж», который содержит открытый ключ и два зашифрованных сообщения m_1 и m_2. Кортеж представляет собой (a, b, c, d, e, f) = (g, g^y, g^x_1, m_1*g^{x_1 y}, g^x_1, m_2*g^{x_1 y}), где отправитель избирает случайные x_1 и x_2. Чтобы замаскировать запись, избирают случайные r_1, r_2 и r_3 и определяют замаскированную запись как (a’, b’, c’, d’, e’, f’) = (a^r_1, b^r_1, c*a^r_2, d*a^r_2, e*a^r_3,f*a^r_3). [1151] The following is a summary of yet another example of how the above cipher can be used to make anonymous communications. The private key is the y element of the random group. The corresponding public key is (a, b) = (g,g^y). The encrypted message is (c, d) = (g^x, m*g^{xy}), where x is randomly chosen by the sender and m is the original message. The encrypted message n = (e, f) is encrypted in a similar way with a distinct random x. One "tuple" is formed, which contains the public key and two encrypted messages m_1 and m_2. The tuple is (a, b, c, d, e, f) = (g, g^y, g^x_1, m_1*g^{x_1 y}, g^x_1, m_2*g^{x_1 y}) , where the sender chooses random x_1 and x_2. To mask an entry, select random r_1, r_2 and r_3 and define the masked entry as (a', b', c', d', e', f') = (a^r_1, b^r_1, c*a^r_2 , d*a^r_2, e*a^r_3, f*a^r_3).

[1152] Узел (вычислительное устройство) Алиса в сети может публиковать «путь», который может быть использован для маршрутизации сообщений на тот узел, не показывая адрес или идентификатор того узла. Путь представляет собой список из n записей (R_1, R_2, ..., R_n). Каждая запись R_i содержит (a_i,b_i), который представляет собой открытый ключ узла в сети, где последний (a_n,b_n) представляет собой открытый ключ того узла. Так что, например, узел (Дэйв) создает и/или определяет путь для маршрутизации сообщений через следующие узлы: Алиса, затем Боб, затем Кэрол, затем Дэйв. В таком примере (a_1,b_1) будет представлять собой открытый ключ для Алисы, и (a_4,b_4) будет представлять собой открытый ключ для Дэйва (поскольку n=4 в этом примере, поскольку имеются четыре узла в пути). Первое сообщение m_1 в каждой записи представляет собой идентификатор следующего узла в пути. Так что (c_1,d_1) представляет собой шифротекст имени (или идентификатора, или псевдонима) для Боба, который может быть использован узлом для выяснения IP-адреса и открытого ключа Боба. Подобным образом, (c_2,d_2) представляет собой идентификатор Кэрол, и (c_3,d_3) представляет собой идентификатор Дэйва. Что касается последнего (c_n,d_n), который представляет собой (c_4,d_4) в этом примере, сообщение представляет собой просто число 1 (или элемент идентификатора для группового оператора алгебраической группы, если это что-то отличное от числа 1). Второй шифротекст в каждом кортеже (e_i,f_i) представляет собой зашифрованную 1 (или элемент идентификатора) для каждой записи в пути.[1152] A node (computing device) Alice in the network can publish a "path" that can be used to route messages to that node without revealing the address or identifier of that node. The path is a list of n entries (R_1, R_2, ..., R_n). Each R_i entry contains (a_i,b_i) which is the public key of a node on the network, where the last (a_n,b_n) is that node's public key. So, for example, a node (Dave) creates and/or defines a path to route messages through the following nodes: Alice, then Bob, then Carol, then Dave. In this example, (a_1,b_1) would be the public key for Alice, and (a_4,b_4) would be the public key for Dave (since n=4 in this example, since there are four nodes in the path). The first m_1 message in each entry is the ID of the next node in the path. So (c_1,d_1) is the ciphertext of a name (or identifier, or alias) for Bob, which can be used by a host to figure out Bob's IP address and public key. Similarly, (c_2,d_2) is Carol's ID, and (c_3,d_3) is Dave's ID. As for the last (c_n,d_n), which is (c_4,d_4) in this example, the message is simply the number 1 (or the identifier element for the group operator of the algebraic group if it is something other than the number 1). The second ciphertext in each (e_i,f_i) tuple is the encrypted 1 (or identifier element) for each entry in the path.

[1153] После создания и/или определения Дэйвом этого пути они маскирует путь путем маскировки каждой записи, а затем публикует путь, связанный со строго анонимным именем анонимный Дэйв (AnonymousDave). Ни один человек (или вычислительное устройство в сети) не сможет узнать, что анонимный Дэйв на самом деле является Дэйвом. А также не сможет выяснить IP-адрес анонимного Дэйва. При этом остальные могут использовать путь для отправки Дэйву сообщений. Опубликованный путь также связан с идентификатором первого узла на пути. Так что в этом примере опубликованный путь связан с Алисой, так что другим узлам ясно, что первым узлом на пути будет узел Алисы, и идентификатор Алисы не будет скрыт или анонимизирован.[1153] Once Dave has created and/or defined this path, they mask the path by masking each entry and then publish the path associated with the strictly anonymous name AnonymousDave. No person (or computing device on the network) will be able to know that anonymous Dave is actually Dave. Nor will it be able to find out the anonymous Dave's IP address. Others can use the path to send messages to Dave. The published path is also associated with the ID of the first node in the path. So in this example, the published path is associated with Alice, so it is clear to other nodes that the first node in the path will be Alice's node, and Alice's identity will not be hidden or anonymized.

[1154] Затем Эд отправляет анонимному Дэйву сообщение следующим способом. Извлекает и/или идентифицирует путь, который был опубликован для анонимного Дэйва (или один из путей, если было опубликовано несколько). Маскирует записи в пути. Создает и/или определяет список случайных масок (k_1, ... k_n). Меняет каждый f_i на k_i*f_i. Для каждого k_i вычисляет инверсию относительно умножения k'_i, так что k_i * k'_i представляет собой 1 (или представляет собой элемент идентификатора группы, если это не 1). Меняет каждый d_i на d_i*(k'_1 * k'_2 * ... * k'_i). Эд зашифровывает свое сообщение с помощью открытого ключа (a_n,b_n) для определения шифротекста, затем отправляет как шифротекст, так и модифицированный путь на первый узел на пути, то есть Алисе. [1154] Ed then sends a message to anonymous Dave in the following way. Retrieves and/or identifies the path that was posted to anonymous Dave (or one of the paths if more than one was posted). Masks entries in the path. Creates and/or defines a list of random masks (k_1, ... k_n). Changes each f_i to k_i*f_i. For each k_i computes the inverse of k'_i multiplication such that k_i * k'_i is 1 (or is the group ID element if it is not 1). Changes each d_i to d_i*(k'_1 * k'_2 * ... * k'_i). Ed encrypts his message with the public key (a_n,b_n) to determine the ciphertext, then sends both the ciphertext and the modified path to the first node on the path, i.e. Alice.

[1155] Алиса затем делает следующее. Расшифровывает (e_1,f_1) для получения k_1. Меняет каждый d_i на d_i*k_1. Расшифровывает (c_1,d_1) для нахождения и/или идентификации идентификатора следующего узла на пути, то есть Боба. Убирает первый кортеж с пути, так что теперь запись 2 будет называться запись 1, запись 3 будет называться 2 и так далее. Маскирует зашифрованное сообщение. Отправляет замаскированное зашифрованное сообщение и свой модифицированный путь Бобу. Если зашифрованное сообщение зашифровано с помощью стандартного гибридного подхода (шифрования сообщения с помощью случайного ключа, который сам зашифрован с помощью асимметричного шифра), то сообщение «маскируют» путем повторного шифрования сообщения для того же открытого ключа. В этом случае открытый ключ будет передаваться вместе с сообщением, и открытый ключ будет маскироваться на каждом этапе.[1155] Alice then does the following. Decodes (e_1,f_1) to get k_1. Changes every d_i to d_i*k_1. Decodes (c_1,d_1) to find and/or identify the ID of the next node on the path, i.e. Bob. Removes the first tuple from the path, so now entry 2 will be called entry 1, entry 3 will be called 2, and so on. Masks an encrypted message. Sends a masked encrypted message and its modified path to Bob. If the encrypted message is encrypted using the standard hybrid approach (encrypting the message with a random key that is itself encrypted with an asymmetric cipher), then the message is "masked" by re-encrypting the message for the same public key. In this case, the public key will be transmitted along with the message, and the public key will be masked at each step.

[1156] Боб делает то же самое, передавая еще более короткий модифицированный путь Кэрол. Которая делает то же самое и передает его Дэйву. Дэйв затем расшифровывает сообщение с помощью своего закрытого ключа и может прочитать сообщение. Если Эд желает осуществить ответ, он может использовать этот самый подход для создания анонимного пути для самого себя и может включать указание анонимного пути в свое сообщение Дэйву. [1156] Bob does the same, passing an even shorter modified path to Carol. Which does the same and hands it over to Dave. Dave then decrypts the message with his private key and is able to read the message. If Ed wishes to implement a response, he may use this same approach to create an anonymous path for himself, and may include an anonymous path in his message to Dave.

[1157] В вышеизложенном примере анонимная связь может быть осуществлена более эффективно путем использования чисел цепи следующим способом. Например, Эд отправляет свой оригинальный модифицированный путь Алисе без включения какого-либо шифротекста в виде сообщения. Алиса генерирует случайное «число цепи» и возвращает его Эду. Когда она передает модифицированный путь Бобу, он генерирует число цепи и возвращает его Алисе. Алиса хранит те два числа как связанную пару в течение короткого периода времени (например, минут или часов). Во время того периода Эд может отправлять сообщения Дэйву путем их шифрования и их отправки Алисе вместе с числом цепи (и без отправки модифицированного пути). Сообщение затем следует по пути, причем его снова маскируют на каждом этапе, пока оно не дойдет до Дэйва. Первое сообщение должно включать открытый ключ для Эда. Дэйв может затем ответить с помощью сообщения, зашифрованного с помощью того ключа, вместе с числом цепи, которое он принял от Кэрол. Сообщение затем передается обратно по цепи, причем его маскируют на каждом этапе, пока Эд не примет сообщение.[1157] In the above example, anonymous communication can be performed more efficiently by using chain numbers in the following manner. For example, Ed sends his original modified path to Alice without including any ciphertext as a message. Alice generates a random "chain number" and returns it to Ed. When she passes the modified path to Bob, he generates a chain number and returns it to Alice. Alice stores those two numbers as a linked pair for a short period of time (eg minutes or hours). During that period Ed can send messages to Dave by encrypting them and sending them to Alice along with the chain number (and without sending the modified path). The message then follows the path, being masked again at each step until it reaches Dave. The first message should include Ed's public key. Dave can then reply with a message encrypted with that key, along with the chain number he received from Carol. The message is then sent back down the chain, masked at each step until Ed accepts the message.

[1158] В некоторых юрисдикциях правительство может желать обеспечить через законодательство возможность мониторинга потоков валюты для предотвращения таких преступлений, как отмывание денег или уклонение от уплаты налогов, при этом позволяя гражданам быть анонимными от слежки (например, со стороны их соседей, преступников, правительств иностранных государств и т. д.). В некоторых случаях вышеописанные способ и система анонимности могут поддерживать такое законодательство. В таких случаях правительство может создать или одобрить определенный центр сертификации (CA) или несколько CA с целью создания и/или определения зашифрованных сертификатов, которые подтверждают, что кошелек связан с определенным человеком. Шифрование может быть таким, что только правительство может расшифровать его (возможно только по постановлению суда). Если Алиса создает и/или определяет кошелек, она может факультативно иметь такой сертификат, прикрепленный к кошельку, что означает, что ее соседи не могут видеть, что кошелек принадлежит Алисе, но правительство может расшифровать сертификат и идентифицировать Алису как владельца кошелька. Правительство может настоять на том, чтобы работодатели на территории своей страны могли только вносить деньги в кошельки, которые имеют такой сертификат, и чтобы магазины в этой стране принимали платежи с кошельков с таким сертификатом. Затем Алиса может выполнять вышеуказанный протокол многократно с целью создания и/или определения цепочки кошельков и получать надлежащий сертификат для первого и последнего кошельков в цепочке. [1158] In some jurisdictions, the government may wish to provide through legislation the ability to monitor currency flows to prevent crimes such as money laundering or tax evasion, while allowing citizens to remain anonymous from surveillance (e.g., by their neighbors, criminals, foreign governments). states, etc.). In some cases, the anonymity method and system described above may support such legislation. In such cases, the government may create or approve a specific certificate authority (CA) or multiple CAs for the purpose of creating and/or defining encrypted certificates that prove that the wallet is associated with a specific person. The encryption can be such that only the government can decrypt it (possible only by court order). If Alice creates and/or defines a wallet, she can optionally have such a certificate attached to the wallet, meaning that her neighbors cannot see that the wallet belongs to Alice, but the government can decrypt the certificate and identify Alice as the owner of the wallet. The government can insist that employers in their own country can only deposit money into wallets that have such a certificate, and that stores in that country accept payments from wallets with such a certificate. Alice can then execute the above protocol multiple times to create and/or define a chain of wallets and obtain the proper certificate for the first and last wallets in the chain.

[1159] Хоть выше и описано, что структура данных каждого кошелька имеет одну пару открытого-закрытого ключей, в других случаях структура данных кошелька может содержать две пары открытого-закрытого ключей: одну для подписания и одну для шифрования. В таком случае вышеописанные способы могут быть изменены для использования подписывающего ключа для подписания и ключа шифрования для шифрования.[1159] Although it is described above that each wallet data structure has one public-private key pair, in other cases, the wallet data structure may contain two public-private key pairs: one for signing and one for encryption. In such a case, the methods described above can be modified to use a signing key for signing and an encryption key for encryption.

[1160] Хоть выше и описано, что используют хешграф и хранят транзакции и осуществляют обмен ими в событиях, в других случаях для реализации вышеописанных способов с целью обеспечения защищенных и анонимных транзакций может использоваться любая другая подходящая технология распределенной базы данных и/или распределенного реестра. Например, в других случаях для реализации таких способов могут быть использованы такие технологии, как блокчейн, PAXOS, RAFT, Биткойн, Эфириум и/или т. п. В некоторых случаях защищенная метка времени может быть добавлена в эти технологии (например, надстроена на них) для реализации вышеописанных способов с целью обеспечения защищенных и анонимных транзакций. В других случаях, как описано выше, не используют никакой метки времени.[1160] Although it is described above that a hashgraph is used and transactions are stored and exchanged in events, in other cases, any other suitable distributed database and / or distributed registry technology can be used to implement the above methods in order to provide secure and anonymous transactions. For example, in other cases, technologies such as blockchain, PAXOS, RAFT, Bitcoin, Ethereum, and/or the like can be used to implement such methods. In some cases, a secure timestamp can be added to these technologies (for example, built on them ) to implement the methods described above in order to provide secure and anonymous transactions. In other cases, as described above, no timestamp is used.

[1161] Хоть выше и описано, что осуществляется реализация между двумя разными экземплярами распределенной базы данных, в других случаях способ анонимизации может быть реализован более чем двумя экземплярами распределенной базы данных. Например, в других случаях транзакция «TRANSFER_DOUBLE» может поддерживать дополнительные количества транзакций. Например, транзакция TRANSFER_TRIPLE может быть определена с возможностью поддержки передачи данных между тремя разными структурами данных кошелька.[1161] Although the implementation described above is between two different distributed database instances, in other cases, the anonymization method may be implemented by more than two distributed database instances. For example, in other cases, the transaction "TRANSFER_DOUBLE" may support additional numbers of transactions. For example, a TRANSFER_TRIPLE transaction could be defined to support transferring data between three different wallet data structures.

[1162] Хоть выше и описано, что реализуют криптовалюту, в других случаях могут быть анонимизированы транзакции в любом другом типе распределенной базы данных. Например, могут быть анонимизированы запись об обмене товарами, установление личности физического лица, разрешение на использование конкретного ресурса и/или т. п. В таких случаях это может повысить безопасность транзакции в распределенной базе данных. [1162] While it is described above that they implement a cryptocurrency, in other cases, transactions in any other type of distributed database can be anonymized. For example, a record of an exchange of goods, identification of an individual, permission to use a particular resource, and/or the like can be anonymized. In such cases, this can increase the security of a transaction in a distributed database.

[1163] На фиг. 7 проиллюстрирована функциональная схема потока сигналов двух вычислительных устройств, синхронизирующих события, согласно варианту осуществления. В частности, в некоторых вариантах осуществления экземпляры 703 и 803 распределенной базы данных могут обмениваться событиями для достижения конвергенции. Вычислительное устройство 700 может выбирать синхронизацию с вычислительным устройством 800 случайным образом, на основе взаимосвязи с вычислительным устройством 700, на основе близости к вычислительному устройству 700, на основе упорядоченного списка, связанного с вычислительным устройством 700, и/или т. п. В некоторых вариантах осуществления, поскольку вычислительное устройство 800 может быть избрано вычислительным устройством 700 из набора вычислительных устройств, относящихся к системе распределенной базы данных, вычислительное устройство 700 может выбирать вычислительное устройство 800 несколько раз подряд или может некоторое время не выбирать вычислительное устройство 800. В других вариантах осуществления указание о ранее выбранных вычислительных устройствах может быть сохранено на вычислительном устройстве 700. В таких вариантах осуществления вычислительное устройство 700 может находиться в ожидании, пока не будет осуществлено предопределенное количество выборов, перед тем, как получить возможность снова выбирать вычислительное устройство 800. Как поясняется выше, экземпляры 703 и 803 распределенной базы данных могут быть реализованы в памяти вычислительного устройства 700 и памяти вычислительного устройства 800 соответственно. [1163] FIG. 7 illustrates a signal flow diagram of two computing devices synchronizing events according to an embodiment. In particular, in some embodiments, distributed database instances 703 and 803 may exchange events to achieve convergence. Computing device 700 may choose to synchronize with computing device 800 randomly, based on relationship with computing device 700, based on proximity to computing device 700, based on an ordered list associated with computing device 700, and/or the like. In some embodiments, implementation, since computing device 800 may be selected by computing device 700 from a set of computing devices associated with a distributed database system, computing device 700 may select computing device 800 multiple times in a row, or may not select computing device 800 for a while. previously selected computing devices may be stored on computing device 700. In such embodiments, computing device 700 may wait until a predetermined number of selections have been made before be able to select computing device 800 again. As explained above, distributed database instances 703 and 803 may be implemented in computing device 700 memory and computing device 800 memory, respectively.

[1164] В некоторых реализациях вычислительное устройство 700 может иметь множество потоков, работающих одновременно, причем каждый поток синхронизируется с другим участником. Соответственно, вычислительное устройство 700 может синхронизироваться с другими вычислительными устройствами (не показанными на фиг. 7) в дополнение к вычислительному устройству 800. В некоторых случаях вычислительное устройство 700 может устанавливать соединения для каждого потока на начальном этапе или в первый раз, а затем поддерживать каждое соединение в действующем состоянии или открытым путем периодической отправки сообщения с тактовым импульсом (например, отправки тактового импульса дважды в секунду). Таким образом, в некоторых случаях вычислительное устройство 700 может предотвращать задержку синхронизации или отлагательства, иным образом вызванные протоколами безопасности уровня передачи (TLS) (например, протоколом записи и протоколом квитирования), каждый раз, когда вычислительное устройство устанавливает соединение с другим участником или вычислительным устройством для синхронизации. [1164] In some implementations, computing device 700 may have multiple threads running concurrently, with each thread synchronizing with a different member. Accordingly, computing device 700 may synchronize with other computing devices (not shown in FIG. 7) in addition to computing device 800. In some cases, computing device 700 may establish connections for each thread initially or for the first time and then maintain each the connection is live or open by periodically sending a heartbeat message (for example, sending a heartbeat twice per second). Thus, in some cases, computing device 700 can prevent synchronization delays or delays otherwise caused by Transport Layer Security (TLS) protocols (e.g., write protocol and handshake protocol) each time the computing device establishes a connection with another participant or computing device. for synchronization.

[1165] В некоторых реализациях вычислительное устройство 700 может управлять установлением потоковых соединений с другими участниками или вычислительными устройствами как пулом соединений и/или соединениями с группой вычислительных устройств (например, соединениями протокола управления передачей / Интернет-протокола). В таком случае вычислительное устройство 700 приспособлено так, чтобы не превосходить лимит (порог верхнего лимита) открытых соединений с другими участниками или вычислительными устройствами. В некоторых случаях лимит соединений может быть приспособлен на основе физических ресурсов вычислительного устройства 700, например, оперативного запоминающего устройства, используемого для каждого соединения, или производительности центрального процессорного устройства. Например, вычислительное устройство 700 может быть приспособлено для одновременного поддержания открытых соединений с постоянным количеством V участников или вычислительных устройств, так что его память и ресурсы обработки не используются с максимальной производительностью и/или приводят к неоптимальной эффективности. Другими словами, вычислительное устройство 700 единовременно должно поддерживать открытые соединения не с каждым участником хешграфа, а вместо этого с V участниками или вычислительными устройствами. Соответственно, в некоторых случаях при выборе того, с кем следует синхронизироваться, вычислительное устройство 700 выбирает из случайных участников или вычислительных устройств (или группы участников или вычислительных устройств), с которым оно имеет открытые соединения, установленные в его пуле соединений. [1165] In some implementations, computing device 700 may manage the establishment of streaming connections to other participants or computing devices as a connection pool and/or connections to a group of computing devices (eg, Transmission Control Protocol/Internet Protocol connections). In such a case, computing device 700 is adapted not to exceed the limit (upper limit threshold) of open connections with other participants or computing devices. In some cases, the connection limit may be adjusted based on the physical resources of the computing device 700, such as the RAM used for each connection or the performance of the CPU. For example, computing device 700 may be adapted to simultaneously maintain open connections with a constant number V of participants or computing devices such that its memory and processing resources are not utilized at their maximum performance and/or result in sub-optimal efficiency. In other words, computing device 700 must maintain open connections at a time not with every participant in the hashgraph, but instead with V participants or computing devices. Accordingly, in some cases, when choosing with whom to synchronize, computing device 700 selects from random participants or computing devices (or group of participants or computing devices) with which it has open connections established in its connection pool.

[1166] В некоторых реализациях вычислительное устройство 700 может быть приспособлено для лимитирования или ограничения размера пула соединений согласно пороговому значению нижнего лимита и пороговому значению верхнего лимита. В таком случае вычислительное устройство 700 может случайным образом выбирать участника или вычислительное устройство для синхронизации из вычислительных устройств, имеющих открытое соединение с вычислительным устройством 700. Когда пул соединений больше, чем пороговое значение верхнего лимита, и/или когда количество вычислительных устройств в группе участников и/или вычислительных устройств достигает порогового значения верхнего лимита, после синхронизации вычислительное устройство может закрывать и/или прекращать такое соединение и убирать соединение из пула соединений и/или группы участников или вычислительных устройств. Аналогичным образом, когда пул соединений вычислительного устройства 700 находится ниже порогового значения нижнего лимита и/или когда количество вычислительных устройств в группе участников и/или вычислительных устройств достигает порогового значения нижнего лимита, вычислительное устройство исполняет один или более потоков для установления новых соединений с другими участниками или вычислительными устройствами и добавляет эти новые соединения в пул соединений и/или группу участников или вычислительных устройств. Если пул соединений меньше порогового значения верхнего лимита, но больше порогового значения нижнего лимита, вычислительное устройство 700 может поддерживать текущий пул соединений и/или группу участников или вычислительных устройств. В некоторых случаях определенная часть вызывающих потоков может быть вынуждена устанавливать новые соединения только с участниками или вычислительными устройствами, которые недавно успешно установили соединения. Остальные вызывающие потоки могут случайным образом вызывать других участников из набора из всех участников, даже тех, с которыми вычислительное устройство 700 не устанавливало недавно соединение.[1166] In some implementations, computing device 700 may be adapted to limit or limit the size of a connection pool according to a low limit threshold and a high limit threshold. In such a case, computing device 700 may randomly select a member or computing device to synchronize from among computing devices that have an open connection to computing device 700. When the connection pool is greater than an upper limit threshold and/or when the number of computing devices in a member group and /or the computing device reaches the upper limit threshold, after synchronization the computing device can close and/or terminate such a connection and remove the connection from the connection pool and/or group of participants or computing devices. Similarly, when the connection pool of computing device 700 is below the low limit threshold and/or when the number of computing devices in a group of members and/or computing devices reaches the low limit threshold, the computing device executes one or more threads to establish new connections with other members. or computing devices and adds these new connections to the connection pool and/or group of participants or computing devices. If the connection pool is less than the high limit threshold but greater than the low limit threshold, computing device 700 may maintain the current connection pool and/or group of members or computing devices. In some cases, a certain subset of calling threads may be forced to establish new connections only with participants or computing devices that have recently successfully established connections. The remaining calling threads may randomly call other participants from the set of all participants, even those with which the computing device 700 has not recently established a connection.

[1167] В некоторых реализациях один хешграф может быть использован для достижения порядка консенсуса для набора транзакций. В случае очень больших систем может быть реализовано сегментирование или горизонтальное разделение хешграфа. Например, в очень большой многопользовательской онлайн-игре (MMO) каждый географический регион виртуального мира может становиться одним сегментом. В таком случае каждый сегмент может иметь свой собственный хешграф, который управляет упорядочиванием транзакций, которые происходят в том сегменте. Каждое вычислительное устройство участника может затем сохранять несколько сегментов и сохранять хешграф, связанный с каждым из сохраненных сегментов, и участвовать в нем.[1167] In some implementations, a single hashgraph may be used to reach a consensus order for a set of transactions. In the case of very large systems, sharding or horizontal partitioning of the hashgraph can be implemented. For example, in a very large multiplayer online game (MMO), each geographic region of the virtual world may become one segment. In such a case, each shard can have its own hashgraph that governs the ordering of transactions that occur in that shard. Each member computing device may then store multiple shards and store and participate in a hashgraph associated with each of the stored shards.

[1168] В некоторых случаях синхронизация между сегментами может быть достигнута за счет того, что участники в сегменте достигают консенсуса относительно порядка транзакций, связанных с тем сегментом. Те транзакции могут провоцировать создание сообщения, обновляющего состояние сегмента, которое может быть подписано участниками первого сегмента. Подписанное сообщение может быть отправлено во второй сегмент для обновления участников второго сегмента до состояния первого сегмента. Например, активности в первом сегменте (например, для одного региона) могут провоцировать создание сообщения для второго сегмента, который управляет криптовалютой, отдавая инструкцию второму сегменту на перевод криптовалюты между двумя специфическими кошельками. В таком случае сообщение может быть одобрено с помощью подписей от более чем порогового числа (например, 2/3) участников первого сегмента (например, в адресной книге со списком участников первого сегмента). Кроме того, сообщение может содержать саму адресную книгу и может быть одобрено с помощью подписи от более чем порогового числа (например, 2/3) участников в более ранней версии адресной книги. Более ранняя версия адресной книги может быть одобрена с помощью подписей из более ранней версии и так далее обратно к оригинальной адресной книге для того хешграфа. Соответственно, исходящее сообщение из одного сегмента в другой может представлять консенсус среди участников сегмента, создающих исходящее сообщение.[1168] In some cases, synchronization between shards can be achieved by having participants in a shard reach a consensus on the order of transactions associated with that shard. Those transactions can trigger the creation of a message that updates the state of the shard, which can be signed by the members of the first shard. The signed message may be sent to the second segment to update the members of the second segment to the state of the first segment. For example, activities in the first segment (for example, for one region) can provoke the creation of a message for the second segment, which controls the cryptocurrency, instructing the second segment to transfer cryptocurrency between two specific wallets. In such a case, the message may be approved with signatures from more than a threshold number (eg, 2/3) of the first shard members (eg, in an address book with a list of first shard members). In addition, the message may contain the address book itself and may be approved with a signature from more than a threshold number (eg, 2/3) of participants in an earlier version of the address book. An earlier version of the address book can be validated using the signatures from the earlier version and so on back to the original address book for that hashgraph. Accordingly, an outgoing message from one segment to another may represent a consensus among the segment members that create the outgoing message.

[1169] На фиг. 3–6 проиллюстрированы примеры хешграфа согласно варианту осуществления. Имеется пять участников, каждый из которых представлен темной вертикальной линией. Каждый круг представляет событие. Две нисходящие линии от события представляют хеши двух предыдущих событий. Каждое событие в этом примере имеет две нисходящие линии (одну темную линию к тому же участнику и одну светлую линию к другому участнику), за исключением первого события каждого участника. Время течет вверх. На фиг. 3–6 вычислительные устройства распределенной базы данных обозначены как Алиса, Боб, Кэрол, Дэйв и Эд. Следует понимать, что такие обозначения относятся к вычислительным устройствам, которые конструктивно и функционально подобны вычислительным устройствам 110, 120, 130 и 140, показанным и описанным в отношении фиг. 1. [1169] FIG. 3-6 illustrate examples of a hashgraph according to an embodiment. There are five participants, each represented by a dark vertical line. Each circle represents an event. The two descending lines from the event represent the hashes of the previous two events. Each event in this example has two descending lines (one dark line to the same participant and one light line to the other participant), except for the first event of each participant. Time flows upward. In FIG. 3-6, the distributed database computing devices are labeled Alice, Bob, Carol, Dave, and Ed. It should be understood that such designations refer to computing devices that are structurally and functionally similar to computing devices 110, 120, 130, and 140 shown and described with respect to FIG. one.

[1170] Примерная система 1: если вычислительное устройство 700 называется Алиса, и вычислительное устройство 800 называется Боб, то синхронизация между ними может быть выполнена так, как проиллюстрировано на фиг. 7. Синхронизация между Алисой и Бобом может быть выполнена следующим образом: [1170] Exemplary System 1: If computing device 700 is named Alice and computing device 800 is named Bob, then synchronization between them can be performed as illustrated in FIG. 7. Synchronization between Alice and Bob can be done as follows:

[1171] - Алиса отправляет Бобу события, сохраненные в распределенной базе 703 данных.[1171] - Alice sends events stored in the distributed database 703 to Bob.

[1172] - Боб создает и/или определяет новое событие, которое содержит:[1172] - Bob creates and/or defines a new event that contains:

[1173] -- хеш последнего события, которое создал и/или определил Боб;[1173] -- hash of the last event created and/or defined by Bob;

[1174] -- хеш последнего события, которое создала и/или определила Алиса;[1174] -- hash of the last event created and/or defined by Alice;

[1175] -- цифровую подпись вышеуказанного, поставленную Бобом.[1175] is Bob's digital signature of the above.

[1176] - Боб отправляет Алисе события, сохраненные в распределенной базе 803 данных.[1176] - Bob sends the events stored in the distributed database 803 to Alice.

[1177] - Алиса создает и/или определяет новое событие.[1177] - Alice creates and/or defines a new event.

[1178] - Алиса отправляет Бобу то событие.[1178] - Alice sends that event to Bob.

[1179] – Алиса вычисляет общий порядок для событий как функцию хешграфа.[1179] - Alice calculates the overall order for events as a hashgraph function.

[1180] – Боб вычисляет общий порядок для событий как функцию хешграфа.[1180] - Bob calculates the overall order for events as a hashgraph function.

[1181] В любой заданный момент времени участник может сохранить принятые на данный момент события вместе с идентификатором, связанным с вычислительным устройством и/или экземпляром распределенной базы данных, которые создали и/или определили каждое событие. Каждое событие содержит хеши двух более ранних событий, за исключением первоначального события (которое не имеет родительских хешей) и первого события для каждого нового участника (которое имеет один хеш события-родителя, представляющий событие существующего участника, который пригласил их присоединиться). Для представления этого набора событий может быть нарисована схема. На ней могут быть показаны вертикальная линия для каждого участника и точка на той линии для каждого события, созданного и/или определенного тем участником. Диагональная линия нарисована между двумя точками в каждом случае, когда событие (расположенная выше точка) содержит хеш более раннего события (расположенная ниже точка). Можно сказать, что событие привязано к другому событию, если то событие может ссылаться на другое событие посредством хеша того события (либо непосредственно, либо через промежуточные события).[1181] At any given time, a participant may store the currently received events along with an identifier associated with the computing device and/or distributed database instance that created and/or defined each event. Each event contains the hashes of the two earlier events, except for the original event (which has no parent hashes) and the first event for each new member (which has one parent event hash representing the event of the existing member who invited them to join). A diagram can be drawn to represent this set of events. It may show a vertical line for each participant, and a dot on that line for each event created and/or defined by that participant. A diagonal line is drawn between two dots whenever an event (the dot above) contains the hash of an earlier event (the dot below). An event can be said to be linked to another event if that event can refer to another event by means of that event's hash (either directly or through intermediate events).

[1182] Например, на фиг. 3 проиллюстрирован пример хешграфа 600. Событие 602 создается и/или определяется Бобом в результате синхронизации с Кэрол и после нее. Событие 602 содержит хеш события 604 (предыдущего события, созданного и/или определенного Бобом) и хеш события 606 (предыдущего события, созданного и/или определенного Кэрол). В некоторых вариантах осуществления, например, хеш события 604, включенный в событие 602, содержит указатель на его непосредственные события-предки, события 608 и 610. По существу, Боб может использовать событие 602 для ссылки на события 608 и 610 и перестраивания хешграфа с использованием указателей на предыдущие события. В некоторых случаях можно сказать, что событие 602 привязано к другим событиям в хешграфе 600, поскольку событие 602 может ссылаться на каждое из событий в хешграфе 600 посредством более ранних событий-предков. Например, событие 602 привязано к событию 608 посредством события 604. В качестве другого примера, событие 602 привязано к событию 616 посредством событий 606 и события 612.[1182] For example, in FIG. 3 illustrates an example hashgraph 600. Event 602 is generated and/or determined by Bob as a result of synchronization with and after Carol. Event 602 contains a hash of event 604 (the previous event created and/or defined by Bob) and a hash of event 606 (the previous event created and/or defined by Carol). In some embodiments, for example, the hash of event 604 included in event 602 contains a pointer to its immediate parent events, events 608 and 610. As such, Bob can use event 602 to refer to events 608 and 610 and rebuild the hashgraph using pointers to previous events. In some cases, event 602 can be said to be linked to other events in hashgraph 600 because event 602 can refer to each of the events in hashgraph 600 through earlier ancestor events. For example, event 602 is linked to event 608 via event 604. As another example, event 602 is linked to event 616 via events 606 and event 612.

[1183] Примерная система 2: система на основе примерной системы 1, при этом событие также содержит данные «полезной нагрузки» транзакций или другую информацию для записи. Такие данные полезной нагрузки могут быть использованы для обновления событий с помощью любых транзакций и/или информации, которые произошли и/или были определены начиная с непосредственного предыдущего события вычислительного устройства. Например, событие 602 может содержать любые транзакции, выполненные Бобом, начиная с момента создания и/или определения события 604. Таким образом, во время синхронизации события 602 с другими вычислительными устройствами Боб может делиться этой информацией. Соответственно, транзакции, выполняемые Бобом, могут быть связаны с событием и предоставлены другим участникам с помощью событий.[1183] Exemplary system 2: A system based on exemplary system 1, wherein the event also contains transaction payload data or other information to record. Such payload data may be used to update events with any transactions and/or information that have occurred and/or have been determined since the immediate previous event of the computing device. For example, event 602 may contain any transactions performed by Bob since event 604 was created and/or defined. Thus, while event 602 is synchronizing with other computing devices, Bob may share this information. Accordingly, transactions performed by Bob can be associated with an event and provided to other participants using events.

[1184] Примерная система 3: система на основе примерной системы 1, при этом событие также содержит текущие время и/или дату, полезные для отладки, диагностики и/или других целей. Время и/или дата могут быть локальными временем и/или датой, фиксирующими, когда вычислительное устройство (например, Боб) создает и/или определяет событие. В таких вариантах осуществления такие локальные время и/или дата не синхронизируются с остальными устройствами. В других вариантах осуществления время и/или дата могут быть синхронизированы на всех устройствах (например, при обмене событиями). В еще других вариантах осуществления для определения времени и/или даты может быть использован глобальный таймер.[1184] Exemplary System 3: A system based on Exemplary System 1, wherein the event also contains a current time and/or date useful for debugging, diagnostics, and/or other purposes. The time and/or date may be a local time and/or date indicating when the computing device (eg, Bob) creates and/or determines the event. In such embodiments, such local time and/or date is not synchronized with other devices. In other embodiments, the implementation of the time and/or date can be synchronized on all devices (for example, when exchanging events). In yet other embodiments, a global timer may be used to determine the time and/or date.

[1185] Примерная система 4: система на основе примерной системы 1, в которой Алиса не отправляет Бобу ни события, созданные и/или определенные Бобом, ни события-предки такого события. Событие x является предком события y, если y содержит хеш x или y содержит хеш события, которое является предком x. Подобным образом, в таких вариантах осуществления Боб отправляет Алисе события, еще не сохраненные Алисой, и не отправляет события, уже сохраненные Алисой.[1185] Exemplary System 4: A system based on Exemplary System 1, in which Alice does not send Bob any events created and/or defined by Bob, nor parent events of such an event. An event x is an ancestor of an event y if y contains the hash of x or y contains the hash of an event that is an ancestor of x. Similarly, in such embodiments, Bob sends events to Alice not yet stored by Alice, and does not send events already stored by Alice.

[1186] Например, на фиг. 4 проиллюстрирован примерный хешграфа 620, иллюстрирующий события-предки (круги с точками) и события-потомки (круги с полосками) события 622 (черный круг). Линии устанавливают частичный порядок событий, в котором предки идут до события в виде черного круга, и потомки идут после события в виде черного круга. Частичный порядок не указывает, идут ли события в виде белых кругов до или после события в виде черного круга, так что для определения их последовательности используется общий порядок. В качестве другого примера, на фиг. 5 проиллюстрирован примерный хешграф, иллюстрирующий одно конкретное событие (закрашенный круг) и первый момент времени, в который каждый участник принимает указание о том событии (круги с полосками). Когда Кэрол синхронизируется с Дэйвом для создания и/или определения события 624, Дэйв не отправляет Кэрол события-предки события 622, поскольку Кэрол уже осведомлена о таких событиях и приняла их. Вместо этого Дэйв отправляет Кэрол события, которые Кэрол все еще должна принять и/или сохранить в экземпляре распределенной базы данных Кэрол. В некоторых вариантах осуществления Дэйв может идентифицировать, какие события следует отправлять Кэрол, на основе того, что хешграф Дэйва показывает о том, какие события Кэрол приняла ранее. Событие 622 является предком события 626. Следовательно, на момент события 626 Дэйв уже принял событие 622. На фиг. 4 показано, что Дэйв принял событие 622 от Эда, который принял событие 622 от Боба, который принял событие 622 от Кэрол. Кроме того, на момент события 624 событие 622 является последним событием, принятым Дэйвом, которое было создано и/или определено Кэрол. Следовательно, Дэйв может отправлять Кэрол события, которые Дэйв сохранил, отличающиеся от события 622 и его предков. Дополнительно после приема события 626 от Дэйва Кэрол может перестраивать хешграф на основе указателей в событиях, сохраненных в экземпляре распределенной базы данных Кэрол. В других вариантах осуществления Дэйв может идентифицировать, какие события следует отправлять Кэрол, на основе отправки Кэрол события 622 Дэйву (не показано на фиг. 4) и идентификации с использованием события 622 (и ссылок в нем) Дэйвом, чтобы идентифицировать события, которые Кэрол уже приняла. [1186] For example, in FIG. 4 illustrates an exemplary hashgraph 620 illustrating ancestor events (dotted circles) and descendant events (circles with stripes) of event 622 (black circle). The lines establish a partial order of events in which ancestors come before the black circle event and descendants come after the black circle event. The partial order does not indicate whether the white circle events come before or after the black circle event, so the overall order is used to determine their sequence. As another example, in FIG. 5 illustrates an exemplary hashgraph illustrating one particular event (solid circle) and the first point in time at which each participant receives an indication of that event (barred circles). When Carol synchronizes with Dave to create and/or define an event 624, Dave does not send event 622 ancestors to Carol, as Carol is already aware of and accepted such events. Instead, Dave sends events to Carol, which Carol still needs to receive and/or store in Carol's distributed database instance. In some embodiments, Dave may identify which events to send to Carol based on what Dave's hashgraph indicates about which events Carol has previously received. Event 622 is an ancestor of event 626. Therefore, at the time of event 626, Dave has already received event 622. In FIG. Figure 4 shows that Dave received event 622 from Ed, who received event 622 from Bob, who received event 622 from Carol. Also, at the time of event 624, event 622 is the last event received by Dave that was created and/or defined by Carol. Therefore, Dave can send Carol events that Dave saved that are different from event 622 and its ancestors. Additionally, after receiving event 626 from Dave, Carol can rebuild the hashgraph based on pointers in events stored in Carol's distributed database instance. In other embodiments, Dave can identify which events to send to Carol based on Carol sending event 622 to Dave (not shown in FIG. 4) and identifying using event 622 (and references therein) by Dave to identify events that Carol already accepted.

[1187] Примерная система 5: система на основе примерной системы 1, в которой оба участника отправляют события друг другу в таком порядке, что событие отправляется только после того, как получатель примет и/или сохранит предков того события. Соответственно, отправитель отправляет события от самых старых к самым новым, так что получатель может проверить два хеша в каждом событии при приеме события посредством сравнения двух хешей с двумя событиями-предками, которые уже были приняты. Отправитель может идентифицировать, какие события следует отправлять получателю, на основе текущего состояния хешграфа отправителя (например, переменной состояния базы данных, определенной отправителем), а какие, как указывает тот хешграф, получатель уже принял. Ссылаясь на фиг. 3, например, когда Боб синхронизируется с Кэрол для определения события 602, Кэрол может идентифицировать, что событие 619 является последним событием, созданным и/или определенным Бобом, которое приняла Кэрол. Следовательно, Кэрол может определить, что Бобу известно о том событии и его предках. Таким образом, Кэрол может отправлять Бобу сначала событие 618 и событие 616 (т. е. самые старые события, которые Боб еще должен принять, которые Кэрол приняла). Кэрол может затем отправлять Бобу событие 612, а затем событие 606. Это позволяет Бобу легко привязать события друг к другу и перестроить хешграф Боба. Использование хешграфа Кэрол для идентификации того, какие события еще должен принять Боб, может повысить эффективность синхронизации и может уменьшить сетевой трафик, поскольку Боб не запрашивает события у Кэрол.[1187] Exemplary System 5: A system based on Exemplary System 1 in which both participants send events to each other in such an order that the event is sent only after the receiver accepts and/or stores the ancestors of that event. Accordingly, the sender sends events from oldest to newest, so that the receiver can check the two hashes in each event when receiving the event by comparing the two hashes with the two ancestor events that have already been received. The sender can identify which events to send to the recipient based on the current state of the sender's hashgraph (eg, a database state variable defined by the sender) and which events that hashgraph indicates the recipient has already received. Referring to FIG. 3, for example, when Bob synchronizes with Carol to determine event 602, Carol may identify that event 619 is the last event created and/or determined by Bob that Carol received. Therefore, Carol can determine what Bob knows about that event and its ancestors. Thus, Carol can send event 618 and event 616 to Bob first (i.e., the oldest events that Bob has yet to receive that Carol has received). Carol can then send event 612 and then event 606 to Bob. This allows Bob to easily link events together and rebuild Bob's hashgraph. Using Carol's hashgraph to identify which events Bob still needs to receive can improve synchronization efficiency and can reduce network traffic because Bob does not request events from Carol.

[1188] В других вариантах осуществления самое последнее событие может быть отправлено первым. Если получатель определяет (на основе хеша двух предыдущих событий в самом последнем событии и/или указателей на предыдущие события в самом последнем событии), что он еще не принял одно из двух предыдущих событий, получатель может запросить у отправителя отправку таких событий. Это может происходить до тех пор, пока получатель не примет и/или не сохранит предков самого последнего события. Ссылаясь на фиг. 3, в таких вариантах осуществления, например, когда Боб принимает событие 606 от Кэрол, Боб может идентифицировать хеш события 612 и события 614 в событии 606. Боб может определить, что событие 614 было ранее принято от Алисы при создании и/или определении события 604. Соответственно, Бобу не нужно запрашивать событие 614 у Кэрол. Боб может также определить, что событие 612 еще не было принято. Боб может затем запросить событие 612 у Кэрол. Боб может затем на основе хешей в событии 612 определить, что Боб не принял события 616 или 618, и может соответственно запросить эти события у Кэрол. На основе событий 616 и 618 Боб затем сможет определить, что он принял предков события 606.[1188] In other embodiments, the most recent event may be sent first. If the receiver determines (based on the hash of the two previous events in the most recent event and/or pointers to previous events in the most recent event) that it has not yet received one of the two previous events, the receiver may request the sender to send such events. This may continue until the receiver accepts and/or stores the ancestors of the most recent event. Referring to FIG. 3, in such embodiments, for example, when Bob receives event 606 from Carol, Bob can identify the hash of event 612 and event 614 in event 606. Bob can determine that event 614 was previously received from Alice when creating and/or defining event 604 Therefore, Bob does not need to request event 614 from Carol. Bob may also determine that event 612 has not yet been received. Bob can then request event 612 from Carol. Bob can then determine, based on the hashes in event 612, that Bob did not receive events 616 or 618, and can request those events from Carol accordingly. Based on events 616 and 618, Bob will then be able to determine that he has adopted the ancestors of event 606.

[1189] Примерная система 6: система на основе примерной системы 5 с дополнительным ограничением, которое заключается в том, что, когда участник имеет возможность избирать между несколькими событиями для отправки далее, событие избирается таким образом, чтобы минимизировать общее количество отправленных на данный момент байтов, созданных и/или определенных тем участником. Например, если Алисе осталось отправить Бобу только два события, и одно из них имеет размер 100 байтов и было создано и/или определено Кэрол, а другое имеет размер 10 байтов и было создано и/или определено Дэйвом, и на данный момент в ходе этой синхронизации Алиса уже отправила 200 байтов событий Кэрол и 210 Дэйва, то Алисе следует сначала отправить событие Дэйву, а затем отправить событие Кэрол. Поскольку 210 + 10 < 100 + 200. Это может быть использовано для предотвращения атак, при которых один участник выдает либо одно огромное событие, либо поток мелких событий. В случае если трафик превышает ограничение по байтам большинства участников (как обсуждается в отношении примерной системы 7), способ согласно примерной системе 6 может обеспечивать, что игнорироваться будут события злоумышленника, а не события правомочных пользователей. Подобным образом, атаки могут быть ослаблены посредством отправки меньших событий перед большими событиями (для защиты от одного огромного события, забивающего канал связи). Более того, если участник не может отправить каждое из событий за одну синхронизацию (например, из-за ограничения сети, ограничений по байтам участника и т. д.), то тот участник может отправить несколько событий от каждого участника, вместо того, чтобы просто отправить события, определенные и/или созданные злоумышленником, и ни одного (из нескольких) события, созданного и/или определенного другими участниками. [1189] Exemplary System 6: A system based on Exemplary System 5 with the additional constraint that when a participant is able to select between multiple events to send next, the event is selected to minimize the total number of bytes sent so far created and/or defined by that member. For example, if Alice only has two events left to send Bob, and one of them is 100 bytes long and was created and/or defined by Carol, and the other is 10 bytes long and was created and/or defined by Dave, and is currently in the process of Since Alice has already sent 200 bytes of events to Carol and 210 to Dave, Alice should first send an event to Dave and then send an event to Carol. Because 210 + 10 < 100 + 200. This can be used to prevent attacks where a single participant emits either one huge event or a stream of small events. In the event that the traffic exceeds the majority byte limit (as discussed with respect to exemplary system 7), the method of exemplary system 6 can ensure that malicious events are ignored rather than legitimate user events. Similarly, attacks can be mitigated by sending smaller events before larger events (to protect against one huge event clogging the communication channel). Moreover, if a participant cannot send each of the events in one sync (for example, due to network restrictions, participant byte limits, etc.), then that participant can send multiple events from each participant, instead of just send events defined and/or created by the attacker, and none (of several) events created and/or defined by other participants.

[1190] Примерная система 7: система на основе примерной системы 1 с дополнительным первым этапом, на котором Боб отправляет Алисе число, указывающее максимальное количество байтов, которое он желает принять во время этой синхронизации, и Алиса отвечает сообщением со своим ограничением. Алиса затем прекращает отправку, если следующее событие превысило бы это ограничение. Боб делает то же самое. В таком варианте осуществления это ограничивает количество передаваемых байтов. Это может увеличить время конвергенции, но уменьшит объем сетевого трафика на синхронизацию.[1190] Exemplary System 7: A system based on Exemplary System 1 with an additional first step in which Bob sends Alice a number indicating the maximum number of bytes he wishes to receive during this synchronization, and Alice responds with a message with her limit. Alice then stops sending if the next event would exceed this limit. Bob does the same. In such an embodiment, this limits the number of bytes transmitted. This may increase the convergence time, but will reduce the amount of network traffic to sync.

[1191] Альтернативно или дополнительно в некоторых реализациях лимит количества байтов на процесс синхронизации и/или количество событий, которые разрешено синхронизировать на процесс синхронизации, реализуются в распределенной базе данных. Например, Алиса может отправлять Бобу события, о которых Боб еще не знает, затем экземпляр базы данных, связанный с Алисой, может останавливать и/или прекращать отправку пакетов данных и/или событий, когда следующее событие превышает пороговое значение синхронизации на основе либо допустимого количества байтов (т. е. объема синхронизируемых данных), либо допустимого количества разрешенных событий, которые должны быть синхронизированы, и/или достигает его. Передача события в таких случаях может быть осуществлена путем отправки родителя события до отправки события, если синхронизируют оба события. [1191] Alternatively, or additionally, in some implementations, a limit on the number of bytes per sync process and/or the number of events that are allowed to sync per sync process are implemented in a distributed database. For example, Alice may send events to Bob that Bob does not yet know about, then the database instance associated with Alice may stop and/or stop sending data packets and/or events when the next event exceeds a synchronization threshold based on either the allowed number of bytes (i.e. the amount of data to be synchronized) or the allowed number of events to be synchronized, and/or reaches it. Event dispatch in such cases can be done by dispatching the parent of the event before dispatching the event, if both events are synchronized.

[1192] В некоторых случаях, когда Алиса синхронизируется с Бобом, и ей необходимо отправить ему два события, например, событие X и событие Y, и у Боба уже есть все родители обоих тех событий, тогда Алиса может избирать, какое отправить первым. В некоторых реализациях Алиса может вычислять общее Bx всех байтов в X плюс байты во всех событиях, созданных создателем события X, которые она уже отправила во время этой синхронизация. Подобным образом, она может вычислять общее By для байтов в Y и событий, созданных создателем события Y, которые были отправлены на данный момент. Она может затем решить отправить X перед Y, если Bx<By, и отправить Y перед X, если By<Bx, и отправить их в любом порядке, если Bx=By. [1192] In some cases, when Alice is synchronizing with Bob and she needs to send two events to him, for example an X event and a Y event, and Bob already has all the parents of both of those events, then Alice can choose which one to send first. In some implementations, Alice may calculate the total Bx of all bytes in X plus the bytes in all events created by the event creator of X that she has already sent during this synchronization. Likewise, it can calculate the total By for the bytes in Y and the events generated by the Y event creator that have been dispatched so far. She can then decide to send X before Y if Bx<By, and send Y before X if By<Bx, and send them in any order if Bx=By.

[1193] В некоторых случаях синхронизация между двумя участниками может быть ограничена максимальным количеством принятых событий на синхронизацию (например, для предотвращения атак типа «отказ в обслуживании»). Если такой лимит достигается прежде, чем все события, относящиеся к той синхронизации, были приняты, то синхронизация заканчивается раньше. В некоторых других случаях каждое событие синхронизации может быть ограничено максимальным количеством принятых байтов (вместо ограничения количеством принятых событий или в дополнение к нему). Соответственно, лимиты, такие как максимальное количество принятых событий и максимальное количество принятых байтов, могут быть использованы для ограничения или регулирования количества событий и/или байтов, принятых и/или полученных участником-получателем (например, Бобом) от другого участника (например, Алисы) во время синхронизации. Вышеупомянутые лимиты могут предотвращать атаки, при которых участник-злоумышленник создает большое событие или подвергает сеть потоку из огромного количества мелких событий. Эти лимиты также гарантируют постепенное ухудшение характеристик в случаях, когда, например, один участник имеет соединение с узкой полосой пропускания для обработки среднего объема трафика данных, но не скачка трафика данных.[1193] In some cases, synchronization between two participants may be limited by the maximum number of received events per synchronization (for example, to prevent denial of service attacks). If such a limit is reached before all events related to that synchronization have been received, then the synchronization ends earlier. In some other cases, each sync event may be limited to a maximum number of bytes received (instead of or in addition to being limited to the number of events received). Accordingly, limits, such as the maximum number of events received and the maximum number of bytes received, can be used to limit or regulate the number of events and/or bytes received and/or received by a recipient participant (for example, Bob) from another participant (for example, Alice). ) during synchronization. The above limits can prevent attacks in which a malicious participant creates a large event or floods the network with a huge number of small events. These limits also ensure gradual degradation of performance in cases where, for example, one participant has a low bandwidth connection to handle an average amount of data traffic, but not a spike in data traffic.

[1194] В некоторых реализациях участники или вычислительные устройства не инициируют синхронизацию с другим участником или вычислительным устройством, если все известные события, для которых консенсус еще не был идентифицирован, представляют собой пустые события, не содержащие транзакций. Это гарантирует, что участники не будут напрасно использовать полосу пропускания, если существуют долгие периоды без новых транзакций. [1194] In some implementations, participants or computing devices do not initiate synchronization with another participant or computing device if all known events for which consensus has not yet been identified are null events containing no transactions. This ensures that participants do not waste bandwidth if there are long periods without new transactions.

[1195] В некоторых случаях отсутствие консенсуса может вызывать переполнение памяти участника или вычислительного устройства. Например, набор событий, для которого консенсус еще не был идентифицирован, может расти или увеличиваться после заданного порога, когда, например, по меньшей мере 1/3 популяции находится в режиме офлайн, поскольку консенсус не может быть получен, когда слишком мало участников находятся в режиме онлайн. Таким образом, память участника или вычислительного устройства может переполняться за счет совокупного количества событий, для которых консенсус не может быть достигнут. Для предотвращения переполнения памяти вследствие накопленных событий, для которых не может быть достигнут консенсус, каждый из участника и/или вычислительного устройства может быть приспособлен так, что, как только достигается порог событий, для которых консенсус еще не был достигнут, тот участник или то вычислительное устройство может отказаться определять и/или создавать какие-либо новые события до тех пор, пока тот участник или то вычислительное устройство не достигнет консенсуса относительно некоторых из событий, о которых участник или вычислительное устройство осведомлены. Другими словами, в некоторых случаях отсутствие консенсуса может вызывать переполнение, если консенсус не может быть достигнут (например, когда слишком мало участников находятся в режиме онлайн и могут получить консенсус). Таким образом, для предотвращения переполнения событий, которые не могут быть введены в порядок консенсуса (например, поскольку слишком мало участников находятся в режиме онлайн), участник не определяет никаких дополнительных событий до тех пор, пока он не сможет принимать события от некоторых из участников в режиме офлайн для достижения консенсуса относительно некоторых из более старых событий. [1195] In some cases, the lack of consensus may cause the memory of the participant or computing device to overflow. For example, a set of events for which consensus has not yet been identified may grow or increase beyond a given threshold when, for example, at least 1/3 of the population is offline, since consensus cannot be obtained when too few participants are offline. online mode. Thus, the participant's or computing device's memory may fill up with the cumulative number of events for which consensus cannot be reached. To prevent memory overflow due to accumulated events for which consensus cannot be reached, each of the participant and/or computing device can be adapted such that once a threshold of events for which consensus has not yet been reached is reached, that participant or that computing device the device may refuse to define and/or generate any new events until that participant or that computing device reaches a consensus on some of the events that the participant or computing device is aware of. In other words, in some cases, the lack of consensus can cause an overflow if consensus cannot be reached (for example, when too few participants are online to reach consensus). Thus, to prevent overflowing of events that cannot be entered into the consensus order (for example, because too few participants are online), a participant does not define any additional events until it can receive events from some of the participants in the offline to reach consensus on some of the older events.

[1196] Примерная система 8: система на основе примерной системы 1, в которой следующие этапы добавлены в начале процесса синхронизации:[1196] Exemplary system 8: A system based on exemplary system 1, in which the following steps are added at the beginning of the synchronization process:

[1197] - Алиса идентифицирует S, набор событий, которые она приняла и/или сохранила, пропуская события, которые были созданы и/или определены Бобом или которые являются предками событий, созданных и/или определенных Бобом. [1197] - Alice identifies S, the set of events she received and/or stored, skipping events that were created and/or defined by Bob or that are ancestors of events created and/or defined by Bob.

[1198] - Алиса идентифицирует участников, которые создали и/или определили каждое событие в S, и отправляет Бобу список ID-номеров участников. Алиса также отправляет количество событий, которые были созданы и/или определены каждым участником, которые она уже приняла и/или сохранила.[1198] - Alice identifies the participants that created and/or defined each event in S, and sends Bob a list of participant ID numbers. Alice also sends the number of events that have been created and/or defined by each participant that she has already accepted and/or saved.

[1199] - Боб отвечает списком того, сколько событий он принял, тех, которые были созданы и/или определены другими участниками.[1199] - Bob responds with a list of how many events he received, those created and/or defined by other participants.

[1200] - Алиса затем отправляет Бобу только события, которые он еще должен принять. Например, если Алиса указывает Бобу, что она приняла 100 событий, созданных и/или определенных Кэрол, и Боб отвечает, что он принял 95 событий, созданных и/или определенных Кэрол, то Алиса отправит только 5 самых последних событий, созданных и/или определенных Кэрол.[1200] - Alice then only sends events to Bob that he has yet to accept. For example, if Alice indicates to Bob that she has received 100 events created and/or defined by Carol, and Bob responds that he has received 95 events created and/or defined by Carol, then Alice will send only the 5 most recent events created and/or defined by Carol. certain Carol.

[1201] Примерная система 9: система на основе примерной системы 1 с дополнительным механизмом для идентификации и/или устранения мошенников. Каждое событие содержит два хеша, один от последнего события, созданного и/или определенного тем участником («собственный хеш»), и один от последнего события, созданного и/или определенного другим участником («чужой хеш»). Если участник создает и/или определяет два разных события с одним и тем же собственным хешем, то тот участник является «мошенником». Если Алиса устанавливает, что Дэйв является мошенником, посредством приема двух разных событий, созданных и/или определенных им с использованием одного и того же собственного хеша, то она сохраняет индикатор, указывающий на то, что он является мошенником, и избегает синхронизации с ним в будущем. Если она выясняет, что он является мошенником, но все же синхронизируется с ним снова и создает и/или определяет новое событие, записывающее тот факт, то Алиса тоже становится мошенником, и другие участники, которые узнают, что Алиса впоследствии синхронизировалась с Дэйвом, перестают синхронизироваться с Алисой. В некоторых вариантах осуществления это влияет только на синхронизацию в одну сторону. Например, когда Алиса отправляет список идентификаторов и число событий, которые она приняла, для каждого участника, она не отправляет ID или количество для мошенника, так что Боб не ответит никаким соответствующим числом. Алиса затем отправляет Бобу события мошенника, которые она приняла и для которых она не приняла указание о том, что Боб принял такие события. После завершения той синхронизации Боб также сможет определить, что Дэйв является мошенником (если он еще не идентифицировал Дэйва как мошенника), и Боб также откажется от синхронизации с мошенником.[1201] Exemplary System 9: A system based on Exemplary System 1 with an additional mechanism for identifying and/or eliminating fraudsters. Each event contains two hashes, one from the last event created and/or defined by that participant ("own hash"), and one from the last event created and/or defined by another participant ("foreign hash"). If a participant creates and/or defines two different events with the same own hash, then that participant is a "scammer". If Alice determines that Dave is a fraud by receiving two different events created and/or defined by him using the same hash of his own, then she keeps the indicator indicating that he is a fraud and avoids synchronizing with him in the future. If she figures out that he is a scammer, but still syncs with him again and creates and/or defines a new event that records that fact, then Alice becomes a scammer too, and other participants who learn that Alice subsequently synced with Dave stop synchronize with Alice. In some embodiments, this affects only one-way timing. For example, when Alice sends a list of IDs and the number of events she received for each participant, she does not send an ID or count for the cheater, so Bob will not respond with any corresponding number. Alice then sends Bob the rogue events that she accepted and for which she did not accept an indication that Bob accepted such events. After that sync completes, Bob will also be able to determine that Dave is a scammer (if he hasn't already identified Dave as a scammer), and Bob will also opt out of syncing with the scammer.

[1202] Примерная система 10: система на основе примерной системы 9 с тем дополнением, что Алиса начинает процесс синхронизации путем отправки Бобу списка мошенников, которых она идентифицировала и события которых она все еще хранит, и Боб отвечает сообщением с указанием любых мошенников, которых он идентифицировал, в дополнение к мошенникам, идентифицированным Алисой. Затем они продолжают работу в обычном режиме, но без подсчета мошенников при синхронизации друг с другом.[1202] Exemplary System 10: A system based on Exemplary System 9 with the addition that Alice begins the synchronization process by sending Bob a list of fraudsters that she has identified and whose events she still holds, and Bob responds with a message indicating any fraudsters that he identified, in addition to the scammers identified by Alice. They then continue as normal, but without counting cheaters while syncing with each other.

[1203] Примерная система 11: система на основе примерной системы 1 с процессом, который постоянно обновляет текущее состояние (например, зафиксированное переменной состояния базы данных, определенной участником системы) на основе транзакций в любых новых событиях, которые принимаются во время синхронизации. Это также может включать второй процесс, который постоянно перестраивает то состояние (например, порядок событий) каждый раз, когда последовательность событий меняется, посредством возвращения к копии более раннего состояния и повторного вычисления настоящего состояния посредством обработки событий в новом порядке. Таким образом, например, каждое вычислительное устройство может поддерживать две версии состояния (одну, обновляемую по мере того, как принимают новые события и транзакции, и другую, обновляемую только после того, как будет достигнут консенсус). В определенный момент времени (например, по истечении периода времени, после того как заданное количество событий определено и/или принято и т. д.), версия состояния, которую обновляют по мере того, как принимают новые события и транзакции, может быть удалена, и новая копия состояния, которую обновляют только после того, как будет достигнут консенсус, может быть выполнена в качестве новой версии состояния, которую обновляют по мере того, как принимают новые события и транзакции. Это может обеспечить синхронизацию обоих состояний.[1203] Exemplary system 11: A system based on exemplary system 1 with a process that constantly updates the current state (eg, captured by a database state variable defined by a system member) based on transactions in any new events that are received during synchronization. It may also include a second process that continually rebuilds that state (eg, the order of events) each time the sequence of events changes by reverting to a copy of the earlier state and recomputing the present state by processing the events in the new order. Thus, for example, each computing device may maintain two versions of state (one updated as new events and transactions are received, and one updated only after consensus is reached). At a certain point in time (for example, after a period of time has elapsed, after a given number of events have been determined and/or accepted, etc.), the state version that is updated as new events and transactions are received may be deleted, and a new copy of the state, which is updated only after consensus is reached, can be executed as a new version of the state, which is updated as new events and transactions are received. This can keep both states in sync.

[1204] В некоторых вариантах осуществления текущим состоянием является состояние, баланс, условие и/или т. п., связанные с результатом транзакций. Подобным образом, состояние может включать структуру данных и/или переменные, модифицированные транзакциями. Например, если транзакциями являются денежные переводы между банковскими счетами, то текущим состоянием может быть текущий баланс счетов. В качестве другого примера, если транзакции связаны с многопользовательской игрой, текущим состоянием может быть положение, количество жизней, полученные предметы, состояние игры и/или т. п., связанные с игрой.[1204] In some embodiments, the current state is a state, balance, condition, and/or the like associated with the outcome of transactions. Similarly, the state may include a data structure and/or variables modified by transactions. For example, if the transactions are money transfers between bank accounts, then the current state could be the current balance of the accounts. As another example, if the transactions are related to a multiplayer game, the current state may be the location, number of lives, items received, game state, and/or the like associated with the game.

[1205] Примерная система 12: система на основе примерной системы 11, ускоренная за счет использования arrayList с «быстрым клонированием» для поддержания состояния (например, баланса банковских счетов, состояния игры и т. д.). ArrayList с быстрым клонированием представляет собой структуру данных, которая действует как массив с одной дополнительной особенностью: она поддерживает операцию «клонирования», которая представляет собой создание и/или определение нового объекта, который является копией оригинала. Клон действует так, как если бы это была точная копия, поскольку изменения, которым подвергается клон, не влияют на оригинал. Однако операция клонирования быстрее, чем создание точной копии, поскольку создание клона в действительности не включает копирования и/или обновления всего содержимого одного arrayList в другой. Вместо наличия двух клонов и/или копий оригинального списка могут быть использованы два небольших объекта, каждый с хеш-таблицей и указателем на оригинальный список. Когда производится запись в клон, хеш-таблица запоминает, какой элемент модифицирован, и новое значение. Когда выполняется считывание из позиции, сначала проверяется хеш-таблица, и, если тот элемент был модифицирован, возвращается новое значение из хеш-таблицы. Иначе тот элемент возвращается из оригинального arrayList. Таким образом, два «клона» изначально являются лишь указателями на оригинальный arrayList. Но поскольку каждый из них постоянно модифицируется, они расширяются настолько, что имеют большую хеш-таблицу, в которой хранятся отличия между ними и оригинальным списком. Клоны сами могут быть клонированы, что вызывает расширение структуры данных до дерева объектов, каждый из которых имеет свои собственные хеш-таблицу и указатель на своего родителя. Следовательно, считывание вызывает подъем по дереву до тех пор, пока не будет установлена вершина, которая имеет запрашиваемые данные, или не будет достигнут корень. Если вершина становится слишком большой или сложной, то она может быть заменена на точную копию родителя, изменения в хеш-таблице могут быть переведены в копию, а хеш-таблица удалена. Кроме того, если клон больше не нужен, то во время сборки мусора он может быть убран из дерева, и дерево может быть свернуто.[1205] Exemplary system 12: A system based on exemplary system 11, accelerated by using a "fast clone" arrayList to maintain state (eg, bank balance, game state, etc.). A cloneable ArrayList is a data structure that acts like an array with one additional feature: it supports the "clone" operation, which is the creation and/or definition of a new object that is a copy of the original. The clone acts as if it were an exact copy, since the changes the clone undergoes do not affect the original. However, the clone operation is faster than making an exact copy, because creating a clone does not actually involve copying and/or updating the entire contents of one arrayList into another. Instead of having two clones and/or copies of the original list, two small objects can be used, each with a hash table and a pointer to the original list. When a clone is written, the hash table remembers which element was modified and the new value. When reading from a position, the hash table is checked first, and if that element has been modified, the new value from the hash table is returned. Otherwise, that element is returned from the original arrayList. Thus, the two "clones" are initially just pointers to the original arrayList. But since each of them is constantly being modified, they expand so much that they have a large hash table that stores the differences between them and the original list. Clones themselves can be cloned, which causes the data structure to expand into a tree of objects, each with its own hash table and pointer to its parent. Therefore, the read causes a climb up the tree until either the vertex that has the requested data is set or the root is reached. If a node becomes too large or complex, then it can be replaced with an exact copy of the parent, changes to the hash table can be translated into the copy, and the hash table removed. Also, if the clone is no longer needed, it can be removed from the tree during garbage collection and the tree can be collapsed.

[1206] Примерная система 13: система на основе примерной системы 11, ускоренная за счет использования хеш-таблицы с «быстрым клонированием» для поддержания состояния (например, баланса банковских счетов, состояния игры и т. д.). Она подобна системе 12, за тем исключением, что корень дерева представляет собой хеш-таблицу, а не arrayList.[1206] Exemplary system 13: A system based on exemplary system 11 accelerated by using a "fast clone" hash table to maintain state (eg, bank account balance, game state, etc.). It is similar to system 12, except that the root of the tree is a hash table rather than an arrayList.

[1207] Примерная система 14: система на основе примерной системы 11, ускоренная за счет использования реляционной базы данных с «быстрым клонированием» для поддержания состояния (например, баланса банковских счетов, состояния игры и т. д.). Например, база данных с быстрым клонированием может быть использована для обеспечения двух копий состояния, как обсуждено в отношении примерной системы 11. Она представляет собой объект, который действует как обертка вокруг существующей системы управления реляционной базой данных (RDBMS). Каждый явный «клон» является фактически объектом с ID-номером и указателем на объект, содержащий базу данных. Когда пользовательский код пытается выполнить запрос на языке структурированных запросов (SQL) в базу данных, тот запрос сначала модифицируется, а затем отправляется в реальную базу данных. Реальная база данных идентична базе данных с точки зрения клиентского кода, за исключением того, что каждая таблица имеет одно дополнительное поле для ID клона. Например, предположим, что существует оригинальная база данных с ID клона, равным 1, а затем создают два клона базы данных с ID, равными 2 и 3 (например, используемых для поддержания двух копий состояния). Каждая строка в каждой таблице будет иметь значения 1, 2 или 3 в поле ID клона. Когда запрос поступает от пользовательского кода на клон 2, запрос модифицируется таким образом, что запрос будет считываться только из строк, которые имеют значения 2 или 1 в том поле. Подобным образом, запросы к клону 3 считывают строки с ID, равным 3 или 1. Если команда на языке структурированных запросов (SQL) поступает на клон 2 и указывает удалить строку, и та строка имеет 1, то команда должна просто изменить 1 на 3, что помечает строку как более не используемую совместно клонами 2 и 3, и теперь видимую только для 3. Если существуют несколько рабочих клонов, то несколько копий строки могут быть вставлены, и каждая из них может быть установлена на ID разного клона, так что новые строки являются видимыми для всех клонов, за исключением клона, который только что «удалил» строку. Подобным образом, если строка добавляется в клон 2, то строка добавляется в таблицу с ID, равным 2. Модификация строки эквивалентна удалению с последующей вставкой. Как и раньше, если несколько клонов удаляются во время сборки мусора, то дерево может быть упрощено. Структура того дерева будет сохранена в дополнительной таблице, недоступной клонам, но которая полностью используется на внутреннем уровне.[1207] Exemplary system 14: A system based on exemplary system 11 accelerated by using a "fast clone" relational database to maintain state (eg, bank account balance, game state, etc.). For example, a fast clone database can be used to provide two copies of the state, as discussed in relation to exemplary system 11. It is an object that acts as a wrapper around an existing relational database management system (RDBMS). Each explicit "clone" is actually an object with an ID number and a pointer to the object containing the database. When user code attempts to execute a Structured Query Language (SQL) query against a database, that query is first modified and then sent to the actual database. The real database is identical to the database in terms of client code, except that each table has one additional field for the clone ID. For example, suppose there is an original database with a clone ID of 1, and then two clones of the database are created with IDs of 2 and 3 (for example, used to maintain two copies of the state). Each row in each table will have the value 1, 2, or 3 in the clone ID field. When a request comes from user code on clone 2, the request is modified so that the request will only read from rows that have values of 2 or 1 in that field. Similarly, queries against clone 3 read rows with an ID of 3 or 1. If a Structured Query Language (SQL) command goes to clone 2 and says to delete a row, and that row has a 1, then the command should simply change 1 to 3, which marks the row as no longer shared between clones 2 and 3, and is now only visible to clone 3. If there are multiple working clones, then multiple copies of the row can be inserted, and each one can be set to a different clone ID, so that new rows are visible to all clones except for the clone that just "deleted" the row. Similarly, if a row is added to clone 2, then the row is added to the table with an ID of 2. Modifying the row is equivalent to deleting followed by an insert. As before, if multiple clones are removed during garbage collection, then the tree can be simplified. The structure of that tree will be stored in an additional table that is inaccessible to clones, but which is fully used internally.

[1208] Примерная система 15: система на основе примерной системы 11, ускоренная за счет использования файловой системы с «быстрым клонированием» для поддержания состояния. Она представляет собой объект, который действует как обертка вокруг файловой системы. Файловая система построена поверх существующей файловой системы с использованием реляционной базы данных с быстрым клонированием для управления разными версиями файловой системы. Основная файловая система хранит большое количество файлов либо в одном каталоге, либо раздельно согласно имени файла (для поддержания малого размера каталогов). Дерево каталогов может храниться в базе данных и не предоставляться базовой файловой системе. Когда файл или каталог клонируются, «клон» представляет собой лишь объект с ID-номером, и база данных модифицируется таким образом, чтобы отражать, что этот клон теперь существует. Если файловая система с быстрым клонированием клонируется, она представляется пользователю такой, как если бы был создан и/или определен целый новый жесткий диск, инициализированный с использованием копии существующего жесткого диска. Изменения, которым подвергается одна копия, могут не влиять на другие копии. В действительности существует только одна копия каждого файла или каталога, и копирование происходит, когда файл модифицируется посредством одного клона. [1208] Exemplary system 15: A system based on exemplary system 11 accelerated by using a "fast clone" file system for state maintenance. It is an object that acts as a wrapper around the file system. The file system is built on top of the existing file system using a fast clone relational database to manage different versions of the file system. The underlying file system stores a large number of files, either in a single directory or separated by file name (to keep directories small). The directory tree may be stored in the database and not provided to the underlying file system. When a file or directory is cloned, the "clone" is just an object with an ID number, and the database is modified to reflect that the clone now exists. If a quick clone file system is cloned, it appears to the user as if a whole new hard drive had been created and/or defined, initialized using a copy of the existing hard drive. Changes to one copy may not affect other copies. There is really only one copy of each file or directory, and copying occurs when a file is modified by a single clone.

[1209] Примерная система 16: система на основе примерной системы 15, в которой отдельный файл создается и/или определяется в базовой операционной системе для каждой N-байтной части файла в файловой системе с быстрым клонированием. N может представлять собой некоторый подходящий размер, такой как, например, 4096 или 1024. Таким образом, если один байт изменяется в большом файле, копируется и модифицируется только один блок большого файла. Это также повышает эффективность при сохранении множества файлов на диске, которые отличаются лишь несколькими байтами.[1209] Exemplary system 16: A system based on exemplary system 15 in which a separate file is created and/or defined in the base operating system for each N-byte file portion in the fast clone file system. N may be some suitable size, such as 4096 or 1024, for example. Thus, if one byte is changed in a large file, only one block of the large file is copied and modified. It also improves efficiency when storing many files on disk that differ by only a few bytes.

[1210] Примерная система 17: система на основе примерной системы 11, где каждый участник включает в некоторые или во все события, которые он создает и/или определяет, хеш состояния на некоторый предыдущий момент времени вместе с количеством событий, которые произошли вплоть до того момента, указывая на то, что участник распознает и/или идентифицирует, что теперь достигнут консенсус относительно порядка событий. После того как участник собрал подписанные события, содержащие такой хеш, от большинства пользователей для заданного состояния, участник может затем сохранить это как доказательство состояния консенсуса на тот момент и удалить из памяти события и транзакции до того момента.[1210] Exemplary system 17: A system based on exemplary system 11, where each participant includes in some or all of the events it creates and/or defines a hash of the state at some previous point in time along with the number of events that have occurred up to that point in time. moment, indicating that the participant recognizes and/or identifies that a consensus has now been reached on the order of events. Once a participant has collected signed events containing such a hash from a majority of users for a given state, the participant can then store this as proof of the consensus state at that point and delete events and transactions up to that point from memory.

[1211] Примерная система 18: система на основе примерной системы 1, где операции, которые вычисляют медиану или большинство, заменяются взвешенной медианой или взвешенным большинством, причем участников взвешивают согласно их «доле». Доля представляет собой число, которое указывает на то, как много значит голос участника. Доля может представлять собой активы в криптовалюте или просто произвольное число, которое присваивается, когда участника впервые приглашают присоединиться, а затем разделяется среди новых участников, которых участник приглашает присоединиться. Старые события могут быть удалены, когда достаточное количество участников согласится с состоянием консенсуса, так что их общая доля является большей частью имеющейся доли. Если общий порядок вычисляется с использованием медианы рангов, вносимых участниками, то результатом является число, при котором половина участников имеет более высокий ранг, а половина имеет более низкий. С другой стороны, если общий порядок вычисляется с использованием взвешенной медианы, то результатом является число, при котором приблизительно половина общей доли связана с рангами ниже той, и половина выше. Взвешенные голосование и медианы могут быть полезны в предотвращении атаки Сивиллы, когда один участник приглашает присоединиться огромное количество «виртуальных» пользователей, каждый из которых является просто псевдонимом под управлением приглашающего участника. Если приглашающий участник вынужден делить свою долю с приглашенными, то виртуальные пользователи будут бесполезны для злоумышленника в попытках контролировать результаты консенсуса. Соответственно, доказательство доли владения может быть полезным в некоторых обстоятельствах.[1211] Exemplary system 18: A system based on exemplary system 1, where the operations that calculate the median or majority are replaced by a weighted median or a weighted majority, and the participants are weighted according to their "share". Share is a number that indicates how much a member's vote means. The stake can be cryptocurrency assets or just an arbitrary number that is assigned when a member is first invited to join and then split among the new members that the member invites to join. Old events can be deleted when enough participants agree to the consensus state so that their total share is the majority of the share available. If the overall order is computed using the median of the ranks contributed by the participants, then the result is the number where half of the participants are higher ranked and half are lower ranked. On the other hand, if the overall order is computed using a weighted median, then the result is a number where approximately half of the total share is associated with ranks below that and half above. Weighted voting and medians can be useful in preventing a Sybil attack, where a single member invites a huge number of "virtual" users to join, each of which is simply an alias under the control of the inviting member. If the inviter is forced to share their share with the invitees, then the virtual users will be useless for the attacker to try to control the outcome of the consensus. Accordingly, proof of ownership may be useful in some circumstances.

[1212] Примерная система 19: система на основе примерной системы 1, в которой вместо одной распределенной базы данных имеется множество баз данных в иерархии. Например, может существовать одна база данных, пользователи которой являются ее участниками, а также несколько меньших баз данных или «блоков», каждый из которых имеет поднабор участников. Когда события происходят в блоке, они синхронизируются среди участников того блока, но не среди участников вне того блока. Затем периодически после принятия решения относительно порядка консенсуса в блоке полученное в результате состояние (или события со своим общим порядком консенсуса) может совместно использоваться всем составом участников большой базы данных. [1212] Exemplary system 19: A system based on exemplary system 1 in which, instead of one distributed database, there are multiple databases in a hierarchy. For example, there may be one database whose users are members, as well as several smaller databases or "blocks", each with a subset of members. When events occur in a block, they are synchronized among participants in that block, but not among participants outside that block. Then, periodically after deciding on the consensus order in the block, the resulting state (or events with their overall consensus order) can be shared by the entire membership of the large database.

[1213] Примерная система 20: система на основе примерной системы 11 с возможностью наличия события, которое обновляет программное обеспечение для обновления состояния (например, зафиксированного переменной состояния базы данных, определенной участником системы). Например, события X и Y могут содержать транзакции, которые модифицируют состояние согласно программному коду, который считывает транзакции в тех событиях, а затем обновляет состояние надлежащим образом. Тогда событие Z может содержать уведомление о том, что теперь доступна новая версия программного обеспечения. Если общий порядок говорит, что события происходят в порядке X, Z, Y, то состояние может быть обновлено посредством обработки транзакций в X с использованием старого программного обеспечения, а затем транзакций в Y с использованием нового программного обеспечения. Но если порядок консенсуса имел вид X, Y, Z, то как X, так и Y могут быть обновлены с использованием старого программного обеспечения, которое может дать другое конечное состояние. Следовательно, в таких вариантах осуществления уведомление об улучшении кода может появляться в событии, так что сообщество может достигать консенсуса относительно того, когда следует перейти со старой версии на новую версию. Это гарантирует, что участники будут поддерживать синхронизированные состояния. Это также гарантирует, что система может оставаться работающей даже во время улучшений без необходимости перезагрузки или перезапуска процесса.[1213] Exemplary system 20: A system based on exemplary system 11 with the possibility of having an event that updates software to update a state (eg, a fixed database state variable defined by a system member). For example, events X and Y may contain transactions that modify the state according to code that reads the transactions in those events and then updates the state as appropriate. The Z event may then contain a notification that a new version of the software is now available. If the general order says that events occur in X, Z, Y order, then the state can be updated by processing transactions in X using the old software, and then transactions in Y using the new software. But if the consensus order was X, Y, Z, then both X and Y could be updated using old software that could give a different end state. Therefore, in such embodiments, the code improvement notification may appear in an event so that the community may reach a consensus on when to migrate from the old version to the new version. This ensures that participants maintain synchronized states. It also ensures that the system can remain running even during improvements without the need for a reboot or process restart.

[1214] В некоторых реализациях способ достижения консенсуса хешграфа может быть реализован платформой (т. е. программой, реализованной программно, исполняемой на процессоре вычислительного устройства и/или системы). В целом, платформа хешграфа собирает, распространяет, упорядочивает транзакции и выполняет другие подходящие задачи, связанные с процессами достижения консенсуса. В дополнение к платформе в некоторых случаях отдельное приложение поддерживает и модифицирует совместно используемое состояние хешграфа путем исполнения транзакций в порядке консенсуса, определенном платформой. Когда новая версия такого приложения выпускается, транзакция новой версии может быть создана путем предоставления, например, числа новой версии, хеша нового кода приложения и доказательства того, что улучшение является подлинным (например, цифровой подписи относительно кода приложения, подписанного компанией, которая создала то приложение). В некоторых реализациях транзакция новой версии может быть приспособлена так, что новая версия не исполняется до тех пор, пока порядок консенсуса не идентифицируется для транзакции новой версии. Таким образом, транзакции, идентифицированные как более ранние в порядке консенсуса, обрабатываются старой версией приложения, и транзакции, идентифицированные как более поздние в порядке консенсуса, обрабатываются новой версией приложения. Соответственно, транзакции новой версии гарантируют, что участники осуществляют улучшение до новой версии приложения в одном и том же экземпляре и сохраняют свое состояние согласованным.[1214] In some implementations, the hashgraph consensus method may be implemented by a platform (i.e., a program implemented in software, executing on the processor of a computing device and/or system). In general, a hashgraph platform collects, distributes, sequences transactions, and performs other appropriate tasks related to consensus building processes. In addition to the platform, in some cases, a separate application maintains and modifies the shared hashgraph state by executing transactions in the consensus order defined by the platform. When a new version of such an application is released, a new version transaction can be created by providing, for example, the new version number, a hash of the new application code, and proof that the enhancement is genuine (for example, a digital signature of the application code signed by the company that created that application ). In some implementations, the new version transaction can be arranged such that the new version is not executed until a consensus order is identified for the new version transaction. Thus, transactions identified as earlier in the consensus order are processed by the old application version, and transactions identified as later in the consensus order are processed by the new application version. Accordingly, new version transactions ensure that participants upgrade to the new version of the application on the same instance and keep their state consistent.

[1215] В некоторых реализациях улучшения для платформы могут быть выполнены способом, аналогичным улучшениям для приложения. Например, транзакция новой версии платформы может быть исполнена в момент, когда достигается консенсус относительно такой транзакции новой версии. Альтернативно, когда платформа выясняет, что новая версия платформы доступна, она может отобразить запрос каждому участнику хешграфа, запрашивающий указать, желает ли тот участник осуществить улучшение. В таком случае платформа может быть улучшена на основе ответа участника (участников).[1215] In some implementations, platform enhancements may be performed in a manner similar to application enhancements. For example, a transaction for a new version of the platform may be executed at a time when a consensus is reached on such a transaction for the new version. Alternatively, when the platform finds out that a new version of the platform is available, it may display a prompt to each participant in the hashgraph asking them to indicate whether that participant wishes to implement an improvement. In such a case, the platform can be improved based on the response of the participant(s).

[1216] В некоторых реализациях улучшения приложения и/или платформы могут быть подвергнуты пользовательскому голосованию. Например, вычислительные устройства участников могут отображать всплывающее окно связанному пользователю, предлагающее авторизовать улучшение путем выбора или отправки голоса да или нет, записываемого как транзакция (например, в событии). Соответственно, автоматические обновления платформ и/или приложений могут быть исполнены при авторизации со стороны пороговой величины от популяции (например, более чем 2/3 популяции).[1216] In some implementations, improvements to the application and/or platform may be subject to user voting. For example, the computing devices of the participants may display a pop-up window to the associated user prompting them to authorize the improvement by selecting or sending a yes or no vote recorded as a transaction (eg, in an event). Accordingly, automatic platform and/or application updates can be performed upon authorization from a population threshold (eg, more than 2/3 of the population).

[1217] Примерная система 21: система на основе примерной системы 1, где участники или вычислительные устройства хешграфа приспособлены так, чтобы убирать ненужные события из экземпляров распределенной базы данных путем определения подписанного состояния распределенной базы данных. В некоторых реализациях участники или вычислительные устройства могут исполнять дополнительные процессы для предотвращения переполнения памяти и/или для сохранения ресурсов памяти. Например, участники или вычислительные устройства могут периодически удалять старые события на основе набора правил или критериев. Правило может, например, указывать, что необходимо игнорировать или удалять транзакции в событии, если значение, равное разности раунда, который принят, и номера раунда (или раунда, который создан), события превышает заданный порог. В некоторых случаях события содержат хеши своих родителей и раунд, созданный для каждого родителя. Следовательно, заданное событие может быть все еще принято во время синхронизации, даже если одного или более родителей не хватает вследствие того, что их проигнорировали или удалили, поскольку они были созданы слишком много раундов тому назад. Соответственно, подписанные состояния могут содержать хеш событий, которые были определены и/или созданы в раундах, предшествующих подписанному состоянию, но совсем незадолго до подписанного состояния, при котором их бы проигнорировали или удалили. Убирание или удаление ненужных событий снижает затраты вычислительных ресурсов, вызванные синхронизацией излишних или неуместных событий внутри набора вычислительных устройств, которые реализуют распределенную базу данных (например, участников хешграфа), и снижает недоиспользование блоков локальной памяти такого набора вычислительных устройств. Дополнительные подробности относительно убирания и/или удаления событий могут быть найдены в предварительной заявке на патент США № 62/436066, поданной 19 декабря 2016 г. и озаглавленной «Method and Apparatus for a Distributed Database that Enables Deletion of Events», которая включена в настоящий документ посредством ссылки во всей своей полноте.[1217] Exemplary system 21: A system based on exemplary system 1, where the hashgraph participants or computing devices are adapted to remove unnecessary events from distributed database instances by determining the signed state of the distributed database. In some implementations, participants or computing devices may execute additional processes to prevent memory overflow and/or to conserve memory resources. For example, participants or computing devices may periodically delete old events based on a set of rules or criteria. The rule may, for example, indicate that transactions in an event should be ignored or deleted if a value equal to the difference between the round that is accepted and the round number (or round that is created) of the event exceeds a given threshold. In some cases, events contain hashes of their parents and a round created for each parent. Therefore, a given event may still be received during synchronization even if one or more parents are missing due to being ignored or deleted because they were created too many rounds ago. Accordingly, signed states may contain a hash of events that were defined and/or created in the rounds prior to the signed state, but not very long before the signed state, in which case they would be ignored or deleted. Removing or removing unnecessary events reduces the computational overhead caused by synchronizing redundant or irrelevant events within a set of computing devices that implement a distributed database (e.g., hashgraph participants) and reduces underutilization of local memory blocks of such a set of computing devices. Additional details regarding deleting and/or deleting events can be found in U.S. Provisional Application No. 62/436,066, filed December 19, 2016, entitled "Method and Apparatus for a Distributed Database that Enables Deletion of Events", which is incorporated herein. document by reference in its entirety.

[1218] Предполагается, что системы, описанные выше, создают и/или обеспечивают эффективный механизм конвергенции для распределенного консенсуса с итоговым консенсусом. По этому поводу могут быть доказаны несколько теорем, как показано далее.[1218] It is contemplated that the systems described above create and/or provide an efficient convergence mechanism for distributed consensus with eventual consensus. Several theorems can be proved about this, as shown below.

[1219] Примерная теорема 1: если событие x предшествует событию y в частичном порядке, то в знании заданного участника о других участниках в заданный момент времени каждый из других участников либо принял указание о x до y, либо еще не принял указание о y.[1219] Exemplary Theorem 1: If event x precedes event y in partial order, then in a given participant's knowledge of the other participants at a given point in time, each of the other participants has either accepted an indication of x before y, or has not yet accepted an indication of y.

[1220] Доказательство: если событие x предшествует событию y в частичном порядке, то x является предком y. Когда участник принимает указание о y в первый раз, тот участник либо уже принял указание о x ранее (в случае чего он узнает о x раньше y), либо это будет случай, когда синхронизация предоставляет тому участнику как x, так и y (в случае чего он узнает о x раньше y во время той синхронизации, поскольку события, принимаемые во время одной синхронизации, полагают принимаемыми в порядке, согласующемся с взаимосвязями потомственности, как описано в отношении примерной системы 5). Что и требовалось доказать.[1220] Proof: If event x precedes event y in partial order, then x is an ancestor of y. When a participant receives an indication of y for the first time, that participant has either already received an indication of x previously (in which case it learns about x before y), or it will be the case that synchronization provides that participant with both x and y (in which case what it learns about x before y during that synchronization, since events received during one synchronization are considered to be received in order consistent with progeny relationships, as described with respect to exemplary system 5). Q.E.D.

[1221] Примерная теорема 2: для любого заданного хешграфа, если x предшествует y в частичном порядке, то x будет предшествовать y в общем порядке, вычисленном для того хешграфа.[1221] Exemplary Theorem 2: For any given hashgraph, if x precedes y in partial order, then x will precede y in the general order computed for that hashgraph.

[1222] Доказательство: если x предшествует y в частичном порядке, то согласно теореме 1:[1222] Proof: If x precedes y in partial order, then by Theorem 1:

[1223] для всех i, rank(i,x) < rank(i,y),[1223] for all i, rank(i,x) < rank(i,y),

[1224] где rank(i,x) представляет собой ранг, присвоенный участником i событию x, который равен 1, если x является первым событием, принятым участником i, 2, если вторым, и так далее. Допустим, что med(x) представляет собой медиану rank(i,x) для всех i, и аналогично для med(y). [1224] where rank(i,x) is the rank assigned by participant i to event x, which is 1 if x is the first event received by participant i, 2 if the second, and so on. Assume that med(x) is the median of rank(i,x) for all i, and similarly for med(y).

[1225] Для заданного k изберем i1 и i2 таким образом, что rank(i1,x) является k-м наименьшим рангом x, а rank(i2,y) является k-м наименьшим рангом y. Тогда:[1225] For a given k, choose i1 and i2 such that rank(i1,x) is the k-th smallest rank of x and rank(i2,y) is the k-th smallest rank of y. Then:

[1226] rank(i1,x) < rank(i2,y).[1226] rank(i1,x) < rank(i2,y).

[1227] Это объясняется тем, что rank(i2,y) превышает или равняется k рангов y, каждый из которых строго превышает соответствующий ранг x. Следовательно, rank(i2,y) строго превышает по меньшей мере k рангов x, а значит строго превышает k-й наименьший ранг x. Этот аргумент справедлив для любого k. [1227] This is because rank(i2,y) is greater than or equal to k ranks of y, each strictly greater than the corresponding rank of x. Therefore, rank(i2,y) strictly exceeds at least k ranks of x, and hence strictly exceeds the k-th smallest rank of x. This argument is valid for any k.

[1228] Допустим, что n представляет собой количество участников (которое является количеством значений i). Тогда n должно быть либо нечетным, либо четным. Если n нечетное, то допустим, что k=(n+1)/2, и k-й наименьший ранг будет являться медианой. Следовательно, med(x) < med(y). Если n четное, то, когда k=n/2, k-й наименьший ранг x будет строго меньше, чем k-й наименьший ранг y, а также (k+1)-й наименьший ранг x будет строго меньше, чем (k+1)-й наименьший ранг y. Следовательно, среднее значение двух рангов x будет меньше, чем среднее значение двух рангов y. Следовательно, med(x) < med(y). Следовательно, в обоих случаях медиана рангов x строго меньше, чем медиана рангов y. Следовательно, если общий порядок определен посредством сортировки действий по медианному рангу, то событие x будет предшествовать событию y в общем порядке. Что и требовалось доказать.[1228] Assume that n is the number of participants (which is the number of i values). Then n must be either odd or even. If n is odd, then let's say that k=(n+1)/2, and the k-th smallest rank will be the median. Hence med(x) < med(y). If n is even, then when k=n/2, the k-th smallest rank of x will be strictly less than the k-th smallest rank of y, and also the (k+1)-th smallest rank of x will be strictly less than (k +1)-th smallest rank of y. Therefore, the average of the two x ranks will be less than the average of the two y ranks. Hence med(x) < med(y). Therefore, in both cases, the median of x-ranks is strictly less than the median of y-ranks. Therefore, if the overall order is determined by sorting the activities by median rank, then the x event will precede the y event in the overall order. Q.E.D.

[1229] Примерная теорема 3: если «период передачи» представляет собой количество времени, необходимое для распространения существующих событий посредством синхронизации всем участникам, то:[1229] Exemplary Theorem 3: If the "transmission period" is the amount of time required for existing events to propagate through synchronization to all participants, then:

[1230] после 1 периода передачи: все участники приняли события,[1230] after 1 transmission period: all participants accepted the events,

[1231] после 2 периодов передачи: все участники приходят к согласию относительно порядка тех событий,[1231] After 2 transmission periods: all participants agree on the order of those events

[1232] после 3 периодов передачи: все участники знают, что согласие было достигнуто,[1232] after 3 transmission periods: all participants know agreement has been reached,

[1233] после 4 периодов передачи: все участники получают цифровые подписи от всех остальных участников, одобряющие этот порядок консенсуса.[1233] After 4 transmission periods: All participants receive digital signatures from all other participants endorsing this consensus order.

[1234] Доказательство: допустим, что S0 представляет собой набор событий, которые были созданы и/или определены к заданному моменту времени T0. Если каждый участник будет в итоге синхронизироваться с каждым из остальных участников бесконечное число раз, то с вероятностью, равной 1, в итоге будет существовать момент времени T1, к которому события в S0 распространятся каждому участнику, так что каждый участник будет осведомлен обо всех событиях. Это конец первого периода передачи. Допустим, что S1 представляет собой набор событий, которые существуют на момент времени T1 и которые еще не существовали на момент времени T0. Тогда с вероятностью, равной 1, в итоге будет существовать момент времени T2, к которому каждый участник примет каждое из событий в наборе S1, которое является существующим на момент времени T1. Это конец второго периода передачи. Подобным образом, T3 представляет собой момент времени, когда все события в S2, существующие к моменту времени T2, но не до момента времени T1, распространились всем участникам. Следует отметить, что каждый период передачи в итоге заканчивается с вероятностью, равной 1. В среднем каждый период будет продолжаться столько, сколько необходимо для выполнения log2(n) синхронизаций, если имеется n участников.[1234] Proof: Let's assume that S0 is a set of events that have been created and/or defined up to a given time T0. If each participant ends up synchronizing with each of the other participants an infinite number of times, then with probability equal to 1, there will eventually be a point in time T1 by which the events in S0 will propagate to each participant, so that each participant will be aware of all events. This is the end of the first transmission period. Assume that S1 is a set of events that exist at time T1 and that did not yet exist at time T0. Then, with probability equal to 1, there will eventually be a time T2 at which each participant will accept each of the events in the set S1 that is in existence at time T1. This is the end of the second transmission period. Similarly, T3 represents the point in time when all events in S2 that exist up to time T2 but not before time T1 have propagated to all participants. Note that each transmission period eventually ends with a probability of 1. On average, each period will last as long as it takes to complete log2(n) synchronizations if there are n participants.

[1235] К моменту времени T1 каждый участник примет каждое событие в S0.[1235] By time T1, each participant will have received every event in S0.

[1236] К моменту времени T2 заданный участник Алиса примет запись каждого из остальных участников, принимающих каждое событие в S0. Следовательно, Алиса может вычислить ранг для каждого действия в S0 для каждого участника (который представляет собой порядок, в котором тот участник принял то действие), а затем отсортировать события по медиане рангов. Полученный в результате общий порядок не меняется для событий в S0. Это объясняется тем, что полученный в результате порядок является функцией порядка, в котором каждый участник впервые принял указание о каждом из тех событий, который не меняется. Возможно, что порядок, вычисленный Алисой, будет иметь несколько событий из S1, рассеянных среди событий S0. Те события S1 могут все еще меняться, где они попадают в последовательность событий S0. Но относительный порядок событий в S0 не будет меняться. [1236] By time T2, a given member Alice will have received a record of each of the other members receiving each event in S0. Therefore, Alice can calculate the rank for each action in S0 for each participant (which is the order in which that participant took that action), and then sort the events by the median of the ranks. The resulting overall order does not change for events in S0. This is because the resulting order is a function of the order in which each participant first received an indication of each of those events, which does not change. It is possible that the order computed by Alice will have several events from S1 scattered among the events of S0. Those S1 events may still vary where they fall in the sequence of S0 events. But the relative order of events in S0 will not change.

[1237] К моменту времени T3 Алиса узнает общий порядок на объединении S0 и S1, и относительный порядок событий в том объединении меняться не будет. Кроме того, она может найти в этой последовательности самое раннее событие из S1 и может прийти к выводу, что последовательность событий до S1 не будет меняться, даже посредством вставки новых событий не из S0. Следовательно, к моменту времени T3 Алиса может определить, что консенсус был достигнут для порядка событий в истории до первого события S1. Она может подписать с помощью цифровой подписи хеш состояния (например, зафиксированного переменной состояния базы данных, определенной Алисой), являющийся результатом этих событий, происходящих в этом порядке, и отправить подпись в виде части следующего события, которое она создает и/или определяет.[1237] By time T3, Alice will know the general order on the union of S0 and S1, and the relative order of events in that union will not change. In addition, it can find the earliest event from S1 in this sequence and can conclude that the sequence of events before S1 will not change, even by inserting new events not from S0. Therefore, by time T3, Alice can determine that a consensus has been reached for the order of events in history prior to the first event S1. She can digitally sign the hash of the state (eg, captured by a database state variable defined by Alice) resulting from these events occurring in that order, and send the signature as part of the next event she creates and/or defines.

[1238] К моменту времени T4 Алиса примет подобные подписи от других участников. На том этапе она может просто сохранить тот список подписей вместе с состоянием, свидетельством которого они являются, и она может удалить события, которые она сохранила до первого события S1. Что и требовалось доказать.[1238] By time T4, Alice will accept similar signatures from other participants. At that point, it can simply store that list of signatures along with the state they are evidence of, and it can delete the events it has stored prior to the first S1 event. Q.E.D.

[1239] Системы, описанные в настоящем документе, описывают распределенную базу данных, которая достигает консенсуса быстро и безопасно. Она может быть полезным структурным блоком для многих приложений. Например, если транзакции описывают перевод криптовалюты с одного кошелька криптовалюты на другой, и если состоянием является простой показатель текущей суммы в каждом кошельке, то эта система будет представлять собой систему криптовалюты, которая избегает дорогого доказательства выполнения работы, используемого в существующих системах. Автоматическое соблюдение правил позволяет добавлять признаки, которые не являются общераспространенными в текущих криптовалютах. Например, утерянные монеты могут быть восстановлены во избежание дефляции посредством исполнения правила, гласящего, что, если кошелек ни отправляет, ни принимает криптовалюту в течение определенного периода времени, то тот кошелек удаляется, и его содержимое распределяется на другие существующие кошельки пропорционально сумме, которую они содержат на текущий момент. Таким образом, запас денег не будет расти или сокращаться, даже если утерян закрытый ключ для кошелька.[1239] The systems described herein describe a distributed database that reaches consensus quickly and securely. It can be a useful building block for many applications. For example, if transactions describe the transfer of cryptocurrency from one cryptocurrency wallet to another, and if the state is a simple measure of the current amount in each wallet, then this system would be a cryptocurrency system that avoids the expensive proof of work used in existing systems. Automatic compliance with the rules allows you to add signs that are not common in current cryptocurrencies. For example, lost coins can be recovered to avoid deflation by enforcing a rule stating that if a wallet neither sends nor receives cryptocurrency within a certain period of time, then that wallet is deleted and its contents are distributed to other existing wallets in proportion to the amount they currently contain. Thus, the supply of money will not grow or shrink even if the private key for the wallet is lost.

[1240] Другим примером является распределенная игра, которая действует подобно массовой многопользовательской онлайн-игре (MMO), в которую играют на сервере, но достигает того без применения центрального сервера. Консенсус может быть достигнут без какого-либо центрального сервера, осуществляющего управление.[1240] Another example is a distributed game that acts like a massively multiplayer online game (MMO) played on a server, but achieves that without the use of a central server. Consensus can be reached without any central server exercising control.

[1241] Другим примером является система для социальных сетей, которая построена поверх такой базы данных. Поскольку транзакции подписываются с помощью цифровой подписи, и участники принимают информацию о других участниках, это обеспечивает преимущества, заключающиеся в безопасности и удобстве, над текущими системами. Например, может быть реализована система электронной почты со строгой антиспам политикой, поскольку электронные письма не могут иметь фальшивых обратных адресов. Такая система может также стать объединенной социальной системой, сочетающей в одной распределенной базе данных функции, в настоящее время выполняемые электронной почтой, твит-сообщениями, текстовыми сообщениями, форумами, вики и/или другими социальными сетями.[1241] Another example is a social networking system that is built on top of such a database. Because transactions are digitally signed and participants accept information about other participants, this provides security and convenience advantages over current systems. For example, an email system with strict anti-spam policies can be implemented because emails cannot have fake return addresses. Such a system could also become a unified social system, combining in one distributed database the functions currently performed by email, tweets, text messages, forums, wikis and/or other social networks.

[1242] Другие приложения могут включать более сложные криптографические функции, такие как групповые цифровые подписи, при которых группа действует как единое целое для подписания контракта или документа. Эти и другие формы многостороннего вычисления могут быть эффективно реализованы с использованием такой системы распределенного консенсуса.[1242] Other applications may include more complex cryptographic functions, such as group digital signatures, in which the group acts as a unit to sign a contract or document. These and other forms of multiparty computation can be efficiently implemented using such a distributed consensus system.

[1243] Другим примером является система открытого реестра. Кто угодно может заплатить, чтобы сохранить некоторую информацию в системе, уплачивая при этом небольшую сумму криптовалюты (или реальной валюты) за байт в год для хранения информации в системе. Эти денежные средства могут затем быть автоматически распределены участникам, которые хранят те данные, и участникам, которые постоянно синхронизируются, чтобы работать над достижением консенсуса. Участникам может автоматически переводиться небольшая сумма криптовалюты каждый раз, когда они синхронизируются.[1243] Another example is an open registry system. Anyone can pay to keep some information in the system, while paying a small amount of cryptocurrency (or real currency) per byte per year to store information in the system. These funds can then be automatically distributed to the participants who store that data, and to the participants who are constantly in sync to work towards consensus. Participants can automatically receive a small amount of cryptocurrency every time they sync.

[1244] Другим примером является система безопасного обмена сообщениями, которая не поддается анализу трафика. В этом примере распределенная база данных может содержать и/или хранить зашифрованные сообщения между участниками. Каждый участник имеет доступ к каждому сообщению, но сообщения зашифрованы таким образом, что только предполагаемые получатели могут расшифровывать их. Например, Алиса может отправлять сообщение Бобу без ведома остальных участников хешграфа путем шифрования сообщения с помощью открытого ключа Боба, а затем подачи зашифрованного сообщения как транзакции. Такая транзакция может быть распространена или рассредоточена, как обсуждено выше, в отношении остальных участников хешграфа. Сообщество будет знать, когда участник отправляет сообщение, но не будет знать, кому сообщение было отправлено. Каждый участник может попытаться расшифровать каждое сообщение, и распознать те, которые отправлены ему, на основе факта, что расшифрованное сообщение является подлинным и имеет правильную контрольную сумму. [1244] Another example is a secure messaging system that is not amenable to traffic analysis. In this example, the distributed database may contain and/or store encrypted messages between participants. Each participant has access to every message, but the messages are encrypted in such a way that only the intended recipients can decrypt them. For example, Alice can send a message to Bob without the knowledge of the other participants in the hashgraph by encrypting the message with Bob's public key and then serving the encrypted message as a transaction. Such a transaction may be propagated or dispersed, as discussed above, to the rest of the hashgraph participants. The community will know when a member sends a message, but will not know who the message was sent to. Each participant can attempt to decrypt each message, and recognize those sent to him, based on the fact that the decrypted message is genuine and has the correct checksum.

[1245] Альтернативно вычислительные требования в такой системе могут быть снижены, например, следующим образом. Каждая пара участников может вначале провести переговоры относительно двух совместно используемых секретных ключей (по одному для каждого участника в паре), которые они используют для раздачи двух разных криптографически защищенных генераторов случайных чисел (CSPRNG) (по одному для каждого участника в паре). Если Алиса создала такой ключ с Бобом, то она использует свой CSPRNG для генерирования нового псевдослучайного числа каждый раз, когда она добавляет в базу данных сообщение, предназначенное Бобу, и она прилагает то число к зашифрованному сообщению. Затем Боб может быстро проверить число, приложенное к каждому сообщению в базе данных, чтобы проверить, указывает ли любое из таких чисел на сообщения, предназначенные ему. Так как Боб знает совместно используемый ключ, он поэтому знает последовательность чисел, которые будет генерировать Алиса, и, следовательно, он знает, какие числа следует искать при просмотре сообщений в отношении сообщений, адресованных ему Алисой. При нахождении им сообщений с такими приложенными числами он знает, что они являются сообщениями, отправленными ему Алисой, и он может расшифровать их. Только Боб может расшифровывать такие сообщения, поскольку они были зашифрованы с помощью его открытого ключа, и только Боб имеет соответствующий закрытый ключ.[1245] Alternatively, the computational requirements in such a system can be reduced, for example, as follows. Each pair of participants may first negotiate two shared secret keys (one for each participant in the pair) that they use to distribute two different cryptographically secure random number generators (CSPRNGs) (one for each participant in the pair). If Alice has created such a key with Bob, then she uses her CSPRNG to generate a new pseudo-random number each time she adds a message meant for Bob to the database, and she appends that number to the encrypted message. Bob can then quickly check the number attached to each message in the database to see if any of those numbers indicate messages meant for him. Since Bob knows the shared key, he therefore knows the sequence of numbers that Alice will generate, and hence he knows what numbers to look for when browsing messages for messages addressed to him by Alice. When he finds messages with such numbers attached, he knows that they are messages sent to him by Alice, and he can decrypt them. Only Bob can decrypt such messages because they were encrypted with his public key, and only Bob has the corresponding private key.

[1246] В некоторых случаях посторонние сообщения, например, от Кэрол Дэйву, могут иметь разные приложенные числа, и Боб может удалить их, не пытаясь расшифровать сообщения. Более того, Алиса может отправлять Бобу K-ое сообщение с приложенным незашифрованным K-м случайным числом из ее CSPRNG. Алиса и Боб могут продолжать отслеживать то, сколько сообщений Алиса отправила Бобу (например, путем сохранения сообщений в хеш-таблице). Таким образом, в любой заданный момент времени Боб может определить следующее число, которое следует ожидать от каждого из других участников хешграфа. При приеме каждого сообщения Боб может определять посредством хеш-таблицы, соответствует ли приложенное число какому-либо ожидаемому числу. Если нет, то Боб не должен тратить время и ресурсы, пытаясь расшифровать принятое сообщение. [1246] In some cases, extraneous messages, such as those from Carol to Dave, may have different numbers attached, and Bob can delete them without attempting to decrypt the messages. Moreover, Alice can send Bob the Kth message with the unencrypted Kth random number from her CSPRNG attached. Alice and Bob can keep track of how many messages Alice has sent to Bob (for example, by storing the messages in a hash table). Thus, at any given time, Bob can determine the next number to expect from each of the other participants in the hashgraph. On receiving each message, Bob can determine via a hash table whether the attached number matches any expected number. If not, then Bob should not waste time and resources trying to decipher the received message.

[1247] В некоторых случаях Алиса и Боб могут периодически повторно проводить переговоры относительно их совместно используемых ключей и стирать свои старые ключи. Это обеспечивает передовую безопасность таким образом, что в будущем будет затруднительным для третьей стороны идентифицировать сообщения, которыми обменялись Алиса и Боб, даже если их более поздние ключи, в конечном итоге, взломаны. Таким образом, эффективные передача и прием личных сообщений могут быть обеспечены в хешграфе или распределенной базе данных.[1247] In some cases, Alice and Bob may periodically renegotiate their shared keys and erase their old keys. This provides advanced security in such a way that in the future it will be difficult for a third party to identify the messages exchanged between Alice and Bob, even if their later keys are eventually broken. Thus, efficient transmission and reception of private messages can be provided in a hashgraph or distributed database.

[1248] Эти примеры показывают, что распределенная база данных с консенсусом является полезной в качестве компонента многих приложений. Поскольку база данных не использует затратное доказательство выполнения работы, по возможности используя вместо него менее затратное доказательство доли владения, база данных может работать с полным узлом, работающим на менее мощных компьютерах или даже мобильных и встроенных устройствах. [1248] These examples show that a distributed database with consensus is useful as a component of many applications. Because the database does not use expensive proof-of-work, instead using less expensive proof-of-stake when possible, the database can run with a full node running on less powerful computers or even mobile and embedded devices.

[1249] Хоть выше и описано, что событие содержит хеш двух предыдущих событий (один собственный хеш и один чужой хеш), в других вариантах осуществления участник может синхронизироваться с двумя другими участниками для создания и/или определения события, содержащего хеши трех предыдущих событий (один собственный хеш и два чужих хеша). В еще других вариантах осуществления в событие может быть включено любое количество хешей событий предыдущих событий от любого количества участников. В некоторых вариантах осуществления разные события могут содержать разные количества хешей предыдущих событий. Например, первое событие может содержать два хеша событий, и второе событие может содержать три хеша событий.[1249] Although it is described above that an event contains a hash of two previous events (one own hash and one foreign hash), in other embodiments, a participant can synchronize with two other participants to create and / or determine an event containing the hashes of the three previous events ( one own hash and two others' hashes). In still other embodiments, any number of event hashes of previous events from any number of participants can be included in an event. In some embodiments, different events may contain different numbers of hashes of previous events. For example, the first event may contain two event hashes, and the second event may contain three event hashes.

[1250] Хоть события и описаны выше как содержащие хеши (или значения криптографических хешей) предыдущих событий, в других вариантах осуществления событие может быть создано и/или определено таким образом, чтобы содержать указатель, идентификатор и/или любую другую подходящую ссылку на предыдущие события. Например, событие может быть создано и/или определено таким образом, чтобы содержать серийный номер, связанный с предыдущим событием и используемый для его идентификации, таким образом привязывая события друг к другу. В некоторых вариантах осуществления такой серийный номер может включать, например, идентификатор (например, адрес управления доступом к среде (MAC), адрес Интернет-протокола (IP-адрес), присвоенный адрес и/или т. п.), связанный с участником, который создал и/или определил событие, и порядком события, определенным тем участником. Например, если участник имеет идентификатор, равный 10, и событие является 15-ым событием, созданным и/или определенным тем участником, то он может присвоить тому событию идентификатор, равный 1015. В других вариантах осуществления любой другой подходящий формат может быть использован для присвоения идентификаторов событиям. [1250] Although events are described above as containing hashes (or cryptographic hash values) of previous events, in other embodiments, an event may be created and/or defined to contain a pointer, identifier, and/or any other suitable reference to previous events. . For example, an event may be created and/or defined to contain a serial number associated with a previous event and used to identify it, thus linking the events to each other. In some embodiments, such a serial number may include, for example, an identifier (for example, a media access control (MAC) address, an Internet Protocol (IP) address, an assigned address, and/or the like) associated with the member, who created and/or defined the event, and the order of the event determined by that participant. For example, if a participant has an ID of 10 and the event is the 15th event created and/or defined by that participant, then it may assign an ID of 1015 to that event. In other embodiments, any other suitable format may be used to assign event identifiers.

[1251] В других вариантах осуществления события могут содержать полные криптографические хеши, но только части тех хешей передаются во время синхронизации. Например, если Алиса отправляет Бобу событие, содержащее хеш H, и J является первыми 3 байтами H, и Алиса определяет, что из всех событий и хешей, которые она сохранила, H является единственным хешем, начинающимся с J, то она может отправить J вместо H во время синхронизации. Если Боб затем определяет, что у него есть другой хеш, начинающийся с J, то он может отправить ответное сообщение Алисе с запросом полного H. Таким образом хеши могут быть сжаты во время передачи.[1251] In other embodiments, events may contain complete cryptographic hashes, but only portions of those hashes are transmitted during synchronization. For example, if Alice sends Bob an event containing hash H, and J is the first 3 bytes of H, and Alice determines that out of all the events and hashes she has stored, H is the only hash that starts with J, then she can send J instead H during synchronization. If Bob then determines that he has another hash starting with J, then he can send a response message to Alice requesting the full H. This way the hashes can be compressed during transmission.

[1252] Несмотря на то, что примерные системы, показанные и описанные выше, описаны со ссылкой на другие системы, в других вариантах осуществления любая комбинация примерных систем и связанных с ними функциональных возможностей может быть реализована для создания и/или определения распределенной базы данных. Например, примерная система 1, примерная система 2 и примерная система 3 могут быть объединены для создания и/или определения распределенной базы данных. В качестве другого примера, в некоторых вариантах осуществления примерная система 10 может быть реализована вместе с примерной системой 1, но без примерной системы 9. В качестве еще одного примера, примерная система 7 может быть объединена и реализована вместе с примерной системой 6. В еще других вариантах осуществления могут быть реализованы любые другие подходящие комбинации примерных систем.[1252] While the exemplary systems shown and described above have been described with reference to other systems, in other embodiments, any combination of exemplary systems and associated functionality may be implemented to create and/or define a distributed database. For example, exemplary system 1, exemplary system 2, and exemplary system 3 may be combined to create and/or define a distributed database. As another example, in some embodiments, exemplary system 10 may be implemented with exemplary system 1 but without exemplary system 9. As yet another example, exemplary system 7 may be combined and implemented with exemplary system 6. In still others embodiments, any other suitable combinations of exemplary systems may be implemented.

[1253] Хоть выше и были описаны различные варианты осуществления, следует понимать, что они были представлены исключительно в качестве примера, а не ограничения. В случае если способы, описанные выше, указывают на то, что определенные события происходят в определенном порядке, упорядоченная последовательность определенных событий может быть изменена. Дополнительно некоторые из событий могут быть выполнены одновременно в параллельном процессе, когда это возможно, а также выполнены последовательно, как описано выше.[1253] Although various embodiments have been described above, it should be understood that they have been presented solely as an example and not limitation. In case the methods described above indicate that certain events occur in a certain order, the ordered sequence of certain events can be changed. Additionally, some of the events may be executed simultaneously in a parallel process, when possible, as well as performed sequentially, as described above.

[1254] Некоторые варианты осуществления, описанные в настоящем документе, относятся к продукту в виде запоминающего устройства с энергонезависимым машиночитаемым носителем (который также может называться энергонезависимым считываемым процессором носителем), на котором хранятся инструкции или компьютерный код для выполнения различных реализуемых компьютером операций. Машиночитаемый носитель (или считываемый процессором носитель) является энергонезависимым в том смысле, что он по существу не содержит временно распространяющихся сигналов (например, распространяющейся электромагнитной волны, несущей информацию по передающей среде, такой как пространство или кабель). Носители и компьютерный код (который также может называться кодом) могут быть выполнены и созданы для конкретной цели или целей. Примеры энергонезависимых машиночитаемых носителей включают, помимо прочего: магнитные запоминающие устройства, такие как жесткие диски, гибкие диски и магнитная лента; оптические запоминающие устройства, такие как компакт-диск / цифровые видеодиски (CD/DVD), постоянные запоминающие устройства на компакт-дисках (CD-ROM) и голографические устройства; магнитооптические запоминающие устройства, такие как оптические диски; модули обработки сигнала несущей частоты; и аппаратные устройства, которые специально приспособлены для хранения и исполнения программного кода, такие как интегральные схемы специального назначения (ASIC), программируемые логические интегральные схемы (PLD), постоянные запоминающие устройства (ROM) и оперативные запоминающие устройства (RAM). Другие варианты осуществления, описанные в настоящем документе, относятся к компьютерному программному продукту, который может включать, например, инструкции и/или компьютерный код, обсуждаемые в настоящем документе.[1254] Some embodiments described herein relate to a non-volatile computer-readable medium (which may also be referred to as non-volatile, processor-readable medium) storage product that stores instructions or computer code for performing various computer-implemented operations. A computer-readable medium (or a processor-readable medium) is non-volatile in the sense that it essentially does not contain temporally propagating signals (eg, a propagating electromagnetic wave carrying information over a transmission medium such as space or a cable). The media and computer code (which may also be referred to as code) may be executed and created for a particular purpose or purposes. Examples of non-volatile computer-readable media include, but are not limited to: magnetic storage devices such as hard disks, floppy disks, and magnetic tape; optical storage devices such as compact disc/digital video discs (CD/DVD), compact disc read only memory (CD-ROM), and holographic devices; magneto-optical storage devices such as optical discs; carrier frequency signal processing modules; and hardware devices that are specifically adapted for storing and executing program code, such as application specific integrated circuits (ASICs), programmable logic integrated circuits (PLDs), read-only memories (ROMs), and random access memories (RAMs). Other embodiments described herein relate to a computer program product, which may include, for example, the instructions and/or computer code discussed herein.

[1255] Примеры компьютерного кода включают, помимо прочего, микрокод или микроинструкции, машинные инструкции, такие как созданные компилятором, код, используемый для создания веб-службы, и файлы, содержащие инструкции более высокого уровня, которые исполняются компьютером с использованием интерпретатора. Например, варианты осуществления могут быть реализованы с использованием императивных языков программирования (например, C, Fortran и т. д.), функциональных языков программирования (Haskell, Erlang и т. д.), логических языков программирования (например, Prolog), объектно-ориентированных языков программирования (например, Java, C++ и т. д.) или других подходящих языков программирования и/или инструментов разработки. Дополнительные примеры компьютерного кода включают, помимо прочего, сигналы управления, зашифрованный код и сжатый код. [1255] Examples of computer code include, but are not limited to, microcode or microinstructions, machine instructions such as those generated by a compiler, code used to create a web service, and files containing higher-level instructions that are executed by a computer using an interpreter. For example, embodiments may be implemented using imperative programming languages (eg C, Fortran, etc.), functional programming languages (Haskell, Erlang, etc.), logical programming languages (eg, Prolog), object-based oriented programming languages (eg Java, C++, etc.) or other suitable programming languages and/or development tools. Additional examples of computer code include, but are not limited to, control signals, encrypted code, and compressed code.

[1256] Хоть выше и были описаны различные варианты осуществления, следует понимать, что они были представлены исключительно в качестве примера, а не ограничения, и различные изменения могут быть выполнены в отношении формы и деталей. Любая часть устройства и/или способов, описанных в настоящем документе, может быть объединена в любой комбинации, за исключением взаимоисключающих комбинаций. Варианты осуществления, описанные в настоящем документе, могут включать различные комбинации и/или подкомбинации функций, компонентов и/или признаков разных описанных вариантов осуществления.[1256] Although various embodiments have been described above, it should be understood that they have been presented by way of example only and not limitation, and various changes can be made in terms of form and detail. Any part of the apparatus and/or methods described herein may be combined in any combination, except for mutually exclusive combinations. The embodiments described herein may include various combinations and/or subcombinations of functions, components, and/or features of the various embodiments described.

Claims (63)

1. Устройство для реализации распределенной базы данных, содержащее: 1. A device for implementing a distributed database, containing: память, связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, приспособленном для включения во множество вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств; иa memory associated with a distributed database instance on a first computing device adapted to be included in a plurality of computing devices that implement the distributed database via a network operatively coupled to the plurality of computing devices; and процессор, функционально соединенный с памятью и приспособленный для:a processor operatively connected to memory and adapted to: определения первой группы вычислительных устройств из множества вычислительных устройств и второй группы вычислительных устройств из множества вычислительных устройств на основе детерминированной псевдослучайной функции; determining a first group of computing devices from a plurality of computing devices and a second group of computing devices from a plurality of computing devices based on a deterministic pseudo-random function; приема со второго вычислительного устройства из множества вычислительных устройств события, привязанного к первому набору событий, определенному набором вычислительных устройств из множества вычислительных устройств, причем набор вычислительных устройств содержит по меньшей мере одно вычислительное устройство из первой группы вычислительных устройств и по меньшей мере одно вычислительное устройство из второй группы вычислительных устройств;receiving from a second computing device from a plurality of computing devices an event associated with a first set of events defined by a set of computing devices from a plurality of computing devices, wherein the set of computing devices comprises at least one computing device from the first group of computing devices and at least one computing device from the second group of computing devices; идентификации порядка, связанного со вторым набором событий, в результате того, что протокол консенсуса (1) использует значение для параметра события из первого набора событий, которое было определено вычислительным устройством из первой группы вычислительных устройств, и (2) не использует значение для параметра события из первого набора событий, которое было определено вычислительным устройством из второй группы вычислительных устройств;identification of the order associated with the second set of events, as a result of the consensus protocol (1) using the value for the event parameter from the first set of events, which was determined by the computing device from the first group of computing devices, and (2) not using the value for the event parameter from a first set of events that has been determined by a computing device from a second group of computing devices; идентификации порядка, связанного с множеством транзакций, указанным в экземпляре распределенной базы данных, на основе по меньшей мере частично порядка, связанного со вторым набором событий; иidentifying an order associated with the plurality of transactions specified in the distributed database instance based at least in part on the order associated with the second set of events; and сохранения в экземпляре распределенной базы данных порядка, связанного с множеством транзакций. storing in a distributed database instance an order associated with a set of transactions. 2. Устройство по п. 1, отличающееся тем, что процессор приспособлен для идентификации порядка, связанного со вторым набором событий, путем исполнения устойчивого к византийской ошибке протокола консенсуса на основе значения параметра событий, определенного первой группой вычислительных устройств, а не значения параметра событий, определенного второй группой вычислительных устройств. 2. The apparatus of claim 1, wherein the processor is adapted to identify the order associated with the second set of events by executing a Byzantine error-resistant consensus protocol based on the value of the event parameter determined by the first group of computing devices, rather than the value of the event parameter, defined by the second group of computing devices. 3. Устройство по п. 1, отличающееся тем, что первая группа вычислительных устройств является абсолютным дополнением второй группы вычислительных устройств в отношении множества вычислительных устройств, которые реализуют распределенную базу данных.3. The device according to claim 1, characterized in that the first group of computing devices is the absolute complement of the second group of computing devices in relation to the plurality of computing devices that implement a distributed database. 4. Устройство по п. 1, отличающееся тем, что процессор дополнительно приспособлен для:4. The device according to claim 1, characterized in that the processor is additionally adapted for: определения третьей группы вычислительных устройств из множества вычислительных устройств, которые реализуют распределенную базу данных, причем третья группа вычислительных устройств связана с пороговым значением верхнего лимита и пороговым значением нижнего лимита;determining a third group of computing devices from a plurality of computing devices that implement a distributed database, the third group of computing devices being associated with an upper limit threshold and a lower limit threshold; установления сеанса связи для синхронизации событий с каждым вычислительным устройством из третьей группы вычислительных устройств; и establishing a communication session to synchronize events with each computing device from the third group of computing devices; and после синхронизации с вычислительным устройством из третьей группы вычислительных устройств: after synchronization with a computing device from the third group of computing devices: прекращения сеанса связи с вычислительным устройством из третьей группы вычислительных устройств, когда количество вычислительных устройств в третьей группе вычислительных устройств достигает порогового значения верхнего лимита; terminating a communication session with a computing device from the third group of computing devices when the number of computing devices in the third group of computing devices reaches a threshold value of the upper limit; поддержания сеанса связи с вычислительным устройством из третьей группы вычислительных устройств, когда количество вычислительных устройств в третьей группе вычислительных устройств находится ниже порогового значения верхнего лимита и выше порогового значения нижнего лимита; иmaintaining a communication session with a computing device from the third computing device group when the number of computing devices in the third computing device group is below the upper limit threshold and above the lower limit threshold; and установления сеанса связи для синхронизации событий с третьим вычислительным устройством из множества вычислительных устройств, когда количество вычислительных устройств в третьей группе вычислительных устройств ниже порогового значения нижнего лимита, причем третье вычислительное устройство не включено в третью группу вычислительных устройств.establishing a communication session to synchronize events with a third computing device from a plurality of computing devices, when the number of computing devices in the third group of computing devices is below the threshold value of the lower limit, and the third computing device is not included in the third group of computing devices. 5. Устройство по п. 1, отличающееся тем, что процессор дополнительно приспособлен для:5. The device according to claim 1, characterized in that the processor is additionally adapted for: исполнения процесса синхронизации событий со вторым вычислительным устройством для приема события; и executing an event synchronization process with the second computing device to receive the event; and прекращения процесса синхронизации событий, когда достигается пороговое значение синхронизации, причем пороговое значение синхронизации связано с объемом синхронизируемых данных.terminating the event synchronization process when a synchronization threshold is reached, wherein the synchronization threshold is related to the amount of data to be synchronized. 6. Устройство по п. 1, отличающееся тем, что процессор дополнительно приспособлен для:6. The device according to claim 1, characterized in that the processor is additionally adapted for: исполнения процесса синхронизации событий со вторым вычислительным устройством для приема события; и executing an event synchronization process with the second computing device to receive the event; and прекращения процесса синхронизации событий, когда достигается пороговое значение синхронизации, причем пороговое значение синхронизации связано с количеством синхронизируемых событий.terminating the event synchronization process when a synchronization threshold is reached, wherein the synchronization threshold is related to the number of synchronized events. 7. Устройство по п. 1, отличающееся тем, что процессор дополнительно приспособлен для:7. The device according to claim 1, characterized in that the processor is additionally adapted for: приема события со второго вычислительного устройства на основе синхронизации событий со вторым вычислительным устройством из множества вычислительных устройств, причем второе вычислительное устройство избрано случайным образом из множества вычислительных устройств.receiving an event from the second computing device based on event synchronization with the second computing device from the plurality of computing devices, the second computing device being randomly selected from the plurality of computing devices. 8. Энергонезависимый, считываемый процессором носитель, хранящий код, представляющий инструкции, которые должны быть исполнены процессором, причем код содержит код для предписывания процессору:8. A non-volatile, processor-readable medium storing code representing instructions to be executed by the processor, the code containing code for instructing the processor to: осуществить назначение на вычислительном устройстве из множества вычислительных устройств, которое реализует распределенную базу данных, первой группы вычислительных устройств из множества вычислительных устройств как ленивых вычислительных устройств, причем вторая группа вычислительных устройств из множества вычислительных устройств представляет собой неленивые вычислительные устройства, причем вторая группа вычислительных устройств является абсолютным дополнением первой группы вычислительных устройств в отношении множества вычислительных устройств;to assign, on a computing device from a plurality of computing devices that implements a distributed database, a first group of computing devices from a plurality of computing devices as lazy computing devices, wherein the second group of computing devices from a plurality of computing devices is non-lazy computing devices, wherein the second group of computing devices is the absolute complement of the first group of computing devices in relation to the plurality of computing devices; принять с набора вычислительных устройств из множества вычислительных устройств первый набор событий, причем каждое событие из первого набора событий определено вычислительным устройством из множества вычислительных устройств;receive a first set of events from a set of computing devices of the plurality of computing devices, each event of the first set of events being determined by a computing device of the plurality of computing devices; идентифицировать порядок, связанный со вторым набором событий, в результате того, что протокол консенсуса (1) использует параметр первого события из первого набора событий на основе того, что первое событие было определено вычислительным устройством из второй группы вычислительных устройств, и (2) не использует параметр второго события из первого набора событий на основе того, что второе событие было определено вычислительным устройством из первой группы вычислительных устройств; иidentify the order associated with the second set of events as a result of the consensus protocol (1) using the parameter of the first event from the first set of events based on the fact that the first event was determined by a computing device from the second group of computing devices, and (2) not using a second event parameter from the first set of events based on the fact that the second event was determined by the computing device from the first group of computing devices; and сохранить порядок, связанный со вторым набором событий.keep the order associated with the second set of events. 9. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что дополнительно содержит код для предписывания процессору:9. Non-volatile, processor-readable media according to claim 8, characterized in that it additionally contains code for prescribing to the processor: вычислить состояние распределенной базы данных на основе порядка, связанного со вторым набором событий.compute the state of the distributed database based on the order associated with the second set of events. 10. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что код для предписывания процессору осуществить назначение содержит код для предписывания процессору выбрать первую группу вычислительных устройств из множества вычислительных устройств с использованием детерминированной псевдослучайной функции.10. The nonvolatile, processor-readable medium of claim 8, wherein the code for causing the processor to make the assignment comprises code for causing the processor to select a first group of computing devices from a plurality of computing devices using a deterministic pseudo-random function. 11. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что каждое событие из первого набора событий связано с общим раундом.11. A non-volatile, processor-readable medium according to claim 8, characterized in that each event from the first set of events is associated with a common round. 12. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что код для предписывания процессору осуществить назначение содержит код для предписывания процессору осуществить назначение для первого раунда протокола консенсуса, причем код дополнительно содержит код для предписывания процессору:12. The nonvolatile, processor-readable medium of claim 8, wherein the code for causing the processor to make an assignment comprises code for causing the processor to make an assignment for the first round of the consensus protocol, the code further comprising code for causing the processor to: осуществить назначение третьей группы вычислительных устройств из множества вычислительных устройств как ленивых вычислительных устройств для второго раунда протокола консенсуса, причем первая группа вычислительных устройств отличается от третьей группы вычислительных устройств.to assign a third group of computing devices from the plurality of computing devices as lazy computing devices for the second round of the consensus protocol, wherein the first group of computing devices is different from the third group of computing devices. 13. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что код для предписывания процессору осуществить назначение содержит код для предписывания процессору выбрать первую группу вычислительных устройств из множества вычислительных устройств на основе объема доли, связанной с каждым вычислительным устройством из множества вычислительных устройств.13. The non-volatile, processor-readable medium of claim 8, wherein the code for causing the processor to make the assignment comprises code for causing the processor to select a first group of computing devices from a plurality of computing devices based on the size of the share associated with each computing device of the plurality of computing devices. . 14. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что параметр первого события из первого набора событий определен с применением первого способа и параметр второго события из первого набора событий определен с применением второго способа, отличного от первого способа.14. A non-volatile, processor-readable medium according to claim 8, characterized in that the parameter of the first event from the first set of events is determined using the first method and the parameter of the second event from the first set of events is determined using a second method different from the first method. 15. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что вычислительное устройство из множества вычислительных устройств представляет собой первое вычислительное устройство из множества вычислительных устройств, причем код дополнительно содержит код для предписывания процессору:15. The non-volatile, processor-readable medium of claim 8, wherein the computing device of the plurality of computing devices is the first computing device of the plurality of computing devices, the code further comprising code for instructing the processor: исполнить процесс синхронизации событий со вторым вычислительным устройством из множества вычислительных устройств для приема по меньшей мере одного события из первого набора событий; и execute an event synchronization process with a second computing device of the plurality of computing devices to receive at least one event from the first set of events; and прекратить процесс синхронизации событий, когда достигается пороговое значение синхронизации, причем пороговое значение синхронизации связано с количеством синхронизируемых событий.stop the event synchronization process when the synchronization threshold is reached, wherein the synchronization threshold is related to the number of synchronized events. 16. Энергонезависимый, считываемый процессором носитель по п. 8, отличающийся тем, что первое событие из второго набора событий было определено вычислительным устройством из первой группы вычислительных устройств и второе событие из второго набора событий было определено вычислительным устройством из второй группы вычислительных устройств.16. A non-volatile, processor-readable medium according to claim 8, characterized in that the first event from the second set of events was determined by a computing device from the first group of computing devices and the second event from the second set of events was determined by a computing device from the second group of computing devices. 17. Способ реализации распределенной базы данных, включающий:17. A method for implementing a distributed database, including: идентификацию на вычислительном устройстве из множества вычислительных устройств, которое реализует распределенную базу данных, первой группы вычислительных устройств из множества вычислительных устройств и второй группы вычислительных устройств из множества вычислительных устройств, причем вторая группа вычислительных устройств является абсолютным дополнением первой группы вычислительных устройств в отношении множества вычислительных устройств;identifying on a computing device from a plurality of computing devices that implements a distributed database, a first group of computing devices from a plurality of computing devices and a second group of computing devices from a plurality of computing devices, wherein the second group of computing devices is the absolute complement of the first group of computing devices with respect to the plurality of computing devices ; прием с набора вычислительных устройств из множества вычислительных устройств первого набора событий, причем каждое событие из первого набора событий определено вычислительным устройством из множества вычислительных устройств;receiving from a set of computing devices of a plurality of computing devices a first set of events, each event from the first set of events being determined by a computing device of the plurality of computing devices; идентификацию с использованием первого процесса номера раунда для каждого события из первого набора событий, которое было определено вычислительным устройством из первой группы вычислительных устройств;identifying, using the first process, a round number for each event from the first set of events that has been determined by the computing device from the first group of computing devices; идентификацию с использованием второго процесса, отличного от первого процесса, номера раунда для каждого события из первого набора событий, которое было определено вычислительным устройством из второй группы вычислительных устройств;identifying, using a second process different from the first process, a round number for each event from the first set of events that has been determined by a computing device from the second group of computing devices; определение поднабора событий из первого набора событий на основе номера раунда для каждого события из первого набора событий, причем каждое событие из поднабора событий определено вычислительным устройством из второй группы вычислительных устройств;determining a subset of events from the first set of events based on a round number for each event from the first set of events, each event from the subset of events being determined by a computing device from the second group of computing devices; вычисление порядка, связанного со вторым набором событий, в результате того, что протокол консенсуса использует поднабор событий; иcalculating an order associated with the second set of events as a result of the consensus protocol using a subset of events; and сохранение порядка, связанного со вторым набором событий.preserving the order associated with the second set of events. 18. Способ по п. 17, отличающийся тем, что дополнительно включает:18. The method according to p. 17, characterized in that it additionally includes: вычисление состояния распределенной базы данных на основе порядка, связанного со вторым набором событий.calculating the state of the distributed database based on the order associated with the second set of events. 19. Способ по п. 17, отличающийся тем, что первый процесс включает идентификацию номера раунда для каждого события из первого набора событий как равного номеру раунда по меньшей мере одного события-родителя для того события из первого набора событий.19. The method of claim 17, wherein the first process includes identifying the round number for each event in the first set of events as equal to the round number of at least one parent event for that event in the first set of events. 20. Способ по п. 17, отличающийся тем, что номер раунда для каждого события из поднабора событий представляет собой начальный экземпляр, в котором вычислительное устройство, определяющее то событие, определило событие с номером раунда.20. The method of claim 17, wherein the round number for each event in the subset of events is the initial instance in which the computing device that determines that event determined the round number event. 21. Способ по п. 17, отличающийся тем, что идентификация первой группы вычислительных устройств включает идентификацию первой группы вычислительных устройств из множества вычислительных устройств с использованием детерминированной псевдослучайной функции.21. The method of claim 17, wherein identifying the first group of computing devices includes identifying the first group of computing devices from the plurality of computing devices using a deterministic pseudo-random function. 22. Способ по п. 17, отличающийся тем, что идентификация первой группы вычислительных устройств включает идентификацию первой группы вычислительных устройств для первого раунда протокола консенсуса, причем способ дополнительно включает:22. The method of claim 17, wherein identifying the first group of computing devices includes identifying the first group of computing devices for the first round of the consensus protocol, the method further comprising: идентификацию третьей группы вычислительных устройств из множества вычислительных устройств для второго раунда протокола консенсуса, причем первая группа вычислительных устройств отличается от третьей группы вычислительных устройств.identifying a third group of computing devices from the plurality of computing devices for the second round of the consensus protocol, wherein the first group of computing devices is different from the third group of computing devices. 23. Способ по п. 17, отличающийся тем, что дополнительно включает:23. The method according to p. 17, characterized in that it additionally includes: исполнение процесса синхронизации событий с вычислительным устройством из набора вычислительных устройств для приема по меньшей мере одного события из первого набора событий; и executing an event synchronization process with a computing device from the set of computing devices to receive at least one event from the first set of events; and прекращение процесса синхронизации событий, когда достигается пороговое значение синхронизации, причем пороговое значение синхронизации связано с объемом синхронизируемых данных.terminating the event synchronization process when a synchronization threshold is reached, wherein the synchronization threshold is related to the amount of data to be synchronized. 24. Способ по п. 17, отличающийся тем, что дополнительно включает:24. The method according to p. 17, characterized in that it additionally includes: исполнение процесса синхронизации событий с вычислительным устройством из набора вычислительных устройств для приема по меньшей мере одного события из первого набора событий; иexecuting an event synchronization process with a computing device from the set of computing devices to receive at least one event from the first set of events; and прекращение процесса синхронизации событий, когда достигается пороговое значение синхронизации, причем пороговое значение синхронизации связано с количеством синхронизируемых событий.terminating the event synchronization process when a synchronization threshold is reached, wherein the synchronization threshold is related to the number of synchronized events.
RU2020133528A 2017-07-11 2018-07-11 Methods and device for effective implementation of a distributed database in a network RU2775994C2 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201762531153P 2017-07-11 2017-07-11
US62/531,153 2017-07-11

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
RU2020100003A Division RU2735730C1 (en) 2017-07-11 2018-07-11 Methods and device for efficient implementation of distributed database in network

Publications (3)

Publication Number Publication Date
RU2020133528A RU2020133528A (en) 2020-12-01
RU2020133528A3 RU2020133528A3 (en) 2022-03-25
RU2775994C2 true RU2775994C2 (en) 2022-07-12

Family

ID=

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060047720A1 (en) * 2004-08-30 2006-03-02 Ravi Kulkarni Database backup, refresh and cloning system and method
RU2417426C2 (en) * 2005-08-19 2011-04-27 Майкрософт Корпорейшн Database fragment cloning and management
US20120303631A1 (en) * 2011-05-24 2012-11-29 Red Lambda, Inc. System and Method for Storing Files in a Distributed Environment
US20130263119A1 (en) * 2012-03-29 2013-10-03 Vmware, Inc. Method and system for visualizing linked clone trees

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060047720A1 (en) * 2004-08-30 2006-03-02 Ravi Kulkarni Database backup, refresh and cloning system and method
RU2417426C2 (en) * 2005-08-19 2011-04-27 Майкрософт Корпорейшн Database fragment cloning and management
US20120303631A1 (en) * 2011-05-24 2012-11-29 Red Lambda, Inc. System and Method for Storing Files in a Distributed Environment
US20140222829A1 (en) * 2011-05-24 2014-08-07 Red Lambda, Inc. Systems for Storing Files in a Distributed Environment
US20130263119A1 (en) * 2012-03-29 2013-10-03 Vmware, Inc. Method and system for visualizing linked clone trees

Similar Documents

Publication Publication Date Title
US11681821B2 (en) Methods and apparatus for efficiently implementing a distributed database within a network
AU2021200222B2 (en) Methods and apparatus for a distributed database including anonymous entries
RU2775994C2 (en) Methods and device for effective implementation of a distributed database in a network
RU2775263C2 (en) Methods and apparatus for a distributed database containing anonymous input data