RU2778013C2 - Methods and device for a distributed database on the network - Google Patents

Methods and device for a distributed database on the network Download PDF

Info

Publication number
RU2778013C2
RU2778013C2 RU2019132736A RU2019132736A RU2778013C2 RU 2778013 C2 RU2778013 C2 RU 2778013C2 RU 2019132736 A RU2019132736 A RU 2019132736A RU 2019132736 A RU2019132736 A RU 2019132736A RU 2778013 C2 RU2778013 C2 RU 2778013C2
Authority
RU
Russia
Prior art keywords
event
distributed database
events
value
processor
Prior art date
Application number
RU2019132736A
Other languages
Russian (ru)
Other versions
RU2019132736A (en
RU2019132736A3 (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
Priority claimed from US14/988,873 external-priority patent/US9390154B1/en
Priority claimed from US15/153,011 external-priority patent/US9529923B1/en
Application filed by Свирлдз, Инк. filed Critical Свирлдз, Инк.
Publication of RU2019132736A publication Critical patent/RU2019132736A/en
Publication of RU2019132736A3 publication Critical patent/RU2019132736A3/ru
Application granted granted Critical
Publication of RU2778013C2 publication Critical patent/RU2778013C2/en

Links

Images

Abstract

FIELD: information systems.
SUBSTANCE: invention relates to information systems, namely distributed databases. A device for implementing a distributed database contains: memory containing an instance of a distributed database on the first computing device, made with the possibility of inclusion in a plurality of computing devices, which implements a distributed database via a network functionally connected to a plurality of computing devices, as well as a processor functionally connected to an instance of a distributed database, while the processor made with the possibility of determining the first event at the first moment of time, in this case, the processor is designed with the possibility of receiving at the second moment of time after the first moment of time and from the second computing device from a plurality of computing devices.
EFFECT: expansion of the range of solutions for databases.
99 cl, 24 dwg, 1 tbl

Description

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

Настоящая заявка является частичным продолжением заявки № 15/205688 на патент США, поданной 8 июля 2016 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», которая является продолжением заявки № 14/988873 на патент США, поданной 6 января 2016 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», которая испрашивает приоритет и преимущество предварительной заявки № 62/211411 на патент США, поданной 28 августа 2015 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», каждая из которых включена в настоящий документ посредством ссылки во всей своей полноте.This application is a continuation in part of U.S. Patent Application No. 15/205688, filed July 8, 2016, entitled "Methods and Apparatus for a Distributed Database within a Network", which is a continuation of U.S. Patent Application No. 14/988873, filed January 6, 2016, entitled "Methods and Apparatus for a Distributed Database within a Network", which claims the priority and benefit of Provisional Application No. U.S. Patent No. 62/211411, filed August 28, 2015, titled "Methods and Apparatus for a Distributed Database within a Network", each of which is incorporated herein by reference in in all its fullness.

Настоящая заявка также является частичным продолжением заявки № 15/153011 на патент США, поданной 12 мая 2016 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», которая является частичным продолжением заявки № 14/988873 на патент США, поданной 6 января 2016 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», которая испрашивает приоритет и преимущество предварительной заявки № 62/211411 на патент США, поданной 28 августа 2015 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», каждая из которых включена в настоящий документ посредством ссылки во всей своей полноте.This application is also a continuation in part of U.S. Patent Application No. 15/153011, filed May 12, 2016, entitled "Methods and Apparatus for a Distributed Database within a Network", which is a partial continuation of U.S. Patent Application No. 14/988873, filed January 6, 2016, titled "Methods and Apparatus for a Distributed Database within a Network", which claims the priority and benefit of prior U.S. Patent Application No. 62/211411, filed Aug. 28, 2015, entitled "Methods and Apparatus for a Distributed Database within a Network", each of which is incorporated herein by links in their entirety.

Настоящая заявка также испрашивает приоритет и преимущество предварительной заявки № 62/211411 на патент США, поданной 28 августа 2015 г., под названием «Methods and Apparatus for a Distributed Database within a Network (Способы и устройство для распределенной базы данных в сети)», которая была включена в настоящий документ посредством ссылки во всей своей полноте.This application also claims the priority and benefit of U.S. Provisional Application No. 62/211411, filed Aug. 28, 2015, titled "Methods and Apparatus for a Distributed Database within a Network" which has been incorporated herein by reference in its entirety.

Настоящая заявка также испрашивает приоритет и преимущество предварительной заявки № 62/344682 на патент США, поданной 2 июня 2016 г., под названием «Methods and Apparatus for a Distributed Database with Consensus Determined Based on Weighted Stakes (Способы и устройство для распределенной базы данных с консенсусом, определенным на основе взвешенных долей)», которая включена в настоящий документ посредством ссылки во всей своей полноте.This application also claims the priority and benefit of U.S. Provisional Application No. 62/344682, filed June 2, 2016, entitled "Methods and Apparatus for a Distributed Database with Consensus Determined Based on Weighted Stakes." consensus determined on the basis of weighted proportions)”, which is incorporated herein by reference in its entirety.

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

Варианты осуществления, описанные в настоящем документе, относятся в целом к системе базы данных и более конкретно к способам и устройству для реализации системы базы данных на множестве устройств в сети.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.

Некоторые известные системы распределенных баз данных пытаются достичь консенсуса для значений в системах распределенных баз данных (например, относительно порядка, в котором происходят транзакции). Например, многопользовательская онлайн-игра может иметь множество компьютерных серверов, доступ к которым пользователи могут получать, чтобы играть в игру. Если два пользователя одновременно пытаются поднять конкретный предмет в игре, то важно, чтобы серверы в системе распределенной базы данных в итоге достигли согласия относительно того, какой из двух пользователей подобрал предмет первым. Some well-known distributed database systems attempt to reach consensus on 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, then it is important that the servers in the distributed database system eventually agree on which of the two users picked up the item first.

Такой распределенный консенсус может быть обработан посредством способов и/или процессов, таких как алгоритм Паксос или его варианты. При использовании таких способов и/или процессов один сервер системы базы данных устанавливается в качестве «лидера», и лидер принимает решения относительно порядка событий. События (например, в многопользовательских играх) передаются лидеру, лидер выбирает упорядоченную последовательность для событий, и лидер передает эту упорядоченную последовательность на другие серверы системы базы данных.Such distributed consensus may be handled by methods and/or processes such as the Paxos algorithm or variations 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 the other database system servers.

Однако при таких известных подходах используется сервер, управляемый некоторой стороной (например, центральным сервером управления), которой доверяют пользователи системы базы данных (например, игроки в игре). Соответственно существует необходимость в способах и устройстве для системы распределенной базы данных, для которых не будут требоваться лидер или доверенная третья сторона, чтобы управлять системой базы данных.However, such known approaches use a server managed by some party (eg, a central control server) that is trusted by the users of the database system (eg, the players in the game). 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.

Другие распределенные базы данных спроектированы без наличия лидера, но являются неэффективными. Например, одна такая распределенная база данных основана на структуре данных «цепочка блоков», которая может достигать консенсуса. Однако такая система может быть ограничена малым количеством транзакций в секунду для всех участников вместе взятых (например, 7 транзакций в секунду), что недостаточно для крупномасштабной игры или для многих традиционных приложений баз данных. Соответственно существует потребность в системе распределенной базы данных, которая достигает консенсуса без лидера и которая является эффективной. Other distributed databases are designed without a leader but are inefficient. For example, one such distributed database is based on a "chain of blocks" data structure that can reach consensus. However, such a system may be limited to a small number of transactions per second for all participants combined (eg, 7 transactions per second), which is not enough for a large-scale game or for many traditional database applications. Accordingly, there is a need for a distributed database system that achieves consensus without a leader and that is efficient.

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

В некоторых вариантах осуществления устройство содержит экземпляр распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, которые реализуют распределенную базу данных. Устройство также содержит процессор, выполненный с возможностью определения первого события, связанного с первым набором событий. Процессор выполнен с возможностью приема со второго вычислительного устройства из набора вычислительных устройств сигнала, представляющего второе событие, (1) определенное вторым вычислительным устройством и (2) связанное со вторым набором событий. Процессор выполнен с возможностью идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере одного результата протокола. Процессор выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного с третьим набором событий.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. The device also includes a processor configured to determine the first event associated with the first set of events. The processor is configured to receive 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 configured to identify the order associated with the third set of events based on at least one protocol result. The processor is configured to store in the distributed database instance the order associated with the third set of events.

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

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

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

На фиг. 3–6 проиллюстрированы примеры DAG на основе хешей согласно одному варианту осуществления. In FIG. 3-6 illustrate examples of hash-based DAGs according to one embodiment.

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

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

На фиг. 9a–9c показаны таблицы векторов, иллюстрирующие примеры векторов значений.In FIG. 9a-9c show vector tables illustrating examples of value vectors.

На фиг. 10a–10d показаны таблицы векторов, иллюстрирующие примеры векторов значений, обновляемых для включения новых значений.In FIG. 10a-10d show vector tables illustrating examples of value vectors updated to include new values.

На фиг. 11 показана блок-схема, иллюстрирующая работу системы распределенной базы данных согласно одному варианту осуществления.In FIG. 11 is a block diagram illustrating the operation of a distributed database system according to one embodiment.

На фиг. 12 показана блок-схема, иллюстрирующая работу системы распределенной базы данных согласно одному варианту осуществления.In FIG. 12 is a block diagram illustrating the operation of a distributed database system according to one embodiment.

На фиг. 13 показана блок-схема, иллюстрирующая работу системы распределенной базы данных согласно одному варианту осуществления.In FIG. 13 is a block diagram illustrating the operation of a distributed database system according to one embodiment.

На фиг. 14 показан пример DAG на основе хешей согласно одному варианту осуществления. In FIG. 14 shows an example of a hash-based DAG according to one embodiment.

На фиг. 15 показан пример DAG на основе хешей согласно одному варианту осуществления. In FIG. 15 shows an example of a hash-based DAG according to one embodiment.

На фиг. 16a–16b проиллюстрирован пример способа достижения консенсуса для использования с DAG на основе хешей согласно одному варианту осуществления. In FIG. 16a-16b illustrate an example of a consensus method for use with a hash-based DAG according to one embodiment.

На фиг. 17a–17b проиллюстрирован пример способа достижения консенсуса для использования с DAG на основе хешей согласно другому варианту осуществления. In FIG. 17a-17b illustrate an example of a consensus method for use with a hash-based DAG according to another embodiment.

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

В некоторых вариантах осуществления устройство содержит экземпляр распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Устройство также содержит процессор, функционально соединенный с памятью, хранящей экземпляр распределенной базы данных. Процессор выполнен с возможностью определения в первый момент времени первого события, связанного с первым набором событий. Процессор выполнен с возможностью приема во второй момент времени, после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств, сигнала, представляющего второе событие, (1) определенное вторым вычислительным устройством и (2) связанное со вторым набором событий. Процессор выполнен с возможностью идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере одного результата протокола. Каждое событие из третьего набора событий является событием из по меньшей мере одного из первого набора событий или второго набора событий. Процессор выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного с третьим набором событий.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 operably 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 configured to determine at a first time the first event associated with the first set of events. The processor is configured to receive at a second time point, after the first time point, and from a second computing device from 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 configured to identify the order associated with the third set of events based on at least one protocol result. Each event from the third event set is an event from at least one of the first event set or the second event set. The processor is configured to store in the distributed database instance the order associated with the third set of events.

В некоторых случаях каждое событие из третьего набора событий связано с набором атрибутов (например, порядковый номер, номер поколения, номер раунда, принятый номер и/или метка времени и т. д.). Результат протокола может содержать значение для каждого атрибута из набора атрибутов для каждого события из третьего набора событий. Значение для первого атрибута из набора атрибутов может включать первое числовое значение, и значение для второго атрибута из набора атрибутов может включать двоичное значение, связанное с первым числовым значением. Двоичное значение для второго атрибута (например, значение приращения раунда) для события из третьего набора событий может быть основано на том, соответствует ли взаимосвязь между этим событием и четвертым набором событий, связанным с этим событием, некоторому критерию (например, количеству событий, строго идентифицированных этим событием). Каждое событие из четвертого набора событий (1) является предком события из третьего набора событий и (2) связано с первым общим атрибутом, как и остальные события из четвертого набора событий (например, общим номером раунда, указанием о том, что представляет собой первое событие раунда R и т. п.). Первый общий атрибут может являться индикатором первого случая, в котором событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано с первым конкретным значением (например, указанием о том, что представляет собой первое событие раунда R и т. п.).In some cases, each event in 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 meets some criterion (e.g., the number of events strongly identified this 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 indicative 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.).

Значение для третьего атрибута (например, принятого номера раунда) из набора атрибутов может включать второе числовое значение, основанное на взаимосвязи между событием и пятым набором событий, связанным с событием. Каждое событие из пятого набора событий является потомком события и связано со вторым общим атрибутом (например, является известным), как и остальные события из пятого набора событий. Второй общий атрибут может быть связан с (1) третьим общим атрибутом (например, указанием о том, что представляет собой первое событие раунда R или свидетеля), который является указанием о первом случае, в котором второе событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано со вторым конкретным значением, отличным от первого конкретного значения, и (2) результатом, основанным на наборе указаний. Каждое указание из набора указаний может быть связано с событием из шестого набора событий. Каждое событие из шестого набора событий может быть связано с четвертым общим атрибутом, который является указанием о первом случае, в котором третье событие, определенное каждым вычислительным устройством из набора вычислительных устройств, связано с третьим конкретным значением, отличным от первого конкретного значения и второго конкретного значения. В некоторых случаях первое конкретное значение является первым целым числом (например, первым номером раунда R), второе конкретное значение является вторым целым числом (например, вторым номером раунда, R+n), превышающим первое целое число, и третье конкретное значение является третьим целым числом (например, третьим номером раунда, R+n+m), превышающим второе целое число.The value for the third attribute (eg, received round number) from the attribute set may include a second numeric value based on the relationship between the event and the fifth set of events 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.

В некоторых вариантах осуществления устройство содержит память и процессор. Память содержит экземпляр распределенной базы данных на первом вычислительном устройстве, приспособленном для включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Процессор функционально соединен с памятью, хранящей экземпляр распределенной базы данных, и выполнен с возможностью приема сигнала, представляющего событие, связанное с набором событий. Процессор выполнен с возможностью идентификации порядка, связанного с набором событий, на основе по меньшей мере результата протокола. Процессор выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного с набором событий.In some embodiments, the implementation of the device contains 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 storing an instance of the distributed database and configured to receive a signal representing an event associated with the set of events. The processor is configured to identify the order associated with the set of events based on at least the result of the protocol. The processor is configured to store in the distributed database instance the order associated with the set of events.

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

В некоторых вариантах осуществления экземпляр распределенной базы данных на первом вычислительном устройстве может быть выполнен с возможностью включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Первое вычислительное устройство сохраняет множество транзакций в экземпляре распределенной базы данных. Модуль конвергенции базы данных может быть реализован в памяти или процессоре первого вычислительного устройства. Модуль конвергенции базы данных может быть функционально связан с экземпляром распределенной базы данных. Модуль конвергенции базы данных может быть выполнен с возможностью определения в первый момент времени первого события, связанного с первым набором событий. Каждое событие из первого набора событий представляет собой последовательность байтов и связано с (1) набором транзакций из множества наборов транзакций и (2) порядком, связанным с набором транзакций. Каждая транзакция из набора транзакций представляет собой транзакцию из множества транзакций. Модуль конвергенции базы данных может быть выполнен с возможностью приема, во второй момент времени после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств, второго события, (1) определенного вторым вычислительным устройством и (2) связанного со вторым набором событий. Модуль конвергенции базы данных может быть выполнен с возможностью определения третьего события, связанного с первым событием и вторым событием. Модуль конвергенции базы данных может быть выполнен с возможностью идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере первого набора событий и второго набора событий. Каждое событие из третьего набора событий представляет собой событие из по меньшей мере одного из первого набора событий или второго набора событий. Модуль конвергенции базы данных может быть выполнен с возможностью идентификации порядка, связанного с множеством транзакций, на основе по меньшей мере (1) порядка, связанного с третьим набором событий, и (2) порядка, связанного с каждым набором транзакций из множества наборов транзакций. Модуль конвергенции базы данных может быть выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного со множеством транзакций, сохраненных на первом вычислительном устройстве.In some embodiments, an instance of the distributed database on a first computing device may be configured 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 associated with a distributed database instance. The database convergence module may be configured to determine at a first time a 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 the set of transactions and (2) an order associated with the set of transactions. Each transaction in the set of transactions is a transaction in the set of transactions. The database convergence module may be configured to receive, at a second time after the first time and from a second computing device of the computing device set, 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 configured to determine a third event associated with the first event and the second event. The database convergence module may be configured to identify an 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 configured 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 configured to store in the distributed database instance an order associated with a plurality of transactions stored on the first computing device.

В некоторых вариантах осуществления экземпляр распределенной базы данных на первом вычислительном устройстве может быть выполнен с возможностью включения в набор вычислительных устройств, который реализует распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Модуль конвергенции базы данных может быть реализован в памяти или процессоре первого вычислительного устройства. Модуль конвергенции базы данных может быть выполнен с возможностью определения в первый момент времени первого события, связанного с первым набором событий. Каждое событие из первого набора событий представляет собой последовательность байтов. Модуль конвергенции базы данных может быть выполнен с возможностью приема, во второй момент времени после первого момента времени и со второго вычислительного устройства из набора вычислительных устройств, второго события, (1) определенного вторым вычислительным устройством и (2) связанного со вторым набором событий. Каждое событие из второго набора событий представляет собой последовательность байтов. Модуль конвергенции базы данных может быть выполнен с возможностью определения третьего события, связанного с первым событием и вторым событием. Модуль конвергенции базы данных может быть выполнен с возможностью идентификации порядка, связанного с третьим набором событий, на основе по меньшей мере первого набора событий и второго набора событий. Каждое событие из третьего набора событий представляет собой событие из по меньшей мере одного из первого набора событий или второго набора событий. Модуль конвергенции базы данных может быть выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного с третьим набором событий.In some embodiments, an instance of the distributed database on a first computing device may be configured 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 configured to determine at a first time a 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 configured to receive, at a second time after the first time and from a second computing device of the computing device set, 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 configured to determine a third event associated with the first event and the second event. The database convergence module may be configured to identify an 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 configured to store in the distributed database instance the order associated with the third set of events.

В некоторых вариантах осуществления данные, связанные с первой транзакцией, могут быть приняты на первом вычислительном устройстве из набора вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Каждое вычислительное устройство из набора вычислительных устройств имеет отдельный экземпляр распределенной базы данных. Порядковое значение первой транзакции, связанное с первой транзакцией, может быть определено в первый момент времени. Данные, связанные со второй транзакцией, могут быть приняты со второго вычислительного устройства из набора вычислительных устройств. Набор транзакций может быть сохранен в экземпляре распределенной базы данных на первом вычислительном устройстве. Набор транзакций может включать по меньшей мере первую транзакцию и вторую транзакцию. Набор порядковых значений транзакций, включающий по меньшей мере порядковое значение первой транзакции и порядковое значение второй транзакции, может быть выбран во второй момент времени после первого момента времени. Порядковое значение второй транзакции может быть связано со второй транзакцией. Переменная состояния базы данных может быть определена на основе по меньшей мере набора транзакций и набора порядковых значений транзакций.In some embodiments, data associated with a first transaction may be received on a first computing device from 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 include at least a first transaction and a second transaction. A set of transaction ordinal values, including 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.

В некоторых вариантах осуществления способ включает прием первого события из экземпляра распределенной базы данных на первом вычислительном устройстве из набора вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Способ дополнительно включает определение третьего события на основе первого события и второго события. Третье событие связано с набором событий. Порядковое значение может быть определено для четвертого события на основе по меньшей мере частично общей величины долей, связанной с набором событий, соответствующей критерию величины доли. Порядковое значение может быть сохранено в экземпляре распределенной базы данных на втором вычислительном устройстве из набора вычислительных устройств. В некоторых вариантах осуществления способ дополнительно включает вычисление общей величины долей на основе суммы набора величин долей. Каждая величина доли из набора величин долей связана с экземпляром распределенной базы данных, который определил событие из набора событий.In some embodiments, the method includes receiving a first event from a distributed database instance on a first computing device of a set of computing devices that implement the distributed database via a network operably coupled to the set of computing devices. The method further includes determining a third event based on the first event and the second event. The third event is associated with a set of events. The ordinal value may be determined for the fourth event based at least in part on the total stake value associated with the set of events corresponding to the stake size criterion. The ordinal value may be stored in a distributed database instance on a second computing device of the set of computing devices. In some embodiments, the method further includes calculating the total share value based on the sum of the set of share values. Each share value in the share value set is associated with a distributed database instance that determined the event in the event set.

В некоторых вариантах осуществления способ включает прием первого события из экземпляра распределенной базы данных на первом вычислительном устройстве из набора вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с набором вычислительных устройств. Способ дополнительно включает определение третьего события на основе первого события и второго события и определение первого набора событий на основе по меньшей мере частично третьего события. Каждое событие из первого набора событий a) идентифицируется вторым набором событий и b) связывается с первым номером раунда. Общая величина долей, связанная со вторым набором событий, удовлетворяет первому критерию величины доли, и каждое событие из второго набора событий (1) определяется отличным экземпляром распределенной базы данных и (2) идентифицируется третьим событием. Номер раунда для третьего события может быть вычислен на основе определения того, что сумма величин долей, связанных с каждым событием из первого набора событий, удовлетворяет второму критерию величины доли. Номер раунда для первого события соответствует второму номеру раунда, превышающему первый номер раунда. Способ дополнительно включает определение третьего набора событий на основе третьего события. Каждое событие из третьего набора событий a) идентифицируется четвертым набором событий, включающим третье событие, и b) представляет собой событие из первого набора событий. Каждое событие из четвертого набора событий определяется отличным экземпляром распределенной базы данных, и общая величина долей, связанная с четвертым набором событий, удовлетворяет третьему критерию величины доли. Порядковое значение затем определяется для четвертого события на основе общей величины долей, связанной с третьим набором событий, удовлетворяющей четвертому критерию величины доли, и порядковое значение может быть сохранено в экземпляре распределенной базы данных на втором вычислительном устройстве.In some embodiments, the method includes receiving a first event from a distributed database instance on a first computing device of a set of computing devices that implement the distributed database via a network operably coupled to the set of computing devices. The method further includes determining a third event based on the first event and the second event, and determining the first set of events based at least in part on the third event. Each event from the first set of events is a) identified by the second set of events and b) associated with the first round number. The total share value associated with the second set of events satisfies the first share value criterion, and each event in the second set of events is (1) identified by a different distributed database instance and (2) identified by a third event. The round number for the third event may be calculated based on determining that the sum of the stake values associated with each event from the first set of events satisfies the second stake size criterion. The round number for the first event corresponds to the second round number greater than the first round number. The method further includes determining a third set of events based on the third event. Each event from the third event set is a) identified by a fourth event set including the third event, and b) is an event from the first event set. Each event in the fourth event set is determined by a different distributed database instance, and the total stake value associated with the fourth event set satisfies the third stake size criterion. An ordinal value is then determined for the fourth event based on the total stakes associated with the third set of events satisfying the fourth stakes criterion, and the ordinal value can be stored in the distributed database instance on the second computing device.

В некоторых вариантах осуществления набор величин долей включает величину доли, (1) связанную с каждым экземпляром распределенной базы данных, который определяет событие из второго набора событий, и (2) пропорциональную сумме криптовалюты, связанной с этим экземпляром распределенной базы данных. Общая величина долей, связанная со вторым набором событий, основана на сумме величин долей из набора величин долей.In some embodiments, the set of stake values includes a stake value (1) associated with each distributed database instance that determines an event from the second set of events, and (2) proportional to the amount of cryptocurrency associated with that distributed database instance. The total stake value associated with the second set of events is based on the sum of the stake values from the stake value set.

В некоторых вариантах осуществления по меньшей мере один из первого критерия величины доли, второго критерия величины доли, третьего критерия величины доли или четвертого критерия величины доли определяют на основе общей величины долей распределенной базы данных. Более того, в некоторых вариантах осуществления набор вычислительных устройств, которые реализуют распределенную базу данных, в первый момент времени связывается с набором доверенных субъектов, и набор вычислительных устройств, которые реализуют распределенную базу данных, во второй момент времени после первого момента времени связывается с набором субъектов, включающим субъекты не из набора доверенных субъектов.In some embodiments, at least one of the first share value criterion, the second share value criterion, the third share value criterion, or the fourth share value criterion is determined based on the total share value of the distributed database. Moreover, in some embodiments, a set of computing devices that implement a distributed database is associated with a set of trusted entities at a first time, and a set of computing devices that implement a distributed database is associated with a set of entities at a second time after the first time. A that includes subjects not in the set of trusted subjects.

В контексте настоящего документа модуль может представлять собой, например, любой узел и/или набор функционально связанных электрических компонентов, связанных с выполнением конкретной функции, и может содержать, например, память, процессор, электрические каналы связи, оптические соединители, программное обеспечение (исполняемое в аппаратном обеспечении) и/или т.п.In the context of this document, a module may be, for example, any node and/or set of functionally related electrical components associated with the performance of a specific function, and may contain, for example, memory, processor, electrical communication channels, optical connectors, software (executable in hardware) and/or the like.

В контексте настоящего описания форма единственного числа включает ссылку определяемые объекты во множественном числе, если в контексте явно не указано иное. Таким образом, например, предполагается, что термин «модуль» означает один модуль или комбинацию модулей. Например, предполагается, что «сеть» означает одну сеть или комбинацию сетей.In the context of the present description, the singular form includes the reference of the designated 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.

На фиг. 1 показана структурная схема высокого уровня, на которой проиллюстрирована система 100 распределенной базы данных согласно одному варианту осуществления. На фиг. 1 проиллюстрирована распределенная база 100 данных, реализованная на четырех вычислительных устройствах (вычислительное устройство 110, вычислительное устройство 120, вычислительное устройство 130 и вычислительное устройство 140), но следует понимать, что распределенная база 100 данных может использовать набор из любого количества вычислительных устройств, включая вычислительные устройства, не показанные на фиг. 1. Сеть 105 может представлять собой сеть любого типа (например, локальную вычислительную сеть (LAN), глобальную вычислительную сеть (WAN), виртуальную сеть, телекоммуникационную сеть), реализованную в виде проводной сети и/или беспроводной сети и используемую для функционального соединения вычислительных устройств 110, 120, 130, 140. Как более подробно описано в настоящем документе, в некоторых вариантах осуществления, например, вычислительные устройства представляют собой персональные компьютеры, соединенные друг с другом посредством поставщика услуг Интернет (Internet Service Provider, ISP) и Интернета (например, сети 105). В некоторых вариантах осуществления соединение может быть установлено посредством сети 105 между любыми двумя вычислительными устройствами 110, 120, 130, 140. Как показано на фиг. 1, например, соединение может быть установлено между вычислительным устройством 110 и любым из вычислительного устройства 120, вычислительного устройства 130 или вычислительного устройства 140.In FIG. 1 is a high-level block diagram illustrating a distributed database system 100 according to one 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, including computing devices. 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 through an Internet Service Provider (ISP) and the Internet (for example, , 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.

В некоторых вариантах осуществления вычислительные устройства 110, 120, 130, 140 могут осуществлять связь друг с другом (например, отправлять данные на и/или принимать данные с) и с сетью посредством промежуточных сетей и/или альтернативных сетей (не показаны на фиг. 1). Такие промежуточные сети и/или альтернативные сети могут принадлежать к тому же типу и/или другому типу сети в сравнении с сетью 105. 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 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.

Каждое вычислительное устройство 110, 120, 130, 140 может представлять собой устройство любого типа, выполненное с возможностью отправки данных по сети 105, чтобы отправлять и/или принимать данные с одного или более других вычислительных устройств. Примеры вычислительных устройств показаны на фиг. 1. Вычислительное устройство 110 содержит память 112, процессор 111 и устройство 113 вывода. Память 112 может представлять собой, например, оперативное запоминающее устройство (RAM), буфер памяти, жесткий диск, базу данных, стираемое программируемое постоянное запоминающее устройство (EPROM), электрически стираемое программируемое постоянное запоминающее устройство (EEPROM), постоянное запоминающее устройство (ROM) и/или т. д. В некоторых вариантах осуществления память 112 вычислительного устройства 110 содержит данные, связанные с экземпляром распределенной базы данных (например, экземпляром 114 распределенной базы данных). В некоторых вариантах осуществления память 112 хранит команды, приводящие к выполнению процессором модулей, процессов и/или функций, связанных с отправкой на другой экземпляр и/или приемом с другого экземпляра распределенной базы данных (например, экземпляра 124 распределенной базы данных на вычислительном устройстве 120) записи события синхронизации, записи предыдущих событий синхронизации с другими вычислительными устройствами, порядка событий синхронизации, значения для параметра (например, поля базы данных, количественно характеризующего транзакцию, поля базы данных, количественно характеризующего порядок, в котором происходят события, и/или любого другого подходящего поля, для которого значение может быть сохранено в базе данных).Each computing device 110, 120, 130, 140 may be any type of device configured 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 disk, database, erasable programmable read only memory (EPROM), electrically erasable program read only memory (EEPROM), read only memory (ROM), and /or etc. 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) records of a sync event, records of previous sync events with other computing devices, order of sync events, value for a parameter (e.g., a database field that quantifies a transaction, a database field that quantifies the order in which events occur, and/or any other appropriate field for which a value can be stored in the database).

Экземпляр 114 распределенной базы данных может, например, быть выполнен с возможностью проведений операций с данными, включая сохранение, модификацию и/или удаление данных. В некоторых вариантах осуществления экземпляр 114 распределенной базы данных может представлять собой реляционную базу данных, объектную базу данных, пост-реляционную базу данных и/или базу данных любого другого подходящего типа. Например, экземпляр 114 распределенной базы данных может хранить данные, относящиеся к любой конкретной функции и/или области. Например, экземпляр 114 распределенной базы данных может хранить финансовые транзакции (например, пользователя вычислительного устройства 110), включая значение и/или вектор значений, относящиеся к истории владения конкретным финансовым инструментом. В целом, вектор может представлять собой любой набор значений для параметра, и параметр может представлять собой любые объект данных и/или поле базы данных, которые могут принимать разные значения. Таким образом, экземпляр 114 распределенной базы данных может иметь ряд параметров и/или полей, каждый из которых связан с вектором значений. Вектор значений используется для определения фактического значения для параметра и/или поля в этом экземпляре 114 базы данных.The distributed database instance 114 may, for example, be configured to perform data operations, including storing, modifying, and/or deleting data. In some embodiments, distributed database instance 114 may be a relational database, an object database, a post-relational database, and/or any other suitable type of database. 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 of which is associated with a vector of values. The value vector is used to determine the actual value for the parameter and/or field in this instance 114 of the database.

В некоторых случаях экземпляр 114 распределенной базы данных может также быть использован для реализации других структур данных, таких как набор пар (ключ, значение). Транзакцией, записанной экземпляром 114 распределенной базы данных, может быть, например, добавление, удаление или модификация пары (ключ, значение) в наборе пар (ключ, значение). 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.

В некоторых случаях в систему 100 распределенной базы данных или в любой из экземпляров 114, 124, 134, 144 распределенной базы данных может быть отправлен запрос. Например, запрос может состоять из ключа, и результат, возвращаемый системой 100 распределенной базы данных или экземплярами 114, 124, 134, 144 распределенной базы данных, может представлять собой значение, связанное с ключом. В некоторых случаях система 100 распределенной базы данных или любой из экземпляров 114, 124, 134, 144 распределенной базы данных могут быть также модифицированы посредством транзакции. Например, транзакция для модификации базы данных может содержать цифровую подпись, выполненную стороной, авторизующей транзакцию модификации.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.

Система 100 распределенной базы данных может быть использована для многих целей, таких как, например, хранение атрибутов, связанных с различными пользователями в распределенной системе идентификации. Например, такая система может использовать идентификатор пользователя в качестве «ключа», и список атрибутов, связанных с пользователями, в качестве «значения». В некоторых случаях идентификатор может представлять собой криптографический открытый ключ с соответствующим закрытым ключом, известным этому пользователю. Каждый атрибут может, например, быть подписан с помощью цифровой подписи органом, имеющим право на утверждение этого атрибута. Каждый атрибут может быть также, например, зашифрован с использованием открытого ключа, связанного с человеком или группой людей, которые обладают правом на считывание атрибута. Некоторые ключи или значения могут также иметь прикрепленный к ним список открытых ключей сторон, которые уполномочены модифицировать или удалять ключи или значения.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 digitally signed by an authority that has the authority to approve that attribute. Each attribute may also, for example, be encrypted using a public key associated with a person or group of people who has 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.

В другом примере экземпляр 114 распределенной базы данных может хранить данные, относящиеся к массовым многопользовательским играм (Massively Multiplayer Games, MMG), такие как текущее состояние и принадлежность игровых предметов. В некоторых случаях экземпляр 114 распределенной базы данных может быть реализован в вычислительном устройстве 110, как показано на фиг. 1. В других случаях вычислительное устройство может иметь доступ к экземпляру распределенной базы данных (например, по сети), но он не реализован в вычислительном устройстве (не показано на фиг. 1).In another example, distributed database instance 114 may store data related to Massively Multiplayer Games (MMG), such as the current state 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).

Процессор 111 вычислительного устройства 110 может представлять собой любое подходящее устройство обработки, выполненное с возможностью запуска и/или выполнения экземпляра 114 распределенной базы данных. Например, процессор 111 может быть выполнен с возможностью обновления экземпляра 114 распределенной базы данных в ответ на прием сигнала с вычислительного устройства 120 и/или вызова отправки сигнала на вычислительное устройство 120, как более подробно описано в настоящем документе. Более конкретно, как более подробно описано в настоящем документе, процессор 111 может быть выполнен с возможностью выполнения модулей, функций и/или процессов для обновления экземпляра 114 распределенной базы данных в ответ на прием события синхронизации, связанного с транзакцией, с другого вычислительного устройства, записи, связанной с порядком событий синхронизации, и/или т.п. В других вариантах осуществления процессор 111 может быть выполнен с возможностью выполнения модулей, функций и/или процессов для обновления экземпляра 114 распределенной базы данных в ответ на прием значения для параметра, сохраненного в другом экземпляре распределенной базы данных (например, экземпляре 124 распределенной базы данных на вычислительном устройстве 120), и/или вызова отправки значения для параметра, сохраненного в экземпляре 114 распределенной базы данных на вычислительном устройстве 110, на вычислительное устройство 120. В некоторых вариантах осуществления процессор 111 может представлять собой процессор общего назначения, программируемую пользователем вентильную матрицу (FPGA), интегральную схему специального назначения (ASIC), процессор цифровой обработки сигналов (DSP) и/или т.п.Processor 111 of computing device 110 may be any suitable processing device capable of starting and/or executing distributed database instance 114. For example, processor 111 may be configured to update distributed database instance 114 in response to receiving a signal from computing device 120 and/or causing a signal to be sent to computing device 120, as described in more detail herein. More specifically, as described in more detail herein, processor 111 may be configured 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, processor 111 may be configured to execute modules, functions, and/or processes to update distributed database instance 114 in response to receiving a value for a parameter stored in another distributed database instance (e.g., distributed database instance 124 on computing device 120), and/or causing a value for a parameter stored in a distributed database instance 114 on computing device 110 to be sent to computing device 120. In some embodiments, processor 111 may be a general purpose processor, field programmable gate array (FPGA) ), an application-specific integrated circuit (ASIC), a digital signal processor (DSP), and/or the like.

Дисплей 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 может содержать клавиатуру, мышь и/или т.п.The display 113 may be any suitable display such as, for example, a liquid crystal display (LCD), a cathode ray tube (CRT) display, or the like. In other embodiments, any of the computing devices 110, 120, 130, 140 comprise another output device in addition to or instead of the displays 113, 123, 133, 143. For example, any of the computing devices 110, 120, 130, 140 may include an audio output device (eg, a speaker), a tactile output device, and/or the like. In still other embodiments, any of the computing devices 110, 120, 130, 140 includes an input 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 a keyboard, mouse, and/or the like.

Вычислительное устройство 120 имеет процессор 121, память 122 и дисплей 123, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 124 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных.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.

Вычислительное устройство 130 имеет процессор 131, память 132 и дисплей 133, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 134 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных.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.

Вычислительное устройство 140 имеет процессор 141, память 142 и дисплей 143, которые могут быть конструктивно и/или функционально подобны процессору 111, памяти 112 и дисплею 113 соответственно. Также экземпляр 144 распределенной базы данных может быть структурно и/или функционально подобен экземпляру 114 распределенной базы данных.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.

Хотя вычислительные устройства 110, 120, 130, 140 показаны как подобные друг другу, каждое вычислительное устройство системы 100 распределенной базы данных может отличаться от других вычислительных устройств. Каждое вычислительное устройство 110, 120, 130, 140 системы 100 распределенной базы данных может представлять собой любое из, например, вычислительного элемента (например, персонального вычислительного устройства, такого как настольный компьютер, портативный компьютер и т. д.), мобильного телефона, карманного персонального компьютера (PDA) и т. д. Например, вычислительное устройство 110 может представлять собой настольный компьютер, вычислительное устройство 120 может представлять собой смартфон, и вычислительное устройство 130 может представлять собой сервер.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.

В некоторых вариантах осуществления одна или более частей вычислительных устройств 110, 120, 130, 140 могут включать аппаратный модуль (например, процессор цифровой обработки сигналов (DSP), программируемую пользователем вентильную матрицу (FPGA)) и/или программный модуль (например, модуль компьютерного кода, хранящегося в памяти и/или исполняемого процессором). В некоторых вариантах осуществления одна или более функций, связанных с вычислительными устройствами 110, 120, 130, 140 (например, функции, связанные с процессорами 111, 121, 131, 141), могут быть включены в один или более модулей (см., например, фиг. 2).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 computer computer module). code stored in memory and/or executed by the 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).

Свойства системы 100 распределенной базы данных, включая свойства вычислительных устройств (например, вычислительных устройств 110, 120, 130, 140), количество вычислительных устройств, и сети 105 могут быть выбраны любыми способами. В некоторых случаях свойства системы 100 распределенной базы данных могут быть выбраны администратором системы 100 распределенной базы данных. В других случаях свойства системы 100 распределенной базы данных могут быть совместно выбраны пользователями системы 100 распределенной базы данных.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.

Поскольку используется система 100 распределенной базы данных, среди вычислительных устройств 110, 120, 130 и 140 не назначен лидер. В частности, ни одно из вычислительных устройств 110, 120, 130 или 140 не идентифицируется и/или не выбирается в качестве лидера для разрешения конфликтов между значениями, хранящимися в экземплярах 111, 121, 131, 141 распределенной базы данных вычислительных устройств 110, 120, 130, 140. Вместо этого, с использованием процессов синхронизации событий, процессов голосования и/или способов, описанных в настоящем документе, вычислительные устройства 110, 120, 130, 140 могут совместно согласовывать значение для параметра.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, 121, 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.

Отсутствие лидера в системе распределенной базы данных повышает безопасность системы распределенной базы данных. В частности, при наличии лидера существует единая точка атаки и/или сбоя. Если вредоносное программное обеспечение заражает лидера и/или значение для параметра на экземпляре распределенной базы данных лидера изменяют со злым умыслом, ошибочное и/или неправильное значение распространяется по другим экземплярам распределенной базы данных. Однако в системе без лидера нет единой точки атаки и/или сбоя. В частности, если параметр в экземпляре распределенной базы данных системы без лидера содержит значение, значение изменится после того, как этот экземпляр распределенной базы данных обменяется значениями с другими экземплярами распределенной базы данных в системе, как более подробно описано в настоящем документе. Дополнительно системы распределенной базы данных без лидера, описанные в настоящем документе, повышают скорость конвергенции, уменьшая при этом объем данных, передаваемых между устройствами, как более подробно описано в настоящем документе.The absence of a leader in a distributed database system enhances the security of a 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 improve convergence speed while reducing the amount of data transferred between devices, as described in more detail herein.

На фиг. 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 отправлять данные на и/или принимать данные с другого устройства.In FIG. 2 illustrates a computing device 200 of a distributed database system (eg, distributed database system 100) according to one 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, over a network, such as network 105 shown in FIG. 1, or the Internet (not shown)). Similarly, communication module 210 may allow computing device 200 to send data to and/or receive data from another device.

В некоторых случаях модуль 211 конвергенции базы данных может обмениваться событиями и/или транзакциями с другими вычислительными устройствами, сохранять события и/или транзакции, которые принимает модуль 211 конвергенции базы данных, и вычислять упорядоченную последовательность событий и/или транзакций на основе частичного порядка, определенного схемой ссылок между событиями. Каждое событие может представлять собой запись, содержащую криптографический хеш двух более ранних событий (связывающий это событие с двумя более ранними событиями и их событиями-предками, и наоборот), данные полезной нагрузки (такие как транзакции, которые должны быть записаны), другую информацию, такую как текущее время, метка времени (например, дата и время по UTC), которую утвердил ее создатель, представляющая время, в которое событие было впервые определено, и/или т.п. В некоторых случаях первое событие, определенное участником, содержит хеш только одного события, определенного другим участником. В таких случаях участник еще не имеет предыдущего собственного хеша (например, хеша события, ранее определенного этим участником). В некоторых случаях первое событие в распределенной базе данных не содержит хеша никакого предыдущего события (поскольку отсутствует предыдущее событие для этой распределенной базы данных).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 order determined by linking scheme between events. Each event can be a record containing a cryptographic hash of the two earlier events (associating that event with the two earlier events and their parent events, and vice versa), payload data (such as transactions to be recorded), other information, such as the current time, a timestamp (eg, UTC date and time) that its creator has approved representing the time at which the event was first defined, and/or the like. 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 this distributed database).

В некоторых вариантах осуществления такой криптографический хеш двух более ранних событий может представлять собой значение хеша, определенное на основе криптографической хеш-функции с использованием события в качестве входных данных. А именно, в таких вариантах осуществления событие содержит конкретную последовательность или строку байтов (которые представляют собой информацию об этом событии). Хеш события может представлять собой значение, возвращаемое хеш-функцией, использующей последовательность байтов для этого события в качестве входных данных. В других вариантах осуществления любые другие подходящие данные, связанные с событием (например, идентификатор, серийный номер, байты, представляющие конкретную часть события, и т. д.), могут быть использованы в качестве входных данных для хеш-функции для вычисления хеша этого события. Любая подходящая хеш-функция может быть использована для определения хеша. В некоторых вариантах осуществления каждый участник использует одну и ту же хеш-функцию, так что один и тот же хеш генерируется у каждого участника для данного события. Событие может быть затем подписано цифровой подписью участником, определяющим и/или создающим событие.In some embodiments, such a cryptographic hash of the two earlier events may be a hash value determined from a cryptographic hash function using the event as input. Namely, in such embodiments, the implementation of the event contains a specific sequence or string of bytes (which represent information about this event). An event hash can be a value returned by a hash function that takes 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 calculate the 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.

В некоторых случаях набор событий и их взаимосвязей может формировать направленный ациклический граф (Directed Acyclic Graph, DAG). В некоторых случаях каждое событие в DAG ссылается на два более ранних события (связывая это событие с двумя более ранними событиями и их событиями-предками и наоборот), и каждая ссылка осуществляется строго на более ранние события, так что циклов нет. В некоторых вариантах осуществления DAG основан на криптографических хешах, так что структуру данных можно назвать DAG на основе хешей. DAG на основе хешей непосредственно кодирует частичный порядок, обозначая, что известно, что событие X происходит до события Y, если Y содержит хеш X, или если Y содержит хеш события, которое содержит хеш X, или для таких путей произвольной длины. Однако, если путь от X к Y или от Y к X отсутствует, то частичный порядок не определяет, какое событие произошло первым. Следовательно, модуль конвергенции базы данных может вычислять общий порядок из частичного порядка. Это может быть выполнено с помощью любой подходящей детерминированной функции, которая используется вычислительными устройствами, так что вычислительные устройства вычисляют один и тот же порядок. В некоторых вариантах осуществления каждый участник может повторно вычислять этот порядок после каждой синхронизации, и в итоге эти порядки могут сходиться таким образом, что возникает консенсус.In some cases, a set of events and their relationships can form a Directed Acyclic Graph (DAG). In some cases, each event in the DAG references two earlier events (associating that event with the two earlier events and their parent events, and vice versa), and each reference is strictly to the earlier events, so there are no cycles. In some embodiments, the implementation of the DAG is based on cryptographic hashes, so that the data structure can be called a DAG based on hashes. A hash-based DAG directly encodes a partial order, denoting that event X is known to occur before event Y if Y contains the hash of X, or if Y contains the hash of an event that contains the 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.

Алгоритм консенсуса может быть использован для определения порядка событий в DAG на основе хешей и/или порядка транзакций, сохраненных в событиях. Порядок транзакций в свою очередь может определять состояние базы данных в результате выполнения этих транзакций в соответствии с порядком. Определенное состояние базы данных может быть сохранено в качестве переменной состояния базы данных.The consensus algorithm can be used to determine the order of events in the DAG based on the hashes and/or the order of the transactions stored in the events. The order of transactions, in turn, can determine the state of the database as a result of the execution of these transactions in accordance with the order. A particular database state can be stored as a database state variable.

В некоторых случаях модуль конвергенции базы данных может использовать следующую функцию для вычисления общего порядка из частичного порядка в DAG на основе хешей. Для каждого из остальных вычислительных устройств (называемых «участниками») модуль конвергенции базы данных может рассматривать DAG на основе хешей для нахождения порядка, в котором события (и/или указания этих событий) были приняты этим участником. Модуль конвергенции базы данных может затем выполнять вычисления таким образом, словно этот участник присвоил числовой «ранг» каждому событию, при этом ранг равен 1 для первого события, которое принял участник, 2 для второго события, которое принял участник, и так далее. Модуль конвергенции базы данных может выполнять это для каждого участника в DAG на основе хешей. Затем для каждого события модуль конвергенции базы данных может вычислять медиану присвоенных рангов и может сортировать события по их медианам. Сортировка может разрушать равенства детерминированным образом, например, сортируя два равных события по числовому порядку их хешeй или некоторым другим способом, в котором модуль конвергенции базы данных каждого участника использует одинаковый способ. Результатом этой сортировки является общий порядок.In some cases, the database convergence module may use the following function to calculate a total order from a partial order in a DAG based on hashes. For each of the other computing devices (called "participants"), the database convergence module may look at the hash-based DAG to find 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 member in a hash-based DAG. 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 can 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.

На фиг. 6 проиллюстрирован DAG 640 на основе хешей одного примера для определения общего порядка. DAG 640 на основе хешей иллюстрирует два события (самый нижний круг с полосками и самый нижний круг с точками) и первый момент времени, когда каждый участник принимает указания на эти события (остальные круги с полосками и точками). Имя каждого участника в верхней части окрашено согласно тому, какое событие является первым в их медленном порядке. Первоначальных голосов с полосками больше, чем с точками, следовательно, голоса консенсуса для каждого из участников имеют вид с полосками. Другими словами, участники в итоге приходят к согласию, что событие с полосками произошло до события с точками.In FIG. 6 illustrates DAG 640 based on hashes of one example to determine the overall order. The hash-based DAG 640 illustrates two events (the bottommost circle with stripes and the bottommost circle with dots) and the first time each participant receives indications of these 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 votes with stripes than with dots, so the consensus votes for each participant are striped. In other words, the participants eventually agree that the stripe event happened before the dot event.

В этом примере участники (вычислительные устройства, обозначенные как Алиса, Боб, Кэрол, Дэйв и Эд) будут работать так, чтобы достичь консенсуса относительно того, произошло ли первым событие 642 или событие 644. Каждый круг с полосками указывает на событие, когда участник впервые принял событие 644 (и/или указание об этом событии 644). Подобным образом каждый круг с точками указывает на событие, когда участник впервые принял событие 642 (и/или указание об этом событии 642). Как показано в DAG 640 на основе хешей, Алиса, Боб и Кэрол все приняли событие 644 (и/или указание о событии 644) до события 642. Как Дэйв, так и Эд приняли событие 642 (и/или указание о событии 642) до события 644 (и/или указания о событии 644). Таким образом, поскольку большее количество участников приняли событие 644 до события 642, общий порядок может быть определен каждым участником для указания того, что событие 644 произошло до события 642.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 an event 644 (and/or an indication of this 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 the hash-based DAG 640, Alice, Bob, and Carol all 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 events 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.

В других случаях модуль конвергенции базы данных может использовать другую функцию для вычисления общего порядка из частичного порядка в DAG на основе хешей. В таких вариантах осуществления, например, модуль конвергенции базы данных может использовать следующие функции для вычисления общего порядка, при этом положительное целое число Q представляет собой параметр, совместно используемый участниками.In other cases, the database convergence module may use another function to calculate the total order from the partial order in the DAG based on hashes. 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.

creator(x) = участник, который создал событие x, (создатель)creator(x) = participant who created event x, (creator)

anc(x) = набор событий, которые являются предками x, включая само xanc(x) = set of events that are ancestors of x, including x itself

other(x) = событие, созданное участником, который выполнял синхронизацию непосредственно перед созданием xother(x) = event created by the member who synced just before x was created

self(x) = последнее событие перед x с тем же создателемself(x) = last event before x with same creator

self(x, 0) = self(x)self(x, 0) = self(x)

self(x, n) = self(self(x), n-1)self(x, n) = self(self(x), n-1)

order(x, y) = k, где y – это k-ое событие, о котором узнал creator(x)order(x, y) = k, where y is the kth event that creator(x) learned about

Figure 00000001
Figure 00000001

Figure 00000002
Figure 00000002

fast(x, y) = положение y в отсортированном списке, причем элемент z ∈ anc(x), отсортированному по

Figure 00000003
slow(w, z), и с разрушением равенств посредством хеша каждого событияfast(x, y) = position of y in the sorted list, with element z ∈ anc(x), sorted by
Figure 00000003
slow(w, z), and with the destruction of equalities through the hash of each event

В этом варианте осуществления fast(x, y) дает положение y в общем порядке событий по мнению creator(x) по существу сразу после создания и/или определения x. Если Q равно бесконечности, то вышеописанное вычисляет такой же общий порядок, как получается и в ранее описанном варианте осуществления. Если Q является конечным числом и все участники находятся в режиме онлайн, то вышеописанное вычисляет такой же общий порядок, как получается и в ранее описанном варианте осуществления. Если Q является конечным числом и меньшая часть участников находится в режиме онлайн в заданный момент времени, то эта функция позволяет находящимся онлайн участникам достигать консенсуса между собой, который будет сохраняться неизменным по мере постепенного, поочередного перехода в режим онлайн новых участников. Однако, если речь идет о разделе сети, то участники каждого раздела могут прийти к своему собственному консенсусу. Затем, когда раздел заполняется, участники меньшего раздела примут консенсус большего раздела.In this embodiment, fast(x, y) gives the position of y in the overall order of events in the opinion of the creator(x) essentially immediately after the creation and/or definition 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.

В еще других случаях, как описано в отношении фиг. 14–17b, модуль конвергенции базы данных может использовать еще другую функцию для вычисления общего порядка из частичного порядка в DAG на основе хешей. Как показано на фиг. 14–15, каждый участник (Алиса, Боб, Кэрол, Дэйв и Эд) создает и/или определяет события (1401–1413, как показано на фиг. 14; 1501–1506, показанные на фиг. 15). При использовании функции и подфункций, описанных в отношении фиг. 14–17b, общий порядок для событий может быть вычислен посредством сортировки событий по их принятому раунду (также называемому в настоящем документе порядковым значением), с разрушением равенств по их принятой метке времени и разрушением этих равенств по их подписям, как более подробно описано в настоящем документе. В других случаях общий порядок для событий может быть вычислен посредством сортировки событий по их принятому раунду, с разрушением равенств по их принятому поколению (вместо их принятой метки времени) и с разрушением этих равенств по их подписям. В следующих абзацах заданы функции, используемые для вычисления и/или определения принятого раунда и принятого поколения события для определения порядка для событий. Следующие термины используются и иллюстрируются в связи с фиг. 14–17b.In yet other cases, as described with respect to FIG. 14-17b, the database convergence module may use yet another function to calculate the total order from the partial order in a DAG based on hashes. As shown in FIG. 14-15, each participant (Alice, Bob, Carol, Dave, and Ed) creates and/or defines events (1401-1413, as shown in Fig. 14; 1501-1506, shown in Fig. 15). When using the function and sub-functions described with respect to FIG. 14-17b, the overall order for events can be computed by sorting the events by their accepted round (also referred to herein as ordinal value), collapsing equalities by their adopted timestamp, and collapsing those equalities by their signatures, as described in more detail herein. document. In other cases, the overall order for events can be computed by sorting the events by their adopted round, collapsing the equalities by their adopted generation (instead of their adopted timestamp), and collapsing those equalities by their signatures. The following paragraphs define functions used to calculate 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. 14–17b.

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

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

«Потомок» («Descendant»): потомками события X являются X, его дети, дети его детей и так далее. Например, как показано на фиг. 14, потомком события 1401 является каждое событие, показанное на фигуре. В качестве другого примера, потомками события 1403 являются события 1403, 1404, 1406, 1407, 1409, 1410, 1411, 1412 и 1413. Можно сказать, что потомки события связаны с этим событием и наоборот. "Descendant": The descendants of event X are X, its children, its children's children, and so on. For example, as shown in FIG. 14, 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. Children of an event can be said to be associated with this event and vice versa.

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

«M»: наименьшее целое число, которое превышает определенную процентную долю N (например, превышает 2/3 от N). Например, как показано на фиг. 14, если процентная доля определена как 2/3, то M равняется четырем. В других случаях M может быть определено, например, как другая процентная доля N (например, 1/3, 1/2 и т. д.), конкретное предварительно определенное число и/или любым другим подходящим способом."M": The smallest integer that is greater than a certain percentage of N (for example, greater than 2/3 of N). For example, as shown in FIG. 14, 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.

«Собственный родитель» («Self-parent»): собственным родителем события X является его событие-родитель Y, созданное и/или определенное тем же участником. Например, как показано на фиг. 14, собственным родителем события 1405 является 1401. "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. 14, event 1405's own parent is 1401.

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

«Порядковый номер» («Sequence Number», или «SN»): целочисленный атрибут события, определенный как порядковый номер собственного родителя события плюс один. Например, как показано на фиг. 14, собственным родителем события 1405 является 1401. Поскольку порядковый номер события 1401 равен одному, порядковый номер события 1405 равен двум (т.е. один плюс один)."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. 14, event 1405's own parent is 1401. Since event 1401's sequence number is one, event 1405's sequence number is two (ie, one plus one).

«Номер поколения» («Generation Number», или «GN»): целочисленный атрибут события, определенный как максимальное значение номеров поколений родителей события плюс один. Например, как показано на фиг. 14, событие 1412 имеет двух родителей, события 1406 и 1408, имеющих номера поколений четыре и два соответственно. Таким образом, номер поколения события 1412 равен пяти (т.е. четыре плюс один)."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. 14, 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).

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

«Номер раунда» («Round Number», или «RN»): целочисленный атрибут события. В некоторых случаях номер раунда может быть определен как максимальное значение номеров раундов родителей события плюс приращение раунда. Например, как показано на фиг. 14, событие 1412 имеет двух родителей, события 1406 и 1408, которые оба имеют номер раунда, равный одному. Событие 1412 также имеет приращение раунда, равное одному. Таким образом, номер раунда события 1412 равняется двум (т.е. один плюс один). В других случаях событие может иметь номер раунда R, если R является минимальным целым числом, так что событие может строго видеть (как описано в настоящем документе) по меньшей мере M событий, определенных и/или созданных разными участниками, которые все имеют номер раунда R-1. Если такое целое число отсутствует, номер раунда для события может быть значением по умолчанию (например, 0, 1 и т. д.). В таких случаях номер раунда для события может быть вычислен без использования приращения раунда. Например, как показано на фиг. 14, если M определено как наименьшее целое число, превышающее N в 1/2 раза, то M равняется трем. Тогда событие 1412 строго видит M событий 1401, 1402 и 1408, каждое из которых было определено отличным участником и имеет номер раунда, равный 1. Событие 1412 не может строго видеть по меньшей мере M событий с номером раунда, равным 2, которые были определены отличными участниками. Следовательно, номер раунда для события 1412 равняется 2. В некоторых случаях первое событие в распределенной базе данных имеет номер раунда, равный 1. В других случаях первое событие в распределенной базе данных может иметь номер раунда, равный 0, или любой другой подходящий номер."Round Number" or "RN": An integer attribute of the event. In some cases, the round number can be defined as the maximum value of the round numbers of the event's parents plus the round increment. For example, as shown in FIG. 14, 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. 14, 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.

«Ответвление» («Forking»): событие X вместе с событием Y являются ответвлением, если они определены и/или созданы одним участником, и ни одно из них не является собственным предком другого. Например, как показано на фиг. 15, участник Дэйв создает ответвление, создавая и/или определяя события 1503 и 1504, оба из которых имеют одного собственного родителя (т.е. событие 1501), так что событие 1503 не является собственным предком события 1504, и событие 1504 не является собственным предком события 1503."Forking": An event X together with an event Y are forks if they are defined and/or created by one participant and neither is the other's own ancestor. For example, as shown in FIG. 15, 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.

«Идентификация» («Identification») ответвления: ответвление может быть «идентифицировано» третьим событием, созданным и/или определенным после двух событий, которые вместе являются ответвлениями, если оба эти два события являются предками третьего события. Например, как показано на фиг. 15, участник Дэйв создает ответвление, создавая события 1503 и 1504, ни одно из которых не является собственным предком другого. Это ответвление может быть идентифицировано более поздним событием 1506, поскольку оба события 1503 и 1504 являются предками события 1506. В некоторых случаях идентификация ответвления может указывать на то, что конкретный участник (например, Дэйв) мошенничает. Branch "Identification": A branch can be "identified" by a third event created and/or defined after two events that together are branches, if both of these two events are ancestors of the third event. For example, as shown in FIG. 15, 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.

«Идентификация» («Identification») события: событие X «идентифицирует» или «видит» событие-предка Y, если X не имеет события-предка Z, которое является ответвлением вместе с Y. Например, как показано на фиг. 14, событие 1412 идентифицирует (то есть «видит») событие 1403, поскольку событие 1403 является предком события 1412, и событие 1412 не имеет событий-предков, которые являются ответвлениями вместе с событием 1403. В некоторых случаях событие X может идентифицировать событие Y, если X не идентифицирует ответвление до события Y. В таких случаях, даже если событие X идентифицирует ответвление, создаваемое участником, определяющим событие Y, после события Y, событие X может видеть событие Y. Событие X не идентифицирует события этого участника после ответвления. Более того, если участник определяет два разных события, которые оба являются первыми событиями этого участника в истории, событие X может идентифицировать ответвление и не идентифицировать никакое событие этого участника.Event "Identification": Event X "identifies" or "sees" an ancestor event of Y if X does not have an ancestor event of Z that branches along with Y. For example, as shown in FIG. 14, event 1412 identifies (i.e. "sees") event 1403 because event 1403 is an ancestor of event 1412 and event 1412 has no 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 that member's events 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.

«Строгая идентификация» («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 разными участниками. Например, как показано на фиг. 14, если 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. "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 exists 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 can identify Y, and (6) are created and/or defined by at least M different contributors. For example, as shown in FIG. 14, 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.

«Первое событие раунда R» (также называемое в настоящем документе «свидетелем», или «witness»): событие представляет собой «первое событие раунда R» (или «свидетеля»), если событие (1) имеет номер раунда R и (2) имеет собственного родителя, имеющего номер раунда, который меньше R, или не имеет собственного родителя. Например, как показано на фиг. 14, событие 1412 представляет собой «первое событие раунда 2», поскольку оно имеет номер раунда, равный двум, и его собственным родителем является событие 1408, которое имеет номер раунда, равный одному (т.е. меньше двух)."First event of R round" (also referred to herein as "witness" or "witness"): an event is an "first event of R round" (or "witness") if event (1) has an R round number and (2 ) has its own parent that has a round number less than R, or does not have its own parent. For example, as shown in FIG. 14, 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 (ie, less than two).

В некоторых случаях приращение раунда для события X определяют как 1, если и только если X «строго идентифицирует» по меньшей мере M «первых событий раунда R», где R является максимальным номером раунда его родителей. Например, как показано на фиг. 14, если M определено как наименьшее целое число, превышающее N в 1/2 раза, то M равняется трем. Тогда событие 1412 строго идентифицирует M событий 1401, 1402 и 1408, которые все являются первыми событиями раунда 1. Оба родителя события 1412 принадлежат к раунду 1, и 1412 строго идентифицирует по меньшей мере M первых событий раунда 1, следовательно, приращение раунда для 1412 равно одному. Каждое из событий на схеме с отметкой «RI=0» не может строго идентифицировать по меньшей мере M первых событий раунда 1, следовательно, их приращения раунда равны 0. 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. 14, 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.

В некоторых случаях следующий способ может быть использован для определения того, может ли событие X строго идентифицировать событие-предка Y. Для каждого первого события-предка Y раунда R поддерживается массив A1 целых чисел, по одному на участника, который задает наименьший порядковый номер события X, где этот участник создал и/или определил событие X, и X может идентифицировать Y. Для каждого события Z поддерживается массив A2 целых чисел, по одному на участника, который задает наибольший порядковый номер события W, созданного и/или определенного этим участником, так что Z может идентифицировать W. Для определения того, может ли Z строго идентифицировать событие-предка Y, подсчитывается количество положений E элемента таких, что A1[E] <= A2[E]. Событие Z может строго идентифицировать Y, если и только если эта подсчитанная величина превышает M. Например, как показано на фиг. 14, Алиса, Боб, Кэрол, Дэйв и Эд каждый могут идентифицировать событие 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.In some cases, the following method can be used to determine whether event X can strongly identify ancestor event Y. For each first ancestor event Y of round R, an array A1 of integers, one per participant, is maintained that specifies the lowest sequence number of event X , where this participant created and/or defined event X, and X can identify Y. For each event Z, an array A2 of integers is maintained, one per participant, that specifies the highest sequence number of event W created and/or defined by this participant, 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. 14, 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.

Еще один вариант реализации способа определения с помощью 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 или более битов.Yet another implementation of the 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, calculations may be performed using processor-specific instructions such as the Advanced Vector Extensions (AVX) instructions provided by Intel and AMD, or the equivalent in a 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.

«Известное» («Famous») событие: событие X раунда R является «известным», если (1) событие X является «первым событием раунда R» (или «свидетелем»), и (2) решение «ДА» достигается путем исполнения протокола византийского соглашения, описанного ниже. В некоторых вариантах осуществления протокол византийского соглашения может быть выполнен экземпляром распределенной базы данных (например, экземпляром 114 распределенной базы данных) и/или модулем конвергенции базы данных (например, модулем 211 конвергенции базы данных). Например, как показано на фиг. 14, показаны пять первых событий раунда 1: 1401, 1402, 1403, 1404 и 1408. Если M определено как наименьшее целое число, превышающее N в 1/2 раза, что равняется трем, то 1412 представляет собой первое событие раунда 2. Если протокол продолжается дальше, то DAG на основе хешей будет расти вверх, и в итоге другие четыре участника будут также иметь первые события раунда 2 над верхней частью этой фигуры. Каждое первое событие раунда 2 будет иметь «голос» («vote») относительно того, является ли каждое из первых событий раунда 1 «известным». Событие 1412 будет голосовать ДА за то, что 1401, 1402 и 1403 являются известными, поскольку они являются первыми событиями раунда 1, которые оно может идентифицировать. Событие 1412 будет голосовать НЕТ против того, что 1404 является известным, поскольку 1412 не может идентифицировать 1404. Для заданного первого события раунда 1, такого как 1402, решение относительно того, является ли его статус «известным» или нет, будет принято на основе подсчета голосов каждого первого события раунда 2 относительно того, является оно известным или нет. Эти голоса будут затем распространяться на первые события раунда 3, затем на первые события раунда 4 и так далее до тех пор, пока в итоге не будет достигнуто согласие относительно того, является ли 1402 известным. Подобный процесс повторяется для других первых событий."Famous" event: Event X of round R is "known" if (1) event X is the "first event of round R" (or "witness"), and (2) a "YES" decision is reached by executing 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. 14, 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 hash-based DAG will grow upwards, and as a result, the other four participants will also have the first round 2 events 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. These 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.

Протокол византийского соглашения может собирать и использовать голоса и/или решения «первых событий раунда R» для идентификации «известных» событий. Например, «первое событие Y раунда R+1» будет голосовать «ДА», если Y может «идентифицировать» событие X, в ином случае оно проголосует «НЕТ». Голоса затем подсчитываются для каждого раунда G, для G = R+2, R+3, R+4 и т. д. до тех пор, пока не будет принято решение любым участником. Голоса подсчитываются для каждого раунда G до тех пор, пока не принято решение. Некоторые из этих раундов могут представлять собой раунды «мажоритарные», тогда как некоторые из других раундов могут представлять собой раунды «с подбрасыванием монеты». В некоторых случаях, например, раунд R+2 является раундом большинства, и будущие раунды определяются либо как мажоритарный раунд, либо как раунд с подбрасыванием монеты (например, согласно предварительно определенной схеме). Например, в некоторых случаях произвольно может быть определено, является ли будущий раунд мажоритарным раундом или раундом с подбрасыванием монеты, при условии что не может быть двух последовательных раундов с подбрасыванием монеты. Например, может быть предварительно определено, что будет пять мажоритарных раундов, затем один раунд с подбрасыванием монеты, затем пять мажоритарных раундов, затем один раунд с подбрасыванием монеты, с повторением до тех пор, пока не будет достигнуто согласие.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 round G, 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 these 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.

В некоторых случаях, если раунд G является мажоритарным раундом, голоса могут быть подсчитаны следующим образом. Если существует событие раунда G, которое строго идентифицирует по меньшей мере M первых событий раунда G-1, голосующих V (где V представляет собой либо «ДА», либо «НЕТ»), то согласованным решением является V, и протокол византийского соглашения завершается. В ином случае каждое первое событие раунда G вычисляет новый голос, представляющий собой решение большинства первых событий раунда G-1, которые каждое первое событие раунда G может строго идентифицировать. В случаях равенства голосов и отсутствия большинства решение может быть обозначено как «ДА». 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".

Подобным образом, если X является свидетелем раунда R (или первым событием раунда R), то результаты голосования в раундах R+1, R+2 и так далее могут быть вычислены, при этом свидетели в каждом раунде голосуют относительно того, является ли X известным. В раунде R+1 каждый свидетель, который может видеть X, голосует ДА, а другие свидетели голосуют НЕТ. В раунде R+2 каждый свидетель голосует согласно большинству голосов свидетелей раунда R+1, которые он может строго видеть. Подобным образом, в раунде R+3 каждый свидетель голосует согласно большинству голосов свидетеля раунда R+2, которого он может строго видеть. Это может продолжаться несколько раундов. В случае равенства голосов голос может быть установлен в ДА. В других случаях равенство голосов может быть установлено в НЕТ или может быть установлено случайным образом. Если какой-либо раунд имеет по меньшей мере M свидетелей, голосующих НЕТ, то выборы завершаются, и X не является известным. Если какой-либо раунд имеет по меньшей мере M свидетелей, равенства голосов ДА, то выборы завершаются, и X является известным. Если ни ДА, ни НЕТ не имеет по меньшей мере M голосов, выборы переходят к следующему раунду. Similarly, if X is a witness of round R (or the first event of round R), then the results of voting in rounds R+1, R+2, and so on can be computed, with the witnesses in each round voting on 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, a tie vote is 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.

В качестве примера, на фиг. 14 предполагается первое событие X некоторого раунда, которое находится ниже показанной фигуры. Тогда каждое первое событие раунда 1 будет иметь голос относительно того, является ли X известным. Событие 1412 может строго идентифицировать первые события 1401, 1402 и 1408 раунда 1. Таким образом, его голос будет основан на их голосах. Если это мажоритарный раунд, то 1412 будет проверять, имеют ли по меньшей мере M событий {1401, 1402, 1408} голос ДА. Если имеют, то решением является ДА, и согласие было достигнуто. Если по меньшей мере M из них проголосовало НЕТ, то решением является НЕТ, и согласие было достигнуто. Если количество голосов не составляет по меньшей мере M в любую из сторон, то 1412 получает голос, который представляет собой большинство голосов событий 1401, 1402 и 1408 (и разрушает равенство голосов посредством голосования ДА, если было равенство голосов). Этот голос затем будет использован в следующем раунде, продолжающемся до тех пор, пока не будет достигнуто согласие.As an example, in FIG. 14 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 voted 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). This vote will then be used in the next round, continuing until an agreement is reached.

В некоторых случаях, если раунд G является раундом с подбрасыванием монеты, голоса могут быть подсчитаны следующим образом. Если событие X может идентифицировать по меньшей мере M первых событий раунда G-1, голосующих V (где V представляет собой либо «ДА», либо «НЕТ»), то событие X изменит свой голос на V. Иначе, если раунд G является раундом с подбрасыванием монеты, каждое первое событие X раунда G меняет свой голос на результат псевдослучайного определения (подобно подбрасыванию монеты в некоторых случаях), который определяется как самый младший бит подписи события X. 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, 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 X event signature.

Подобным образом, в таких случаях, если выборы достигают раунда 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, и таким образом можно повысить безопасность событий и протокола консенсуса.Likewise, 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 other suitable number ), then the election does not end in this 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 signature bit of the Y event (e.g., the least significant bit, the most significant bit, a randomly selected bit), where 1=YES and 0=NO, or vice versa, according to the timestamp of the Y event, 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.

Например, как показано на фиг. 14, если раунд 2 является раундом с подбрасыванием монеты, и происходит голосование относительно того, было ли некоторое событие до раунда 1 известным, то событие 1412 будет сначала проверять, проголосовало ли по меньшей мере M событий {1401, 1402, 1408} ДА, или по меньшей мере M из них проголосовало НЕТ. Если это так, то 1412 проголосует так же. Если отсутствует по меньшей мере M голосов в любую из сторон, то 1412 будет иметь случайный или псевдослучайный голос (например, на основе самого младшего бита цифровой подписи, которую Эд создал для события 1412, когда он подписал его во время его создания и/или определения).For example, as shown in FIG. 14, 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 ).

В некоторых случаях результат псевдослучайного определения может быть результатом криптографического протокола shared coin, который может быть, например, реализован как самый младший бит пороговой подписи номера раунда.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.

Система может быть основана на любом из способов вычисления результата псевдослучайного определения, описанных выше. В некоторых случаях система выполняет цикл по разным способам в некотором порядке. В других случаях система может выбирать среди разных способов согласно предварительно определенной схеме.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.

«Принятый раунд» («Received round»): событие X имеет «принятый раунд» R, если R является таким минимальным целым числом, что по меньшей мере половина известных первых событий раунда R (или известных свидетелей) с номером R раунда являются потомками X и/или могут видеть X. В других случаях может быть использована любая другая подходящая процентная доля. Например, в другом случае событие X имеет «принятый раунд» R, если R является таким минимальным целым числом, что по меньшей мере предварительно определенная процентная доля (например, 40 %, 60 %, 80 % и т. д.) известных первых событий раунда R (или известных свидетелей) с номером R раунда являются потомками X и/или могут видеть X."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 events of round R (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 events round R (or known witnesses) with round number R are descendants of X and/or can see X.

В некоторых случаях «принятое поколение» события X может быть вычислено следующим образом. Находят, какой участник создал и/или определил каждое первое событие раунда R, которое может идентифицировать событие X. Затем определяют номер поколения для самого раннего события этого участника, которое может идентифицировать X. Затем определяют «принятое поколение» X как медиану этого списка.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 this list.

В некоторых случаях «принятая метка времени» T события X может быть медианой меток времени в событиях, которые включают первое событие каждого участника, которое идентифицирует и/или видит X. Например, принятая метка времени события 1401 может быть медианой значения меток времени для событий 1402, 1403, 1403 и 1408. В некоторых случаях метка времени для события 1401 может быть включена в вычисление медианы. В других случаях принятая метка времени для X может быть любым другим значением или комбинацией значений меток времени в событиях, которые являются первыми событиями каждого участника для идентификации или видения X. Например, принятая метка времени для X может быть основана на среднем значении меток времени, среднеквадратичном отклонении меток времени, модифицированном среднем значении (например, путем удаления из вычисления самой ранней и самой поздней меток времени) и/или т.п. В еще других случаях может быть использована расширенная медиана.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, modified average (eg, by removing the earliest and latest timestamps from the calculation), and/or the like. In still other cases, the extended median may be used.

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

В других случаях вместо использования подписи каждого события может быть использована подпись этого события, подвергнутая операции исключающего ИЛИ с подписями известных событий или известных свидетелей с тем же принятым раундом и/или принятым поколением в этом раунде. В других случаях любая другая подходящая комбинация подписей событий может быть использована для разрушения равенств, чтобы определять порядок консенсуса событий.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.

В еще других случаях вместо определения «принятого поколения» как медианы списка «принятое поколение» может быть определено как сам список. Тогда при сортировке по принятому поколению два принятых поколения могут быть сравнены по средним элементам их списков, с разрушением равенств по элементу непосредственно перед серединой, с разрушением этих равенств по элементу непосредственно после середины и с продолжением чередования между элементом перед используемым до этого и элементом после, пока равенство не будет разрушено.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, breaking down 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.

В некоторых случаях медианная метка времени может быть заменена «расширенной медианой». В таких случаях список меток времени может быть определен для каждого события, вместо одной принятой метки времени. Список меток времени для события X может включать первое событие каждого участника, которое идентифицирует и/или видит X. Например, как показано на фиг. 14, список меток времени для события 1401 может включать метки времени для событий 1402, 1403, 1403 и 1408. В некоторых случаях также может быть включена метка времени для события 1401. При разрушении равенства со списком меток времени (т.е. два события имеют один и тот же принятый раунд) могут быть сравнены средние метки времени списка каждого события (или предварительно определенные первая или вторая из двух средних меток времени, если длина четная). Если эти метки времени являются одинаковыми, могут быть сравнены метки времени непосредственно после средних меток времени. Если эти метки времени являются одинаковыми, могут быть сравнены метки времени непосредственно перед средними отметками времени. Если эти метки времени также являются одинаковыми, сравнивают метки времени после трех уже сравненных меток времени. Это чередование может продолжаться до тех пор, пока равенство не будет разрушено. Подобно вышеизложенному обсуждению, если два списка идентичны, равенство может быть разрушено по подписям двух элементов.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. 14, the timestamp list 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 predetermined 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.

В еще других случаях «усеченная расширенная медиана» может быть использована вместо «расширенной медианы». В таком случае весь список меток времени не сохраняют для каждого события. Вместо этого лишь несколько значений рядом с центром списка сохраняют и используют для сравнения.In still other cases, "truncated extended median" may be used in place of "expanded 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.

Принятая медианная метка времени может быть потенциально использована для других целей в дополнение к вычислению общего порядка событий. Например, Боб мог подписать контракт, в котором говорится, что он берет на себя обязательства по соблюдению контракта, если и только если существует событие X, содержащее транзакцию, в которой Алиса подписывает этот же контракт, причем принятая метка времени для X соответствует определенному крайнему сроку или более раннему моменту времени. В этом случае Боб не возьмет на себя обязательства по соблюдению контракта, если Алиса подпишет его после крайнего срока, указанного «принятой медианной меткой времени», как описано выше.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 corresponds to a certain deadline. or an earlier point in time. In this case, Bob will not commit to the contract if Alice signs it after the deadline indicated by the "accepted median timestamp" as described above.

В некоторых случаях состояние распределенной базы данных может быть определено после достижения консенсуса. Например, если S(R) является набором событий, который могут видеть известные свидетели в раунде R, в итоге все события в S(R) будут иметь известные принятый раунд и принятую метку времени. На этом этапе порядок консенсуса для событий в S(R) известен и меняться не будет. Когда этот этап достигнут, участник может вычислить и/или определить представление событий и их порядок. Например, участник может вычислить значение хеша событий в S(R) в их порядке консенсуса. Участник может затем подписать с помощью цифровой подписи значение хеша и включить значение хеша в следующее событие, которое определяет участник. Это может быть использовано для оповещения других участников о том, что этот участник определил, что события в S(R) имеют заданный порядок, который не будет меняться. После того как по меньшей мере M участников (или любое другое подходящее количество или процентная доля участников) подписали значение хеша для S(R) (и, таким образом, согласились с порядком, представленным значением хеша), этот список консенсуса событий вместе со списком подписей участников могут образовать один файл (или другую структуру данных), который может быть использован для доказательства того, что порядок консенсуса был таковым, как заявлено, для событий в S(R). В других случаях, если события содержат транзакции, которые обновляют состояние системы распределенной базы данных (как описано в настоящем документе), то значение хеша может представлять состояние системы распределенной базы данных после применения транзакций событий в S(R) в порядке консенсуса.In some cases, the state of a distributed database can be determined after 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 this 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), this 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.

В некоторых случаях M (как описано выше) может быть основано на весовых значениях (также называемых в настоящем документе значениями долей), присвоенных каждому участнику, а не просто дробного числа, процентной доли и/или значения общего количества участников. В таком случае каждый участник имеет долю, связанную с его заинтересованностью и/или влиянием в системе распределенной базы данных. Такая доля может представлять собой весовое значение и/или величину доли. Можно сказать, что каждое событие, определенное этим участником, может иметь весовое значение его определяющего участника. Тогда M может быть частью от общей доли всех участников и может называться критерием и/или порогом величины доли. События, описанные выше как зависимые от M, будут происходить, когда набор участников с суммой долей по меньшей мере M придет к согласию (т.е. будет удовлетворять критерию величины доли). Таким образом, на основе своей доли определенные участники могут иметь большее влияние на систему и на то, каким образом получается порядок консенсуса. В некоторых случаях транзакция в событии может менять долю одного или более участников, добавлять новых участников и/или удалять участников. Если такая транзакция имеет принятый раунд R, то после вычисления принятого раунда события после свидетелей раунда R будут повторно вычислять свои номера раундов и другую информацию с использованием модифицированных долей и модифицированного списка участников. В некоторых случаях голоса относительно того, являются ли события раунда R известными, могут использовать старые доли и список участников, но голоса относительно раундов после R могут использовать новые доли и список участников.In some cases, M (as described above) may be based on weight values (also referred to herein as share values) assigned to each participant, rather than simply a fractional number, percentage, and/or total number of 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 and/or a fraction value. We can say that each event defined by this participant can have the weight value of its defining participant. Then M may be a fraction of the total share of all participants and may be referred to as a criterion and/or a threshold for the size of the share. The events described above as dependent on M will occur when a set of participants with a sum of shares of at least M comes to an agreement (i.e., satisfies the share size criterion). 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. In some cases, votes on whether round R events are known may use the old stakes and list of participants, but votes on rounds after R may use the new stakes and list of participants.

В некоторых дополнительных случаях предварительно определенные весовые значения или величины долей могут быть присвоены каждому участнику системы распределенной базы данных. Соответственно консенсус, достигаемый посредством протокола византийского соглашения, может быть реализован с использованием связанного уровня безопасности для защиты группы участников или популяции от потенциальных атак Сивиллы. В некоторых случаях такой уровень безопасности может быть гарантирован математически. Например, злоумышленники могут хотеть повлиять на исход одного или более событий посредством реорганизации частичного порядка событий, зарегистрированных в DAG на основе хешей. Атака может быть осуществлена посредством реорганизации одного или более частичных порядков DAG на основе хешей до достижения консенсуса и/или окончательного соглашения среди участников распределенной базы данных. В некоторых случаях могут возникать разногласия относительно времени, в которое произошло несколько конкурирующих событий. Как обсуждалось выше, исход, связанный с событием, может зависеть от значения M. По существу, в некоторых случаях определение того, кто из Алисы или Боба совершил действие первым в отношении события (и/или транзакции внутри события), может быть выполнено, когда количество голосов или сумма долей голосующих участников в соглашении превышает или равняется значению M.In some additional cases, predetermined weights or stakes may be assigned to each member of the distributed database system. Accordingly, the consensus achieved through the Byzantine Agreement protocol can be implemented using an associated security layer to protect a group of participants or a population from potential Sibyl attacks. In some cases, this level of security can be mathematically guaranteed. For example, attackers may want to influence the outcome of one or more events by rearranging the partial order of events registered in the DAG based on hashes. The attack can be carried out by reorganizing one or more partial DAG orders based on hashes until a consensus and/or final agreement is reached among the participants in the distributed database. In some cases, there may be disagreement about the time at which several competing events occurred. As discussed above, the outcome associated with an event may depend on the value of M. As such, in some cases, determining which Alice or Bob performed the action first on an event (and/or a transaction within an event) can be made when the number of votes or the sum of the shares of voting members in the agreement is greater than or equal to M.

Некоторые типы атак по реорганизации порядка событий требуют, чтобы злоумышленник контролировал по меньшей мере часть или процентную долю (например, 1/10, 1/4, 1/3 и т. д.) от N в зависимости от значения M. В некоторых случаях значение M может быть приспособлено так, чтобы составлять, например, 2/3 от группы или популяции N. В таком случае, пока более 2/3 участников группы или популяции не являются участниками атаки, согласие может быть достигнуто участниками, которые не принимают участие в атаке, и распределенная база данных продолжит достигать консенсуса и работать как положено. Более того, в таком случае злоумышленник должен контролировать по меньшей мере N минус M (N-M) участников группы или популяции (1/3 участников в этом примере) в период атаки, чтобы остановить конвергенцию базы данных, чтобы вызвать конвергенцию распределенной базы данных в пользу злоумышленника (например, чтобы вызвать конвергенцию базы данных в несправедливом порядке), чтобы сошлись два разных состояния (например, так, чтобы участники официально согласились относительно обоих из двух противоречащих состояний) или чтобы фальсифицировать валюту (когда система распределенной базы данных работает с криптовалютой). Some types of reordering attacks require the attacker to control at least a fraction or percentage (for example, 1/10, 1/4, 1/3, etc.) of N depending on the value of M. In some cases, the value of M can be adjusted to be, for example, 2/3 of the group or population N. In such a case, as long as more than 2/3 of the members of the group or population are not participants in the attack, agreement can be reached by participants who are not participating in the attack. attack, and the distributed database will continue to reach consensus and work as expected. Moreover, in such a case, the attacker must control at least N minus M (N-M) members of the group or population (1/3 of the members in this example) during the attack period in order to stop database convergence in order to cause distributed database convergence in favor of the attacker (for example, to cause a database to converge in an unfair order), to bring two different states together (for example, so that participants formally agree on both of two conflicting states), or to falsify a currency (when a distributed database system works with a cryptocurrency).

В некоторых реализациях весовые значения или доли могут быть присвоены каждому участнику группы или популяции, и N будет представлять собой общую сумму всех их весов или долей. Соответственно более высокие весовое значение или величина доли могут быть присвоены поднабору из группы участников или популяции на основе показателя доверия или надежности. Например, более высокое весовое значение или величина доли могут быть присвоены участникам, которые с меньшей вероятностью будут участвовать в атаке или которые имеют некоторый индикатор, показывающий, что они в меньшей степени предрасположены к участию в нечестной деятельности.In some implementations, weights or shares may be assigned to each member of a group or population, and N will be the total sum of all their weights or shares. Accordingly, a higher weight or proportion may be assigned to a subset of a group of participants or a population based on a measure of confidence or reliability. For example, a higher weight or share value may be assigned to participants who are less likely to engage in an attack or who have some indicator that they are less likely to engage in dishonest activity.

В некоторых случаях уровень безопасности системы распределенной базы данных может быть повышен посредством выбора M таким образом, чтобы оно составляло большую часть от N. Например, когда M соответствует наименьшему целому числу, которое превышает 2/3 от количества участников группы или популяции, N, и все участники имеют одинаковую силу голоса, злоумышленнику необходимо будет иметь контроль или влияние над по меньшей мере 1/3 от N, чтобы предотвратить достижение согласия среди участников, не принимающих участия в атаке, и чтобы добиться того, чтобы распределенная база данных не смогла достичь консенсуса. Подобным образом, в таком случае злоумышленнику необходимо будет иметь контроль или влияние над по меньшей мере 1/3 от N, чтобы вызвать конвергенцию распределенной базы данных и/или достичь согласия в пользу злоумышленника (например, чтобы вызвать конвергенцию базы данных в несправедливом порядке), чтобы сошлись два разных состояния (например, так, чтобы участники официально согласились относительно обоих из двух противоречащих состояний) или чтобы фальсифицировать валюту (когда система распределенной базы данных работает с криптовалютой).In some cases, the security level of a distributed database system can be improved by choosing M to be a larger fraction of N. For example, when M is the smallest integer that is greater than 2/3 of the number of members of a group or population, N, and all participants have the same voting power, an attacker would need to have control or influence over at least 1/3 of N to prevent consensus among participants not taking part in the attack and to ensure that the distributed database cannot reach consensus . Similarly, in such a case, the attacker would need to have control or influence over at least 1/3 of N to cause distributed database convergence and/or reach an agreement in favor of the attacker (e.g., to cause database convergence in an unfair order), so that two different states converge (for example, so that participants formally agree on both of the two conflicting states) or to falsify a currency (when a distributed database system works with a cryptocurrency).

В некоторых случаях, например, нечестный участник может проголосовать двумя разными способами, чтобы вызвать конвергенцию распределенной базы данных на два разных состояния. Если, например, N=300 и 100 участников являются нечестными, имеется 200 честных участников, из которых, например, 100 проголосовали «да» и 100 проголосовали «нет» относительно транзакции. Если 100 нечестных участников отправят сообщение (или событие) 100 честным участникам, проголосовавшим «да», что 100 нечестных участников проголосовали «да», 100 честных участников, проголосовавших «да», будут полагать, что окончательным консенсусом является «да», поскольку они будут полагать, что 2/3 участников проголосовали «да». Подобным образом, если 100 нечестных участников отправят сообщение (или событие) 100 честным участникам, проголосовавшим «нет», что 100 нечестных участников проголосовали «нет», 100 честных участников, проголосовавших «нет», будут полагать, что окончательным консенсусом является «нет», поскольку они будут полагать, что 2/3 участников проголосовали «нет». Таким образом, в этой ситуации некоторые честные участники будут полагать, что консенсусом является «да», тогда как остальные честные участники будут полагать, что консенсусом является «нет», что вызовет конвергенцию распределенной базы данных к двум разным состояниям. Однако, если количество нечестных участников меньше 100, честные участники будут в итоге сходиться на одном значении (либо «да», либо «нет»), поскольку нечестные участники не будут способны протолкнуть количество обоих голосов «да» и «нет» свыше 200 (т.е. 2/3 от N). Другие подходящие значения M могут быть использованы согласно характеристикам и/или конкретным требованиям к применению системы распределенной базы данных.In some cases, for example, a dishonest participant may vote in two different ways to cause a distributed database to converge into two different states. If, for example, N=300 and 100 participants are dishonest, there are 200 honest participants, of which, for example, 100 voted "yes" and 100 voted "no" regarding the transaction. If 100 dishonest participants send a message (or event) to 100 honest participants who voted "yes" that 100 dishonest participants voted "yes", 100 honest participants who voted "yes" will assume that the final consensus is "yes" because they will assume that 2/3 of the participants voted "yes". Similarly, if 100 dishonest participants send a message (or event) to 100 honest participants who voted "no" that 100 dishonest participants voted "no", 100 honest participants who voted "no" will assume that the final consensus is "no" because they will assume that 2/3 of the participants voted "no". Thus, in this situation, some honest participants will believe that the consensus is "yes", while other honest participants will believe that the consensus is "no", which will cause the distributed database to converge to two different states. However, if the number of dishonest participants is less than 100, honest participants will eventually converge on one value (either yes or no), since dishonest participants will not be able to push the number of both yes and no votes over 200 ( i.e. 2/3 of N). Other suitable values of M may be used according to the characteristics and/or specific application requirements of the distributed database system.

В некоторых дополнительных случаях, когда участники имеют неодинаковую силу голоса, например, когда наиболее надежные или доверенные участники голосования имеют силу голоса (например, весовое значение или величину доли), равную единице, а остальные участники имеют часть от единицы, согласие может быть достигнуто, когда сумма долей или весов достигает значения M. Таким образом, в некоторых случаях согласие может быть иногда достигнуто, даже когда большинство участников не согласны с окончательным решением, но большинство надежных или доверенных участников согласны. Другими словами, мощность голосов недоверенных участников может быть ослаблена для предотвращения или ослабления возможных атак. Соответственно в некоторых случаях уровень безопасности может быть повышен за счет требования достижения консенсуса участниками с общей долей M, а не просто количества M участников. Более высокое значение для M означает, что большая часть доли (например, большее количество участников в невзвешенной системе) должна прийти к согласию, чтобы вызвать конвергенцию распределенной базы данных.In some additional cases where participants have unequal voting power, such as when the most trusted or trusted voters have a voting power (e.g., weight or share value) of one, and the remaining participants have a fraction of one, agreement can be reached, when the sum of the shares or weights reaches the value M. Thus, in some cases, agreement can sometimes be reached even when the majority of participants do not agree with the final decision, but the majority of reliable or trusted participants agree. In other words, the power of untrusted participants' votes can be weakened to prevent or mitigate possible attacks. Accordingly, in some cases, the level of security can be increased by requiring consensus among participants with a total share M, and not just the number M of participants. A higher value for M means that more of the share (for example, more participants in an unweighted system) must agree in order to cause distributed database convergence.

В некоторых случаях система распределенной базы данных может поддерживать множество протоколов безопасности участия, включая, помимо прочего, протоколы, показанные в таблице 1, и любую их комбинацию. Протоколы, показанные в таблице 1, описывают множество методов присвоения доли или весового значения участникам группы или популяции. Протоколы в таблице 1 могут быть реализованы с использованием криптовалют, таких как, например, Биткойн, производная от исходной криптовалюты, криптовалюта, определенная в системе распределенной базы данных, или любой другой подходящий тип криптовалюты. Несмотря на описание в отношении криптовалюты, в других случаях протоколы, показанные в таблице 1, могут быть использованы в любой другой подходящей системе распределенной базы данных и с любым другим способом присвоения доли.In some cases, a distributed database system may support a variety of participation security protocols, including but not limited to those shown in Table 1 and any combination thereof. The protocols shown in Table 1 describe a variety of methods for assigning a proportion or weight to members of a group or population. The protocols in Table 1 may be implemented using cryptocurrencies such as, for example, Bitcoin derived from the original cryptocurrency, a cryptocurrency defined in a distributed database system, or any other suitable type of cryptocurrency. Despite the description in relation to cryptocurrencies, in other cases, the protocols shown in Table 1 can be used in any other suitable distributed database system and with any other method of assigning shares.

ТАБЛИЦА 1TABLE 1

Пример протоколов безопасности участияExample Security Participation Protocols Название протоколаProtocol name ОписаниеDescription Доказательство доли владения Proof of ownership Каждый участник может связать себя с одним или более кошельками криптовалюты, которыми владеет, и его доля голосов устанавливается в значение, связанное с общим балансом этих одного или более кошельков криптовалюты. Each participant can associate himself with one or more cryptocurrency wallets he owns, and his voting share is set to a value related to the total balance of those one or more cryptocurrency wallets. Доказательство сжиганияBurn Proof Подобен доказательству доли владения, но участники доказывают, что они уничтожили или потратили рассматриваемую криптовалюту. Другими словами, взнос уплачивают для присоединения к голосующей популяции, и доля голосов пропорциональна уплаченной сумме.Similar to proof of stake, but participants prove that they destroyed or spent the cryptocurrency in question. In other words, a fee is paid to join the voting population, and the share of votes is proportional to the amount paid. Доказательство выполнения работыProof of Work Участники могут зарабатывать доли голосов посредством выполнения вычислительных задач или решения загадок. В отличие от традиционных криптовалют, вычислительные затраты могут повлечь за собой зарабатывание величины доли голосов, а не добычи блоков.
В этом протоколе от участников популяции может потребоваться продолжение выполнения вычислительных задач или решения загадок, чтобы не отставать от потребностей системы и не потерять свою возможность поддержания безопасности системы. Этот протокол может быть также сконфигурирован так, чтобы доли голосов уменьшались со временем, чтобы стимулировать непрерывную работу участников.
Participants can earn shares of votes by completing computational tasks or solving puzzles. Unlike traditional cryptocurrencies, computational costs may entail earning a share of votes rather than mining blocks.
In this protocol, members of the population may be required to continue performing computational tasks or solving puzzles in order to keep up with the needs of the system and not lose their ability to maintain the security of the system. This protocol can also be configured to decrease vote shares over time to encourage continued participation by participants.
По разрешениюBy permission Каждый участник получается долю голосов, точно равную единице. Участникам может быть позволено становиться участником, только если они имеют разрешение.
Разрешение на присоединение к популяции может быть основано на голосовании существующих участников, доказательстве участия в некоторой существующей организации или любом другом подходящем условии.
Each participant receives a share of votes exactly equal to one. Members may only be allowed to become a member if they have permission.
Permission to join a population may be based on a vote by existing members, proof of membership in some existing organization, or any other suitable condition.
ГибридныйHybrid Учредители популяции могут начинать с одинаковой долей голосов. Учредители могут приглашать других участников присоединиться к популяции, так что состав участников может расширяться лавинообразно. Каждый участник будет делить свою собственную долю голосов с теми, кого он приглашает. Таким образом, если участник пригласил 1000 виртуальных участников, то все 1001 из них вместе по-прежнему будут иметь ту же общую долю голосов, которую первоначально имел этот участник. Так что виртуальные пользователи не помогут в запуске атаки Сивиллы.Founders of a population can start with the same share of votes. Founders can invite other members to join the population, so the membership can explode. Each participant will share their own share of the votes with those they invite. So if a member invited 1000 virtual members, then all 1001 of them together would still have the same total vote share that that member originally had. So virtual users will not help in launching the Sibyl attack. ПростойSimple Каждый участник обеспечивается долей голосов, соответствующей одной единице. Любой участник может приглашать новых участников присоединиться к популяции. Новые участники обеспечиваются долей голосов, соответствующей одной единице. Each participant is provided with a share of votes corresponding to one unit. Any member can invite new members to join the population. New participants are provided with a share of votes corresponding to one unit.

Выбор одного из протоколов безопасности участия может зависеть от конкретных применений. Например, гибридный протокол может быть подходящим для реализации обычных малоценных транзакций, применения при коммерческом сотрудничестве, применения в компьютерной игре и другого подобного типа применений, где компромисс между безопасностью и минимальными вычислительными затратами склоняется к последнему. Гибридный протокол может быть эффективен в предотвращении нарушения работы или атаки группы участников или популяции одним недовольным участником.The choice of one of the participation security protocols may depend on specific applications. For example, a hybrid protocol may be suitable for general low-value transactions, commercial collaboration applications, computer game applications, and other similar types of applications where the trade-off between security and minimal computational overhead leans towards the latter. A hybrid protocol can be effective in preventing a disruption or attack on a group of participants or a population by a single disgruntled participant.

В качестве другого примера, протокол по разрешению может быть желателен, когда требования безопасности имеют наивысший приоритет, и участники популяции не являются абсолютно незнакомыми или неизвестными друг другу. Протокол по разрешению может быть использован для реализации приложений, предназначенных, например, для банков и субъектов финансовых отношений подобного типа, или субъектов, состоящих в консорциуме. В таком случае банки в консорциуме могут стать участниками популяции, и каждый банк может иметь ограничение, заключающееся в том, что он принимает участие в качестве одного участника. Соответственно M может быть установлено в наименьшее целое число, которое превышает две третьих популяции. Банки не могут взаимно доверять друг другу как отдельные субъекты, но могут положиться на уровень безопасности, обеспечиваемый системой распределенной базы данных, которая в этом примере ограничивает количество нечестных участников так, чтобы оно составляло не более одной третьей банков в популяции.As another example, a resolution protocol may be desirable when security requirements are of the highest priority and the members of the population are not completely unfamiliar or unknown to each other. The authorization protocol can be used to implement applications intended, for example, for banks and entities of this type of financial relationship, or entities that are members of a consortium. In such a case, the banks in the consortium may become members of the population, and each bank may have the restriction that it participates as one member. Accordingly, M can be set to the smallest integer that is greater than two-thirds of the population. Banks cannot mutually trust each other as separate entities, but can rely on the level of security provided by the distributed database system, which in this example limits the number of dishonest participants to no more than one-third of the banks in the population.

В качестве еще одного примера, протокол доказательства сжигания может быть реализован, когда популяция содержит большое количество незнакомых участников или неизвестных участников. В таком случае злоумышленник может получить контроль над частью общей доли, превышающей значение, заданное для M. Однако может быть установлен достаточно высокий вступительный взнос, чтобы стоимость атаки превышала любые ожидаемые выгоды или доходы.As another example, a burn proof protocol can be implemented when the population contains a large number of unfamiliar members or unknown members. In such a case, the attacker may gain control of a portion of the total share that exceeds the value specified for M. However, the entry fee may be set high enough that the cost of the attack exceeds any expected benefits or revenues.

В качестве другого примера, протокол доказательства доли владения может являться подходящим для более крупных групп. Протокол доказательства доли владения может быть оптимальным или желательным решением, когда имеется большая группа участников, которые владеют существенными суммами криптовалюты в приблизительно равных объемах, и не предвидится или не предполагается, что участник, нарушающий работу, соберет более крупную сумму криптовалюты, чем сумма, которой вместе владеет большая группа участников.As another example, a proof-of-stake protocol may be suitable for larger groups. A proof-of-stake protocol may be an optimal or desirable solution when there is a large group of participants who hold substantial amounts of cryptocurrencies in approximately equal amounts, and it is not foreseen or expected that the disrupting participant will collect a larger amount of cryptocurrencies than the amount that together owned by a large group of participants.

В других случаях другие дополнительные или более сложные протоколы могут быть получены из протокола или комбинации протоколов, показанных в таблице 1. Например, система распределенной базы данных может быть выполнена с возможностью реализации гибридного протокола, который следует протоколу по разрешению в течение предварительно определенного периода времени и в итоге позволяет участникам продавать доли голосов друг другу. В качестве другого примера, система распределенной базы данных может быть выполнена с возможностью реализации протокола доказательства сжигания и в итоге переходить к протоколу доказательства доли владения, когда значение событий или вовлеченные транзакции достигают порогового значения или предварительно определенной величины в криптовалюте.In other cases, other additional or more complex protocols may be derived from the protocol or combination of protocols shown in Table 1. For example, a distributed database system may be configured to implement a hybrid protocol that follows the resolution protocol for a predetermined period of time and ultimately allows participants to sell shares of votes to each other. As another example, a distributed database system may be configured to implement a proof-of-burn protocol and eventually transition to a proof-of-stake protocol when the value of the events or transactions involved reaches a threshold or predetermined value in the cryptocurrency.

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

В других случаях и как более подробно описано в настоящем документе, модуль 211 конвергенции базы данных может первоначально определять вектор значений для параметра и может обновлять вектор значений по мере приема дополнительных значений для параметра с других вычислительных устройств. Например, модуль 211 конвергенции базы данных может принимать дополнительные значения для параметра с других вычислительных устройств посредством модуля 212 связи. В некоторых случаях модуль конвергенции базы данных может выбирать значение для параметра на основе определенного и/или обновленного вектора значений для параметра, как более подробно описано в настоящем документе. В некоторых вариантах осуществления модуль 211 конвергенции базы данных может также отправлять значение для параметра на другие вычислительные устройства посредством модуля 212 связи, как более подробно описано в настоящем документе.In other cases, and as described in more detail herein, database convergence module 211 may initially determine a value vector for a parameter, and may update the value vector as additional values for the parameter are received from other computing devices. For example, database convergence module 211 can receive additional values for a parameter from other computing devices via communication module 212 . In some cases, the database convergence module may select a value for a parameter based on a determined and/or updated vector of values for the parameter, as described in more detail herein. In some embodiments, database convergence module 211 may also send a value for a parameter to other computing devices via communication module 212, as described in more detail herein.

В некоторых вариантах осуществления модуль 211 конвергенции базы данных может отправлять сигнал в память 220 для вызова сохранения в памяти 220 (1) определенного и/или обновленного вектора значений для параметра и/или (2) выбранного значения для параметра на основе определенного и/или обновленного вектора значений для параметра. Например, (1) определенный и/или обновленный вектор значений для параметра и/или (2) выбранное значение для параметра на основе определенного и/или обновленного вектора значений для параметра могут быть сохранены в экземпляре 221 распределенной базы данных, реализованном в памяти 220. В некоторых вариантах осуществления экземпляр 221 распределенной базы данных может быть подобен экземплярам 114, 124, 134, 144 распределенной базы данных системы 100 распределенной базы данных, показанной на фиг. 1.In some embodiments, database convergence module 211 may send a signal to memory 220 to cause memory 220 to store (1) a determined and/or updated vector of values for a parameter and/or (2) a selected value for a parameter based on the determined and/or updated a vector of values for the parameter. For example, (1) a determined and/or updated value vector for a parameter and/or (2) a selected value for a parameter based on the determined and/or updated value vector for a parameter may be stored in a distributed database instance 221 implemented in memory 220. In some embodiments, distributed database instance 221 may be similar to distributed database instances 114, 124, 134, 144 of distributed database system 100 shown in FIG. one.

Как показано на фиг. 2, модуль 211 конвергенции базы данных и модуль 212 связи показаны на фиг. 2 как реализованные в процессоре 210. В других вариантах осуществления модуль 211 конвергенции базы данных и/или модуль 212 связи могут быть реализованы в памяти 220. В еще других вариантах осуществления модуль 211 конвергенции базы данных и/или модуль 212 связи могут быть основаны на аппаратном обеспечении (например, ASIC, FPGA и т. д.).As shown in 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 (e.g. ASIC, FPGA, etc.).

На фиг. 7 проиллюстрирована функциональная схема потока сигналов двух вычислительных устройств, синхронизирующих события, согласно одному варианту осуществления. В частности, в некоторых вариантах осуществления экземпляры 703 и 803 распределенной базы данных могут обмениваться событиями для достижения конвергенции. Вычислительное устройство 700 может выбирать синхронизацию с вычислительным устройством 800 случайным образом, на основе взаимосвязи с вычислительным устройством 700, на основе близости к вычислительному устройству 700, на основе упорядоченного списка, связанного с вычислительным устройством 700, и/или т.п. В некоторых вариантах осуществления, поскольку вычислительное устройство 800 может быть выбрано вычислительным устройством 700 из набора вычислительных устройств, относящихся к системе распределенной базы данных, вычислительное устройство 700 может выбирать вычислительное устройство 800 несколько раз подряд или может некоторое время не выбирать вычислительное устройство 800. В других вариантах осуществления указание о ранее выбранных вычислительных устройствах может быть сохранено на вычислительном устройстве 700. В таких вариантах осуществления вычислительное устройство 700 может находиться в ожидании, пока не будет осуществлено предварительно определенное количество выборов, перед тем, как получить возможность снова выбирать вычислительное устройство 800. Как поясняется выше, экземпляры 703 и 803 распределенной базы данных могут быть реализованы в памяти вычислительного устройства 700 и памяти вычислительного устройства 800 соответственно.In FIG. 7 illustrates a signal flow diagram of two event timing computing devices, according to one 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, 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. In others embodiments, an indication of 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 being able to select computing device 800 again. As discussed above, distributed database instances 703 and 803 may be implemented in computing device memory 700 and computing device memory 800, respectively.

На фиг. 3–6 проиллюстрированы примеры DAG на основе хешей согласно одному варианту осуществления. Имеется пять участников, каждый из которых представлен темной вертикальной линией. Каждый круг представляет событие. Две нисходящие линии от события представляют хеши двух предыдущих событий. Каждое событие в этом примере имеет две нисходящие линии (одну темную линию к тому же участнику и одну светлую линию к другому участнику), за исключением первого события каждого участника. Время течет вверх. На фиг. 3–6 вычислительные устройства распределенной базы данных обозначены как Алиса, Боб, Кэрол, Дэйв и Эд. Следует понимать, что такие обозначения относятся к вычислительным устройствам, которые конструктивно и функционально подобны вычислительным устройствам 110, 120, 130 и 140, показанным и описанным в отношении фиг. 1.In FIG. 3-6 illustrate examples of hash-based DAGs according to one 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.

Примерная система 1: если вычислительное устройство 700 называется Алиса, и вычислительное устройство 800 называется Боб, то синхронизация между ними может быть выполнена так, как проиллюстрировано на фиг. 7. Синхронизация между Алисой и Бобом может быть выполнена следующим образом: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:

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

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

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

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

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

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

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

- Алиса отправляет Бобу это событие.- Alice sends this event to Bob.

- Алиса вычисляет общий порядок для событий как функцию DAG на основе хешей.- Alice calculates the overall order for events as a DAG function based on hashes.

- Боб вычисляет общий порядок для событий как функцию DAG на основе хешей.- Bob calculates the overall order for the events as a function of the DAG based on the hashes.

В любой заданный момент времени участник может сохранить принятые на данный момент события вместе с идентификатором, связанным с вычислительным устройством и/или экземпляром распределенной базы данных, которые создали и/или определили каждое событие. Каждое событие содержит хеши двух более ранних событий, за исключением первоначального события (которое не имеет родительских хешeй) и первого события для каждого нового участника (которое имеет один хеш события-родителя, представляющий событие существующего участника, который пригласил их присоединиться). Для представления этого набора событий может быть нарисована схема. На ней могут быть показаны вертикальная линия для каждого участника и точка на этой линии для каждого события, созданного и/или определенного этим участником. Диагональная линия изображена между двумя точками в каждом случае, когда событие (расположенная выше точка) содержит хеш более раннего события (расположенная ниже точка). Можно сказать, что событие связано с другим событием, если это событие может ссылаться на другое событие посредством хеша этого события (либо непосредственно, либо через промежуточные события).At any given point in time, a participant may store the so far 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 can 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 (higher dot) contains a hash of an earlier event (lower dot). An event can be said to be related to another event if that event can refer to another event via the hash of that event (either directly or through intermediate events).

Например, на фиг. 3 проиллюстрирован пример DAG 600 на основе хешей. Событие 602 создается и/или определяется Бобом в результате синхронизации с Кэрол и после нее. Событие 602 содержит хеш события 604 (предыдущего события, созданного и/или определенного Бобом) и хеш события 606 (предыдущего события, созданного и/или определенного Кэрол). В некоторых вариантах осуществления, например, хеш события 604, включенный в событие 602, содержит указатель на его непосредственные события-предки, события 608 и 610. По существу, Боб может использовать событие 602 для ссылки на события 608 и 610 и перестройки DAG на основе хешей с использованием указателей на предыдущие события. В некоторых случаях можно сказать, что событие 602 связано с другими событиями в DAG 600 на основе хешей, поскольку событие 602 может ссылаться на каждое из событий в DAG 600 на основе хешей посредством более ранних событий-предков. Например, событие 602 связано с событием 608 посредством события 604. В качестве другого примера, событие 602 связано с событием 616 посредством события 606 и события 612.For example, in FIG. 3 illustrates an example of a DAG 600 based on hashes. Event 602 is generated and/or defined 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 DAG based on hashes using pointers to previous events. In some cases, event 602 can be said to be related to other events in the hash-based DAG 600 because event 602 can refer to each of the events in the hash-based DAG 600 through earlier ancestor events. For example, event 602 is associated with event 608 through event 604. As another example, event 602 is associated with event 616 through event 606 and event 612.

Примерная система 2: Система на основе примерной системы 1, при этом событие также содержит «полезные данные» транзакций или другую информацию для записи. Такие полезные данные могут быть использованы для обновления событий с помощью любых транзакций и/или информации, которые произошли и/или были определены начиная с непосредственного предыдущего события вычислительного устройства. Например, событие 602 может включать любые транзакции, выполненные Бобом, начиная с момента создания и/или определения события 604. Таким образом, во время синхронизации события 602 с другими вычислительными устройствами Боб может делиться этой информацией. Соответственно транзакции, выполняемые Бобом, могут быть связаны с событием и предоставлены другим участникам с помощью событий.Exemplary System 2: A system based on Exemplary System 1, wherein the event also contains transaction payloads or other information to record. Such payload 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 include 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.

Примерная система 3: Система на основе примерной системы 1, при этом событие также включает текущие время и/или дату, полезные для отладки, диагностики и/или других целей. Время и/или дата могут быть локальными временем и/или датой, фиксирующими, когда вычислительное устройство (например, Боб) создает и/или определяет событие. В таких вариантах осуществления такие локальные время и/или дата не синхронизируются с остальными устройствами. В других вариантах осуществления время и/или дата могут быть синхронизированы на всех устройствах (например, при обмене событиями). В еще других вариантах осуществления для определения времени и/или даты может быть использован глобальный таймер.Exemplary System 3: A system based on Exemplary System 1, wherein the event also includes the 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.

Примерная система 4: Система на основе примерной системы 1, в которой Алиса не отправляет Бобу ни события, созданные и/или определенные Бобом, ни события-предки такого события. Событие x является предком события y, если y содержит хеш x или y содержит хеш события, которое является предком x. Подобным образом, в таких вариантах осуществления Боб отправляет Алисе события, еще не сохраненные Алисой, и не отправляет события, уже сохраненные Алисой.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 any 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.

Например, на фиг. 4 проиллюстрирован примерный DAG 620 на основе хешей, иллюстрирующий события-предки (круги с точками) и события-потомки (круги с полосками) события 622 (черный круг). Линии устанавливают частичный порядок событий, в котором предки идут до события в виде черного круга, и потомки идут после события в виде черного круга. Частичный порядок не указывает, идут ли события в виде белых кругов до или после события в виде черного круга, так что для определения их последовательности используется общий порядок. В качестве другого примера, на фиг. 5 проиллюстрирован примерный DAG на основе хешей, иллюстрирующий одно конкретное событие (закрашенный круг) и первый момент времени, в который каждый участник принимает указание об этом событии (круги с полосками). Когда Кэрол синхронизируется с Дэйвом для создания и/или определения события 624, Дэйв не отправляет Кэрол события-предки события 622, поскольку Кэрол уже осведомлена о таких событиях и приняла их. Вместо этого Дэйв отправляет Кэрол события, которые Кэрол все еще должна принять и/или сохранить в экземпляре распределенной базы данных Кэрол. В некоторых вариантах осуществления Дэйв может идентифицировать, какие события следует отправлять Кэрол, на основе того, что DAG на основе хешей Дэйва показывает о том, какие события Кэрол приняла ранее. Событие 622 является предком события 626. Следовательно, на момент события 626 Дэйв уже принял событие 622. На фиг. 4 показано, что Дэйв принял событие 622 от Эда, который принял событие 622 от Боба, который принял событие 622 от Кэрол. Кроме того, на момент события 624 событие 622 является последним событием, принятым Дэйвом, которое было создано и/или определено Кэрол. Следовательно, Дэйв может отправлять Кэрол события, которые Дэйв сохранил, отличающиеся от события 622 и его предков. Дополнительно после приема события 626 от Дэйва Кэрол может перестраивать DAG на основе хешей с помощью указателей в событиях, сохраненных в экземпляре распределенной базы данных Кэрол. В других вариантах осуществления Дэйв может идентифицировать, какие события следует отправлять Кэрол, на основе отправки Кэрол события 622 Дэйву (не показано на фиг. 4) и идентификации с помощью события 622 (и ссылок в нем) Дэйвом, чтобы идентифицировать события, которые Кэрол уже приняла.For example, in FIG. 4 illustrates an exemplary hash-based DAG 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 hash-based DAG illustrating one particular event (solid circle) and the first time 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 can identify which events to send to Carol based on what the DAG based on Dave's hashes shows 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 DAG based on hashes using 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's sending event 622 to Dave (not shown in FIG. 4) and identifying by event 622 (and references therein) by Dave to identify events that Carol already accepted.

Примерная система 5: Система на основе примерной системы 1, в которой оба участника отправляют события друг другу в таком порядке, что событие отправляется только после того, как получатель примет и/или сохранит предков этого события. Соответственно отправитель отправляет события от самых старых к самым новым, так что получатель может проверить два хеша в каждом событии при приеме события посредством сравнения двух хешeй с двумя событиями-предками, которые уже были приняты. Отправитель может идентифицировать, какие события следует отправлять получателю, на основе текущего состояния DAG на основе хешей отправителя (например, переменной состояния базы данных, определенной отправителем), а какие, как указывает этот DAG на основе хешей, получатель уже принял. Ссылаясь на фиг. 3, например, когда Боб синхронизируется с Кэрол для определения события 602, Кэрол может идентифицировать, что событие 619 является последним событием, созданным и/или определенным Бобом, которое приняла Кэрол. Следовательно, Кэрол может определить, что Бобу известно об этом событии и его предках. Таким образом, Кэрол может отправлять Бобу сначала событие 618 и событие 616 (т.е. самые старые события, которые Боб еще должен принять из принятых Кэрол). Кэрол может затем отправлять Бобу событие 612, а затем событие 606. Это позволяет Бобу легко связать события и перестроить DAG на основе хешей Боба. Использование DAG на основе хешей Кэрол для идентификации того, какие события еще должен принять Боб, может повысить эффективность синхронизации и может уменьшить сетевой трафик, поскольку Боб не запрашивает события у Кэрол. 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 has accepted and/or stored 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 DAG based on the sender's hashes (eg, a database state variable defined by the sender) and which hash-based DAGs indicate which 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 this event and its ancestors. Thus, Carol can send event 618 and event 616 to Bob first (ie, the oldest events that Bob still needs to receive from Carol's received). Carol can then send event 612 and then event 606 to Bob. This allows Bob to easily chain events and rebuild the DAG based on Bob's hashes. Using a DAG based on Carol's hashes to identify which events Bob still needs to receive can improve synchronization efficiency and can reduce network traffic because Bob doesn't request events from Carol.

В других вариантах осуществления самое последнее событие может быть отправлено первым. Если получатель определяет (на основе хеша двух предыдущих событий в самом последнем событии и/или указателей на предыдущие события в самом последнем событии), что он еще не принял одно из двух предыдущих событий, получатель может запросить у отправителя отправку таких событий. Это может происходить до тех пор, пока получатель не примет и/или не сохранит предков самого последнего события. Ссылаясь на фиг. 3, в таких вариантах осуществления, например, когда Боб принимает событие 606 от Кэрол, Боб может идентифицировать хеш события 612 и события 614 в событии 606. Боб может определить, что событие 614 было ранее принято от Алисы при создании и/или определении события 604. Соответственно, Бобу не нужно запрашивать событие 614 у Кэрол. Боб может также определить, что событие 612 еще не было принято. Боб может затем запросить событие 612 у Кэрол. Боб может затем на основе хешeй в событии 612 определить, что Боб не принял события 616 или 618, и может соответственно запросить эти события у Кэрол. На основе событий 616 и 618 Боб затем сможет определить, что он принял предков события 606.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.

Примерная система 6: Система на основе примерной системы 5 с дополнительным ограничением, которое заключается в том, что, когда участник имеет выбор между несколькими событиями для отправки далее, событие выбирается так, чтобы минимизировать общее количество отправленных на данный момент байтов, созданных и/или определенных этим участником. Например, если Алисе осталось отправить Бобу только два события, и одно из них имеет размер 100 байтов и было создано и/или определено Кэрол, а другое имеет размер 10 байтов и было создано и/или определено Дэйвом, и на данный момент в ходе этой синхронизации Алиса уже отправила 200 байтов событий Кэрол и 210 Дэйва, то Алисе следует сначала отправить событие Дэйву, а затем отправить событие Кэрол. Поскольку 210 + 10 < 100 + 200. Это может быть использовано для предотвращения атак, при которых один участник выдает либо одно огромное событие, либо поток мелких событий. В случае если трафик превышает ограничение по байтам большинства участников (как обсуждается в отношении примерной системы 7), способ согласно примерной системе 6 может обеспечивать, что игнорироваться будут события злоумышленника, а не события правомочных пользователей. Подобным образом, атаки могут быть ослаблены посредством отправки меньших событий перед большими событиями (для защиты от одного огромного события, забивающего канал связи). Более того, если участник не может отправить каждое из событий за одну синхронизацию (например, из-за ограничения сети, ограничений по байтам участника и т. д.), то этот участник может отправить несколько событий от каждого участника, вместо того, чтобы простой отправить события, определенные и/или созданные злоумышленником, и ни одного (из нескольких) события, созданного и/или определенного другими участниками. Exemplary System 6: A system based on Exemplary System 5 with the additional constraint that when a participant has a choice 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 this 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 this participant can send multiple events from each participant, instead of a simple send events defined and/or created by the attacker, and none (of several) events created and/or defined by other participants.

Примерная система 7: Система на основе примерной системы 1 с дополнительным первым этапом, на котором Боб отправляет Алисе число, указывающее максимальное количество байтов, которое он желает принять во время этой синхронизации, и Алиса отвечает сообщением со своим ограничением. Алиса затем прекращает отправку, если следующее событие превысило бы это ограничение. Боб делает то же самое. В таком варианте осуществления это ограничивает количество передаваемых байтов. Это может увеличить время конвергенции, но уменьшит количество сетевого трафика на синхронизацию.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.

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

- Алиса идентифицирует S, набор событий, которые она приняла и/или сохранила, пропуская события, которые были созданы и/или определены Бобом или которые являются предками событий, созданных и/или определенных Бобом. - 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.

- Алиса идентифицирует участников, которые создали и/или определили каждое событие в S, и отправляет Бобу список ID-номеров участников. Алиса также отправляет количество событий, которые были созданы и/или определены каждым участником, которые она уже приняла и/или сохранила.- Alice identifies the participants who 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.

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

- Алиса затем отправляет Бобу только события, которые он еще должен принять. Например, если Алиса указывает Бобу, что она приняла 100 событий, созданных и/или определенных Кэрол, и Боб отвечает, что он принял 95 событий, созданных и/или определенных Кэрол, то Алиса отправит только 5 самых последних событий, созданных и/или определенных Кэрол.- Alice then sends Bob only the events 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.

Примерная система 9: Система на основе примерной системы 1 с дополнительным механизмом для идентификации и/или устранения мошенников. Каждое событие содержит два хеша, один от последнего события, созданного и/или определенного этим участником («собственный хеш»), и один от последнего события, созданного и/или определенного другим участником («чужой хеш»). Если участник создает и/или определяет два разных события с одним и тем же собственным хешем, то этот участник является «мошенником». Если Алиса устанавливает, что Дэйв является мошенником, посредством приема двух разных событий, созданных и/или определенных им с использованием одного и того же собственного хеша, то Алиса сохраняет индикатор, указывающий на то, что Дэйв является мошенником, и избегает синхронизации с ним в будущем. Если она устанавливает, что он является мошенником, но все же синхронизируется с ним снова и создает и/или определяет новое событие, записывающее этот факт, то Алиса тоже становится мошенником, и другие участники, которые узнают, что Алиса впоследствии синхронизировалась с Дэйвом, перестают синхронизироваться с Алисой. В некоторых вариантах осуществления это влияет только на синхронизацию в одну сторону. Например, когда Алиса отправляет список идентификаторов и число событий, которые она приняла, для каждого участника, она не отправляет ID или количество для мошенника, так что Боб не ответит никаким соответствующим числом. Алиса затем отправляет Бобу события мошенника, которые она принял и для которых она не приняла указание о том, что Боб принял такие события. После завершения этой синхронизации Боб также сможет определить, что Дэйв является мошенником (если он еще не идентифицировал Дэйва как мошенника), и Боб также откажется от синхронизации с мошенником.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 this participant is a "scammer". If Alice determines that Dave is a cheater by receiving two different events created and/or defined by him using the same hash of his own, then Alice keeps the indicator that Dave is a cheater and avoids synchronizing with him in the future. If she establishes that he is a cheater, but still syncs with him again and creates and/or defines a new event that records this fact, then Alice becomes a cheater 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 this sync is complete, 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.

Примерная система 10: Система на основе примерной системы 9 с тем дополнением, что Алиса начинает процесс синхронизации путем отправки Бобу списка мошенников, которых она идентифицировала и события которых она все еще хранит, и Боб отвечает сообщением с указанием любых мошенников, которых он идентифицировал, в дополнение к мошенникам, идентифицированным Алисой. Затем они продолжают работу в обычном режиме, но без подсчета мошенников при синхронизации друг с другом.Exemplary System 10: A system based on Exemplary System 9 with the addition that Alice initiates 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 has identified in addition to the scammers identified by Alice. They then continue as normal, but without counting cheaters while syncing with each other.

Примерная система 11: Система на основе примерной системы 1 с процессом, который постоянно обновляет текущее состояние (например, зафиксированное переменной состояния базы данных, определенной участником системы) на основе транзакций в любых новых событиях, которые принимаются во время синхронизации. Это также может включать второй процесс, который постоянно перестраивает это состояние (например, порядок событий) каждый раз, когда последовательность событий меняется, посредством возвращения к копии более раннего состояния и повторного вычисления настоящего состояния посредством обработки событий в новом порядке. В некоторых вариантах осуществления текущим состоянием является состояние, баланс, условие и/или т.п., связанные с результатом транзакций. Подобным образом, состояние может включать структуру данных и/или переменные, модифицированные транзакциями. Например, если транзакциями являются денежные переводы между банковскими счетами, то текущим состоянием может быть текущий баланс счетов. В качестве другого примера, если транзакции связаны с многопользовательской игрой, текущим состоянием может быть положение, количество жизней, полученные предметы, состояние игры и/или т.п., связанные с игрой.Exemplary System 11: A system based on Exemplary System 1 with a process that continually 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. In some embodiments, the current state is the 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.

Примерная система 12: Система на основе примерной системы 11, ускоренная за счет использования arrayList с «быстрым клонированием» для поддержания состояния (например, баланса банковских счетов, состояния игры и т. д.). ArrayList с быстрым клонированием представляет собой структуру данных, которая действует как массив с одной дополнительной особенностью: она поддерживает операцию «клонирования», которая представляет собой создание и/или определение нового объекта, который является копией оригинала. Клон действует так, как если бы это была точная копия, поскольку изменения, которым подвергается клон, не влияют на оригинал. Однако операция клонирования быстрее, чем создание точной копии, поскольку создание клона в действительности не включает копирования и/или обновления всего содержимого одного arrayList в другой. Вместо наличия двух клонов и/или копий оригинального списка могут быть использованы два небольших объекта, каждый с хеш-таблицей и указателем на оригинальный список. Когда производится запись в клон, хеш-таблица запоминает, какой элемент модифицирован, и новое значение. Когда выполняется считывание из позиции, сначала проверяется хеш-таблица, и, если этот элемент был модифицирован, возвращается новое значение из хеш-таблицы. Иначе этот элемент возвращается из оригинального arrayList. Таким образом, два «клона» изначально являются лишь указателями на оригинальный arrayList. Но поскольку каждый из них постоянно модифицируется, они расширяются настолько, что имеют большую хеш-таблицу, в которой хранятся отличия между ними и оригинальным списком. Клоны сами могут быть клонированы, что вызывает расширение структуры данных до дерева объектов, каждый из которых имеет свои собственные хеш-таблицу и указатель на своего родителя. Следовательно, считывание вызывает подъем по дереву до тех пор, пока не будет установлена вершина, которая имеет запрашиваемые данные, или не будет достигнут корень. Если вершина становится слишком большой или сложной, тогда она может быть заменена на точную копию родителя, изменения в хеш-таблице могут быть переведены в копию, а хеш-таблица удалена. Кроме того, если клон больше не нужен, то во время сборки мусора он может быть удален из дерева, и дерево может быть свернуто. Exemplary System 12: A system based on Exemplary System 11, accelerated by using a "fast clone" arrayList to maintain state (eg, bank account 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 to, 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, this 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.

Примерная система 13: Система на основе примерной системы 11, ускоренная за счет использования хеш-таблицы с «быстрым клонированием» для поддержания состояния (например, баланса банковских счетов, состояния игры и т. д.). Она подобна системе 12, за тем исключением, что корень дерева представляет собой хеш-таблицу, а не arrayList.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.

Примерная система 14: Система на основе примерной системы 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. Модификация строки эквивалентна удалению с последующей вставкой. Как и раньше, если несколько клонов удаляются во время сборки мусора, то дерево может быть упрощено. Структура этого дерева будет сохранена в дополнительной таблице, недоступной клонам, но которая полностью используется на внутреннем уровне.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.). 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 tries to send a Structured Query Language (SQL) query to a database, then the 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 database clones are created with IDs of 2 and 3. 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 lines that have a value of 2 or 1 in this 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 this tree will be stored in an additional table that is inaccessible to clones, but which is fully used internally.

Примерная система 15: Система на основе примерной системы 11, ускоренная за счет использования файловой системы с «быстрым клонированием» для поддержания состояния. Она представляет собой объект, который действует как обертка вокруг файловой системы. Файловая система построена поверх существующей файловой системы, с использованием реляционной базы данных с быстрым клонированием для управления разными версиями файловой системы. Основная файловая система хранит большое количество файлов либо в одном каталоге, либо раздельно согласно имени файла (для поддержания малого размера каталогов). Дерево каталогов может храниться в базе данных и не предоставляться базовой файловой системе. Когда файл или каталог клонируются, «клон» представляет собой лишь объект с ID-номером, и база данных модифицируется так, чтобы отображать, что этот клон теперь существует. Если файловая система с быстрым клонированием клонируется, она представляется пользователю такой, как если бы был создан и/или определен целый новый жесткий диск, инициализированный с использованием копии существующего жесткого диска. Изменения, которым подвергается одна копия, могут не влиять на другие копии. В действительности существует только одна копия каждого файла или каталога, и копирование происходит, когда файл модифицируется посредством одного клона.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 relational database with fast cloning 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.

Примерная система 16: Система на основе примерной системы 15, в которой отдельный файл создается и/или определяется в базовой операционной системе для каждой N-байтной части файла в файловой системе с быстрым клонированием. N может представлять собой некоторый подходящий размер, такой как, например, 4096 или 1024. Таким образом, если один байт изменяется в большом файле, копируется и модифицируется только один блок большого файла. Это также повышает эффективность при сохранении множества файлов на диске, которые отличаются лишь несколькими байтами.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.

Примерная система 17: Система на основе примерной системы 11, где каждый участник включает в некоторые или во все событиях, которые он создает и/или определяет, хеш состояния на некоторый предыдущий момент времени вместе с количеством событий, которые произошли вплоть до этого момента, указывая на то, что участник распознает и/или идентифицирует, что теперь достигнут консенсус относительно порядка событий. После того как участник собрал подписанные события, содержащие такой хеш, от большинства пользователей для заданного состояния, участник может затем сохранить это как доказательство состояния консенсуса на тот момент и удалить из памяти события и транзакции до того момента.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, 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.

Примерная система 18: Система на основе примерной системы 1, где операции, которые вычисляют медиану или большинство, заменяются взвешенной медианой или взвешенным большинством, причем участников взвешивают согласно их «доле». Доля представляет собой число, которое указывает на то, как много значит голос участника. Доля может представлять собой активы в криптовалюте или просто произвольное число, которое присваивается, когда участника впервые приглашают присоединиться, а затем разделяется среди новых участников, которых участник пригласил присоединиться. Старые события могут быть удалены, когда достаточное количество участников согласится с состоянием консенсуса, так что их общая доля является большей частью имеющейся доли. Если общий порядок вычисляется с использованием медианы рангов, вносимых участниками, то результатом является число, при котором половина участников имеет более высокий ранг, а половина имеет более низкий. С другой стороны, если общий порядок вычисляется с использованием взвешенной медианы, то результатом является число, при котором приблизительно половина общей доли связана с рангами ниже этой, и половина выше. Взвешенные голосование и медианы могут быть полезны в предотвращении атаки Сивиллы, когда один участник приглашает присоединиться огромное количество «виртуальных» пользователей, каждый из которых является просто псевдонимом под управлением приглашающего участника. Если приглашающий участник вынужден делить свою долю с приглашенными, то виртуальные пользователи будут бесполезны для злоумышленника в попытках контролировать результаты консенсуса. Соответственно доказательство доли владения может быть полезным в некоторых обстоятельствах.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, with participants 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 invited 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 one participant invites a huge number of "virtual" users to join, each of which is just an alias under the control of the inviting participant. 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.

Примерная система 19: Система на основе примерной системы 1, в которой вместо одной распределенной базы данных имеется множество баз данных в иерархии. Например, может существовать одна база данных, пользователи которой являются ее участниками, а также несколько меньших баз данных или «блоков», каждый из которых имеет подмножество участников. Когда события происходят в блоке, они синхронизируются среди участников этого блока, но не среди участников вне этого блока. Затем периодически после принятия решения относительно порядка консенсуса в блоке полученное в результате состояние (или события со своим общим порядком консенсуса) может совместно использоваться всем составом участников большой базы данных.Exemplary System 19: A system based on Exemplary System 1 in which, instead of a single 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 members of that block, but not among members outside of 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.

Примерная система 20: Система на основе примерной системы 11 с возможностью наличия события, которое обновляет программное обеспечение для обновления состояния (например, зафиксированного переменной состояния базы данных, определенной участником системы). Например, события X и Y могут содержать транзакции, которые модифицируют состояние согласно программному коду, который считывает транзакции в этих событиях, а затем обновляет состояние соответствующим образом. Тогда событие Z может содержать уведомление о том, что теперь доступна новая версия программного обеспечения. Если общий порядок говорит, что события происходят в порядке X, Z, Y, то состояние может быть обновлено посредством обработки транзакций в X с использованием старого программного обеспечения, а затем транзакций в Y с использованием нового программного обеспечения. Но если порядок консенсуса имел вид X, Y, Z, то как X, так и Y могут быть обновлены с использованием старого программного обеспечения, которое может дать другое конечное состояние. Следовательно, в таких вариантах осуществления уведомление об обновлении кода может появляться в событии, так что сообщество может достигать консенсуса относительно того, когда следует перейти со старой версии на новую версию. Это гарантирует, что участники будут поддерживать синхронизированные состояния. Это также гарантирует, что система может оставаться работающей даже во время обновлений без необходимости перезагрузки или перезапуска процесса.Exemplary system 20: A system based on exemplary system 11 with the possibility of having an event that updates the 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 accordingly. 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, a code update notification can appear in an event so that the community can 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 stay running even during updates without having to reboot or restart the process.

Примерная система 21: Система на основе примерной системы 1, где для достижения консенсуса реализован протокол доказательства доли владения, и сила голоса каждого участника пропорциональна сумме криптовалюты, которой владеет участник. Криптовалюта этого примера будет называться далее в настоящем документе валютой StakeCoin. Участие в группе или популяции является открытым, то есть не требует разрешения, таким образом, доверие среди участников может отсутствовать.Exemplary System 21: A system based on Exemplary System 1 where a proof-of-stake protocol is implemented to achieve consensus, and the power of each participant's vote is proportional to the amount of cryptocurrency the participant owns. The cryptocurrency of this example will be referred to hereinafter as the StakeCoin currency. Participation in a group or population is open, meaning it does not require permission, so there may be a lack of trust among participants.

Протокол доказательства доли владения может быть менее затратным в вычислительном отношении, чем другие протоколы, например, протокол доказательства выполнения работы. В этом примере M (как описано выше) может составлять 2/3 суммы в валюте StakeCoin, которой совместно владеют участники. Таким образом, система распределенной базы данных может быть безопасной (и может осуществлять конвергенцию надлежащим образом), если злоумышленник не может получить 1/3 от общей суммы в валюте StakeCoin, которой вместе владеют задействованные участники. Система распределенной базы данных может продолжать функционировать с обеспечиваемым математически уровнем безопасности, пока более чем 2/3 суммы в валюте StakeCoin владеют честные активные участники. Это обеспечивает правильную конвергенцию базы данных.The proof of stake protocol may be less computationally expensive than other protocols, such as the proof of work protocol. In this example, M (as described above) could be 2/3 of the StakeCoin currency jointly owned by the participants. Thus, a distributed database system can be secure (and can converge properly) if an attacker cannot obtain 1/3 of the total amount of StakeCoin currency that the participants involved together own. The distributed database system can continue to operate with a mathematically secure level as long as more than 2/3 of the amount of the StakeCoin currency is owned by honest active participants. This ensures proper database convergence.

Способ получения злоумышленником контроля над системой распределенной базы данных может быть достигнут посредством проведения переговоров по отдельности с владельцами валюты StakeCoin в системе распределенной базы данных для покупки их валюты StakeCoin. Например, Алиса может получить большую часть StakeCoin посредством покупки валюты StakeCoin, которой владеют Боб, Кэрол и Дэйв, что ставит Эда в уязвимое положение. Это подобно спекулятивной скупке товаров на рынке или попытке купить достаточное количество акций компании для агрессивного поглощения. Описанный сценарий представляет не только атаку на систему распределенной базы данных, которая использует валюту StakeCoin, но также и атаку на саму валюту StakeCoin. Если участник получает почти монополию на криптовалюту, такой участник может управлять курсовой стоимостью криптовалюты и устроиться таким образом, чтобы постоянно продавать дорого и покупать дешево. Это может быть выгодно в краткосрочной перспективе, но может в итоге подорвать доверие к криптовалюте и, возможно, привести к тому, что все от нее откажутся. Рыночная стоимость валюты может не зависеть от технологии, используемой для перевода валюты. Например, если человек или субъект получат право собственности на большую часть долларов США в мире или большую часть фьючерсов на зерно в мире, то такие человек или субъект могут с выгодой подорвать рынок.A way for an attacker to gain control of the distributed database system can be achieved by negotiating individually with StakeCoin currency holders in the distributed database system to purchase their StakeCoin currency. For example, Alice can get most of the StakeCoin by purchasing the StakeCoin currency owned by Bob, Carol, and Dave, which puts Ed in a vulnerable position. This is similar to speculative buying of goods in the market or trying to buy enough shares of a company for an aggressive takeover. The described scenario represents not only an attack on a distributed database system that uses the StakeCoin currency, but also an attack on the StakeCoin currency itself. If a participant obtains a near-monopoly on the cryptocurrency, such a participant can control the price of the cryptocurrency and arrange itself in such a way as to constantly sell high and buy low. This may be beneficial in the short term, but it could ultimately undermine the credibility of cryptocurrencies and possibly lead everyone to abandon it. The market value of a currency may not depend on the technology used to transfer the currency. For example, if a person or entity were to acquire ownership of most of the world's US dollars or most of the world's grain futures, that person or entity could profitably disrupt the market.

Атака, выполняемая посредством получения почти монополии на криптовалюту, является более сложной, если криптовалюта является как ценной, так и широко распространенной. Если криптовалюта является ценной, то покупка большой части запаса валюты StakeCoin будет очень дорогой. Если криптовалюта является широко распространенной, когда валютой StakeCoin владеет множество разных людей, то попытки монополизировать рынок StakeCoin станут очевидны на раннем этапе, что естественно повысит цену на StakeCoin, еще сильнее усложняя получение остального запаса валюты.An attack carried out by obtaining a near monopoly on a cryptocurrency is more difficult if the cryptocurrency is both valuable and widespread. If the cryptocurrency is valuable, then buying a large part of the stock of StakeCoin currency will be very expensive. If a cryptocurrency is widespread, with many different people owning the StakeCoin currency, attempts to monopolize the StakeCoin market will become apparent early on, which will naturally drive up the price of StakeCoin, making it even more difficult to obtain the rest of the currency supply.

Второй тип атаки может быть выполнен посредством получения суммы в валюте StakeCoin, которая может быть малой по сравнению с общей суммой в валюте StakeCoin на множестве систем распределенной базы данных, но большой по сравнению с суммой в валюте StakeCoin, которой владеют участники, задействованные в конкретной системе распределенной базы данных. Этот тип атаки может быть предотвращен, если криптовалюта специально определена для использования в приложении системы распределенной базы данных. Другими словами, валюта StakeCoin и реализация системы распределенной базы данных могут быть одновременно определены как связанные друг с другом, и каждая из них способствует увеличению ценности другой. Подобным образом, отсутствуют дополнительные реализации распределенной базы данных, которые торгуют валютой StakeCoin.The second type of attack can be performed by obtaining an amount in StakeCoin currency, which can be small compared to the total amount of StakeCoin currency on multiple distributed database systems, but large compared to the amount of StakeCoin currency held by participants involved in a particular system. distributed database. This type of attack can be prevented if the cryptocurrency is specifically defined for use in a distributed database system application. In other words, the StakeCoin currency and the implementation of the distributed database system can be simultaneously defined as related to each other, and each contributes to the value of the other. Likewise, there are no additional distributed database implementations that trade the StakeCoin currency.

Желательным может быть наличие дорогой криптовалюты с самого начала, когда реализация системы распределенной базы данных только была определена. Несмотря на то, что ценность криптовалюты может увеличиваться со временем, дорогая криптовалюта может быть выгодной на ранних этапах системы. В некоторых случаях консорциум задействованных субъектов может инициировать криптовалюту и связанную с ней систему распределенной базы данных. Например, десяти крупным уважаемым корпорациям или организациям, которые являются учредителями, может быть дана значительная сумма в валюте StakeCoin для запуска криптовалюты StakeCoin и системы распределенной базы данных. Система может быть выполнена таким образом, чтобы запас криптовалюты не рос быстро и имел некоторое конечное ограничение по объему. Каждый субъект-учредитель может иметь мотивацию принимать участие в качестве участника в системе распределенной базы данных и реализации валюты StakeCoin (например, реализованной в виде системы распределенной базы данных, которая может быть структурирована как DAG на основе хешей с алгоритмом консенсуса). Поскольку доказательство выполнения работы отсутствует, быть задействованным участником, который эксплуатирует узел, может быть недорого. Субъекты-учредители могут быть достаточно надежными, так что маловероятно, что какая-либо большая их часть вступит в сговор с целью подорвать систему, в частности, поскольку это может уничтожить ценность валюты StakeCoin, которой они владеют, и реализованную систему распределенной базы данных.It may be desirable to have an expensive cryptocurrency from the very beginning, when the implementation of the distributed database system has just been defined. Even though the value of a cryptocurrency can increase over time, an expensive cryptocurrency can be profitable in the early stages of the system. In some cases, a consortium of involved entities may initiate a cryptocurrency and an associated distributed database system. For example, ten large, respected corporations or organizations that are founders can be given a significant amount of StakeCoin currency to launch the StakeCoin cryptocurrency and distributed database system. The system can be designed in such a way that the supply of cryptocurrency does not grow quickly and has some finite volume limit. Each founding entity may be motivated to participate as a participant in a distributed database system and implementation of the StakeCoin currency (for example, implemented as a distributed database system that can be structured as a hash-based DAG with a consensus algorithm). Because there is no proof-of-work, it can be inexpensive to be a contributor who operates a node. The founding entities can be trustworthy enough that it is unlikely that any large part of them will collude to undermine the system, in particular as this could destroy the value of the StakeCoin they hold and the implemented distributed database system.

В некоторых реализациях другие участники могут присоединяться к системе распределенной базы данных, и другие люди или субъекты могут покупать валюту StakeCoin либо непосредственно у субъектов-учредителей, либо на бирже. Система распределенной базы данных может быть выполнена с возможностью мотивации участников принимать участие, посредством выплаты небольших сумм в валюте StakeCoin за участие. Со временем система может стать намного более распределенной, при этом доля в итоге будет рассредоточена, так что любому человеку или субъекту станет сложно монополизировать рынок, даже если субъекты-учредители вступят в сговор с целью выполнения атаки. На этом этапе криптовалюта может получить независимую ценность; система распределенной базы данных может иметь независимый уровень безопасности; и система может быть открытой без ограничений разрешения (например, без необходимости получения приглашения от учредителя для присоединения). Таким образом, происходит экономия регулярных вычислительных затрат, требуемых системами, реализованными с использованием альтернативных протоколов, например, системами, реализованными с использованием протоколов доказательства выполнения работы.In some implementations, other participants may join the distributed database system, and other people or entities may purchase the StakeCoin either directly from the founding entities or on an exchange. The distributed database system can be configured to motivate participants to participate by paying small amounts of StakeCoin for participation. Over time, the system can become much more distributed, with stake eventually dispersed such that it becomes difficult for any person or entity to monopolize the market, even if the founding entities collude to carry out an attack. At this stage, the cryptocurrency can gain independent value; a distributed database system may have an independent security layer; and the system can be open without permission restrictions (for example, without the need to obtain an invitation from the founder to join). Thus, there is a saving in the regular computational overhead required by systems implemented using alternative protocols, such as systems implemented using proof-of-work protocols.

Хотя описание выше относится к использованию распределенной базы данных с применением DAG на основе хешей, любой другой подходящий протокол распределенной базы данных может быть использован для реализации примерной системы 21. Например, хотя конкретные примерные числа и доля могут меняться, примерная система 21 может быть использована для повышения безопасности любой подходящей системы распределенной базы данных.While the description above relates to using a distributed database using a hash-based DAG, any other suitable distributed database protocol may be used to implement the exemplary system 21. For example, while the specific exemplary numbers and proportion may vary, the exemplary system 21 may be used to enhancing the security of any suitable distributed database system.

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

Примерная теорема 1: Если событие x предшествует событию y в частичном порядке, то в знании заданного участника о других участниках в заданный момент времени каждый из других участников либо принял указание о x до y, либо еще не принял указание о y.Sample 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.

Доказательство: Если событие x предшествует событию y в частичном порядке, тогда x является предком y. Когда участник принимает указание о y в первый раз, этот участник либо уже принял указание о x ранее (в случае чего он знает о x раньше y), либо это будет случай, когда синхронизация предоставляет этому участнику как x, так и y (в случае чего он узнает о x раньше y во время этой синхронизации, поскольку события, принимаемые во время одной синхронизации, полагают принимаемыми в порядке, согласующемся со взаимосвязями потомственности, как описано в отношении примерной системы 5). Что и требовалось доказать.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 knows about x before y) or it will be the case that synchronization provides this 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.

Примерная теорема 2: Для любого заданного DAG на основе хешей, если x предшествует y в частичном порядке, то x будет предшествовать y в общем порядке, вычисленном для этого DAG на основе хешей.Sample Theorem 2: For any given hash-based DAG, if x precedes y in partial order, then x will precede y in the overall order computed for that hash-based DAG.

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

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

где rank(i,x) представляет собой ранг, присвоенный участником i событию x, который равен 1, если x является первым событием, принятым участником i, 2, если вторым, и так далее. Допустим, что med(x) представляет собой медиану rank(i,x) для всех i, и аналогично для med(y). 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).

Для заданного k выберем i1 и i2 так, что rank(i1,x) является k-м наименьшим рангом x, а rank(i2,y) является k-м наименьшим рангом y. Тогда: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:

rank(i1,x) < rank(i2,y). rank(i1,x) < rank(i2,y).

Это объясняется тем, что rank(i2,y) превышает или равняется k рангов y, каждый из которых строго превышает соответствующий ранг x. Следовательно, rank(i2,y) строго превышает по меньшей мере k рангов x, а значит строго превышает k-й наименьший ранг x. Этот аргумент справедлив для любого k.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.

Допустим, что 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 в общем порядке. Что и требовалось доказать.Let's say 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. Therefore, 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. Therefore, 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.

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

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

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

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

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

Доказательство: Допустим, что S0 представляет собой набор событий, которые были созданы и/или определены к заданному моменту времени T0. Если каждый участник будет в итоге синхронизироваться с каждым из остальных участников бесконечное число раз, то с вероятностью, равной 1, в итоге будет существовать момент времени T1, к которому события в S0 распространятся каждому участнику, так что каждый участник будет осведомлен о всех событиях. Это конец первого периода передачи. Допустим, что S1 представляет собой набор событий, которые существуют на момент времени T1 и которые еще не существовали на момент времени T0. Тогда с вероятностью, равной 1, в итоге будет существовать момент времени T2, к которому каждый участник примет каждое из событий в наборе S1, которое является существующим на момент времени T1. Это конец второго периода передачи. Подобным образом, T3 представляет собой момент времени, когда все события в S2, существующие к моменту времени T2, но не до момента времени T1, распространились всем участникам. Следует отметить, что каждый период передачи в итоге заканчивается с вероятностью, равной 1. В среднем каждый период будет продолжаться столько, сколько необходимо для выполнения log2(n) синхронизаций, если имеется n участников.Proof: 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.

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

К моменту времени T2 заданный участник Алиса примет запись каждого из остальных участников, принимающих каждое событие в S0. Следовательно, Алиса может вычислить ранг для каждого действия в S0 для каждого участника (который представляет собой порядок, в котором этот участник принял это действие), а затем отсортировать события по медиане рангов. Полученный в результате общий порядок не меняется для событий в S0. Это объясняется тем, что полученный в результате порядок является функцией порядка, в котором каждый участник впервые принял указание о каждом из этих событий, который не меняется. Возможно, что порядок, вычисленный Алисой, будет иметь несколько событий из S1, рассеянных среди событий S0. Эти события S1 могут все еще меняться, где они попадают в последовательность S0 событий. Но относительный порядок событий в S0 не будет меняться.By time T2, the given participant Alice will have received the record of each of the other participants 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 these 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. These S1 events may still vary where they fall in the sequence S0 of events. But the relative order of events in S0 will not change.

К моменту времени T3 Алиса узнает общий порядок на объединении S0 и S1, и относительный порядок событий в этом объединении меняться не будет. Кроме того, она может найти в этой последовательности самое раннее событие из S1 и может прийти к выводу, что последовательность событий до S1 не будет меняться, даже посредством вставки новых событий не из S0. Следовательно, к моменту времени T3 Алиса может определить, что консенсус был достигнут для порядка событий в истории до первого события S1. Она может подписать с помощью цифровой подписи хеш состояния (например, зафиксированного переменной состояния базы данных, определенной Алисой), являющийся результатом этих событий, происходящих в этом порядке, и отправить подпись в виде части следующего события, которое она создает и/или определяет.By time T3, Alice knows the general order on the union S0 and S1, and the relative order of events in this 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. Hence, 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.

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

Системы, описанные в настоящем документе, описывают распределенную базу данных, которая достигает консенсуса быстро и безопасно. Она может быть полезным структурным блоком для многих приложений. Например, если транзакции описывают перевод криптовалюты с одного кошелька криптовалюты на другой, и если состоянием является простой показатель текущей суммы в каждом кошельке, то эта система будет представлять собой систему криптовалюты, которая избегает дорогого доказательства выполнения работы, используемого в существующих системах. Автоматическое соблюдение правил позволяет добавлять признаки, которые не являются общераспространенными в существующих криптовалютах. Например, утерянные монеты могут быть восстановлены во избежание дефляции посредством исполнения правила, гласящего, что, если кошелек ни отправляет, ни принимает криптовалюту в течение определенного периода времени, то этот кошелек удаляется, и его содержимое распределяется на другие существующие кошельки пропорционально сумме, которую они содержат на текущий момент. Таким образом, запас денег не будет расти или сокращаться, даже если утерян закрытый ключ для кошелька.The systems described in this document describe a distributed database that achieves 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 existing 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.

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

Другим примером является система для социальных сетей, которая построена поверх такой базы данных. Поскольку транзакции подписываются с помощью цифровой подписи, и участники принимают информацию о других участниках, это обеспечивает преимущества, заключающиеся в безопасности и удобстве, над современными системами. Например, может быть реализована система электронной почты со строгой антиспам политикой, поскольку электронные письма не могут иметь фальшивых обратных адресов. Такая система может также стать объединенной социальной системой, сочетающей в одной распределенной базе данных функции, в настоящее время выполняемые электронной почтой, твит-сообщениями, текстовыми сообщениями, форумами, вики и/или другими социальными ресурсами.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 a strict anti-spam policy 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 resources.

Другие приложения могут включать более сложные криптографические функции, такие как групповые цифровые подписи, при которых группа действует как единое целое для подписания контракта или документа. Эти и другие формы многостороннего вычисления могут быть эффективно реализованы с использованием такой системы распределенного консенсуса.Other applications may include more complex cryptographic features, 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.

Другим примером является система публичного реестра. Кто угодно может заплатить, чтобы сохранить некоторую информацию в системе, уплачивая при этом небольшую сумму криптовалюты (или реальной валюты) за байт в год для хранения информации в системе. Эти денежные средства могут затем быть автоматически распределены участникам, которые хранят эти данные, и участникам, которые постоянно синхронизируются, чтобы работать над достижением консенсуса. Участникам может автоматически переводиться небольшая сумма криптовалюты каждый раз, когда они синхронизируются.Another example is the public 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. This cash can then be automatically distributed to the participants who store this data and to the participants who are constantly in sync to work towards consensus. Participants can automatically receive a small amount of cryptocurrency each time they sync.

Эти примеры показывают, что распределенная база данных с консенсусом является полезной в качестве компонента многих приложений. Поскольку база данных не использует затратное доказательство выполнения работы, по возможности используя вместо него менее затратное доказательство доли владения, база данных может работать с полным узлом, работающим на менее мощных компьютерах или даже мобильных и встроенных устройствах. 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.

Несмотря на описание выше в качестве события, содержащего хеш двух предыдущих событий (один собственный хеш и один чужой хеш), в других вариантах осуществления участник может синхронизироваться с двумя другими участниками для создания и/или определения события, содержащего хеши трех предыдущих событий (один собственный хеш и два чужих хеша). В еще других вариантах осуществления в событие может быть включено любое количество хешей событий предыдущих событий от любого количества участников. В некоторых вариантах осуществления разные события могут включать разные количества хешей предыдущих событий. Например, первое событие может включать два хеша событий, и второе событие может включать три хеша событий.Although described above as an event containing a hash of two previous events (one own hash and one foreign hash), in other embodiments, a participant may synchronize with two other participants to create and/or define an event containing the hashes of the three previous events (one own hash and two foreign 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 include different numbers of hashes of previous events. For example, the first event may include two event hashes, and the second event may include three event hashes.

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

В других вариантах осуществления события могут содержать полные криптографические хеши, но только части этих хешей передаются во время синхронизации. Например, если Алиса отправляет Бобу событие, содержащее хеш H, и J является первыми 3 байтами H, и Алиса определяет, что из всех событий и хешей, которые она сохранила, H является единственным хешем, начинающимся с J, то она может отправить J вместо H во время синхронизации. Если Боб затем определяет, что у него есть другой хеш, начинающийся с J, то он может отправить ответное сообщение Алиса с запросом полного H. Таким образом хеши могут быть сжаты во время передачи. In other embodiments, the events may contain complete cryptographic hashes, but only parts of these 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.

Хотя примерные системы, показанные и описанные выше, описаны со ссылкой на другие системы, в других вариантах осуществления любая комбинация примерных систем и связанных с ними функциональных возможностей может быть реализована для создания и/или определения распределенной базы данных. Например, примерная система 1, примерная система 2 и примерная система 3 могут быть объединены для создания и/или определения распределенной базы данных. В качестве другого примера, в некоторых вариантах осуществления примерная система 10 может быть реализована вместе с примерной системой 1, но без примерной системы 9. В качестве еще одного примера, примерная система 7 может быть объединена и реализована вместе с примерной системой 6. В еще других вариантах осуществления могут быть реализованы любые другие подходящие комбинации примерных систем.Although 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.

Хотя и описаны выше как выполняющие обмен событиями для достижения конвергенции, в других вариантах осуществления экземпляры распределенной базы данных могут обмениваться значениями и/или векторами значений для достижения конвергенции, как описано в отношении фиг. 8–13. В частности, например, на фиг. 8 проиллюстрирован информационный поток между первым вычислительным устройством 400 из системы распределенной базы данных (например, системы 100 распределенной базы данных) и вторым вычислительным устройством 500 из системы распределенной базы данных (например, системы 100 распределенной базы данных) согласно одному варианту осуществления. В некоторых вариантах осуществления вычислительные устройства 400, 500 могут быть конструктивно и/или функционально подобны вычислительному устройству 200, показанному на фиг. 2. В некоторых вариантах осуществления вычислительное устройство 400 и вычислительное устройство 500 осуществляют связь друг с другом подобно тому, как вычислительные устройства 110, 120, 130, 140 осуществляют связь друг с другом в системе 100 распределенной базы данных, показанной и описанной в отношении фиг. 1.Although described above as performing event exchange to achieve convergence, in other embodiments, distributed database instances may exchange values and/or value vectors to achieve convergence, as described with respect to FIG. 8–13. In particular, for example, in FIG. 8 illustrates information flow between a first computing device 400 from a distributed database system (eg, distributed database system 100) and a second computing device 500 from a distributed database system (eg, distributed database system 100) according to one embodiment. In some embodiments, computing devices 400, 500 may be structurally and/or functionally similar to computing device 200 shown in FIG. 2. In some embodiments, computing device 400 and computing device 500 communicate with each other in a manner similar to how computing devices 110, 120, 130, 140 communicate with each other in distributed database system 100 shown and described with respect to FIG. one.

Подобно вычислительному устройству 200, описанному в отношении фиг. 2, каждое из вычислительных устройств 400, 500 может первоначально определять вектор значений для параметра, обновлять вектор значений, выбирать значение для параметра на основе определенного и/или обновленного вектора значений для параметра и сохранять (1) определенный и/или обновленный вектор значений для параметра и/или (2) выбранное значение для параметра на основе определенного и/или обновленного вектора значений для параметра. Каждое из вычислительных устройств 400, 500 может первоначально определять вектор значений для параметра любым количеством способов. Например, каждое из вычислительных устройств 400, 500 может первоначально определять вектор значений для параметра посредством установки каждого значения из вектора значений равным значению, первоначально сохраненному в экземплярах 403, 503 распределенной базы данных соответственно. В качестве другого примера, каждое из вычислительных устройств 400, 500 может первоначально определять вектор значений для параметра посредством установки каждого значения из вектора значений равным случайному значению. Способ первоначального определения вектора значений для параметра может быть выбран, например, администратором системы распределенной базы данных, к которой относятся вычислительные устройства 400, 500, или по отдельности или совместно пользователями вычислительных устройств (например, вычислительных устройств 400, 500) системы распределенной базы данных.Like computing device 200 described with respect to FIG. 2, each of the computing devices 400, 500 may initially determine a value vector for the parameter, update the value vector, select a value for the parameter based on the determined and/or updated value vector for the parameter, and store (1) the determined and/or updated value vector for the parameter. and/or (2) a selected value for the parameter based on the determined and/or updated vector of values for the parameter. Each of computing devices 400, 500 may initially determine a vector of values for a parameter in any number of ways. For example, each of the computing devices 400, 500 may initially determine a value vector for a parameter by setting each value from the value vector to a value originally stored in distributed database instances 403, 503, respectively. As another example, each of the computing devices 400, 500 may initially determine a value vector for a parameter by setting each value from the value vector to a random value. The method of initially determining the value vector for a parameter may be chosen, for example, by an administrator of the distributed database system to which computing devices 400, 500 belong, or individually or collectively by computing device users (e.g., computing devices 400, 500) of the distributed database system.

Каждое из вычислительных устройств 400, 500 может также сохранять вектор значений для параметра и/или выбранное значение для параметра в экземплярах 403, 503 распределенной базы данных соответственно. Каждый из экземпляров 403, 503 распределенной базы данных может быть реализован в памяти (не показана на фиг. 8), подобной памяти 220, показанной на фиг. 2.Each of the computing devices 400, 500 may also store a vector of values for a parameter and/or a selected value for a parameter in distributed database instances 403, 503, respectively. Each of the distributed database instances 403, 503 may be implemented in a memory (not shown in FIG. 8) similar to memory 220 shown in FIG. 2.

На этапе 1 вычислительное устройство 400 запрашивает у вычислительного устройства 500 значение для параметра, хранящееся в экземпляре 503 распределенной базы данных вычислительного устройства 500 (например, значение, хранящееся в конкретном поле экземпляра 503 распределенной базы данных). В некоторых вариантах осуществления вычислительное устройство 500 может быть выбрано вычислительным устройством 400 из набора вычислительных устройств, относящихся к системе распределенной базы данных. Вычислительное устройство 500 может быть выбрано случайным образом, выбрано на основе взаимосвязи с вычислительным устройством 400, на основе близости к вычислительному устройству 400, выбрано на основе упорядоченного списка, связанного с вычислительным устройством 400, и/или т.п. В некоторых вариантах осуществления, поскольку вычислительное устройство 500 может быть выбрано вычислительным устройством 400 из набора вычислительных устройств, относящихся к системе распределенной базы данных, вычислительное устройство 400 может выбирать вычислительное устройство 500 несколько раз подряд или может некоторое время не выбирать вычислительное устройство 500. В других вариантах осуществления указание о ранее выбранных вычислительных устройствах может быть сохранено на вычислительном устройстве 400. В таких вариантах осуществления вычислительное устройство 400 может находиться в ожидании, пока не будет осуществлено предварительно определенное количество выборов, перед тем, как получить возможность снова выбирать вычислительное устройство 500. Как поясняется выше, экземпляр 503 распределенной базы данных может быть реализован в памяти вычислительного устройства 500.In step 1, computing device 400 queries computing device 500 for a value for a parameter stored in distributed database instance 503 of computing device 500 (eg, a value stored in a particular field of distributed database instance 503). In some embodiments, computing device 500 may be selected by computing device 400 from a set of computing devices associated with a distributed database system. Computing device 500 may be randomly selected, selected based on relationship with computing device 400, based on proximity to computing device 400, selected based on an ordered list associated with computing device 400, and/or the like. In some embodiments, since computing device 500 may be selected by computing device 400 from a set of computing devices associated with a distributed database system, computing device 400 may select computing device 500 multiple times in a row or may not select computing device 500 for a while. In others embodiments, an indication of previously selected computing devices may be stored on computing device 400. In such embodiments, computing device 400 may wait until a predetermined number of selections have been made before being able to select computing device 500 again. As explained above, distributed database instance 503 may be implemented in memory of computing device 500.

В некоторых вариантах осуществления запрос от вычислительного устройства 400 может представлять собой сигнал, отправляемый модулем связи вычислительного устройства 400 (не показан на фиг. 8). Этот сигнал может быть передан по сети, такой как сеть 105 (показана на фиг. 1), и принят модулем связи вычислительного устройства 500. В некоторых вариантах осуществления каждый из модулей связи вычислительных устройств 400, 500 может быть реализован в процессоре или памяти. Например, модули связи вычислительных устройств 400, 500 могут быть подобны модулю 212 связи, показанному на фиг. 2.In some embodiments, the request from computing device 400 may be a signal sent by a communication module of computing device 400 (not shown in FIG. 8). This signal may be transmitted over a network, such as network 105 (shown in FIG. 1), and received by the communication module of computing device 500. In some embodiments, each of the communication modules of computing devices 400, 500 may be implemented in a processor or memory. For example, communication modules of computing devices 400, 500 may be similar to communication module 212 shown in FIG. 2.

После приема с вычислительного устройства 400 запроса значения параметра, хранящегося в экземпляре 503 распределенной базы данных, вычислительное устройство 500 отправляет значение параметра, хранящееся в экземпляре 503 распределенной базы данных, на вычислительное устройство 400 на этапе 2. В некоторых вариантах осуществления вычислительное устройство 500 может извлекать значение параметра из памяти и отправлять значение в виде сигнала посредством модуля связи вычислительного устройства 500 (не показан на фиг. 8). В некоторых случаях, если экземпляр 503 распределенной базы данных еще не содержит значения для параметра (например, транзакция еще не была определена в экземпляре 503 распределенной базы данных), экземпляр 503 распределенной базы данных может запросить значение для параметра с вычислительного устройства 403 (если оно еще не предоставлено на этапе 1) и сохранить это значение для параметра в экземпляре 503 распределенной базы данных. В некоторых вариантах осуществления вычислительное устройство 400 будет затем использовать это значение в качестве значения для параметра в экземпляре 503 распределенной базы данных.Upon receiving from computing device 400 a request for a parameter value stored in distributed database instance 503, computing device 500 sends the parameter value stored in distributed database instance 503 to computing device 400 in step 2. In some embodiments, computing device 500 may retrieve parameter value from memory and send the value as a signal via the communication module of the computing device 500 (not shown in FIG. 8). In some cases, if the distributed database instance 503 does not yet contain a value for a parameter (for example, a transaction has not yet been defined in the distributed database instance 503), the distributed database instance 503 may request a value for the parameter from the computing device 403 (if it has not yet been not provided in step 1) and store that value for the parameter in the distributed database instance 503 . In some embodiments, the computing device 400 will then use this value as the value for the parameter in the distributed database instance 503.

На этапе 3 вычислительное устройство 400 отправляет на вычислительное устройство 500 значение для параметра, хранящееся в экземпляре 403 распределенной базы данных. В других вариантах осуществления значение для параметра, хранящееся в экземпляре 403 распределенной базы данных (этап 1), и запрос значения для этого же параметра, хранящегося в экземпляре 503 распределенной базы данных (этап 3), могут быть отправлены в виде одного сигнала. В других вариантах осуществления значение для параметра, хранящееся в экземпляре 403 распределенной базы данных, может быть отправлено в сигнале, отличном от сигнала для запроса значения для параметра, хранящегося в экземпляре 503 распределенной базы данных. В вариантах осуществления, в которых значение для параметра, хранящееся в экземпляре 403 распределенной базы данных, отправляется в сигнале, отличном от сигнала для запроса значения для параметра, хранящегося в экземпляре 503 распределенной базы данных, значения для параметра, хранящегося в экземпляре 403 распределенной базы данных, два сигнала могут быть отправлены в любом порядке. Другими словами, любой из сигналов может быть отправлен перед другим.In step 3, the computing device 400 sends to the computing device 500 the value for the parameter stored in the distributed database instance 403. In other embodiments, a value for a parameter stored in the distributed database instance 403 (step 1) and a request for a value for the same parameter stored in the distributed database instance 503 (step 3) may be sent as a single signal. In other embodiments, a value for a parameter stored in distributed database instance 403 may be sent in a different signal than a signal to request a value for a parameter stored in distributed database instance 503. In embodiments where the value for a parameter stored in the distributed database instance 403 is sent in a signal other than the signal to request the value for the parameter stored in the distributed database instance 503, the value for the parameter stored in the distributed database instance 403 , the two signals can be sent in any order. In other words, any of the signals can be sent before the other.

После того как вычислительное устройство 400 принимает значение параметра, отправленное с вычислительного устройства 500, и/или вычислительное устройство 500 принимает значение для параметра, отправленное с вычислительного устройства 400, в некоторых вариантах осуществления вычислительное устройство 400 и/или вычислительное устройство 500 могут обновлять вектор значений, хранящийся в экземпляре 403 распределенной базы данных, и/или вектор значений, хранящийся в экземпляре 503 распределенной базы данных, соответственно. Например, вычислительные устройства 400, 500 могут обновлять вектор значений, хранящийся в экземплярах 403, 503 распределенной базы данных, чтобы включать значение параметра, принятое вычислительными устройствами 400, 500 соответственно. Вычислительные устройства 400, 500 могут также обновлять значение параметра, хранящееся в экземпляре 403 распределенной базы данных, и/или значение параметра, хранящееся в экземпляре 503 распределенной базы данных, соответственно на основе обновленного вектора значений, хранящегося в экземпляре 403 распределенной базы данных, и/или обновленного вектора значений, хранящегося в экземпляре 503 распределенной базы данных, соответственно.After computing device 400 receives a parameter value sent from computing device 500 and/or computing device 500 receives a parameter value sent from computing device 400, in some embodiments, computing device 400 and/or computing device 500 may update the value vector , stored in the distributed database instance 403, and/or a value vector stored in the distributed database instance 503, respectively. For example, computing devices 400, 500 may update the value vector stored in distributed database instances 403, 503 to include the parameter value received by computing devices 400, 500, respectively. The computing devices 400, 500 may also update the parameter value stored in the distributed database instance 403 and/or the parameter value stored in the distributed database instance 503, respectively, based on the updated value vector stored in the distributed database instance 403, and/ or an updated value vector stored in the distributed database instance 503, respectively.

Хотя этапы обозначены как 1, 2 и 3 на фиг. 8 и в вышеизложенном обсуждении, следует понимать, что этапы 1, 2 и 3 могут быть выполнены в любом порядке. Например, этап 3 может быть выполнен перед этапами 1 и 2. Кроме того, связь между вычислительными устройствами 400 и 500 не ограничивается этапами 1, 2 и 3, показанными на фиг. 3, как подробно описано в настоящем документе. Более того, после завершения этапов 1, 2 и 3, вычислительное устройство 400 может выбирать другое вычислительное устройство из набора вычислительных устройств в системе распределенной базы данных для обмена с ним значениями (подобно этапам 1, 2 и 3).Although the steps are labeled 1, 2 and 3 in FIG. 8 and in the discussion above, it should be understood that steps 1, 2, and 3 may be performed in any order. For example, step 3 may be performed before steps 1 and 2. In addition, communication between computing devices 400 and 500 is not limited to steps 1, 2, and 3 shown in FIG. 3 as detailed herein. Moreover, upon completion of steps 1, 2, and 3, computing device 400 may select another computing device from the set of computing devices in the distributed database system to exchange values with (similar to steps 1, 2, and 3).

В некоторых вариантах осуществления данные, передаваемые между вычислительными устройствами 400, 500, могут включать сжатые данные, зашифрованные данные, цифровые подписи, криптографические контрольные суммы и/или т.п. Кроме того, каждое из вычислительных устройств 400, 500 может отправлять данные на другое вычислительное устройство для подтверждения приема данных, ранее отправленных другим устройством. Каждое из вычислительных устройств 400, 500 может также игнорировать данные, которые были неоднократно отправлены другим устройством.In some embodiments, data transferred between computing devices 400, 500 may include compressed data, encrypted data, digital signatures, cryptographic checksums, and/or the like. In addition, each of the computing devices 400, 500 may send data to the other computing device to acknowledge receipt of data previously sent by the other device. Each of the computing devices 400, 500 may also ignore data that has been repeatedly sent by the other device.

Каждое из вычислительных устройств 400, 500 может первоначально определять вектор значений для параметра и сохранять этот вектор значений для параметра в экземплярах 403, 503 распределенной базы данных соответственно. На фиг. 9a–9c проиллюстрированы примеры векторов значений для параметра. Вектор может представлять собой любой набор значений для параметра (например, одномерный массив значений для параметра, массив значений, каждое из которых имеет множество частей, и т. д.). Три примера векторов представлены на фиг. 9a–9c в целях иллюстрации. Как показано, каждый из векторов 410, 420, 430 имеет пять значений для конкретного параметра. Однако следует понимать, что вектор значений может иметь любое количество значений. В некоторых случаях количество значений, включенных в вектор значений, может быть установлено пользователем, по ситуации, случайным образом и т. д.Each of the computing devices 400, 500 may initially determine a value vector for a parameter and store that value vector for the parameter in distributed database instances 403, 503, respectively. In FIG. 9a–9c illustrate examples of value vectors for a parameter. A vector can be any set of values for a parameter (for example, a one-dimensional array of values for a parameter, an array of values each with multiple parts, etc.). Three examples of vectors are shown in Fig. 9a-9c for illustration purposes. As shown, each of the vectors 410, 420, 430 has five values for a particular parameter. However, it should be understood that the value vector may have any number of values. In some cases, the number of values included in the value vector can be set by the user, situationally, randomly, etc.

Параметр может представлять собой любой объект данных, который может принимать разные значения. Например, параметр может представлять собой двоичный голос, в котором значение голоса может иметь вид либо «ДА», либо «НЕТ» (или двоичных «1» или «0»). Как показано на фиг. 9a, вектор 410 значений представляет собой вектор, имеющий пять двоичных голосов, где значения 411, 412, 413, 414, 415 соответствуют «ДА», «НЕТ», «НЕТ», «ДА» и «ДА» соответственно. В качестве другого примера, параметр может представлять собой набор элементов данных. На фиг. 9b показан пример, в котором параметр представляет собой набор букв алфавита. Как показано, вектор 420 значений имеет пять наборов из четырех букв алфавита, при этом значения 421, 422, 423, 424, 425 соответствуют {A, B, C, D}, {A, B, C, E}, {A, B, C, F}, {A, B, F, G} и {A, B, G, H} соответственно. В качестве еще одного примера, параметр может представлять собой ранжированный и/или упорядоченный набор элементов данных. На фиг. 9c показан пример, в котором параметр представляет собой ранжированный набор людей. Как показано, вектор 430 значений имеет пять ранжированных наборов из шести людей, при этом значения 431, 432, 433, 434, 435 соответствуют The parameter can be any data object that can take on different values. For example, the parameter may be a binary voice, in which the value of the vote may be either "YES" or "NO" (or binary "1" or "0"). As shown in FIG. 9a, the value vector 410 is a vector having five binary votes, where the values 411, 412, 413, 414, 415 correspond to "YES", "NO", "NO", "YES", and "YES", respectively. As another example, a parameter may be a set of data items. In FIG. 9b shows an example where the parameter is a set of alphabetic characters. As shown, the value vector 420 has five sets of four alphabetic characters, with the values 421, 422, 423, 424, 425 corresponding to {A, B, C, D}, {A, B, C, E}, {A, B, C, F}, {A, B, F, G} and {A, B, G, H}, respectively. As another example, a parameter may be a ranked and/or ordered set of data items. In FIG. 9c shows an example where the parameter is a ranked set of people. As shown, the value vector 430 has five ranked sets of six people, with the values 431, 432, 433, 434, 435 corresponding to

(1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк), (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank),

(1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк), (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank),

(1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Фрэнк, 6. Эд), (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed),

(1. Алиса, 2. Боб, 3. Кэрол, 4. Эд, 5. Дэйв, 6. Фрэнк) и (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank) and

(1. Алиса, 2. Боб, 3. Эд, 4. Кэрол, 5. Дэйв, 6. Фрэнк), (1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank),

соответственно.respectively.

После определения вектора значений для параметра каждое из вычислительных устройств 400, 500 может выбирать значение для параметра на основе вектора значений для параметра. Этот выбор может быть выполнен согласно любому способу и/или процессу (например, правилу или набору правил). Например, выбор может быть выполнен согласно «правилам большинства», при которых значение для параметра выбирается равным значению, которое появляется в более чем 50 % значений, включенных в вектор. Для иллюстрации вектор 410 значений (показанный на фиг. 9a) содержит три значения «ДА» и два значения «НЕТ». Согласно «правилам большинства» значением, выбранным для параметра на основе вектора значений, будет «ДА», поскольку «ДА» появляется в более чем 50 % значений 411, 412, 413, 414, 415 (вектора 410 значений).After determining a value vector for a parameter, each of the computing devices 400, 500 may select a value for the parameter based on the value vector for the parameter. This selection may be made according to any method and/or process (eg, a rule or a set of rules). For example, the selection can be made according to "majority rules" in which the value for a parameter is chosen to be equal to the value that appears in more than 50% of the values included in the vector. For illustration, the value vector 410 (shown in FIG. 9a) contains three "YES" values and two "NO" values. According to the "majority rules", the value chosen for the parameter based on the value vector will be "YES" because "YES" appears in more than 50% of the values 411, 412, 413, 414, 415 (value vector 410).

В качестве другого примера, выбор может быть выполнен согласно «появлению в большинстве», при котором значение для параметра выбирается равным набору элементов данных, где каждый элемент данных появляется в более чем 50 % значений, включенных в вектор. Для иллюстрации, с помощью фиг. 9b, элементы данных «A», «B» и «C» появляются в более чем 50 % значений 421, 422, 423, 424, 425 вектора 420 значений. Согласно «появлению в большинстве» значением, выбранным для параметра на основе вектора значений, будет {A, B, C}, поскольку только эти элементы данных (т.е. «A», «B» и «C») появляются в трех из пяти значений вектора 420 значений.As another example, the selection can be made according to "occurrence in the majority", in which the value for a parameter is chosen to be equal to a set of data elements, where each data element appears in more than 50% of the values included in the vector. For illustration, with the help of FIG. 9b, data elements "A", "B", and "C" appear in more than 50% of the values 421, 422, 423, 424, 425 of the value vector 420. According to "occurrence in the majority", the value chosen for the parameter based on the value vector will be {A, B, C}, since only these data elements (i.e. "A", "B" and "C") appear in three of the five values of the vector 420 values.

В качестве еще одного примера, выбор может быть выполнен согласно «рангу по медиане», при котором значение для параметра выбирается равным ранжированному набору элементов данных (например, разных значений данных в пределах значения вектора значений), где ранг каждого элемента данных равняется медианному рангу этого элемента данных среди всех значений, включенных в вектор. Для иллюстрации, медианный ранг каждого элемента данных на фиг. 9c вычисляется следующим образом:As yet another example, the selection may be made according to "rank by median", in which the value for a parameter is chosen to be equal to a ranked set of data items (e.g., different data values within the value of a vector of values), where the rank of each data item is equal to the median rank of that data element among all values included in the vector. To illustrate, the median rank of each data item in FIG. 9c is calculated as follows:

Алиса: (1, 2, 2, 1, 1); медианный ранг = 1;Alice: (1, 2, 2, 1, 1); median rank = 1;

Боб: (2, 1, 1, 2, 2); медианный ранг = 2;Bob: (2, 1, 1, 2, 2); median rank = 2;

Кэрол: (3, 3, 3, 3, 4); медианный ранг = 3;Carol: (3, 3, 3, 3, 4); median rank = 3;

Дэйв: (4, 4, 4, 5, 5); медианный ранг = 4;Dave: (4, 4, 4, 5, 5); median rank = 4;

Эд: (5, 5, 6, 4, 3); медианный ранг = 5;Ed: (5, 5, 6, 4, 3); median rank = 5;

Фрэнк: (6, 6, 5, 6, 6); медианный ранг = 6.Frank: (6, 6, 5, 6, 6); median rank = 6.

Таким образом, согласно «рангу по медиане» значением для ранжированного набора элементов данных, вычисленным на основе вектора 430 значений, будет (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк). В некоторых вариантах осуществления, если два или более элементов данных имеют одну медиану (например, равенство), порядок может быть определен любым подходящим способом (например, случайным образом, первым указанием ранга, последним указанием ранга, в алфавитном и/или числовом порядке и т. д.).Thus, according to "rank by median", the value for the ranked set of data items calculated from a vector of 430 values would be (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank). In some embodiments, if two or more data items share the same median (e.g., equality), the order may be determined in any suitable manner (e.g., randomly, first rank indication, last rank indication, alphabetical and/or numerical order, etc.). d.).

В качестве дополнительного примера, выбор может быть выполнен согласно «голосованию по методу Кемени-Янга», при котором значение для параметра выбирается равным ранжированному набору элементов данных, причем ранг вычисляется так, чтобы минимизировать величину затрат. Например, Алиса имеет ранг выше ранга Боба в векторах значений 431, 434, 435, что составляет в общем три из пяти векторов значений. Боб имеет ранг выше ранга Алисы в векторах значений 432 и 433, что составляет в общем два из пяти векторов значений. Величина затрат для ранжирования Алисы выше Боба составляет 2/5, и величина затрат для ранжирования Боб выше Алисы составляет 3/5. Таким образом, величина затрат для ранжирования Алисы выше Боба меньше, и Алиса будет ранжирована выше Боба согласно «голосованию по методу Кемени-Янга».As a further example, the selection may be made according to "Kemeny-Young voting" in which a value for a parameter is chosen to be equal to a ranked set of data items, with the rank calculated to minimize the amount of cost. For example, Alice has a rank higher than Bob's in the value vectors 431, 434, 435, which is three of the five value vectors in total. Bob has a rank higher than Alice's in the value vectors 432 and 433, totaling two of the five value vectors. The cost to rank Alice above Bob is 2/5 and the cost to rank Bob above Alice is 3/5. Thus, the cost to rank Alice above Bob is less, and Alice will be ranked above Bob according to "Kemeny-Young voting".

Следует понимать, что «правила большинства», «появление в большинстве», «ранг по медиане» и «голосование по методу Кемени-Янга» обсуждаются в качестве примеров способов и/или процессов, которые могут быть использованы для выбора значения для параметра на основе вектора значений для параметра. Могут также быть использованы любые другие способ и/или процесс. Например, значение для параметра может быть выбрано равным значению, которое появляется в более чем x % значений, включенных в вектор, где x % может представлять собой любое процентное значение (т.е. не ограничивается 50 %, как в случае «правил большинства»). Процентная доля (т.е. x %) может также варьироваться между выборами, выполненными в разные моменты времени, например, в отношении степени достоверности (подробно обсуждаемой в настоящем документе).It should be understood that "majority rules", "appearance in the majority", "rank by median" and "Kemeny-Young voting" are discussed as examples of methods and/or processes that can be used to select a value for a parameter based on a vector of values for the parameter. Any other method and/or process may also be used. For example, a value for a parameter could be chosen to be equal to a value that appears in more than x% of the values included in the vector, where x% can be any percentage value (i.e. not limited to 50% as in the case of "majority rules" ). The percentage (i.e. x%) can also vary between selections made at different points in time, for example in terms of confidence (discussed in detail in this paper).

В некоторых вариантах осуществления, поскольку вычислительное устройство может случайным образом выбирать другие вычислительные устройства для обмена с ними значениями, вектор значений вычислительного устройства может в любой момент времени включать множество значений из другого отдельного вычислительного устройства. Например, если размер вектора равняется пяти, вычислительное устройство может случайным образом выбрать другое вычислительное устройство дважды за последние пять итераций обмена значениями. Соответственно, значение, сохраненное в экземпляре распределенной базы данных другого вычислительного устройства, будет включено дважды в вектор из пяти значений для запрашивающего вычислительного устройства.In some embodiments, since a computing device may randomly select other computing devices to exchange values with them, the computing device's value vector may at any time include a plurality of values from another individual computing device. For example, if the size of the vector is five, the computing device may randomly select another computing device twice in the last five iterations of the exchange of values. Accordingly, a value stored in a distributed database instance of another computing device will be included twice in the vector of five values for the requesting computing device.

На фиг. 10a–10d вместе проиллюстрировано в качестве примера, как вектор значений может быть обновлен, когда одно вычислительное устройство осуществляет связь с другим вычислительным устройством. Например, вычислительное устройство 400 может первоначально определять вектор 510 значений. В некоторых вариантах осуществления вектор 510 значений может быть определен на основе значения для параметра, хранящегося в экземпляре 403 распределенной базы данных на вычислительном устройстве 400. Например, когда вектор 510 значений определяется впервые, каждое значение из вектора 510 значений (т.е. каждое из значений 511, 512, 513, 514, 515) может быть установлено равным значению для параметра, хранящемуся в экземпляре 403 распределенной базы данных. Для иллюстрации, если значением для параметра, хранящимся в экземпляре 403 распределенной базы данных, в момент времени, когда определяется вектор 510 значений, является «ДА», то каждое значение из вектора 510 значений (т.е. каждое из значений 511, 512, 513, 514, 515) будет установлено в «ДА», как показано на фиг. 10a. Когда вычислительное устройство 400 принимает значение для параметра, хранящееся в экземпляре распределенной базы данных другого вычислительного устройства (например, экземпляре 504 распределенной базы данных вычислительного устройства 500), вычислительное устройство 400 может обновлять вектор 510 значений, чтобы включать значение для параметра, хранящееся в экземпляре 504 распределенной базы данных. В некоторых случаях вектор 510 значений может быть обновлен согласно принципу «первым пришел – первым ушел» (FIFO). Например, если вычислительное устройство 400 принимает значение 516 («НЕТ»), вычислительное устройство 400 может добавить значение 516 в вектор 510 значений и удалить значение 511 из вектора 510 значений, чтобы определить вектор 520 значений, как показано на фиг. 10b. Например, если в более поздний момент времени вычислительное устройство принимает значения 517, 518, вычислительное устройство 400 может добавить значения 517, 518 в вектор 510 значений и удалить значения 512, 513 соответственно из вектора 510 значений, чтобы определить вектора 530, 540 значений соответственно. В других случаях вектор значений 510 может быть обновлен согласно схемам, отличным от принципа «первым пришел – первым ушел», таким как принцип «последним пришел – первым ушел» (LIFO).In FIG. 10a-10d together illustrate by way of example how a value vector can be updated when one computing device communicates with another computing device. For example, computing device 400 may initially define a vector 510 of values. In some embodiments, value vector 510 may be determined based on a value for a parameter stored in distributed database instance 403 on computing device 400. For example, when value vector 510 is first determined, each value from value vector 510 (i.e., each of values 511, 512, 513, 514, 515) can be set to a value for a parameter stored in the distributed database instance 403. To illustrate, if the value for a parameter stored in the distributed database instance 403 at the point in time when the value vector 510 is determined is "YES", then each value from the value vector 510 (i.e., each of the values 511, 512, 513, 514, 515) will be set to "YES" as shown in FIG. 10a. When computing device 400 receives a value for a parameter stored in another computing device's distributed database instance (eg, distributed database instance 504 of computing device 500), computing device 400 may update value vector 510 to include the value for the parameter stored in instance 504 distributed database. In some cases, the value vector 510 may be updated according to a first-in-first-out (FIFO) basis. For example, if computing device 400 receives value 516 ("NO"), computing device 400 may add value 516 to value vector 510 and remove value 511 from value vector 510 to determine value vector 520 as shown in FIG. 10b. For example, if at a later time the computing device receives the values 517, 518, the computing device 400 may add the values 517, 518 to the value vector 510 and remove the values 512, 513, respectively, from the value vector 510 to determine the value vectors 530, 540, respectively. In other cases, the value vector 510 may be updated according to schemes other than first in, first out, such as last in, first out (LIFO).

После того как вычислительное устройство 400 обновит вектор 510 значений для определения векторов 520, 530 и/или 540 значений, вычислительное устройство 400 может выбрать значение для параметра на основе вектора 520, 530 и/или 540 значений. Этот выбор может быть выполнен согласно любому способу и/или процессу (например, правилу или набору правил), как обсуждалось выше в отношении фиг. 9a–9c.After computing device 400 updates value vector 510 to determine value vectors 520, 530, and/or 540, computing device 400 may select a value for the parameter based on value vector 520, 530, and/or 540. This selection may be made according to any method and/or process (eg, a rule or set of rules) as discussed above with respect to FIG. 9a–9c.

В некоторых случаях вычислительные устройства 400, 500 могут относиться к системе распределенной базы данных, которая хранит информацию, относящуюся к транзакциям, включающим финансовые инструменты. Например, каждое из вычислительных устройств 400, 500 может хранить двоичный голос (пример «значения») относительно того, доступен ли конкретный товар для покупки (пример «параметра»). Например, экземпляр 403 распределенной базы данных вычислительного устройства 400 может хранить значение «ДА», указывающее на то, что конкретный товар действительно доступен для покупки. Экземпляр 503 распределенной базы данных вычислительного устройства 500, с другой стороны, может хранить значение «НЕТ», указывающее на то, что конкретный товар не доступен для покупки. В некоторых случаях вычислительное устройство 400 может первоначально определять вектор двоичных голосов на основе двоичного голоса, хранящегося в экземпляре 403 распределенной базы данных. Например, вычислительное устройство 400 может устанавливать каждый двоичный голос в векторе двоичных голосов равным двоичному голосу, хранящемуся в экземпляре 403 распределенной базы данных. В этом случае вычислительное устройство 400 может определять вектор двоичных голосов подобно вектору значений 510. В некоторый более поздний момент времени вычислительное устройство 400 может осуществлять связь с вычислительным устройством 500, запрашивая у вычислительного устройства 500 отправить его двоичный голос относительно того, доступен ли для покупки конкретный товар. После того как вычислительное устройство 400 принимает двоичный голос вычислительного устройства 500 (в этом примере «НЕТ», указывающее на то, что конкретный товар недоступен для покупки), вычислительное устройство 400 может обновлять свой вектор двоичных голосов. Например, обновленный вектор двоичных голосов может быть подобен вектору значений 520. Это может происходить неопределенно долго, до тех пор, пока степень достоверности не будет соответствовать предварительно определенному критерию (более подробно описанному в настоящем документе), периодически и/или т.п.In some cases, computing devices 400, 500 may refer to a distributed database system that stores information related to transactions involving financial instruments. For example, each of the computing devices 400, 500 may store a binary vote (example "value") as to whether a particular item is available for purchase (example "parameter"). For example, distributed database instance 403 of computing device 400 may store a value of "YES" indicating that a particular item is indeed available for purchase. The distributed database instance 503 of the computing device 500, on the other hand, may store the value "NO" indicating that the particular item is not available for purchase. In some cases, computing device 400 may initially determine a vector of binary votes based on a binary vote stored in distributed database instance 403. For example, computing device 400 may set each binary vote in the vector of binary votes to a binary vote stored in distributed database instance 403. In this case, computing device 400 may determine a vector of binary votes similar to value vector 510. At some later point in time, computing device 400 may communicate with computing device 500, requesting computing device 500 to send its binary vote regarding whether a particular product. After computing device 400 receives the binary vote of computing device 500 (in this example, "NO" indicating that the particular item is not available for purchase), computing device 400 may update its vector of binary votes. For example, the updated vector of binary votes may be similar to the value vector 520. This may occur indefinitely, until the confidence level meets a predetermined criterion (described in more detail herein), periodically, and/or the like.

На фиг. 11 показана блок-схема 10, иллюстрирующая этапы, выполняемые вычислительным устройством 110 в системе 100 распределенной базы данных, согласно одному варианту осуществления. На этапе 11 вычислительное устройство 110 определяет вектор значений для параметра на основе значения параметра, хранящегося в экземпляре 113 распределенной базы данных. В некоторых вариантах осуществления вычислительное устройство 110 может определять вектор значений для параметра на основе значения для параметра, хранящегося в экземпляре 113 распределенной базы данных. На этапе 12 вычислительное устройство 110 выбирает другое вычислительное устройство в системе 100 распределенной базы данных и запрашивает с выбранного вычислительного устройства значение для параметра, хранящееся в экземпляре распределенной базы данных выбранного вычислительного устройства. Например, вычислительное устройство 110 может случайным образом выбирать вычислительное устройство 120 из числа вычислительных устройств 120, 130, 140 и запрашивать с вычислительного устройства 120 значение для параметра, хранящееся в экземпляре 123 распределенной базы данных. На этапе 13 вычислительное устройство 110 (1) принимает с выбранного вычислительного устройства (например, вычислительного устройства 120) значение для параметра, хранящееся в экземпляре распределенной базы данных выбранного вычислительного устройства (например, экземпляре 123 распределенной базы данных), и (2) отправляет на выбранное вычислительное устройство (например, вычислительное устройство 120) значение для параметра, хранящееся в экземпляре 113 распределенной базы данных. На этапе 14 вычислительное устройство 110 сохраняет значение для параметра, принятое с выбранного вычислительного устройства (например, вычислительного устройства 120), в векторе значений для параметра. На этапе 15 вычислительное устройство 110 выбирает значение для параметра на основе вектора значений для параметра. Этот выбор может быть выполнен согласно любому способу и/или процессу (например, правилу или набору правил), как обсуждалось выше в отношении фиг. 9a–9c. В некоторых вариантах осуществления вычислительное устройство 110 может повторять выбор значения для параметра в другие моменты времени. Вычислительное устройство 110 может также многократно повторять в цикле этапы 12–14 между каждым выбором значения для параметра.In FIG. 11 is a flowchart 10 illustrating steps performed by a computing device 110 in a distributed database system 100, according to one embodiment. At step 11, the computing device 110 determines a vector of values for the parameter based on the value of the parameter stored in the instance 113 of the distributed database. In some embodiments, computing device 110 may determine a vector of values for a parameter based on a value for a parameter stored in distributed database instance 113. In step 12, computing device 110 selects another computing device in distributed database system 100 and queries the selected computing device for a value for a parameter stored in the distributed database instance of the selected computing device. For example, computing device 110 may randomly select computing device 120 from among computing devices 120, 130, 140 and query computing device 120 for a value for a parameter stored in distributed database instance 123. In step 13, computing device 110 (1) receives from a selected computing device (eg, computing device 120) a value for a parameter stored in a distributed database instance of the selected computing device (eg, distributed database instance 123) and (2) sends to the selected computing device (eg, computing device 120) the value for the parameter stored in the instance 113 of the distributed database. In step 14, computing device 110 stores the value for the parameter received from the selected computing device (eg, computing device 120) in a value vector for the parameter. In step 15, computing device 110 selects a value for the parameter based on a vector of values for the parameter. This selection may be made according to any method and/or process (eg, a rule or set of rules) as discussed above with respect to FIG. 9a–9c. In some embodiments, computing device 110 may repeat selecting a value for a parameter at other times. Computing device 110 may also repeatedly loop steps 12-14 between each selection of a value for a parameter.

В некоторых случаях система 100 распределенной базы данных может хранить информацию, относящуюся к транзакциям в массовой многопользовательской игре (MMG). Например, каждое вычислительное устройство, относящееся к системе 100 распределенной базы данных, может хранить ранжированный набор игроков (пример «значения») в том порядке, в котором они владели конкретным предметом (пример «параметра»). Например, экземпляр 114 распределенной базы данных вычислительного устройства 110 может хранить ранжированный набор игроков (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк), подобный значению 431, указывающий на то, что сначала конкретным предметом владела Алиса, затем он перешел Бобу, затем он перешел Кэрол, затем он перешел Дэйву, затем он перешел Эду, и наконец он перешел Фрэнку. Экземпляр 124 распределенной базы данных вычислительного устройства 120 может хранить значение ранжированного набора игроков, подобное значению 432: (1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк); экземпляр 134 распределенной базы данных вычислительного устройства 130 может хранить значение ранжированного набора игроков, подобное значению 433: (1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Фрэнк, 6. Эд); экземпляр 144 распределенной базы данных вычислительного устройства 140 может хранить значение ранжированного набора игроков, подобное значению 434: (1. Алиса, 2. Боб, 3. Кэрол, 4. Эд, 5. Дэйв, 6. Фрэнк); экземпляр распределенной базы данных пятого вычислительного устройства (не показано на фиг. 1) может хранить значение ранжированного набора игроков, подобное значению 435: (1. Алиса, 2. Боб, 3. Эд, 4. Кэрол, 5. Дэйв, 6. Фрэнк).In some cases, the distributed database system 100 may store information related to transactions in a massively multiplayer game (MMG). For example, each computing device associated with distributed database system 100 may store a ranked set of players (example "value") in the order in which they owned a particular item (example "parameter"). For example, distributed database instance 114 of computing device 110 may store a ranked set of players (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank) like the value 431, indicating that first a particular item was owned by Alice, then it passed to Bob, then it passed to Carol, then it passed to Dave, then it passed to Ed, and finally it passed to Frank. Distributed database instance 124 of computing device 120 may store a ranked player set value similar to 432: (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank); distributed database instance 134 of computing device 130 may store a ranked player set value similar to 433: (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed); distributed database instance 144 of computing device 140 may store a ranked player set value similar to 434: (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank); a distributed database instance of a fifth computing device (not shown in FIG. 1) can store a ranked player set value like 435: (1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank ).

После того как вычислительное устройство 110 определяет вектор ранжированного набора игроков, вычислительное устройство может принимать значения ранжированных наборов игроков с других вычислительных устройств системы 100 распределенной базы данных. Например, вычислительное устройство 110 может принять (1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк) с вычислительного устройства 120; (1. Боб, 2. Алиса, 3. Кэрол, 4. Дэйв, 5. Фрэнк, 6. Эд) с вычислительного устройства 130; (1. Алиса, 2. Боб, 3. Кэрол, 4. Эд, 5. Дэйв, 6. Фрэнк) с вычислительного устройства 140; и (1. Алиса, 2. Боб, 3. Эд, 4. Кэрол, 5. Дэйв, 6. Фрэнк) с пятого вычислительного устройства (не показано на фиг. 1). По мере того как вычислительное устройство 110 принимает значения ранжированных наборов игроков с других вычислительных устройств, вычислительное устройство 110 может обновлять свой вектор ранжированных наборов игроков для включения значений ранжированных наборов игроков, принятых с других вычислительных устройств. Например, вектор ранжированных наборов игроков, хранящийся в экземпляре 114 распределенной базы данных вычислительного устройства 110, после приема значений ранжированных наборов, перечисленных выше, может быть обновлен так, чтобы быть подобным вектору значений 430. После того как вектор ранжированных наборов игроков был обновлен так, чтобы быть подобным вектору значений 430, вычислительное устройство 110 может выбирать ранжированный набор игроков на основе вектора ранжированных наборов игроков. Например, выбор может быть выполнен в соответствии с «рангом по медиане», как обсуждалось выше в отношении фиг. 9a–9c. Согласно «рангу по медиане» вычислительное устройство 110 выберет (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк) на основе вектора ранжированных наборов игроков, подобного вектору 430 значений.After the computing device 110 determines the ranked player set vector, the computing device may receive ranked player set values from other computing devices of the distributed database system 100. For example, computing device 110 may receive (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank) from computing device 120; (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed) from computing device 130; (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank) from computing device 140; and (1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank) from a fifth computing device (not shown in FIG. 1). As computing device 110 receives ranked player set values from other computing devices, computing device 110 may update its player ranked set vector to include player ranked set values received from other computing devices. For example, the player ranked set vector stored in distributed database instance 114 of computing device 110, upon receiving the ranked set values listed above, may be updated to be similar to the value vector 430. After the player ranked set vector has been updated to to be similar to value vector 430, computing device 110 may select a ranked set of players based on a vector of ranked player sets. For example, the selection may be made according to "rank by median", as discussed above with respect to FIG. 9a–9c. According to "rank by median", computing device 110 will select (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank) based on a vector of ranked player sets similar to the value vector 430.

В некоторых случаях вычислительное устройство 110 не принимает полное значение с другого вычислительного устройства. В некоторых случаях вычислительное устройство 110 может принимать идентификатор, связанный с частями полного значения (также называемого составным значением), такой как значение криптографического хеша, вместо самих частей. Для иллюстрации, вычислительное устройство 110 в некоторых случаях не принимает (1. Алиса, 2. Боб, 3. Кэрол, 4. Эд, 5. Дэйв, 6. Фрэнк), то есть полное значение 434, с вычислительного устройства 140, а принимает только (4. Эд, 5. Дэйв, 6. Фрэнк) с вычислительного устройства 140. Другими словами, вычислительное устройство 110 не принимает с вычислительного устройства 140 (1. Алиса, 2. Боб, 3. Кэрол), то есть определенные части значения 434. Вместо этого вычислительное устройство 110 может принимать с вычислительного устройства 140 значение криптографического хеша, связанное с этими частями значения 434, т.е. (1. Алиса, 2. Боб, 3. Кэрол).In some cases, computing device 110 does not receive the full value from another computing device. In some cases, computing device 110 may receive an identifier associated with portions of a complete value (also referred to as a composite value), such as a cryptographic hash value, instead of the portions themselves. To illustrate, computing device 110 in some cases does not receive (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank), that is, the full value 434, from computing device 140, but receives only (4. Ed, 5. Dave, 6. Frank) from computing device 140. In other words, computing device 110 does not receive (1. Alice, 2. Bob, 3. Carol) from computing device 140, that is, certain parts of the value 434. Instead, computing device 110 may receive from computing device 140 a cryptographic hash value associated with these portions of value 434, i. (1. Alice, 2. Bob, 3. Carol).

Значение криптографического хеша уникальным образом представляет части значения, с которыми оно связанно. Например, криптографический хеш, представляющий (1. Алиса, 2. Боб, 3. Кэрол), будет отличаться от криптографических хешей, представляющих:A cryptographic hash value uniquely represents the parts of the value with which it is associated. For example, a cryptographic hash representing (1. Alice, 2. Bob, 3. Carol) will be different from cryptographic hashes representing:

(1. Алиса); (1. Alice);

(2. Боб); (2. Bob);

(3. Кэрол);(3. Carol);

(1. Алиса, 2. Боб);(1. Alice, 2. Bob);

(2. Боб, 3. Кэрол); (2. Bob, 3. Carol);

(1. Боб, 2. Алиса, 3. Кэрол); (1. Bob, 2. Alice, 3. Carol);

(1. Кэрол, 2. Боб, 3. Алиса);(1. Carol, 2. Bob, 3. Alice);

и т. д.etc.

После того как вычислительное устройство 110 принимает с вычислительного устройства 140 значение криптографического хеша, связанное с определенными частями значения 434, вычислительное устройство 110 может (1) генерировать значение криптографического хеша с использованием тех же частей значения 431, хранящегося в экземпляре 113 распределенной базы данных, и (2) сравнивать сгенерированное значение криптографического хеша с принятым значением криптографического хеша.After the computing device 110 receives from the computing device 140 a cryptographic hash value associated with certain parts of the value 434, the computing device 110 can (1) generate a cryptographic hash value using the same parts of the value 431 stored in the distributed database instance 113, and (2) compare the generated cryptographic hash value with the received cryptographic hash value.

Например, вычислительное устройство 110 может принимать с вычислительного устройства 140 значение криптографического хеша, связанное с определенными частями значения 434, указанными курсивом: (1. Алиса, 2. Боб, 3. Кэрол, 4. Эд, 5. Дэйв, 6. Фрэнк). Вычислительное устройство может затем генерировать значение криптографического хеша с использованием тех же частей значения 431 (хранящегося в экземпляре 113 распределенной базы данных), указанных курсивом: (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк). Поскольку указанные курсивом части значения 434 и указанные курсивом части значения 431 идентичны, принятое значение криптографического хеша (связанное с указанными курсивом частями значения 434) также будет идентично сгенерированному значению криптографического хеша (связанному с указанными курсивом частями значения 431).For example, computing device 110 may receive from computing device 140 a cryptographic hash value associated with certain italicized portions of value 434: (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank) . The computing device can then generate a cryptographic hash value using the same parts of the value 431 (stored in the distributed database instance 113) indicated in italics: (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6 . Frank). Because the italicized portions of 434 and the italicized portions of 431 are identical, the received cryptographic hash value (associated with the italicized portions of 434) will also be identical to the generated cryptographic hash value (associated with the italicized portions of 431).

Посредством сравнения сгенерированного значения криптографического хеша с принятым значением криптографического хеша вычислительное устройство 110 может определить, следует ли запрашивать с вычислительного устройства 140 фактические части, связанные с принятым значением криптографического хеша. Если сгенерированное значение криптографического хеша идентично принятому значению криптографического хеша, вычислительное устройство 110 может определить, что копия, идентичная фактическим частям, связанным с принятым значением криптографического хеша, уже сохранена в экземпляре 113 распределенной базы данных, и поэтому фактические части, связанные с принятым значением криптографического хеша, с вычислительного устройства 140 не являются необходимыми. С другой стороны, если сгенерированное значение криптографического хеша не идентично принятому значению криптографического хеша, вычислительное устройство 110 может запросить фактические части, связанные с принятым значением криптографического хеша, с вычислительного устройства 140.By comparing the generated cryptographic hash value with the received cryptographic hash value, computing device 110 can determine whether computing device 140 should be asked for the actual portions associated with the received cryptographic hash value. If the generated cryptographic hash value is identical to the received cryptographic hash value, computing device 110 may determine that a copy identical to the actual parts associated with the received cryptographic hash value is already stored in the distributed database instance 113, and therefore the actual parts associated with the received cryptographic hash value hash from computing device 140 are not necessary. On the other hand, if the generated cryptographic hash value is not identical to the received cryptographic hash value, computing device 110 may request the actual portions associated with the received cryptographic hash value from computing device 140.

Хотя значения криптографического хеша, обсуждаемые выше, связаны с частями единичных значений, следует понимать, что значение криптографического хеша может быть связано со всем единичным значением и/или множеством значений. Например, в некоторых вариантах осуществления вычислительное устройство (например, вычислительное устройство 140) может хранить набор значений в своем экземпляре распределенной базы данных (например, экземпляре 144 распределенной базы данных). В таких вариантах осуществления по прошествии предварительно определенного периода времени с момента обновления значения в экземпляре базы данных, после удовлетворения степени достоверности (обсуждаемой в отношении фиг. 13) для значения предварительно определенному критерию (например, достижения предварительно определенного порогового значения), по прошествии определенного количества времени после возникновения транзакции и/или на основе любых других подходящих факторов, это значение может быть включено в значение криптографического хеша с другими значениями, когда данные запрашиваются с другого экземпляра базы данных и отправляются на него. Это снижает количество конкретных значений, которые передаются между экземплярами базы данных.While the cryptographic hash values discussed above are associated with portions of single values, it should be understood that a cryptographic hash value may be associated with the entire single value and/or multiple values. For example, in some embodiments, the computing device (eg, computing device 140) may store a set of values in its distributed database instance (eg, distributed database instance 144). In such embodiments, after a predetermined period of time has elapsed since a value has been updated in a database instance, after a confidence level (discussed in relation to FIG. time after the transaction occurred and/or based on any other pertinent factors, this value may be included in the cryptographic hash value with other values when data is queried from and sent to another database instance. This reduces the number of specific values that are passed between database instances.

В некоторых случаях, например, набор значений в базе данных может включать первый набор значений, включающий транзакции в период между 2000 годом и 2010 годом; второй набор значений, включающий транзакции в период между 2010 годом и 2013 годом; третий набор значений, включающий транзакции в период между 2013 годом и 2014 годом; и четвертый набор значений, включающий транзакции в период между 2014 годом и текущим моментом. Используя этот пример, если вычислительное устройство 110 запрашивает с вычислительного устройства 140 данные, хранящиеся в экземпляре 144 распределенной базы данных вычислительного устройства 140, в некоторых вариантах осуществления вычислительное устройство 140 может отправлять на вычислительное устройство 110 (1) первое значение криптографического хеша, связанное с первым набором значений, (2) второе значение криптографического хеша, связанное со вторым набором значений, (3) третье значение криптографического хеша, связанное с третьим набором значений; и (4) каждое значение из четвертого набора значений. Критерии относительно того, когда значение добавляется в криптографический хеш, могут быть установлены администратором, отдельными пользователями, на основе количества значений, уже содержащихся в экземпляре базы данных, и/или т.п. Отправка значений криптографического хеша вместо каждого отдельного значения снижает количество отдельных значений, предоставляемых при обмене значениями между экземплярами базы данных.In some cases, for example, a set of values in a database may include a first set of values including transactions between the year 2000 and 2010; a second set of values including transactions between 2010 and 2013; the third set of values, including transactions between 2013 and 2014; and a fourth set of values including transactions between 2014 and now. Using this example, if computing device 110 queries computing device 140 for data stored in distributed database instance 144 of computing device 140, in some embodiments, computing device 140 may send to computing device 110 (1) a first cryptographic hash value associated with the first a set of values, (2) a second cryptographic hash value associated with the second set of values, (3) a third cryptographic hash value associated with the third set of values; and (4) each value from the fourth set of values. Criteria as to when a value is added to a cryptographic hash may be set by the administrator, by individual users, based on the number of values already contained in the database instance, and/or the like. Sending cryptographic hash values instead of each individual value reduces the number of individual values provided when exchanging values between database instances.

Когда принимающее вычислительное устройство (например, вычислительное устройство 400 на этапе 2, представленном на фиг. 8) принимает значение криптографического хеша (например, сгенерированное вычислительным устройством 500 на основе значений в экземпляре 503 распределенной базы данных), это вычислительное устройство генерирует значение криптографического хеша с использованием тех же способа и/или процесса и значений в своем экземпляре базы данных (например, экземпляре 403 распределенной базы данных) для параметров (например, транзакций во время указанного периода времени), которые используются для генерирования принятого значения криптографического хеша. Принимающее вычислительное устройство может затем сравнивать принятое значение криптографического хеша со сгенерированным значением криптографического хеша. Если значения не совпадают, принимающее вычислительное устройство может запрашивать отдельные значения, используемые для генерирования принятого криптографического хеша, с передающего вычислительного устройства (например, вычислительного устройства 500 на фиг. 8) и сравнивать отдельные значения из передающего экземпляра базы данных (например, экземпляра 503 распределенной базы данных) с отдельными значениями для этих транзакций в принимающем экземпляре базы данных (например, экземпляре 403 распределенной базы данных).When a receiving computing device (eg, computing device 400 in step 2 of FIG. 8) receives a cryptographic hash value (eg, generated by computing device 500 based on values in distributed database instance 503), that computing device generates a cryptographic hash value with using the same method and/or process and values in its database instance (eg, distributed database instance 403) for parameters (eg, transactions during a specified time period) that are used to generate the received cryptographic hash value. The receiving computing device may then compare the received cryptographic hash value with the generated cryptographic hash value. If the values do not match, the receiving computing device may query the individual values used to generate the received cryptographic hash from the transmitting computing device (e.g., computing device 500 in FIG. 8) and compare the individual values from the transmitting database instance (e.g., distributed database instance 503). database) with distinct values for those transactions in the receiving database instance (eg, distributed database instance 403).

Например, если принимающее вычислительное устройство принимает значение криптографического хеша, связанное с транзакциями в период между 2000 годом и 2010 годом, принимающее вычислительное устройство может генерировать криптографический хеш с использованием значений для транзакций в период между 2000 годом и 2010 годом, хранящихся в его экземпляре базы данных. Если принятое значение криптографического хеша совпадает со сгенерированным локально значением криптографического хеша, принимающее вычислительное устройство может положить, что значения для транзакций в период между 2000 годом и 2010 годом являются одинаковыми в обеих базах данных, и дополнительная информация не запрашивается. Однако, если принятое значение криптографического хеша не совпадает со сгенерированным локально значением криптографического хеша, принимающее вычислительное устройство может запрашивать с передающего вычислительного устройства отдельные значения, используемые для генерирования принятого значения криптографического хеша. Принимающее вычислительное устройство может затем идентифицировать расхождение и обновлять вектор значений для этого отдельного значения.For example, if a receiving computing device receives a cryptographic hash value associated with transactions between 2000 and 2010, the receiving computing device can generate a cryptographic hash using the values for transactions between 2000 and 2010 stored in its database instance. . If the received cryptographic hash value matches the locally generated cryptographic hash value, the receiving computing device may assume that the values for transactions between the year 2000 and 2010 are the same in both databases and no further information is requested. However, if the received cryptographic hash value does not match the locally generated cryptographic hash value, the receiving computing device may request from the transmitting computing device separate values used to generate the received cryptographic hash value. The receiving computing device may then identify the discrepancy and update the value vector for that individual value.

Значения криптографического хеша могут основываться на любых подходящих процессе и/или хеш-функции для объединения множества значений и/или частей значения в один идентификатор. Например, любое подходящее количество значений (например, транзакций за период времени) может быть использовано в качестве входных данных для хеш-функции, и значение хеша может быть сгенерировано на основе хеш-функции.Cryptographic hash values may be based on any suitable process and/or hash function for combining multiple values and/or value parts into a single identifier. For example, any suitable number of values (eg, transactions over a period of time) may be used as input to a hash function, and a hash value may be generated based on the hash function.

Хотя в вышеизложенном обсуждении значения криптографического хеша используются в качестве идентификатора, связанного со значениями и/или частями значений, следует понимать, что могут быть использованы и другие идентификаторы, применяемые для представления множества значений и/или частей значений. Примеры других идентификаторов включают цифровые отпечатки, контрольные суммы, регулярные значения хеша и/или т.п.Although the above discussion uses cryptographic hash values as an identifier associated with values and/or parts of values, it should be understood that other identifiers can be used to represent multiple values and/or parts of values. Examples of other identifiers include fingerprints, checksums, regular hash values, and/or the like.

На фиг. 12 показана блок-схема (блок-схема 20), иллюстрирующая этапы, выполняемые вычислительным устройством 110 в системе 100 распределенной базы данных, согласно одному варианту осуществления. В варианте осуществления, проиллюстрированном на фиг. 12, вектор значений переустанавливается на основе предварительно определенной вероятности. Подобным образом, каждое значение в векторе значений может быть переустановлено в значение время от времени и на основе вероятности. На этапе 21 вычислительное устройство 110 выбирает значение для параметра на основе вектора значений для параметра, подобно этапу 15, проиллюстрированному на фиг. 11 и обсуждаемому выше. На этапе 22 вычислительное устройство 110 принимает значения для параметра с других вычислительных устройств (например, вычислительных устройств 120, 130, 140) и отправляет значение для параметра, хранящееся в экземпляре 113 распределенной базы данных, на другие вычислительные устройства (например, вычислительные устройства 120, 130, 140). Например, этап 22 может включать выполнение этапов 12 и 13, проиллюстрированных на фиг. 11 и обсуждаемых выше, для каждого из других вычислительных устройств. На этапе 23 вычислительное устройство 110 сохраняет значения для параметра, принятые с других вычислительных устройств (например, вычислительных устройств 120, 130, 140), в вектор значений для параметра, подобно этапу 14, проиллюстрированному на фиг. 11 и обсуждаемому выше. На этапе 24 вычислительное устройство 110 определяет, следует ли переустанавливать вектор значений, на основе предварительно определенной вероятности переустановки вектора значений. В некоторых случаях, например, существует 10% вероятность того, что вычислительное устройство 110 будет переустанавливать вектор значений для параметра после каждого обновления вычислительным устройством 110 вектора значений для параметра, хранящегося в экземпляре 114 распределенной базы данных. При таком сценарии вычислительное устройство 110 на этапе 24 будет определять, следует ли выполнять переустановку или нет, на основе 10% вероятности. В некоторых случаях определение может быть выполнено процессором 111 вычислительного устройства 110.In FIG. 12 is a flowchart (flowchart 20) illustrating the steps performed by the computing device 110 in the distributed database system 100, according to one embodiment. In the embodiment illustrated in FIG. 12, the value vector is reset based on a predetermined probability. Likewise, each value in the value vector may be reset to a value from time to time and based on probability. In step 21, computing device 110 selects a value for the parameter based on a vector of values for the parameter, similar to step 15 illustrated in FIG. 11 and discussed above. At step 22, computing device 110 receives values for the parameter from other computing devices (e.g., computing devices 120, 130, 140) and sends the value for the parameter stored in distributed database instance 113 to other computing devices (e.g., computing devices 120, 130, 140). For example, step 22 may include performing steps 12 and 13 illustrated in FIG. 11 and discussed above for each of the other computing devices. In step 23, computing device 110 stores parameter values received from other computing devices (eg, computing devices 120, 130, 140) into a parameter value vector, similar to step 14 illustrated in FIG. 11 and discussed above. In step 24, computing device 110 determines whether to reset the value vector based on a predetermined probability of resetting the value vector. In some cases, for example, there is a 10% chance that computing device 110 will reset the value vector for a parameter after each update by computing device 110 of the value vector for a parameter stored in distributed database instance 114. In such a scenario, computing device 110 will determine in step 24 whether a reinstall should be performed or not based on a 10% chance. In some cases, the determination may be performed by the processor 111 of the computing device 110.

Если вычислительное устройство 110 определяет, что следует переустановить вектор значений, на основе предварительно определенной вероятности, вычислительное устройство 110 на этапе 25 переустанавливает вектор значений. В некоторых вариантах осуществления вычислительное устройство 110 может переустанавливать каждое значение в векторе значений для параметра так, чтобы оно равнялось значению для параметра, хранящемуся в экземпляре 113 распределенной базы данных на момент сброса. Например, если непосредственно перед переустановкой вектор значений представляет собой вектор 430 значений, и значением для параметра, хранящимся в экземпляре 113 распределенной базы данных, является (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк) (например, согласно «рангу по медиане»), то каждое значение в векторе значений будет переустановлено так, чтобы равняться (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк). Другими словами, каждое из значений 431, 432, 433, 434, 435 вектора 430 значений будет переустановлено так, чтобы равняться значению 431. Переустановка каждого значения в векторе значений для параметра так, чтобы оно равнялось значению для параметра, хранящемуся в экземпляре распределенной базы данных на момент сброса, время от времени и на основе вероятности помогает системе распределенной базы данных (к которой относится вычислительное устройство) достигать консенсуса. Подобным образом, переустановка способствует достижению согласия относительно значения для параметра среди вычислительных устройств системы распределенной базы данных.If computing device 110 determines that the value vector should be reset based on a predetermined probability, computing device 110 resets the value vector in step 25. In some embodiments, the computing device 110 may reset each value in the value vector for a parameter to equal the value for the parameter stored in the distributed database instance 113 at the time of the reset. For example, if just before the reset the value vector is a value vector 430 and the value for the parameter stored in the distributed database instance 113 is (1.Alice, 2.Bob, 3.Carol, 4.Dave, 5.Ed, 6 . Frank) (e.g. according to "rank by median"), then each value in the value vector will be reset to equal (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank ). In other words, each of the values 431, 432, 433, 434, 435 of the value vector 430 will be reset to equal the value 431. Resetting each value in the value vector for a parameter to equal the value for the parameter stored in the distributed database instance helps the distributed database system (to which the computing device belongs) reach consensus at the time of reset, from time to time, and on a probability basis. Likewise, a reset promotes agreement on a value for a parameter among the computing devices of a distributed database system.

Например, экземпляр 114 распределенной базы данных вычислительного устройства 110 может хранить ранжированный набор игроков (1. Алиса, 2. Боб, 3. Кэрол, 4. Дэйв, 5. Эд, 6. Фрэнк), подобный значению 431, указывающий на то, что сначала конкретным предметом владела Алиса, затем он перешел Бобу, затем он перешел Кэрол, затем он перешел Дэйву, затем он перешел Эду, и наконец он перешел Фрэнку.For example, distributed database instance 114 of computing device 110 may store a ranked set of players (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank) like the value 431, indicating that first a particular item was owned by Alice, then it passed to Bob, then it passed to Carol, then it passed to Dave, then it passed to Ed, and finally it passed to Frank.

На фиг. 13 показана блок-схема (блок-схема 30), иллюстрирующая этапы, выполняемые вычислительным устройством 110 в системе 100 распределенной базы данных, согласно одному варианту осуществления. В варианте осуществления, проиллюстрированном на фиг. 13, выбор значения параметра на основе вектора значений для параметра происходит, когда степень достоверности, связанная с экземпляром распределенной базы данных, равняется нулю. Степень достоверности может указывать уровень «консенсуса», или согласия, между значением параметра, хранящимся в вычислительном устройстве 110, и значениями параметра, хранящимися в других вычислительных устройствах (например, вычислительных устройствах 120, 130, 140) системы 100 распределенной базы данных. В некоторых вариантах осуществления, как подробно описано в настоящем документе, степень достоверности наращивается (например, увеличивается на единицу) каждый раз, когда значение для параметра, принятое с другого вычислительного устройства вычислительным устройством 110, равняется значению для параметра, хранящемуся в вычислительном устройстве 110, и степень достоверности сокращается (т.е. уменьшается на единицу) каждый раз, когда значение для параметра, принятое с другого вычислительного устройства вычислительным устройством 110, не равняется значению для параметра, хранящемуся в вычислительном устройстве 110, если степень достоверности превышает ноль.In FIG. 13 is a flowchart (flowchart 30) illustrating the steps performed by the computing device 110 in the distributed database system 100, according to one embodiment. In the embodiment illustrated in FIG. 13, selection of a parameter value based on a vector of values for the parameter occurs when the confidence level associated with the distributed database instance is zero. Confidence may indicate a level of "consensus", or agreement, between a parameter value stored on computing device 110 and parameter values stored on other computing devices (e.g., computing devices 120, 130, 140) of distributed database system 100. In some embodiments, as detailed herein, the confidence level is incremented (e.g., incremented by one) each time the value for a parameter received from another computing device by computing device 110 equals the value for a parameter stored in computing device 110, and the confidence level is reduced (ie, reduced by one) each time the value for the parameter received from another computing device by the computing device 110 does not equal the value for the parameter stored in the computing device 110 if the confidence level is greater than zero.

На этапе 31 вычислительное устройство 110 принимает значение для параметра с другого вычислительного устройства (например, вычислительного устройства 120) и отправляет значение для параметра, хранящееся в экземпляре 113 распределенной базы данных, на другое вычислительное устройство (например, вычислительное устройство 120). Например, этап 31 может включать выполнение этапов 12 и 13, проиллюстрированных на фиг. 11 и обсуждаемых выше. На этапе 32 вычислительное устройство 110 сохраняет значение для параметра, принятое с другого вычислительного устройства (например, вычислительного устройства 120), в векторе значений для параметра, подобно этапу 14, проиллюстрированному на фиг. 11 и обсуждаемому выше. На этапе 33 вычислительное устройство 110 определяет, равняется ли значение для параметра, принятое с другого вычислительного устройства (например, вычислительного устройства 120), значению для параметра, хранящемуся в экземпляре 113 распределенной базы данных. Если значение для параметра, принятое с другого вычислительного устройства (например, вычислительного устройства 120), равняется значению для параметра, хранящемуся в экземпляре 113 распределенной базы данных, то вычислительное устройство 110 на этапе 34 наращивает степень достоверности, связанную с экземпляром 113 распределенной базы данных, на единицу, и процесс, проиллюстрированный блок-схемой 30, возвращается на этап 31. Если значение для параметра, принятое с другого вычислительного устройства (например, вычислительного устройства 120), не равняется значению для параметра, хранящемуся в экземпляре 113 распределенной базы данных, то вычислительное устройство 110 на этапе 35 сокращает степень достоверности, связанную с экземпляром 113 распределенной базы данных, на единицу, если степень достоверности превышает ноль.In step 31, computing device 110 receives a value for a parameter from another computing device (eg, computing device 120) and sends the value for a parameter stored in distributed database instance 113 to the other computing device (eg, computing device 120). For example, step 31 may include performing steps 12 and 13 illustrated in FIG. 11 and discussed above. In step 32, computing device 110 stores a value for a parameter received from another computing device (eg, computing device 120) in a vector of values for the parameter, similar to step 14 illustrated in FIG. 11 and discussed above. In step 33, the computing device 110 determines whether the value for the parameter received from another computing device (eg, computing device 120) is equal to the value for the parameter stored in the distributed database instance 113. If the value for a parameter received from another computing device (for example, computing device 120) is equal to the value for a parameter stored in distributed database instance 113, then computing device 110 increments the confidence associated with distributed database instance 113 in step 34, by one, and the process illustrated by flowchart 30 returns to step 31. If the value for the parameter received from another computing device (eg, computing device 120) does not equal the value for the parameter stored in the distributed database instance 113, then the computing device 110 at step 35 reduces the confidence level associated with the distributed database instance 113 by one if the confidence level is greater than zero.

На этапе 36 вычислительное устройство 110 определяет, равняется ли степень достоверности, связанная с экземпляром 113 распределенной базы данных, нулю. Если степень достоверности равняется нулю, то вычислительное устройство на этапе 37 выбирает значение для параметра на основе вектора значений для параметра. Этот выбор может быть выполнен согласно любому способу и/или процессу (например, правилу или набору правил), как обсуждалось выше. Если степень достоверности не равняется нулю, то процесс, проиллюстрированный блок-схемой 30, возвращается на этап 31.At step 36, the computing device 110 determines whether the confidence level associated with the distributed database instance 113 is zero. If the confidence level is zero, then the computing device in step 37 selects a value for the parameter based on the vector of values for the parameter. This selection may be made according to any method and/or process (eg, a rule or set of rules) as discussed above. If the confidence level is not zero, then the process illustrated by flowchart 30 returns to step 31.

Как обсуждалось выше, степени достоверности связаны с экземплярами распределенной базы данных. Однако следует понимать, что степень достоверности может также быть связана со значением вектора, хранящимся в экземпляре распределенной базы данных, и/или вычислительным устройством, хранящим значение вектора (например, в своем экземпляре распределенной базы данных), вместо экземпляра распределенной базы данных или в дополнение к нему.As discussed above, degrees of confidence are associated with distributed database instances. However, it should be understood that confidence may also be related to the vector value stored in the distributed database instance and/or the computing device storing the vector value (e.g., in its distributed database instance), instead of or in addition to the distributed database instance. to him.

Значения, относящиеся к степеням достоверности (например, пороговые значения, значения приращения и значения сокращения), используемые в отношении фиг. 13, представлены исключительно в иллюстративных целях. Следует понимать, что могут быть использованы и другие значения, относящиеся к степеням достоверности (например, пороговые значения, значения приращения и значения сокращения). Например, для приращений и/или сокращений степени достоверности, выполняемых на этапах 34 и 35 соответственно, может использоваться любое значение. В качестве другого примера, пороговое значение степени достоверности, равное нулю, используемое на этапах 35 и 36, может также быть любым значением. Кроме того, значения, относящиеся к степеням достоверности (например, пороговые значения, значения приращения и значения сокращения), могут изменяться ходе работы, т.е. по мере выполнения циклов процесса, проиллюстрированного на блок-схеме 30.Values related to degrees of confidence (eg, threshold values, increment values, and reduction values) used in relation to FIG. 13 are presented for illustrative purposes only. It should be understood that other values related to degrees of confidence (eg, threshold values, increment values, and reduction values) may be used. For example, any value may be used for the confidence increments and/or decrements performed in steps 34 and 35, respectively. As another example, the confidence level threshold of zero used in steps 35 and 36 may also be any value. In addition, values related to degrees of certainty (eg, threshold values, incremental values, and reduction values) may change during operation, ie. as the cycles of the process illustrated in flowchart 30 are performed.

В некоторых вариантах осуществления степень достоверности может влиять на информационный поток между первым вычислительным устройством из системы распределенной базы данных и вторым вычислительным устройством из системы распределенной базы данных, описанный выше в отношении фиг. 8. Например, если первое вычислительное устройство (например, вычислительное устройство 110) имеет высокую степень достоверности, связанную с его экземпляром распределенной базы данных (например, экземпляром 114 распределенной базы данных), то первое вычислительное устройство может запросить у второго вычислительного устройства меньшую часть значения для параметра (и значение криптографического хеша, связанное с большей частью значения для параметра), чем первое вычислительное устройство в ином случае запросило бы у второго вычислительного устройства (например, если первое вычислительное устройство имеет низкую степень достоверности, связанную с его экземпляром распределенной базы данных). Высокая степень достоверности может указывать на то, что значение для параметра, хранящееся в первом вычислительном устройстве, по всей вероятности согласуется со значениями для параметра, хранящимися в других вычислительных устройствах из системы распределенной базы данных, и, таким образом, значение криптографического хеша используется для проверки согласованности.In some embodiments, the degree of certainty may affect the information flow between the first computing device from the distributed database system and the second computing device from the distributed database system, described above with respect to FIG. 8. For example, if the first computing device (eg, computing device 110) has a high degree of certainty associated with its distributed database instance (eg, distributed database instance 114), then the first computing device may ask the second computing device for a smaller portion of the value for the parameter (and the cryptographic hash value associated with most of the value for the parameter) than the first computing device would otherwise request from the second computing device (e.g., if the first computing device has low confidence associated with its distributed database instance) . High confidence may indicate that the value for the parameter stored in the first computing device is likely consistent with the values for the parameter stored in other computing devices from the distributed database system, and thus the cryptographic hash value is used to verify consistency.

В некоторых случаях степень достоверности первого вычислительного устройства может повышаться с достижением порогового значения, при котором первое вычислительное устройство определяет, что ему больше не следует запрашивать конкретные значения, конкретные части значений и/или значения криптографического хеша, связанные с конкретными значениями и/или конкретными частями значений, с других вычислительных устройств из системы распределенной базы данных. Например, если степень достоверности значения удовлетворяет конкретному критерию (например, достигает порогового значения), первое вычислительное устройство может определять, что значение сошлось, и далее не запрашивать обмен этим значением с другими устройствами. В качестве другого примера, значение может быть добавлено к значению криптографического хеша на основе его степени достоверности, удовлетворяющей критерию. В таких случаях значение криптографического хеша для набора значений может быть отправлено вместо отдельного значения после того, как степень достоверности удовлетворит критерию, как подробно обсуждалось выше. Обмен меньшим количеством значений и/или меньшими фактическими частями (значений) со значениями криптографического хеша, связанными с остальными частями (значений), может способствовать эффективной связи между вычислительными устройствами системы распределенной базы данных.In some cases, the degree of certainty of the first computing device may increase to reach a threshold at which the first computing device determines that it should no longer request specific values, specific parts of values, and/or cryptographic hash values associated with specific values and/or specific parts. values from other computing devices from a distributed database system. For example, if the confidence level of a value satisfies a particular criterion (eg, reaches a threshold value), the first computing device may determine that the value has converged and not further request that the value be exchanged with other devices. As another example, a value may be added to a cryptographic hash value based on its confidence level that satisfies a criterion. In such cases, a cryptographic hash value for a set of values may be sent instead of a single value after the confidence level satisfies the criteria, as discussed in detail above. Exchange of fewer values and/or smaller actual parts (values) with cryptographic hash values associated with the remaining parts (values) can facilitate efficient communication between computing devices of a distributed database system.

В некоторых случаях по мере повышения степени достоверности для конкретного значения параметра экземпляра распределенной базы данных вычислительное устройство, связанное с этим экземпляром распределенной базы данных, может запрашивать обмен значениями для этого параметра с другими вычислительными устройствами реже. Подобным образом, в некоторых случаях по мере понижения степени достоверности для конкретного значения параметра экземпляра распределенной базы данных вычислительное устройство, связанное с этим экземпляром распределенной базы данных, может запрашивать обмен значениями для этого параметра с другими вычислительными устройствами чаще. Таким образом, степень достоверности может быть использована для уменьшения количества значений, обмен которыми производится между вычислительными устройствами.In some cases, as confidence increases for a particular value of a parameter of a distributed database instance, the computing device associated with that distributed database instance may request to exchange values for that parameter with other computing devices less frequently. Similarly, in some cases, as the confidence level for a particular parameter value of a distributed database instance decreases, the computing device associated with that distributed database instance may request to exchange values for that parameter with other computing devices more frequently. Thus, the degree of confidence can be used to reduce the number of values exchanged between computing devices.

Хотя выше были описаны различные варианты осуществления, следует понимать, что они были представлены исключительно в качестве примера, а не ограничения. В случае если способы, описанные выше, указывают на то, что определенные события происходят в определенном порядке, упорядоченная последовательность определенных событий может быть изменена. Дополнительно некоторые из событий могут быть выполнены одновременно в параллельном процессе, когда это возможно, а также выполнены последовательно, как описано выше.While various embodiments have been described above, it should be understood that they have been presented by way of example only 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.

Некоторые варианты осуществления, описанные в настоящем документе, относятся к продукту в виде запоминающего устройства с энергонезависимым машиночитаемым носителем (который также может называться энергонезависимым считываемым процессором носителем), на котором хранятся команды или компьютерный код для выполнения различных реализуемых компьютером операций. Машиночитаемый носитель (или считываемый процессором носитель) является энергонезависимым в том смысле, что он по существу не содержит временно распространяющихся сигналов (например, распространяющейся электромагнитной волны, несущей информацию по передающей среде, такой как пространство или кабель). Носители и компьютерный код (который также может называться кодом) могут быть выполнены и созданы для конкретной цели или целей. Примеры энергонезависимых машиночитаемых носителей включают, помимо прочего: магнитные запоминающие устройства, такие как жесткие диски, гибкие диски и магнитная лента; оптические запоминающие устройства, такие как компакт-диск / цифровые видеодиски (CD/DVD), постоянные запоминающие устройства на компакт-дисках (CD-ROM) и голографические устройства; магнитооптические запоминающие устройства, такие как оптические диски; модули обработки сигнала несущей частоты; и аппаратные устройства, которые специально выполнены с возможностью хранения и исполнения программного кода, такие как интегральные схемы специального назначения (ASIC), программируемые логические интегральные схемы (PLD), постоянное запоминающее устройство (ROM) и оперативные запоминающие устройства (RAM). Другие варианты осуществления, описанные в настоящем документе, относятся к компьютерному программному продукту, который может включать, например, команды и/или компьютерный код, обсуждаемые в настоящем документе.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 configured to store and execute program code, such as application specific integrated circuits (ASICs), programmable logic integrated circuits (PLDs), read only memory (ROM) and random access memory (RAM). Other embodiments described herein relate to a computer program product that may include, for example, the instructions and/or computer code discussed herein.

Примеры компьютерного кода включают, помимо прочего, микрокод или микрокоманды, машинные команды, такие как созданные компилятором, код, используемый для создания веб-службы, и файлы, содержащие команды более высокого уровня, которые исполняются компьютером с использованием интерпретатора. Например, варианты осуществления могут быть реализованы с использованием императивных языков программирования (например, C, Fortran и т. д.), функциональных языков программирования (Haskell, Erlang и т. д.), логических языков программирования (например, Prolog), объектно-ориентированных языков программирования (например, Java, C++ и т. д.) или других подходящих языков программирования и/или инструментов разработки. Дополнительные примеры компьютерного кода включают, помимо прочего, сигналы управления, зашифрованный код и сжатый код.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 (e.g., C, Fortran, etc.), functional programming languages (e.g., Haskell, Erlang, etc.), logical programming languages (e.g., Prolog), object-based oriented programming languages (e.g. 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.

Хотя выше были описаны различные варианты осуществления, следует понимать, что они были представлены исключительно в качестве примера, а не ограничения, и различные изменения могут быть выполнены в отношении формы и деталей. Любая часть устройства и/или способов, описанных в настоящем документе, может быть объединена в любой комбинации, за исключением взаимоисключающих комбинаций. Варианты осуществления, описанные в настоящем документе, могут включать различные комбинации и/или подкомбинации функций, компонентов и/или признаков разных описанных вариантов осуществления.While 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 may 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 (256)

1. Энергонезависимый считываемый процессором носитель, хранящий код, представляющий команды, предназначенные для исполнения процессором, при этом код содержит код, который вызывает выполнение процессором:1. A non-volatile processor-readable medium that stores code representing instructions to be executed by the processor, the code containing code that causes the processor to execute: приема первого события из экземпляра распределенной базы данных на первом вычислительном устройстве из множества вычислительных устройств, которые реализуют распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств;receiving a first event from a distributed database instance on a first computing device of a plurality of computing devices that implement the distributed database via a network operatively connected to the plurality of computing devices; определения третьего события на основе первого события и второго события; определение первого набора событий на основе по меньшей мере частично третьего события, при этом каждое событие из первого набора событий:determining a third event based on the first event and the second event; determining a first set of events based at least in part on a third event, wherein each event from the first set of events: идентифицировано вторым набором событий, при этом общая величина долей, связанная со вторым набором событий, удовлетворяет первому критерию величины доли, при этом каждое событие из второго набора событий (1) определяется разным экземпляром распределенной базы данных и (2) идентифицируется третьим событием, иis identified by a second set of events, wherein the total stake value associated with the second set of events satisfies the first share size criterion, where each event from the second set of events is (1) determined by a different instance of the distributed database and (2) is identified by a third event, and связано с первым номером раунда;associated with the first number of the round; вычисления номера раунда для третьего события на основе определения того, что сумма величин долей, связанных с каждым событием из первого набора событий, удовлетворяет второму критерию величины доли, при этом номер раунда для третьего события соответствует второму номеру раунда, превышающему первый номер раунда;calculating a round number for the third event based on determining that the sum of the proportion values associated with each event of the first set of events satisfies the second proportion value criterion, wherein the round number for the third event corresponds to a second round number greater than the first round number; определения третьего набора событий на основе третьего события, при этом каждое событие из третьего набора событий:determining a third event set based on the third event, wherein each event from the third event set: идентифицировано четвертым набором событий, содержащим третье событие, при этом каждое событие из четвертого набора событий:identified by a fourth event set containing a third event, each event from the fourth event set: определяется разным экземпляром распределенной базы данных, при этом общая величина долей, связанная с четвертым набором событий, удовлетворяет третьему критерию величины доли, иis determined by a different instance of the distributed database, wherein the total stake value associated with the fourth set of events satisfies the third stake criterion, and представляет собой событие из первого набора событий;represents an event from the first set of events; определения порядкового значения для четвертого события на основе по меньшей мере частично общей величины долей, связанной с третьим набором событий, удовлетворяющей четвертому критерию величины доли; иdetermining an ordinal value for the fourth event based at least in part on the total share value associated with the third set of events satisfying the fourth share value criterion; and сохранения порядкового значения в экземпляре распределенной базы данных на втором вычислительном устройстве из множества вычислительных устройств.storing an ordinal value in a distributed database instance on a second computing device of the plurality of computing devices. 2. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:2. The non-volatile processor-readable medium of claim 1, further comprising code that causes the processor to execute: вычисления общей величины долей, связанной с третьим набором событий на основе суммы набора величин долей, при этом каждая величина доли из набора величин долей связана с экземпляром распределенной базы данных, который определил событие из третьего набора событий.calculating an overall stake value associated with the third set of events based on the sum of the set of stake values, wherein each stake value of the set of stake values is associated with the distributed database instance that determined the event from the third event set. 3. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что код, который вызывает выполнение процессором определения порядкового значения для четвертого события, содержит код, который вызывает выполнение процессором определения номера принятого раунда, связанного с четвертым событием, на основе идентификации четвертого события третьим набором событий, общая величина долей которых удовлетворяет четвертому критерию величины доли.3. The non-volatile processor-readable medium of claim. 1, wherein the code that causes the processor to determine the ordinal value for the fourth event comprises code that causes the processor to execute the determination of the received round number associated with the fourth event based on the identification of the fourth event. a third set of events whose total shares satisfy the fourth share criterion. 4. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:4. The non-volatile processor-readable medium of claim 1, further comprising code that causes the processor to execute: определения третьего набора событий на основе равенства значения, связанного с каждым событием из третьего набора событий, значению, связанному с оставшимися событиями из третьего набора событий, при этом значение, связанное с каждым событием из третьего набора событий, является (1) связанным с четвертым событием и (2) основанным на значении для каждого события из четвертого набора событий, которое такое событие из третьего набора событий может идентифицировать,determining a third event set based on the equality of the value associated with each event in the third event set with the value associated with the remaining events in the third event set, wherein the value associated with each event in the third event set is (1) associated with the fourth event and (2) based on a value for each event in the fourth event set that such event in the third event set can identify, при этом четвертому критерию величины доли удовлетворяет третий набор событий, когда общая величина долей, связанная с третьим набором событий, превышает пороговое значение, основанное на общей величине долей, связанной с четвертым набором событий.wherein the fourth share value criterion is satisfied by the third event set when the total share value associated with the third event set exceeds a threshold value based on the total share value associated with the fourth event set. 5. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что второй критерий величины доли основан на предварительно определенном соотношении, связанном с общей величиной долей распределенной базы данных, при этом код дополнительно содержит код, который вызывает выполнение процессором:5. The non-volatile processor-readable medium of claim 1, wherein the second share value criterion is based on a predetermined ratio associated with the total distributed database share value, wherein the code further comprises code that causes the processor to execute: связывания номера раунда третьего события в виде принятого номера раунда для четвертого события на основе удовлетворения четвертому критерию величины доли третьим набором событий.linking the round number of the third event as the received round number for the fourth event based on the satisfaction of the fourth share value criterion by the third set of events. 6. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:6. Non-volatile processor-readable media according to claim 1, characterized in that it additionally contains code that causes the processor to execute: определения значения для третьего события на основе значения для каждого события из четвертого набора событий,determining a value for a third event based on a value for each event from the fourth set of events, при этом значение для третьего события является значением, связанным с большинством событий из четвертого набора событий на основе удовлетворения третьему критерию величины доли четвертым набором событий,wherein the value for the third event is the value associated with the majority of the events from the fourth set of events based on the satisfaction of the third share size criterion by the fourth set of events, при этом третьему критерию величины доли удовлетворяет четвертый набор событий, когда общая величина долей каждого события из четвертого набора событий имеет значение, связанное с большинством событий, превышающее первое пороговое значение и не превышающее второе пороговое значение, при этом первое пороговое значение и второе пороговое значение основаны на общей величине долей четвертого набора событий.wherein the fourth set of events satisfies the third criterion of the share value, when the total value of the shares of each event from the fourth set of events has a value associated with the majority of events that exceeds the first threshold value and does not exceed the second threshold value, while the first threshold value and the second threshold value are based on the total value of the shares of the fourth set of events. 7. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:7. The non-volatile processor-readable medium of claim 1, further comprising code that causes the processor to execute: определения значения для третьего события на основе значения для каждого события из четвертого набора событий,determining a value for a third event based on a value for each event from the fourth set of events, при этом значение для третьего события является псевдослучайным, основанным на удовлетворении четвертому критерию величины доли четвертым набором событий,wherein the value for the third event is pseudo-random, based on the satisfaction of the fourth criterion of the share value by the fourth set of events, при этом четвертому критерию величины доли удовлетворяет четвертый набор событий, когда общая величина долей каждого события из четвертого набора событий имеет значение, связанное с большинством событий из четвертого набора событий, превышающее первое пороговое значение и не превышающее второе пороговое значение, при этом первое пороговое значение и второе пороговое значение основаны на общей величине долей, связанной с четвертым набором событий.the fourth set of events satisfies the fourth criterion for the size of the share, when the total value of the shares of each event from the fourth set of events has a value associated with the majority of the events from the fourth set of events that exceeds the first threshold value and does not exceed the second threshold value, while the first threshold value and the second threshold is based on the total stakes associated with the fourth set of events. 8. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что четвертый набор событий представляет собой поднабор событий из пятого набора событий, при этом код дополнительно содержит код, который вызывает выполнение процессором:8. The non-volatile processor-readable medium of claim. 1, wherein the fourth set of events is a subset of events from the fifth set of events, wherein the code further comprises code that causes the processor to execute: идентификации поднабора событий на основе равенства значения, связанного с каждым событием из поднабора событий, значению, связанному с оставшимися событиями из поднабора событий, при этом значение, связанное с каждым событием из поднабора событий, является (1) связанным с четвертым событием и (2) основанным на значении для каждого события из шестого набора событий, которое такое событие из поднабора событий может идентифицировать,identifying a subset of events based on the equality of the value associated with each event in the event subset with the value associated with the remaining events in the event subset, wherein the value associated with each event in the event subset is (1) associated with the fourth event, and (2) based on the value for each event in the sixth event set that such an event in the event subset can identify, при этом номер раунда пятого набора событий превышает номер раунда шестого набора событий,wherein the round number of the fifth set of events exceeds the number of the round of the sixth set of events, при этом пятому критерию величины доли удовлетворяет поднабор событий, когда общая величина долей поднабора событий превышает первое пороговое значение и не превышает второе пороговое значение, при этом первое пороговое значение и второе пороговое значение основаны на общей величине долей пятого набора событий; иwherein the fifth proportion criterion is satisfied by the event subset when the total proportion of the event subset exceeds the first threshold and does not exceed the second threshold, the first threshold and the second threshold being based on the total proportion of the fifth event set; and идентификации, на основе удовлетворения пятому критерию величины доли поднабором событий, седьмого набора событий, общая величина долей которого применяется для определения порядкового значения для четвертого события, при этом седьмой набор событий имеет номер раунда больший, чем номер раунда пятого набора событий, при этом значение для каждого события из седьмого набора событий основано на значении, связанном с каждым событием из пятого набора событий.identification, based on the satisfaction of the fifth criterion of the proportion of a subset of events, the seventh set of events, the total value of the shares of which is used to determine the ordinal value for the fourth event, while the seventh set of events has a round number greater than the round number of the fifth set of events, while the value for of each event in the seventh event set is based on the value associated with each event in the fifth event set. 9. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что каждое событие из третьего набора событий (1) определено разным экземпляром распределенной базы данных и (2) идентифицировано третьим событием,9. Non-volatile processor-readable media according to claim 1, characterized in that each event from the third set of events (1) is determined by a different distributed database instance and (2) is identified by a third event, при этом порядковое значение для четвертого события дополнительно основано на псевдослучайном определении, связанном с цифровой подписью третьего события.wherein the ordinal value for the fourth event is further based on the pseudo-random determination associated with the digital signature of the third event. 10. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что четвертый критерий величины доли основан по меньшей мере частично на сумме набора величин долей, связанных с криптовалютой, при10. The non-volatile processor-readable medium of claim 1, wherein the fourth stake size criterion is based at least in part on the sum of a set of stake values associated with a cryptocurrency, with этом каждая величина доли из набора величин долей, связанных с количеством криптовалюты, хранится разным экземпляром распределенной базы данных.In this case, each share value from the set of share values associated with the amount of cryptocurrency is stored by a different instance of the distributed database. 11. Энергонезависимый считываемый процессором носитель по п. 1, отличающийся тем, что четвертый критерий величины доли удовлетворяется, когда общая величина долей, связанная с третьим набором событий, превышает предварительно определенное пороговое значение, при этом предварительно определенное пороговое значение основано по меньшей мере частично на общей величине долей распределенной базы данных.11. The non-volatile processor-readable medium of claim 1, wherein the fourth share value criterion is met when the total share value associated with the third set of events exceeds a predetermined threshold, wherein the predetermined threshold is based at least in part on the total share of the distributed database. 12. Устройство для реализации распределенной базы данных, содержащее:12. A device for implementing a distributed database, comprising: память, содержащую экземпляр распределенной базы данных на первом вычислительном устройстве, выполненном с возможностью включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств; иa memory containing an instance of the distributed database on a first computing device capable of being included in a plurality of computing devices that implements the distributed database via a network operatively connected to the plurality of computing devices; and процессор, функционально соединенный с экземпляром распределенной базы данных,a processor operatively connected to a distributed database instance, при этом процессор выполнен с возможностью определения в первый момент времени первого события, привязанного к первому множеству событий, при этом каждое событие из первого множества событий представляет собой последовательность байтов,wherein the processor is configured to determine at the first moment of time the first event associated with the first set of events, wherein each event from the first set of events is a sequence of bytes, при этом процессор выполнен с возможностью приема во второй момент времени после первого момента времени и со второго вычислительного устройства из множества вычислительных устройств, сигнала, представляющего второе событие, (1) определенное вторым вычислительным устройством и (2) привязанное ко второму множеству событий, при этом каждое событие из второго множества событий представляет собой последовательность байтов,wherein the processor is configured to receive, at a second time point after the first time point and from the second computing device of the plurality 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, wherein each event from the second set of events is a sequence of bytes, при этом процессор выполнен с возможностью идентификации порядка, связанного с третьим множеством событий, на основе по меньшей мере величины доли, связанной с каждым вычислительным устройством из множества вычислительных устройств, при этом каждое событие из третьего множества событий представляет собой событие из по меньшей мере одного из первого множества событий или второго множества событий,wherein the processor is configured to identify the order associated with the third set of events based on at least the value of the share associated with each computing device from the plurality of computing devices, wherein 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, при этом каждое событие из третьего множества событий связано со значением для каждого атрибута из набора атрибутов,wherein each event from the third set of events is associated with a value for each attribute from the set of attributes, при этом значение для первого атрибута из набора атрибутов для каждого события из третьего множества событий содержит первое значение, основанное на том, удовлетворяет ли критерию взаимосвязь между таким событием и первым набором событий, привязанных к этому событию,wherein the value for the first attribute from the set of attributes for each event from the third set of events contains the first value based on whether the relationship between such an event and the first set of events associated with this event satisfies the criterion, при этом каждое событие из первого набора событий (1) является предком такого события из третьего множества событий и (2) связано с тем же первым общим атрибутом, что и остальные события из первого набора событий, при этом первый общий атрибут является индикатором начального экземпляра, в котором событие, определенное каждым вычислительным устройством из множества вычислительных устройств, связано с конкретным значением,wherein each event from the first set of events (1) is an ancestor of such an event from the third set of events and (2) is associated with the same first common attribute as the rest of the events from the first set of events, while the first common attribute is an indicator of the initial instance, in which the event defined by each computing device from a plurality of computing devices is associated with a specific value, при этом значение для второго атрибута из набора атрибутов содержит числовое значение на основе взаимосвязи между таким событием из третьего множества событий и вторым набором событий, привязанным к такому событию из третьего множества событий,wherein the value for the second attribute from the set of attributes contains a numeric value based on the relationship between such an event from the third set of events and the second set of events associated with such an event from the third set of events, при этом каждое событие из второго набора событий является потомком такого события из третьего множества событий и связано со вторым общим атрибутом, как и остальные события из второго набора событий,wherein each event from the second set of events is a descendant of such an event from the third set of events and is associated with the second common attribute, like the rest of the events from the second set of events, при этом процессор выполнен с возможностью сохранения в экземпляре распределенной базы данных порядка, связанного с третьим множеством событий.wherein the processor is configured to store in the distributed database instance the order associated with the third set of events. 13. Устройство по п. 12, отличающееся тем, что величина доли, связанная с каждым вычислительным устройством из множества вычислительных устройств, пропорциональна количеству криптовалюты, связанной с экземпляром распределенной базы данных на таком вычислительном устройстве из множества вычислительных устройств.13. The device according to claim 12, characterized in that the value of the share associated with each computing device from a plurality of computing devices is proportional to the amount of cryptocurrency associated with a distributed database instance on such a computing device from a plurality of computing devices. 14. Устройство по п. 12, отличающееся тем, что:14. The device according to claim 12, characterized in that: критерий основан на сравнении (1) комбинации величин долей, связанных с первым набором событий, и (2) порогового значения, определенного на основе величины доли, связанной с каждым вычислительным устройством из множества вычислительных устройств.the criterion is based on comparing (1) a combination of proportion values associated with the first set of events and (2) a threshold value determined based on the proportion value associated with each computing device of the plurality of computing devices. 15. Устройство для реализации распределенной базы данных, содержащее:15. A device for implementing a distributed database, comprising: память, связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, выполненном с возможностью включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств, иa memory associated with a distributed database instance on a first computing device configured to be included in a plurality of computing devices that implements the distributed database via a network operatively connected to the plurality of computing devices, and процессор, функционально соединенный с памятью,processor operatively coupled to memory при этом процессор выполнен с возможностью идентификации в первый момент времени первого события распределенной базы данных, (1) определенного первым вычислительным устройством и (2) привязанного к первому множеству событий распределенной базы данных,wherein the processor is configured to identify at the first time the first event of the distributed database, (1) determined by the first computing device and (2) associated with the first set of events of the distributed database, при этом процессор выполнен с возможностью приема во второй момент времени после первого момента времени сигнала, представляющего второе событие распределенной базы данных, (1) определенное вторым вычислительным устройством из множества вычислительных устройств и (2) привязанное ко второму множеству событий распределенной базы данных,wherein the processor is configured to receive, at a second time point after the first time point, a signal representing a second distributed database event (1) determined by a second computing device of the plurality of computing devices and (2) associated with a second set of distributed database events, при этом процессор выполнен с возможностью идентификации порядка событий распределенной базы данных внутри третьего множества событий распределенной базы данных по меньшей мере частично на основе значения первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных, при этом значение первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных основано на взаимосвязи между таким событием распределенной базы данных и набором событий распределенной базы данных, содержащих потомков такого события распределенной базы данных, при этом каждое событие распределенной базы данных из набора событий распределенной базы данных связано со вторым атрибутом, общим для оставшихся событий распределенной базы данных из набора событий распределенной базы данных, при этом каждое событие распределенной базы данных из третьего множества событий распределенной базы данных взято из по меньшей мере одного из первого множества событий распределенной базы данных или второго множества событий распределенной базы данных, при этом третье множество событий распределенной базы данных является взаимоисключающим с набором событий распределенной базы данных,wherein the processor is configured to identify the order of distributed database events within the third distributed database event set based at least in part on a first attribute value for each distributed database event of the third distributed database event set, wherein the first attribute value for each event distributed database event from the third set of distributed database events is based on the relationship between such a distributed database event and a set of distributed database events containing descendants of such a distributed database event, with each distributed database event from the set of distributed database events associated with the second an attribute common to the remaining distributed database events from the distributed database event set, wherein each distributed database event from the third distributed database event set is taken from at least at least one of the first distributed database event set or the second distributed database event set, wherein the third distributed database event set is mutually exclusive with the distributed database event set, при этом процессор выполнен с возможностью сохранения в памяти порядка, связанного с третьим множеством событий распределенной базы данных.wherein the processor is configured to store in memory the order associated with the third set of events of the distributed database. 16. Устройство по п. 15, отличающееся тем, что значение первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных основано на количестве потомков такого события, содержащихся в наборе событий распределенной базы данных, в сравнении с количеством не-потомков такого события, содержащихся в наборе событий распределенной базы данных.16. The apparatus of claim. 15, characterized in that the value of the first attribute for each distributed database event from the third set of distributed database events is based on the number of descendants of such an event contained in the distributed database event set, compared to the number of non-descendants such an event contained in the distributed database event set. 17. Устройство по п. 15, отличающееся тем, что каждое событие распределенной базы данных из набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств.17. The apparatus of claim. 15, characterized in that each distributed database event from a set of distributed database events is determined by a unique computing device from a plurality of computing devices. 18. Устройство по п. 15, отличающееся тем, что каждое событие распределенной базы данных из набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств,18. The device according to claim 15, characterized in that each distributed database event from a set of distributed database events is determined by a unique computing device from a plurality of computing devices, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из набора событий распределенной базы данных на основе того, что каждое событие распределенной базы данных из набора событий распределенной базы данных представляет собой начальный экземпляр вычислительного устройства из множества вычислительных устройств, которое определило, что событие распределенной базы данных определило событие распределенной базы данных, имеющее конкретное значение для третьего атрибута, при этом каждое событие распределенной базы данных из набора событий распределенной базы данных имеет конкретное значение для третьего атрибута.wherein the processor is configured to identify each distributed database event from the set of distributed database events based on the fact that each distributed database event from the set of distributed database events represents an initial instance of the computing device from the plurality of computing devices that determined that the event distributed database event has defined a distributed database event having a specific value for the third attribute, wherein each distributed database event in the set of distributed database events has a specific value for the third attribute. 19. Устройство по п. 15, отличающееся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом каждое событие распределенной базы данных из первого набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств,19. The device according to claim 15, characterized in that the set of distributed database events is the first set of distributed database events, wherein each distributed database event from the first set of distributed database events is determined by a unique computing device from a plurality of computing devices, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из первого набора событий распределенной базы данных на основе (1) того, что каждое событие распределенной базы данных из первого набора событий распределенной базы данных представляет собой начальный экземпляр вычислительного устройства из множества вычислительных устройств, которое определило, что событие распределенной базы данных определило событие распределенной базы данных,wherein the processor is configured to identify each distributed database event from the first set of distributed database events based on (1) that each distributed database event from the first set of distributed database events represents an initial instance of a computing device from a plurality of computing devices, which determined that a distributed database event determined a distributed database event, имеющее конкретное значение для третьего атрибута, и (2) исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных, при этом первый набор событий распределенной базы данных представляет собой поднабор третьего набора событий распределенной базы данных, при этом каждое событие распределенной базы данных из первого набора событий распределенной базы данных имеет конкретное значение для третьего атрибута.having a specific value for the third attribute, and (2) an agreement protocol outcome in which the second set of distributed database events indicates that such a distributed database event from the first set of distributed database events should be within the third set of distributed database events, when wherein the first distributed database event set is a subset of the third distributed database event set, wherein each distributed database event of the first distributed database event set has a specific value for the third attribute. 20. Устройство по п. 15, отличающееся тем, что каждое событие распределенной базы данных из первого множества событий распределенной базы данных и каждое событие распределенной базы данных из второго множества событий распределенной базы данных представляет собой последовательность байтов.20. The apparatus of claim 15, wherein each distributed database event of the first distributed database event set and each distributed database event of the second distributed database event set is a sequence of bytes. 21. Устройство по п. 15, отличающееся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из первого набора событий распределенной базы данных на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных, при этом второй набор событий распределенной базы данных удовлетворяет предварительно определенному критерию, при этом первый набор событий распределенной базы данных представляет собой поднабор третьего набора событий распределенной базы данных.21. The apparatus of claim. 15, characterized in that the distributed database event set is a first distributed database event set, wherein the processor is configured to identify each distributed database event from the first distributed database event set based on the outcome of the agreement protocol , in which the second distributed database event set indicates that such a distributed database event from the first distributed database event set should be within the third distributed database event set, and the second distributed database event set satisfies a predefined criterion, while the first set of distributed database events is a subset of the third set of distributed database events. 22. Устройство по п. 15, отличающееся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из первого набора событий распределенной базы данных на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных, при этом первый набор событий распределенной базы данных представляет собой поднабор третьего набора событий распределенной базы данных,22. The apparatus of claim. 15, characterized in that the distributed database event set is a first distributed database event set, wherein the processor is configured to identify each distributed database event from the first distributed database event set based on the outcome of the agreement protocol , in which the second distributed database event set indicates that such a distributed database event from the first distributed database event set should be within the third distributed database event set, wherein the first distributed database event set is a subset of the third distributed database event set Database, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из второго набора событий распределенной базы данных на основе (1) того, что событие распределенной базы данных из второго набора событий распределенной базы данных является потомком четвертого набора событий распределенной базы данных и (2) количества событий распределенной базы данных в четвертом наборе событий распределенной базы данных, удовлетворяющих критерию.wherein the processor is configured to identify each distributed database event from the second distributed database event set based on (1) that the distributed database event from the second distributed database event set is a descendant of the fourth distributed database event set, and (2) the number of distributed database events in the fourth set of distributed database events that meet the criterion. 23. Устройство по п. 15, отличающееся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из первого набора событий распределенной базы данных на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных, при этом первый набор событий распределенной базы данных представляет собой поднабор третьего набора событий распределенной базы данных,23. The apparatus of claim. 15, characterized in that the distributed database event set is a first distributed database event set, wherein the processor is configured to identify each distributed database event from the first distributed database event set based on the outcome of the agreement protocol , in which the second distributed database event set indicates that such a distributed database event from the first distributed database event set should be within the third distributed database event set, wherein the first distributed database event set is a subset of the third distributed database event set Database, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из второго набора событий распределенной базы данных на основе (1) того, что событие распределенной базы данных из второго набора событий распределенной базы данных является потомком четвертого набора событий распределенной базы данных и (2) количества событий распределенной базы данных в четвертом наборе событий распределенной базы данных, удовлетворяющих первому критерию,wherein the processor is configured to identify each distributed database event from the second distributed database event set based on (1) that the distributed database event from the second distributed database event set is a descendant of the fourth distributed database event set, and (2) the number of distributed database events in the fourth set of distributed database events that satisfy the first criterion, при этом каждое событие распределенной базы данных из четвертого набора событий распределенной базы данных является предком пятого набора событий распределенной базы данных, при этом каждое событие распределенной базы данных из второго набора событий распределенной базы данных является потомком пятого набора событий распределенной базы данных,wherein each distributed database event from the fourth distributed database event set is an ancestor of the fifth distributed database event set, wherein each distributed database event from the second distributed database event set is a descendant of the fifth distributed database event set, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из четвертого набора событий распределенной базы данных на основе количества событий распределенной базы данных в пятом наборе событий распределенной базы данных, удовлетворяющих второму критерию.wherein the processor is configured to identify each distributed database event from the fourth set of distributed database events based on the number of distributed database events in the fifth set of distributed database events that meet the second criterion. 24. Устройство по п. 15, отличающееся тем, что процессор выполнен с возможностью идентификации порядка, связанного с третьим множеством событий распределенной базы данных по меньшей мере частично на основе значения первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных и метки времени, связанной с каждым событием распределенной базы данных из третьего множества событий распределенной базы данных.24. The apparatus of claim 15, wherein the processor is configured to identify an order associated with the third distributed database event set based at least in part on a first attribute value for each distributed database event of the third distributed database event set, and a timestamp associated with each distributed database event of the third distributed database event set. 25. Устройство по п. 15, отличающееся тем, что процессор выполнен с возможностью идентификации порядка, связанного с третьим множеством событий распределенной базы данных по меньшей мере частично на основе значения первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных и подписи каждого события распределенной базы данных из третьего множества событий распределенной базы данных.25. The apparatus of claim 15, wherein the processor is configured to identify an order associated with the third distributed database event set based at least in part on a first attribute value for each distributed database event of the third distributed database event set, and a signature for each distributed database event from the third distributed database event set. 26. Устройство по п. 15, отличающееся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных,26. The device according to claim. 15, characterized in that the set of events of the distributed database is the first set of events of the distributed database, при этом процессор выполнен с возможностью идентификации каждого события распределенной базы данных из первого набора событий распределенной базы данных на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных,wherein the processor is configured to identify each distributed database event from the first set of distributed database events based on the outcome of the agreement protocol, in which the second set of events of the distributed database indicates that such a distributed database event from the first set of distributed database events should be located within the third set of distributed database events, при этом каждое событие распределенной базы данных из второго набора событий распределенной базы данных указывает на то, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных на основе значения, (1) связанного с таким событием распределенной базы данных из первого набора событий распределенной базы данных и (2) идентифицированного набором предков такого события распределенной базы данных из второго набора событий распределенной базы данных.wherein each distributed database event from the second distributed database event set indicates that such distributed database event from the first distributed database event set should be within the third distributed database event set based on the value (1) associated with such a distributed database event from the first set of distributed database events and (2) identified by the set of ancestors of such a distributed database event from the second set of distributed database events. 27. Энергонезависимый считываемый процессором носитель, хранящий код, представляющий команды, предназначенные для исполнения процессором, при этом код содержит код, который вызывает выполнение процессором:27. A non-volatile processor-readable medium that stores code representing instructions to be executed by the processor, the code containing code that causes the processor to execute: приема сигнала, представляющего множество событий распределенной базы данных, содержащих транзакции, связанные с распределенной базой данных;receiving a signal representing a plurality of distributed database events containing transactions associated with the distributed database; вычисления для каждого события распределенной базы данных из множества событий распределенной базы данных, принятого раунда для такого события распределенной базы данных из множества событий распределенной базы данных на основе взаимосвязи между таким событием распределенной базы данных и набором событий распределенной базы данных, содержащих потомков такого события, при этом каждое событие распределенной базы данных из набора событий распределенной базы данных классифицировано как известное;calculation for each distributed database event from the set of distributed database events, the accepted round for such a distributed database event from the set of distributed database events based on the relationship between such a distributed database event and the set of distributed database events containing descendants of such an event, when whereby each distributed database event in the distributed database event set is classified as known; идентификации порядка, связанного с множеством событий распределенной базы данных, на основе принятого раунда, связанного с каждым событием распределенной базы данных из множества событий распределенной базы данных; иidentifying an order associated with the distributed database event set based on the received round associated with each distributed database event of the distributed database event set; and сохранения порядка в памяти, связанной с экземпляром распределенной базы данных на первом вычислительном устройстве, выполненном с возможностью включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств.maintaining order in memory associated with the distributed database instance on a first computing device capable of being included in a plurality of computing devices that implements the distributed database via a network operatively coupled to the plurality of computing devices. 28. Энергонезависимый считываемый процессором носитель по п. 27, отличающийся тем, что код, который вызывает выполнение процессором вычислений, содержит код, который вызывает выполнение процессором вычисления, для каждого события распределенной базы данных из множества событий распределенной базы данных, принятого раунда для такого события распределенной базы данных на основе количества потомков такого события, содержащихся в наборе событий распределенной базы данных, в сравнении с количеством не-потомков такого события, содержащихся в наборе событий распределенной базы данных.28. The non-volatile processor-readable medium of claim 27, wherein the code that causes the processor to perform a calculation comprises code that causes the processor to perform a calculation, for each distributed database event from a set of distributed database events, the accepted round for such an event distributed database based on the number of children of such an event contained in the distributed database event set compared to the number of non-children of such event contained in the distributed database event set. 29. Энергонезависимый считываемый процессором носитель по п. 27, отличающийся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом каждое событие распределенной базы данных из первого набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств,29. The non-volatile processor-readable medium of claim 27, wherein the set of distributed database events is the first set of distributed database events, wherein each distributed database event from the first set of distributed database events is determined by a unique computing device from a plurality of computing devices. devices, при этом код дополнительно содержит код, который вызывает выполнение процессором:while the code additionally contains code that causes the processor to execute: классификации каждого события распределенной базы данных из первого набора событий распределенной базы данных как известного, на основе (1) того, что каждое событие распределенной базы данных из первого набора событий распределенной базы данных представляет собой начальный экземпляр вычислительного устройства из множества вычислительных устройств, которое определило, что событие распределенной базы данных определило событие распределенной базы данных, имеющее конкретное значение для атрибута, и (2) исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных, при этом первый набор событий распределенной базы данных представляет собой поднабор третьего набора событий распределенной базы данных, при этом каждое событие распределенной базы данных из первого набора событий распределенной базы данных имеет конкретное значение для атрибута.classifying each distributed database event from the first set of distributed database events as known, based on (1) that each distributed database event from the first set of distributed database events represents an initial instance of a computing device from a set of computing devices that has determined, that a distributed database event identified a distributed database event having a particular value for the attribute, and (2) an agreement protocol outcome in which the second set of distributed database events indicates that such a distributed database event from the first set of distributed database events should be located within a third distributed database event set, wherein the first distributed database event set is a subset of the third distributed database event set, wherein each distributed database event from the first distributed database event set The database field has a specific value for the attribute. 30. Энергонезависимый считываемый процессором носитель по п. 27, отличающийся тем, что каждое событие распределенной базы данных из набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств.30. The non-volatile processor-readable medium of claim 27, wherein each distributed database event from a set of distributed database events is determined by a unique computing device of the plurality of computing devices. 31. Энергонезависимый считываемый процессором носитель по п. 27, отличающийся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом код дополнительно содержит код, который вызывает выполнение процессором:31. The non-volatile processor-readable medium of claim 27, wherein the distributed database event set is the first distributed database event set, wherein the code further comprises code that causes the processor to execute: классификации каждого события распределенной базы данных из первого набора событий распределенной базы данных как известного, на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных,classifying each distributed database event from the first distributed database event set as known, based on an agreement protocol outcome in which the second distributed database event set indicates that such a distributed database event from the first distributed database event set should be within the third a set of distributed database events, при этом каждое событие распределенной базы данных из второго набора событий распределенной базы данных указывает на то, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных на основе значения, (1) связанного с таким событием распределенной базы данных из первого набора событий распределенной базы данных и (2) идентифицированного набором предков такого события распределенной базы данных из второго набора событий распределенной базы данных.wherein each distributed database event from the second distributed database event set indicates that such distributed database event from the first distributed database event set should be within the third distributed database event set based on the value (1) associated with such a distributed database event from the first set of distributed database events and (2) identified by the set of ancestors of such a distributed database event from the second set of distributed database events. 32. Энергонезависимый считываемый процессором носитель по п. 27, отличающийся тем, что код, который вызывает выполнение процессором идентификации порядка, содержит код, который вызывает выполнение процессором идентификации порядка, связанного с множеством событий распределенной базы данных по меньшей мере частично на основе принятого раунда, связанного с каждым событием распределенной базы данных из множества событий распределенной базы данных и по меньшей мере одного из метки времени или подписи каждого события распределенной базы данных из множества событий распределенной базы данных.32. The non-volatile processor-readable medium of claim 27, wherein the code that causes the processor to execute an order identification comprises code that causes the processor to execute an order identification associated with a set of distributed database events at least in part based on the received round, associated with each distributed database event of the set of distributed database events and at least one of the timestamp or signature of each distributed database event of the set of distributed database events. 33. Способ реализации распределенной базы данных, включающий:33. A method for implementing a distributed database, including: идентификацию в первый момент времени первого события распределенной базы данных, (1) определенного первым вычислительным устройством, выполненным с возможностью включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств, и (2) привязанного к первому множеству событий распределенной базы данных;identifying at a first time a first distributed database event (1) determined by a first computing device capable of being included in a plurality of computing devices that implements the distributed database via a network operably connected to the plurality of computing devices, and (2) associated with the first a plurality of distributed database events; прием во второй момент времени после первого момента времени сигнала, представляющего второе событие распределенной базы данных, (1) определенное вторым вычислительным устройством из множества вычислительных устройств и (2) привязанное ко второму множеству событий распределенной базы данных;receiving, at a second time after the first time, a signal representing a second distributed database event (1) determined by a second computing device of the plurality of computing devices and (2) associated with a second plurality of distributed database events; вычисление, с применением процессора, связанного с экземпляром распределенной базы данных, порядка, связанного с третьим множеством событий распределенной базы данных, по меньшей мере частично на основе значения первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных, при этом значение первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных основано на взаимосвязи между таким событием распределенной базы данных и набором событий распределенной базы данных, содержащих потомков такого события распределенной базы данных, при этом каждое событие распределенной базы данных из набора событий распределенной базы данных связано со вторым атрибутом, общим для оставшихся событий распределенной базы данных из набора событий распределенной базы данных, при этом каждое событие распределенной базы данных из третьего множества событий распределенной базы данных взято из по меньшей мере одного из первого множества событий распределенной базы данных или второго множества событий распределенной базы данных; иcalculating, using a processor associated with the distributed database instance, the order associated with the third distributed database event set based at least in part on the value of the first attribute for each distributed database event of the third distributed database event set, wherein the value of the first attribute for each distributed database event from the third set of distributed database events is based on the relationship between such a distributed database event and a set of distributed database events containing descendants of such a distributed database event, with each distributed database event from the distributed database event set database is associated with a second attribute common to the remaining distributed database events from the distributed database event set, where each distributed database event from the third distributed database event set is taken from at least one of the first distributed database event set or the second distributed database event set; and сохранение в памяти, связанной с экземпляром распределенной базы данных, порядка, связанного с третьим множеством событий распределенной базы данных.storing in memory associated with the distributed database instance an order associated with the third distributed database event set. 34. Способ по п. 33, отличающийся тем, что каждое событие распределенной базы данных из набора событий распределенной базы данных определено уникальным вычислительным устройством из множества вычислительных устройств, при этом способ дополнительно включает:34. The method of claim 33, wherein each distributed database event from the set of distributed database events is determined by a unique computing device from the plurality of computing devices, wherein the method further comprises: идентификацию каждого события распределенной базы данных из набора событий распределенной базы данных на основе того, что каждое событие распределенной базы данных из набора событий распределенной базы данных представляет собой первый экземпляр вычислительного устройства из множества вычислительных устройств, которое определило, что событие распределенной базы данных определило событие распределенной базы данных, имеющее конкретное значение для третьего атрибута, при этом каждое событие распределенной базы данных из набора событий распределенной базы данных имеет конкретное значение для третьего атрибута.identifying each distributed database event in the distributed database event set based on the fact that each distributed database event in the distributed database event set is the first computing device instance of the plurality of computing devices that determined that the distributed database event determined the distributed database event. a database that has a specific value for the third attribute, wherein each distributed database event in the set of distributed database events has a specific value for the third attribute. 35. Способ по п. 33, отличающийся тем, что набор событий распределенной базы данных представляет собой первый набор событий распределенной базы данных, при этом способ включает:35. The method of claim 33, wherein the distributed database event set is the first distributed database event set, the method comprising: идентификацию каждого события распределенной базы данных из первого набора событий распределенной базы данных, на основе исхода протокола соглашения, в котором второй набор событий распределенной базы данных указывает, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных,identifying each distributed database event from the first distributed database event set, based on the outcome of the agreement protocol, in which the second distributed database event set indicates that such a distributed database event from the first distributed database event set should be within the third event set distributed database, при этом каждое событие распределенной базы данных из второго набора событий распределенной базы данных указывает на то, что такое событие распределенной базы данных из первого набора событий распределенной базы данных должно находиться в рамках третьего набора событий распределенной базы данных на основе значения, (1) связанного с таким событием распределенной базы данных из первого набора событий распределенной базы данных и (2) идентифицированного набором предков такого события распределенной базы данных из второго набора событий распределенной базы данных.wherein each distributed database event from the second distributed database event set indicates that such distributed database event from the first distributed database event set should be within the third distributed database event set based on the value (1) associated with such a distributed database event from the first set of distributed database events and (2) identified by the set of ancestors of such a distributed database event from the second set of distributed database events. 36. Способ по п. 33, отличающийся тем, что дополнительно включает:36. The method according to p. 33, characterized in that it further includes: вычисление порядка, связанного с третьим множеством событий распределенной базы данных по меньшей мере частично на основе значения первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных и по меньшей мере одного из метки времени и подписи каждого события распределенной базы данных из третьего множества событий распределенной базы данных.calculating an order associated with a third distributed database event set based at least in part on the value of a first attribute for each distributed database event from the third distributed database event set and at least one of the timestamp and signature of each distributed database event from the third set of events of a distributed database. 37. Способ по п. 33, отличающийся тем, что значение первого атрибута для каждого события распределенной базы данных из третьего множества событий распределенной базы данных основано на количестве потомков такого события, содержащихся в наборе событий распределенной базы данных, в сравнении с количеством не-потомков такого события, содержащихся в наборе событий распределенной базы данных.37. The method of claim 33, wherein the value of the first attribute for each distributed database event from the third distributed database event set is based on the number of descendants of that event contained in the distributed database event set compared to the number of non-children. such an event contained in the distributed database event set. 38. Устройство для реализации распределенной базы данных, содержащее:38. A device for implementing a distributed database, containing: память, сохраняющую экземпляр распределенного направленного ациклического графа (DAG) на первом вычислительном устройстве, выполненном с возможностью быть включенным во множество вычислительных устройств, которое реализует распределенный DAG посредством сети, функционально соединенной с множеством вычислительных устройств, при этом первое вычислительное устройство выполнено с возможностью сохранения в памяти набора событий с применением экземпляра распределенного DAG; иa memory storing an instance of a distributed directed acyclic graph (DAG) on a first computing device configured to be included in a plurality of computing devices that implements a distributed DAG via a network operatively connected to the plurality of computing devices, wherein the first computing device is configured to be stored in event set memory using a distributed DAG instance; and процессор первого вычислительного устройства, функционально соединенный с памятью,the processor of the first computing device operatively connected to the memory, при этом процессор выполнен с возможностью определения в первый момент времени первого события, привязанного к первому набору событий,wherein the processor is configured to determine at the first moment of time the first event associated with the first set of events, при этом процессор выполнен с возможностью приема, во второй момент времени после первого момента времени и со второго вычислительного устройства из множества вычислительных устройств, второго события, (1) определенного вторым вычислительным устройством и (2) привязанного ко второму множеству событий,wherein the processor is configured to receive, at a second time point after the first time point and from the second computing device of the plurality of computing devices, the second event (1) determined by the second computing device and (2) associated with the second set of events, при этом процессор выполнен с возможностью определения третьего события, содержащего криптографический хеш первого события и криптографический хеш второго события, иwherein the processor is configured to determine a third event containing a cryptographic hash of the first event and a cryptographic hash of the second event, and при этом процессор выполнен с возможностью идентификации посредством алгоритма консенсуса порядка каждого события из третьего множества событий относительно оставшихся событий из третьего множества событий на основе по меньшей мере первого множества событий и второго множества событий, при этом каждое событие из третьего множества событий представляет собой событие из по меньшей мере одного из первого множества событий или второго множества событий,wherein the processor is configured to identify, by means of a consensus algorithm, the order of each event from the third set of events with respect to the remaining events from the third set of events based on at least the first set of events and the second set of events, wherein 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, при этом процессор выполнен с возможностью сохранения в памяти и с применением экземпляра распределенного DAG, третьего события в виде части набора событий и порядка, связанного с третьим множеством событий.wherein the processor is configured to store in memory and using the distributed DAG instance, the third event as part of the event set, and the order associated with the third event set. 39. Устройство по п. 38, отличающееся тем, что алгоритм консенсуса не требует протокола доказательства выполнения работы.39. The apparatus of claim 38, wherein the consensus algorithm does not require a proof-of-work protocol. 40. Устройство по п. 38, отличающееся тем, что распределенный DAG не содержит субъекта-лидера.40. The device according to claim 38, characterized in that the distributed DAG does not contain a leader entity. 41. Устройство по п. 38, отличающееся тем, что процессор принимает второе событие от второго вычислительного устройства в виде части события синхронизации.41. The apparatus of claim 38, wherein the processor receives the second event from the second computing device as part of a synchronization event. 42. Устройство по п. 38, отличающееся тем, что каждое событие из третьего множества событий содержит данные полезной нагрузки, упорядоченные относительно данных полезной нагрузки для каждого оставшегося события из третьего множества событий на основе порядка, связанного с третьим множеством событий.42. The apparatus of claim 38, wherein each event of the third event set contains payload data ordered with respect to the payload data for each remaining event of the third event set based on the order associated with the third event set. 43. Устройство по п. 38, отличающееся тем, что третье событие имеет цифровую подпись первого вычислительного устройства.43. The device according to claim 38, characterized in that the third event is digitally signed by the first computing device. 44. Устройство по п. 38, отличающееся тем, что процессор дополнительно выполнен с возможностью посылки первого события на второе вычислительное устройство в ответ на прием второго события от второго вычислительного устройства, таким образом, что вычислительное устройство определяет четвертое событие, содержащее криптографический хеш первого события.44. The apparatus of claim 38, wherein the processor is further configured to send the first event to the second computing device in response to receiving the second event from the second computing device, such that the computing device determines a fourth event containing a cryptographic hash of the first event . 45. Устройство по п. 38, отличающееся тем, что порядок, связанный с третьим множеством событий, основан по меньшей мере частично на наборе значений, при этом каждое значение из набора значений, присвоенных событию из поднабора событий из третьего множества событий, основано на по меньшей мере одном из показателя доверия или надежности, связанной с таким событием из поднабора событий.45. The apparatus of claim 38, wherein the order associated with the third event set is based at least in part on a set of values, wherein each value from the set of values assigned to an event from a subset of events from the third event set is based on at least one of a measure of confidence or reliability associated with such an event from a subset of events. 46. Устройство по п. 38, отличающееся тем, что процессор выполнен с возможностью приема второго события в ответ на случайный выбор вторым вычислительным устройством первого вычислительного устройства из множества вычислительных устройств.46. The apparatus of claim 38, wherein the processor is configured to receive a second event in response to the second computing device randomly selecting a first computing device from among the plurality of computing devices. 47. Устройство по п. 38, отличающееся тем, что порядок, связанный с третьим множеством событий, основан по меньшей мере частично на наборе значений, при этом каждое значение из набора значений присвоено репутации, связанной с событием из поднабора событий.47. The apparatus of claim 38, wherein the order associated with the third set of events is based at least in part on a set of values, where each value in the set of values is assigned a reputation associated with an event in the subset of events. 48. Устройство по п. 38, отличающееся тем, что первое событие привязано к первому множеству событий посредством включения в первое событие идентификатора по меньшей мере двух событий из первого множества событий.48. The device according to claim 38, characterized in that the first event is associated with the first set of events by including in the first event an identifier of at least two events from the first set of events. 49. Устройство для реализации распределенной базы данных, содержащее:49. A device for implementing a distributed database, containing: первое вычислительное устройство, выполненное с возможностью быть включенным в множество вычислительных устройств, которое реализует распределенный DAG посредством сети, функционально соединенной с множеством вычислительных устройств, при этом первое вычислительное устройство содержит процессор и память, функционально соединенную с процессором, при этом в памяти сохранен (1) экземпляр распределенного DAG и (2) инструкции, которые вызывают выполнение процессором:a first computing device configured to be included in a plurality of computing devices that implements a distributed DAG via a network operably coupled to the plurality of computing devices, wherein the first computing device comprises a processor and a memory operatively coupled to the processor, wherein (1 ) an instance of the distributed DAG, and (2) instructions that cause the processor to execute: определения в первый момент времени первого события, привязанного к первому множеству событий с помощью идентификатора по меньшей мере одного события из первого множества событий, содержащегося в первом событии,determining at the first moment of time the first event associated with the first set of events using the identifier of at least one event from the first set of events contained in the first event, приема во второй момент времени после первого момента времени со второго вычислительного устройства из множества вычислительных устройств, второго события, (1) определенного вторым вычислительным устройством и (2) привязанного ко второму множеству событий с помощью идентификатора по меньшей мере одного события из второго множества событий, содержащегося во втором событии,receiving at a second point in time after the first point in time from a second computing device from a plurality of computing devices, a second event (1) determined by the second computing device and (2) linked to the second set of events using an identifier of at least one event from the second set of events, contained in the second event, определения третьего события, содержащего криптографический хеш первого события и криптографический хеш второго события,determining the third event containing the cryptographic hash of the first event and the cryptographic hash of the second event, идентификации с применением алгоритма консенсуса, порядка каждого события из третьего множества событий относительно оставшихся событий из третьего множества событий на основе по меньшей мере первого множества событий и второго множества событий, при этом каждое событие из третьего множества событий представляет собой событие из по меньшей мере одного из первого множества событий или второго множества событий, иidentifying, using a consensus algorithm, the order of each event from the third event set relative to the remaining events from the third event set based on at least the first event set and the second event set, wherein each event from the third event set is an event from at least one of a first set of events or a second set of events, and сохранения в памяти в виде части распределенного DAG третьего события и порядка, связанного с третьим множеством событий.storing in memory as part of the distributed DAG the third event and the order associated with the third set of events. 50. Устройство по п. 49, отличающееся тем, что алгоритм консенсуса не требует протокола доказательства выполнения работы.50. The apparatus of claim 49, wherein the consensus algorithm does not require a proof-of-work protocol. 51. Устройство по п. 49, отличающееся тем, что распределенный DAG не содержит субъекта-лидера.51. The device according to claim 49, characterized in that the distributed DAG does not contain a leader entity. 52. Устройство по п. 49, отличающееся тем, что прием второго события от второго вычислительного устройства является частью события синхронизации.52. The apparatus of claim 49, wherein the reception of the second event from the second computing device is part of the synchronization event. 53. Устройство по п. 49, отличающееся тем, что каждое событие из третьего множества событий содержит данные полезной нагрузки, упорядоченные относительно данных полезной нагрузки для каждого оставшегося события из третьего множества событий на основе порядка, связанного с третьим множеством событий.53. The apparatus of claim 49, wherein each event of the third event set contains payload data ordered with respect to the payload data for each remaining event of the third event set based on the order associated with the third event set. 54. Устройство по п. 49, отличающееся тем, что инструкции, которые вызывают выполнение процессором приема, содержат инструкции, которые вызывают выполнение процессором приема второго события в ответ на случайный выбор вторым вычислительным устройством первого вычислительного устройства.54. The apparatus of claim 49, wherein the instructions that cause the processor to execute a receive include instructions that cause the processor to execute a receive of a second event in response to the second computing device randomly selecting the first computing device. 55. Устройство по п. 49, отличающееся тем, что третье событие имеет цифровую подпись первого вычислительного устройства.55. The device according to claim 49, characterized in that the third event is digitally signed by the first computing device. 56. Устройство по п. 49, отличающееся тем, что в памяти дополнительно сохранены инструкции, которые вызывают выполнение процессором посылки первого события на второе вычислительное устройство в ответ на прием второго события от второго вычислительного устройства, таким образом, что вычислительное устройство определяет четвертое событие, содержащее криптографический хеш первого события.56. The device according to claim 49, characterized in that the memory additionally stores instructions that cause the processor to send the first event to the second computing device in response to receiving the second event from the second computing device, so that the computing device determines the fourth event, containing the cryptographic hash of the first event. 57. Устройство для реализации распределенной базы данных, содержащее:57. A device for implementing a distributed database, containing: память; иmemory; and процессор, функционально связанный с памятью, при этом процессор выполнен с возможностью приема первого события от первого вычислительного устройства, реализующего распределенную базу данных, при этом первое событие содержит (1) идентификатор первого события-предка и (2) идентификатор второго события-предка,a processor operably associated with the memory, wherein the processor is configured to receive a first event from a first computing device implementing a distributed database, wherein the first event contains (1) an identifier of the first ancestor event and (2) an identifier of the second ancestor event, при этом процессор выполнен с возможностью приема второго события от второго вычислительного устройства, реализующего распределенную базу данных, при этом второе событие содержит (1) идентификатор третьего события-предка и (2) идентификатор четвертого события-предка,wherein the processor is configured to receive the second event from the second computing device implementing the distributed database, wherein the second event contains (1) the identifier of the third ancestor event and (2) the identifier of the fourth ancestor event, при этом процессор выполнен с возможностью конструирования направленного ациклического графа (DAG) на основе первого события и второго события,wherein the processor is configured to construct a directed acyclic graph (DAG) based on the first event and the second event, при этом процессор выполнен с возможностью идентификации порядка консенсуса первого события и второго события на основе DAG.wherein the processor is configured to identify a consensus order of the first event and the second event based on the DAG. 58. Устройство по п. 57, отличающееся тем, что процессор выполнен с возможностью идентификации порядка консенсуса с применением DAG для идентификации того, как первое вычислительное устройство и второе вычислительное устройство проголосовали бы в протоколе консенсуса без приема процессором голосов от первого вычислительного устройства и второго вычислительного устройства.58. The apparatus of claim 57, wherein the processor is configured to identify a consensus order using a DAG to identify how the first computing device and the second computing device would vote on the consensus protocol without the processor receiving votes from the first computing device and the second computing device. devices. 59. Устройство по п. 57, отличающееся тем, что процессор выполнен с возможностью определения третьего события, содержащего (1) идентификатор второго события и (2) идентификатор пятого события-предка, при этом пятое событие-предок определено процессором.59. The apparatus of claim 57, wherein the processor is configured to determine a third event comprising (1) a second event identifier and (2) a fifth parent event identifier, wherein the fifth parent event is determined by the processor. 60. Устройство по п. 57, отличающееся тем, что процессор выполнен с возможностью приема первого события в первый момент времени, при этом процессор выполнен с возможностью приема второго события во второй момент времени после первого момента времени,60. The device according to claim 57, characterized in that the processor is configured to receive the first event at the first time, while the processor is configured to receive the second event at the second time after the first time, при этом процессор выполнен с возможностью определения третьего события, содержащего (1) идентификатор первого события и (2) идентификатор пятого события-предка, при этом пятое событие-предок определено процессором,wherein the processor is configured to determine the third event, containing (1) the identifier of the first event and (2) the identifier of the fifth ancestor event, while the fifth ancestor event is determined by the processor, при этом процессор выполнен с возможностью определения четвертого события, содержащего (1) идентификатор третьего события и (2) идентификатор второго события.wherein the processor is configured to determine a fourth event comprising (1) a third event identifier and (2) a second event identifier. 61. Устройство по п. 57, отличающееся тем, что идентификатор первого события-предка представляет собой криптографический хеш первого события-предка.61. The apparatus of claim 57, wherein the identifier of the first parent event is a cryptographic hash of the first parent event. 62. Устройство по п. 57, отличающееся тем, что процессор выполнен с возможностью идентификации порядка консенсуса первого события, второго события, первого события-предка, второго события-предка, третьего события-предка и четвертого события предка на основе DAG.62. The apparatus of claim 57, wherein the processor is configured to identify the consensus order of the first event, second event, first parent event, second parent event, third parent event, and fourth parent event based on the DAG. 63. Устройство по п. 57, отличающееся тем, что процессор выполнен с возможностью определения состояния распределенной базы данных на основе порядка консенсуса.63. The apparatus of claim 57, wherein the processor is configured to determine the state of the distributed database based on the consensus order. 64. Устройство по п. 57, отличающееся тем, что первое событие содержит первый набор транзакций и второе событие содержит второй набор транзакций, при этом порядок консенсуса определяет порядок первого набора транзакций относительно второго набора транзакций.64. The apparatus of claim. 57, wherein the first event contains a first set of transactions and the second event contains a second set of transactions, wherein the consensus order determines the order of the first set of transactions relative to the second set of transactions. 65. Энергонезависимый считываемый процессором носитель, хранящий код, представляющий команды, предназначенные для исполнения процессором, при этом код содержит код, который вызывает выполнение процессором:65. A non-volatile processor-readable medium that stores code representing instructions to be executed by the processor, the code containing code that causes the processor to execute: приема события от вычислительного устройства, реализующего распределенную базу данных, при этом событие содержит (1) идентификатор первого события-предка и (2) идентификатор второго события-предка;receiving an event from a computing device implementing a distributed database, the event comprising (1) a first parent event identifier and (2) a second parent event identifier; конструирования направленного ациклического графа (DAG) на основе события, первого события-предка и второго события-предка; иconstructing a directed acyclic graph (DAG) based on the event, the first parent event, and the second parent event; and идентификации на основе DAG порядка консенсуса множества событий, содержащих событие, первое событие-предок и второе событие-предок.identifying, based on the DAG, a consensus order of a plurality of events containing an event, a first parent event, and a second parent event. 66. Энергонезависимый считываемый процессором носитель по п. 65, отличающийся тем, что идентификатор первого события-предка представляет собой криптографический хеш первого события-предка.66. The non-volatile processor-readable medium of claim 65, wherein the first parent event identifier is a cryptographic hash of the first parent event. 67. Энергонезависимый считываемый процессором носитель по п. 65, отличающийся тем, что вычислительное устройство выбрано из множества вычислительных устройств, реализующих распределенную базу данных,67. A non-volatile processor-readable medium according to claim 65, characterized in that the computing device is selected from a plurality of computing devices that implement a distributed database, при этом код, который вызывает выполнение процессором идентификации, содержит код, который вызывает выполнение процессором идентификации порядка консенсуса с применением DAG для идентификации того, как множество вычислительных устройств проголосовало бы в протоколе консенсуса без приема процессором голосов из множества вычислительных устройств.wherein the code that causes the identification processor to execute the identification comprises code that causes the identification processor to execute a consensus order using the DAG to identify how the plurality of computing devices would vote in the consensus protocol without the processor receiving votes from the plurality of computing devices. 68. Энергонезависимый считываемый процессором носитель по п. 65, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:68. The non-volatile processor-readable medium of claim 65, further comprising code that causes the processor to execute: вычисления состояния распределенной базы данных на основе порядка консенсуса.calculating the state of a distributed database based on the consensus order. 69. Энергонезависимый считываемый процессором носитель по п. 65, отличающийся тем, что первое событие-предок содержит первый набор транзакций и второе событие-предок содержит второй набор транзакций, при этом код дополнительно содержит код, который вызывает выполнение процессором:69. The non-volatile processor-readable medium of claim 65, wherein the first parent event contains a first set of transactions and the second parent event contains a second set of transactions, the code further comprising code that causes the processor to execute: идентификации порядка первого набора транзакций относительно второго набора транзакций на основе порядка консенсуса.identifying the order of the first set of transactions relative to the second set of transactions based on the order of the consensus. 70. Энергонезависимый считываемый процессором носитель по п. 65, отличающийся тем, что событие представляет собой первое событие и вычислительное устройство представляет собой первое вычислительное устройство, при этом код дополнительно содержит код, который вызывает выполнение процессором:70. The non-volatile processor-readable medium of claim 65, wherein the event is the first event and the computing device is the first computing device, wherein the code further comprises code that causes the processor to execute: приема второго события от второго вычислительного устройства, реализующего распределенную базу данных, при этом второе событие содержит (1) идентификатор третьего события-предка и (2) идентификатор четвертого события-предка,receiving a second event from a second computing device implementing a distributed database, wherein the second event contains (1) the identifier of the third ancestor event and (2) the identifier of the fourth ancestor event, при этом код, который вызывает выполнение процессором конструирования, содержит код, который вызывает выполнение процессором конструирования DAG на основе первого события, второго события, первого события-предка, второго события-предка, третьего события-предка и четвертого события-предка.wherein the code that causes the processor to execute the construction comprises code that causes the processor to execute the construction of the DAG based on the first event, the second event, the first ancestor event, the second ancestor event, the third ancestor event, and the fourth ancestor event. 71. Способ реализации распределенной базы данных, включающий:71. A method for implementing a distributed database, including: прием на первом вычислительном устройстве, реализующем распределенную базу данных и от второго вычислительного устройства, реализующего распределенную базу данных, первого события, которое содержит (1) идентификатор второго события и (2) идентификатор третьего события, при этом третье событие определено третьим вычислительным устройством, реализующим распределенную базу данных;receiving on the first computing device that implements the distributed database and from the second computing device that implements the distributed database, the first event that contains (1) the identifier of the second event and (2) the identifier of the third event, while the third event is determined by the third computing device that implements distributed database; определение на первом вычислительном устройстве четвертого события, при этом четвертое событие содержит (1) идентификатор первого события и (2) идентификатор пятого события; иdetermining, on the first computing device, a fourth event, the fourth event comprising (1) a first event identifier and (2) a fifth event identifier; and вычисление порядка консенсуса первого события, второго события, третьего события, четвертого события и пятого события на основе идентификации, без приема голосов от второго вычислительного устройства и третьего вычислительного устройства, того, как второе вычислительное устройство и третье вычислительное устройство проголосовали бы в протоколе консенсуса.calculating a consensus order of the first event, second event, third event, fourth event, and fifth event based on identifying, without receiving votes from the second computing device and third computing device, how the second computing device and third computing device would vote in the consensus protocol. 72. Способ по п. 71, отличающийся тем, что дополнительно включает:72. The method according to p. 71, characterized in that it further includes: прием пятого события от четвертого вычислительного устройства, реализующего распределенную базу данных.receiving a fifth event from a fourth computing device implementing a distributed database. 73. Способ по п. 71, отличающийся тем, что идентификатор первого события представляет собой криптографический хеш первого события.73. The method of claim 71, wherein the first event identifier is a cryptographic hash of the first event. 74. Способ по п. 71, отличающийся тем, что дополнительно включает:74. The method according to p. 71, characterized in that it further includes: конструирование направленного ациклического графа (DAG) на основе первого события, второго события, третьего события, четвертого события и пятого события,constructing a directed acyclic graph (DAG) based on the first event, second event, third event, fourth event, and fifth event, вычисление порядка консенсуса на основе DAG.calculating the consensus order based on the DAG. 75. Способ по п. 71, отличающийся тем, что второе событие содержит первый набор транзакций и третье событие содержит второй набор транзакций, при этом способ дополнительно включает:75. The method of claim 71, wherein the second event comprises a first set of transactions and the third event comprises a second set of transactions, the method further comprising: идентификацию порядка первого набора транзакций относительно второго набора транзакций на основе порядка консенсуса.identifying the order of the first set of transactions relative to the second set of transactions based on the order of the consensus. 76. Способ по п. 71, отличающийся тем, что дополнительно включает:76. The method according to p. 71, characterized in that it further includes: определение состояния распределенной базы данных на основе порядка консенсуса.determining the state of a distributed database based on the consensus order. 77. Способ реализации распределенной базы данных, включающий:77. A method for implementing a distributed database, including: прием на первом вычислительном устройстве из множества вычислительных устройств данных, связанных с первой транзакцией, при этом каждое вычислительное устройство из множества вычислительных устройств имеет отдельный экземпляр распределенной базы данных, функционально взаимосвязанной посредством сети с множеством вычислительных устройств;receiving on a first computing device of the plurality of computing devices data associated with the first transaction, each computing device of the plurality of computing devices having a separate instance of a distributed database operably interconnected via a network of multiple computing devices; прием со второго вычислительного устройства из множества вычислительных устройств данных, связанных со второй транзакцией;receiving from a second computing device of a plurality of computing devices data associated with the second transaction; определение первого объекта-клона базы данных, связанного с состоянием, связанным с распределенной базой данных, при этом первый объект-клон базы данных содержит идентификатор и указатель на базу данных в памяти, хранящей начальное значение состояния;determining a first database clone object associated with a state associated with the distributed database, wherein the first database clone object contains an identifier and a pointer to a database in memory storing an initial value of the state; определение второго объекта-клона базы данных, связанного с состоянием, при этом второй объект-клон базы данных содержит второй идентификатор, отличающийся от первого идентификатора, и указатель на базу данных в памяти, хранящей начальное значение состояния;defining a second database clone object associated with the state, wherein the second database clone object contains a second identifier different from the first identifier and a pointer to a database in memory storing the initial value of the state; прием указания о порядке начальной транзакции на основе события, связанного с первой транзакцией, и события, связанного со второй транзакцией;receiving an indication of the order of the initial transaction based on an event associated with the first transaction and an event associated with the second transaction; определение в первый момент времени первого обновленного значения состояния на основе начального значения состояния и начального порядка транзакции;determining at a first time a first updated state value based on the initial state value and the initial order of the transaction; сохранение первого обновленного значения состояния в базе данных и в качестве связанного с первым объектом-клоном базы данных таким образом, что запрос на считывание состояния посредством первого объекта-клона базы данных и во второй момент времени после первого момента времени возвращает первое обновленное значение состояния;storing the first updated state value in the database and as associated with the first database clone object such that a request to read the state through the first database clone object and at a second time point after the first time point returns the first updated state value; прием после первого момента времени указания о порядке консенсуса транзакции на основе события, связанного с первой транзакцией, и события, связанного со второй транзакцией;receiving, after the first time, an indication of a transaction consensus order based on an event associated with the first transaction and an event associated with the second transaction; определение в третий момент времени после первого момента времени второго обновленного значения состояния на основе начального значения состояния и порядка консенсуса транзакции; иdetermining, at a third time after the first time, a second updated state value based on the initial state value and the transaction consensus order; and сохранение второго обновленного значения состояния в базе данных и в качестве связанного со вторым объектом-клоном базы данных таким образом, что запрос на считывание состояния посредством второго объекта-клона базы данных и в четвертый момент времени после третьего момента времени возвращает второе обновленное значение состояния.storing the second updated state value in the database and as associated with the second database clone object such that a request to read the state through the second database clone object and at a fourth time point after the third time point returns the second updated state value. 78. Способ по п. 77, отличающийся тем, что дополнительно включает:78. The method according to p. 77, characterized in that it further includes: извлечение первого обновленного значения состояния в ответ на запрос к первому объекту-клону базы данных в пятый момент времени после первого момента времени; иretrieving a first updated state value in response to a request to the first database clone object at a fifth time point after the first time point; and извлечение второго обновленного значения состояния в ответ на запрос ко второму объекту-клону базы данных в шестой момент времени после третьего момента времени.retrieving a second updated state value in response to a request to a second database clone object at a sixth time point after the third time point. 79. Способ по п. 77, отличающийся тем, что первое обновленное значение состояния и второе обновленное значение состояния связаны с состоянием первого вычислительного устройства, при этом состояние первого вычислительного устройства связано с по меньшей мере одним из количества криптовалюты, хранимой первым вычислительным устройством, указания на владельца предмета или состояния многопользовательской игры.79. The method of claim 77, wherein the first updated state value and the second updated state value are associated with the state of the first computing device, wherein the state of the first computing device is associated with at least one of the amount of cryptocurrency stored by the first computing device, indicating on the owner of the item or the state of the multiplayer game. 80. Способ по п. 77, отличающийся тем, что дополнительно включает:80. The method according to p. 77, characterized in that it further includes: возврат начального значения состояния в ответ на запрос считывания состояния, связанного с распределенной базой данных, посредством второго объекта-клона базы данных в пятый момент времени после первого момента времени и перед третьим моментом времени; иreturning an initial state value in response to a request to read the state associated with the distributed database by the second database clone object at the fifth time after the first time and before the third time; and возврат второго обновленного значения состояния в ответ на запрос считывания состояния, связанного с распределенной базой данных, посредством второго объекта-клона базы данных в шестой момент времени после третьего момента времени.returning a second updated state value in response to a request to read the state associated with the distributed database by the second database clone object at a sixth time point after the third time point. 81. Способ по п. 77, отличающийся тем, что дополнительно включает:81. The method according to p. 77, characterized in that it further includes: возврат начального значения состояния в ответ на запрос считывания состояния, связанного с распределенной базой данных, посредством первого объекта-клона базы данных в пятый момент времени перед первым моментом времени; иreturning an initial state value in response to a request to read the state associated with the distributed database by the first database clone object at the fifth time point before the first time point; and возврат первого обновленного значения состояния в ответ на запрос считывания состояния, связанного с распределенной базой данных, посредством первого объекта-клона базы данных в шестой момент времени после первого момента времени.returning a first updated state value in response to a request to read the state associated with the distributed database by the first database clone object at a sixth time point after the first time point. 82. Способ по п. 77, отличающийся тем, что событие, связанное с первой транзакцией, представляет собой первое событие, и событие, связанное со второй транзакцией, представляет собой второе событие,82. The method of claim 77, wherein the event associated with the first transaction is the first event and the event associated with the second transaction is the second event, при этом первое событие содержит идентификатор третьего события и идентификатор четвертого события,the first event contains the identifier of the third event and the identifier of the fourth event, при этом второе событие содержит идентификатор пятого события и идентификатор шестого события.wherein the second event contains a fifth event identifier and a sixth event identifier. 83. Устройство для реализации распределенной базы данных, содержащее:83. A device for implementing a distributed database, comprising: память, связанную с экземпляром распределенной базы данных на первом вычислительном устройстве, выполненном с возможностью включения во множество вычислительных устройств, которое реализует распределенную базу данных посредством сети, функционально соединенной с множеством вычислительных устройств, при этом память содержит начальное значение состояния, связанного с распределенной базой данных; иmemory associated with a distributed database instance on a first computing device capable of being included in a plurality of computing devices that implements a distributed database via a network operably connected to the plurality of computing devices, wherein the memory contains an initial state value associated with the distributed database ; and процессор, функционально соединенный с памятью,processor operatively coupled to memory при этом процессор выполнен с возможностью определения первого объекта-клона базы данных, связанного с состоянием, и второго объекта-клона базы данных, связанного с состоянием, при этом первый объект-клон базы данных содержит первый идентификатор и указатель на базу данных в памяти, хранящей начальное значение состояния, связанного с распределенной базой данных, при этом второй объект-клон базы данных содержит второй идентификатор, отличающийся от первого идентификатора, и указатель на базу данных в памяти, хранящей начальное значение состояния, связанного с распределенной базой данных,wherein the processor is configured to determine a first database clone object associated with the state and a second database clone object associated with the state, wherein the first database clone object contains a first identifier and a pointer to a database in memory storing the initial value of the state associated with the distributed database, while the second database clone object contains a second identifier different from the first identifier, and a pointer to the database in memory storing the initial value of the state associated with the distributed database, при этом процессор выполнен с возможностью обновления в первый момент времени значения состояния, связанного с первым объектом-клоном базы данных, посредством определения первой копии начального значения состояния, связанного с распределенной базой данных, как связанной с первым идентификатором, и обновления значения первой копии начального значения состояния, связанного с распределенной базой данных, на основе набора событий, связанных с распределенной базой данных, для определения первого обновленного значения состояния, связанного с распределенной базой данных,wherein the processor is configured to update at a first time the state value associated with the first database clone object by determining the first copy of the initial state value associated with the distributed database as associated with the first identifier, and updating the value of the first copy of the initial value the state associated with the distributed database, based on a set of events associated with the distributed database, to determine the first updated state value associated with the distributed database, при этом процессор выполнен с возможностью обновления во второй момент времени после первого момента времени значения состояния, связанного со вторым объектом-клоном базы данных, посредством определения второй копии начального значения состояния, связанного с распределенной базой данных, как связанной со вторым идентификатором, и обновления значения второй копии начального значения состояния, связанного с распределенной базой данных, на основе набора событий для определения второго обновленного значения состояния, связанного с распределенной базой данных.wherein the processor is configured to update, at a second time point after the first time point, a state value associated with the second database clone object by determining a second copy of the initial state value associated with the distributed database as associated with the second identifier and updating the value a second copy of the initial state value associated with the distributed database based on the set of events to determine a second updated state value associated with the distributed database. 84. Устройство по п. 83, отличающееся тем, что:84. The device according to claim 83, characterized in that: процессор выполнен с возможностью считывания из первой позиции в базе данных начального значения состояния в ответ на прием посредством первого объекта-клона базы данных и в момент времени, предшествующий первому моменту времени, запроса на считывание состояния, связанного с распределенной базой данных, иthe processor is configured to read, from a first position in the database, an initial state value in response to receiving, by means of the first database clone object and at a point in time preceding the first point in time, a request to read the state associated with the distributed database, and при этом процессор выполнен с возможностью считывания из второй позиции в базе данных первого обновленного значения состояния в ответ на прием посредством первого объекта-клона базы данных и в момент времени, следующий за первым моментом времени, запроса на считывание состояния, связанного с распределенной базой данных.wherein the processor is configured to read from the second position in the database the first updated state value in response to receiving by the first database clone object and at a time point following the first time point, a request to read the state associated with the distributed database. 85. Устройство по п. 83, отличающееся тем, что:85. The device according to claim 83, characterized in that: процессор выполнен с возможностью считывания из позиции в базе данных начального значения состояния в ответ на прием посредством первого объекта-клона базы данных и в третий момент времени, предшествующий первому моменту времени, запроса на считывание состояния, связанного с распределенной базой данных, иthe processor is configured to read, from a position in the database, an initial state value in response to receiving, by means of the first database clone object and at a third time point preceding the first time point, a request to read the state associated with the distributed database, and при этом процессор выполнен с возможностью считывания из позиции в базе данных начального значения состояния в ответ на прием посредством второго объекта-клона базы данных и в четвертый момент времени, предшествующий первому моменту времени, запроса на считывание состояния, связанного с распределенной базой данных.wherein the processor is configured to read, from a position in the database, an initial state value in response to receiving, by means of the second database clone object, and at a fourth time point preceding the first time point, a request to read the state associated with the distributed database. 86. Устройство по п. 83, отличающееся тем, что:86. The device according to claim 83, characterized in that: процессор выполнен с возможностью считывания из первой позиции в базе данных первого обновленного значения состояния в ответ на прием посредством первого объекта-клона базы данных и в третий момент времени, следующий за первым моментом времени и предшествующий второму моменту времени, запроса на считывание состояния, связанного с распределенной базой данных, иthe processor is configured to read from a first position in the database a first updated state value in response to receiving, by means of the first database clone object, and at a third time point following the first time point and preceding the second time point, a request to read the state associated with distributed database, and при этом процессор выполнен с возможностью считывания из второй позиции в базе данных начального значения состояния в ответ на прием посредством второго объекта-клона базы данных и в четвертый момент времени, следующий за первым моментом времени и предшествующий второму моменту времени, запроса на считывание состояния, связанного с распределенной базой данных.wherein the processor is configured to read from the second position in the database the initial value of the state in response to receiving by means of the second database clone object and at the fourth time point following the first time point and preceding the second time point, a request to read the state associated with a distributed database. 87. Устройство по п. 83, отличающееся тем, что:87. The device according to claim 83, characterized in that: процессор выполнен с возможностью считывания из первой позиции в базе данных начального значения состояния в ответ на прием посредством первого объекта-клона базы данных и в третий момент времени, предшествующий первому моменту времени, запроса на считывание состояния, связанного с распределенной базой данных,the processor is configured to read from the first position in the database the initial value of the state in response to receiving by the first database clone object and at the third time point preceding the first time point, a request to read the state associated with the distributed database, при этом процессор выполнен с возможностью считывания из первой позиции в базе данных начального значения состояния в ответ на прием посредством второго объекта-клона базы данных и в четвертый момент времени, предшествующий второму моменту времени, запроса на считывание состояния, связанного с распределенной базой данных,wherein the processor is configured to read from the first position in the database the initial value of the state in response to receiving by means of the second database clone object and at the fourth time point preceding the second time point, a request to read the state associated with the distributed database, при этом процессор выполнен с возможностью считывания из второй позиции в базе данных первого обновленного значения состояния в ответ на прием посредством первого объекта-клона базы данных и в пятый момент времени, следующий за первым моментом времени, запроса на считывание состояния, связанного с распределенной базой данных, иwherein the processor is configured to read from the second position in the database the first updated state value in response to receiving by the first database clone object and at the fifth time point following the first time point, a request to read the state associated with the distributed database , and при этом процессор выполнен с возможностью считывания из третьей позиции в базе данных второго обновленного значения состояния в ответ на прием посредством второго объекта-клона базы данных и в шестой момент времени, следующий за вторым моментом времени, запроса на считывание состояния, связанного с распределенной базой данных.wherein the processor is configured to read, from a third position in the database, a second updated state value in response to receiving by means of the second database clone object and, at a sixth time point following the second time point, a request to read the state associated with the distributed database . 88. Устройство по п. 83, отличающееся тем, что распределенная база данных отличается от базы данных в памяти, хранящей состояние, связанное с распределенной базой данных.88. The apparatus of claim 83, wherein the distributed database is different from an in-memory database that stores state associated with the distributed database. 89. Устройство по п. 83, отличающееся тем, что обновленное значение представляет собой текущее значение состояния, связанного с распределенной базой данных, в третий момент времени после второго момента времени.89. The apparatus of claim 83, wherein the updated value is the current value of the state associated with the distributed database at a third time after the second time. 90. Устройство по п. 83, отличающееся тем, что процессор выполнен с возможностью обновления значения состояния, связанного со вторым объектом-клоном базы данных, посредством обновления значения второй копии начального значения состояния, связанного с распределенной базой данных, на основе порядка консенсуса набора событий для определения второго обновленного значения состояния, связанного с распределенной базой данных.90. The apparatus of claim 83, wherein the processor is configured to update the state value associated with the second database clone object by updating the value of the second copy of the initial state value associated with the distributed database based on the event set consensus order to determine a second updated state value associated with the distributed database. 91. Устройство по п. 83, отличающееся тем, что:91. The device according to clause 83, characterized in that: начальное значение состояния сохранено в базе данных в памяти как связанное с третьим идентификатором, отличающимся от первого идентификатора и второго идентификатора,the initial state value is stored in the in-memory database as associated with a third identifier different from the first identifier and the second identifier, при этом первое обновленное значение состояния сохранено в базе данных в памяти как связанное с первым идентификатором, иwherein the first updated state value is stored in the in-memory database as associated with the first identifier, and при этом второе обновленное значение состояния сохранено в базе данных в памяти как связанное со вторым идентификатором.wherein the second updated state value is stored in the in-memory database as associated with the second identifier. 92. Устройство по п. 83, отличающееся тем, что:92. The device according to claim 83, characterized in that: в ответ на запрос к первому объекту-клону базы данных, процессор выполнен с возможностью считывания из позиции в базе данных, связанной с первым идентификатором, или позиции в базе данных, связанной с третьим идентификатором, связанным с начальным значением состояния,in response to a request to the first database clone object, the processor is configured to read from the position in the database associated with the first identifier, or the position in the database associated with the third identifier associated with the initial state value, при этом процессор выполнен с возможностью игнорирования позиции в базе данных, связанной со вторым идентификатором, в ответ на запрос к первому объекту-клону базы данных.wherein the processor is configured to ignore the position in the database associated with the second identifier in response to a request to the first database clone object. 93. Устройство по п. 83, отличающееся тем, что состояние, связанное с распределенной базой данных, связано с состоянием первого вычислительного устройства, при этом состояние первого вычислительного устройства связано с по меньшей мере одним из количества криптовалюты, хранимой первым вычислительным устройством, указания на владельца предмета или состояния многопользовательской игры.93. The device according to claim 83, characterized in that the state associated with the distributed database is associated with the state of the first computing device, while the state of the first computing device is associated with at least one of the amount of cryptocurrency stored by the first computing device, indicating the owner of the item or the state of the multiplayer game. 94. Устройство по п. 83, отличающееся тем, что каждое событие из набора событий содержит идентификатор по меньшей мере двух других событий.94. The device according to claim 83, characterized in that each event from the set of events contains an identifier of at least two other events. 95. Энергонезависимый считываемый процессором носитель, хранящий код, представляющий команды, предназначенные для исполнения процессором, при этом код содержит код, который вызывает выполнение процессором:95. A non-volatile processor-readable medium that stores code representing instructions to be executed by the processor, the code containing code that causes the processor to execute: определения первого объекта-клона базы данных, связанного с состоянием, связанным с распределенной базой данных, взаимосвязанной посредством сети, функционально соединенной с множеством вычислительных устройств, которое реализует распределенную базу данных, при этом первый объект-клон базы данных содержит первый идентификатор и указатель на базу данных в памяти, хранящей начальное значение состояния, связанного с распределенной базой данных;defining a first database clone object associated with a state associated with a distributed database interconnected via a network operably connected to a plurality of computing devices that implements a distributed database, wherein the first database clone object contains a first identifier and a pointer to the database data in memory storing an initial state value associated with the distributed database; определения второго объекта-клона базы данных, связанного с состоянием, при этом второй объект-клон базы данных содержит второй идентификатор, отличающийся от первого идентификатора, и указатель на базу данных в памяти, хранящей начальное значение состояния, связанного с распределенной базой данных;defining a second database clone object associated with the state, the second database clone object comprising a second identifier different from the first identifier and a pointer to a database in memory storing an initial value of the state associated with the distributed database; приема в первый момент времени указания на начальный порядок набора событий, связанных с распределенной базой данных;receiving at a first point in time an indication of the initial order of the set of events associated with the distributed database; обновления, в ответ на прием указания на начальный порядок набора событий, значения состояния, связанного с первым объектом-клоном базы данных, посредством определения первой копии начального значения состояния, связанного с распределенной базой данных, как связанной с первым идентификатором, и обновления значения первой копии начального значения состояния, связанного с распределенной базой данных, на основе набора событий для определения первого обновленного значения состояния, связанного с распределенной базой данных;updating, in response to receiving an indication of the initial order of the set of events, the state value associated with the first clone object of the database, by determining the first copy of the initial state value associated with the distributed database as associated with the first identifier, and updating the value of the first copy an initial state value associated with the distributed database, based on a set of events to determine the first updated state value associated with the distributed database; приема во второй момент времени после первого момента времени указания на порядок консенсуса набора событий, связанных с распределенной базой данных; иreceiving, at a second time point after the first time point, an indication of the consensus order of a set of events associated with the distributed database; and обновления, в ответ на прием указания на порядок консенсуса набора событий, значения состояния, связанного со вторым объектом-клоном базы данных, посредством определения копии начального значения состояния, связанного с распределенной базой данных, как связанной со вторым идентификатором, и обновления второй копии начального значения состояния, связанного с распределенной базой данных, на основе порядка консенсуса набора событий для определения второго обновленного значения состояния, связанного с распределенной базой данных, при этом второе обновленное значение представляет собой значение состояния, связанного с распределенной базой данных и соответствующего порядку консенсуса.updating, in response to receiving an indication of the event set consensus order, the state value associated with the second database clone object by identifying a copy of the initial value of the state associated with the distributed database as associated with the second identifier, and updating the second copy of the initial value the distributed database associated state based on the event set consensus order to determine a second updated distributed database associated state value, the second updated value being the distributed database associated state value corresponding to the consensus order. 96. Энергонезависимый считываемый процессором носитель по п. 95, отличающийся тем, что дополнительно содержит код, который вызывает выполнение процессором:96. The non-volatile processor-readable medium of claim 95, further comprising code that causes the processor to execute: считывания из первой позиции в базе данных начального значения состояния в ответ на прием посредством первого объекта-клона базы данных и в третий момент времени, предшествующий первому моменту времени, запроса на считывание состояния, связанного с распределенной базой данных;reading from a first position in the database an initial state value in response to receiving, by the first database clone object, and at a third time point preceding the first time point, a state read request associated with the distributed database; считывания из первой позиции в базе данных начального значения состояния в ответ на прием посредством второго объекта-клона базы данных и в четвертый момент времени, предшествующий второму моменту времени, запроса на считывание состояния, связанного с распределенной базой данных;reading from a first position in the database an initial state value in response to receiving, by the second database clone object, and at a fourth time point preceding the second time point, a state read request associated with the distributed database; считывания из второй позиции в базе данных первого обновленного значения состояния в ответ на прием посредством первого объекта-клона базы данных и в пятый момент времени, следующий за первым моментом времени, запроса на считывание состояния, связанного с распределенной базой данных; иreading from a second position in the database a first updated state value in response to receiving by the first database clone object, and at a fifth time point following the first time point, a request to read the state associated with the distributed database; and считывания из третьей позиции в базе данных второго обновленного значения состояния в ответ на прием посредством второго объекта-клона базы данных и в шестой момент времени, следующий за вторым моментом времени, запроса на считывание состояния, связанного с распределенной базой данных.reading from the third position in the database a second updated state value in response to receiving by the second database clone object, and at a sixth time point following the second time point, a request to read the state associated with the distributed database. 97. Энергонезависимый считываемый процессором носитель по п. 95, отличающийся тем, что:97. A non-volatile processor-readable medium according to claim 95, characterized in that: начальное значение состояния сохранено в базе данных в памяти как связанное с третьим идентификатором, отличающимся от первого идентификатора и второго идентификатора,the initial state value is stored in the in-memory database as associated with a third identifier different from the first identifier and the second identifier, при этом первое обновленное значение состояния сохранено в базе данных в памяти как связанное с первым идентификатором, иwherein the first updated state value is stored in the in-memory database as associated with the first identifier, and при этом второе обновленное значение состояния сохранено в базе данных в памяти как связанное со вторым идентификатором.wherein the second updated state value is stored in the in-memory database as associated with the second identifier. 98. Энергонезависимый считываемый процессором носитель по п. 95, отличающийся тем, что распределенная база данных отличается от базы данных в памяти, хранящей состояние, связанное с распределенной базой данных.98. The non-volatile processor-readable medium of claim 95, wherein the distributed database is different from an in-memory database storing state associated with the distributed database. 99. Энергонезависимый считываемый процессором носитель по п. 95, отличающийся тем, что каждое событие из набора событий содержит идентификатор по меньшей мере двух других событий.99. The non-volatile processor-readable medium of claim 95, wherein each event in the set of events contains an identifier for at least two other events.
RU2019132736A 2015-08-28 2016-08-26 Methods and device for a distributed database on the network RU2778013C2 (en)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US201562211411P 2015-08-28 2015-08-28
US62/211,411 2015-08-28
US14/988,873 US9390154B1 (en) 2015-08-28 2016-01-06 Methods and apparatus for a distributed database within a network
US14/988,873 2016-01-06
US15/153,011 2016-05-12
US15/153,011 US9529923B1 (en) 2015-08-28 2016-05-12 Methods and apparatus for a distributed database within a network
US201662344682P 2016-06-02 2016-06-02
US62/344,682 2016-06-02
US15/205,688 2016-07-08
US15/205,688 US10318505B2 (en) 2015-08-28 2016-07-08 Methods and apparatus for a distributed database within a network

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
RU2018110579A Division RU2709673C2 (en) 2015-08-28 2016-08-26 Methods and apparatus for distributing distributed database on network

Publications (3)

Publication Number Publication Date
RU2019132736A RU2019132736A (en) 2019-12-16
RU2019132736A3 RU2019132736A3 (en) 2022-03-29
RU2778013C2 true RU2778013C2 (en) 2022-08-12

Family

ID=

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5991414A (en) * 1997-09-12 1999-11-23 International Business Machines Corporation Method and apparatus for the secure distributed storage and retrieval of information
US20080120240A1 (en) * 1995-02-13 2008-05-22 Intertrust Tecnologies Corporation Trusted infrastructure support systems, methods and techniques for secure electronic commerce, electronic transactions, commerce process control and automation, distributed computing, and rights management
RU2398275C2 (en) * 2005-02-28 2010-08-27 Майкрософт Корпорейшн File system presented inside database
RU126161U1 (en) * 2012-04-19 2013-03-20 Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) SYSTEM OF DECENTRALIZED MANAGEMENT OF THE STRUCTURE OF THE DISTRIBUTED DATABASE

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080120240A1 (en) * 1995-02-13 2008-05-22 Intertrust Tecnologies Corporation Trusted infrastructure support systems, methods and techniques for secure electronic commerce, electronic transactions, commerce process control and automation, distributed computing, and rights management
US5991414A (en) * 1997-09-12 1999-11-23 International Business Machines Corporation Method and apparatus for the secure distributed storage and retrieval of information
RU2398275C2 (en) * 2005-02-28 2010-08-27 Майкрософт Корпорейшн File system presented inside database
RU126161U1 (en) * 2012-04-19 2013-03-20 Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) SYSTEM OF DECENTRALIZED MANAGEMENT OF THE STRUCTURE OF THE DISTRIBUTED DATABASE

Similar Documents

Publication Publication Date Title
AU2021200938B2 (en) Methods and apparatus for a distributed database within a network
US11232081B2 (en) Methods and apparatus for a distributed database within a network
US11734260B2 (en) Methods and apparatus for a distributed database within a network
US9646029B1 (en) Methods and apparatus for a distributed database within a network
US10318505B2 (en) Methods and apparatus for a distributed database within a network
WO2017040313A1 (en) Methods and apparatus for a distributed database within a network
RU2778013C2 (en) Methods and device for a distributed database on the network
RU2776826C2 (en) Methods and device for a distributed database that makes it possible to delete events