ВЫПОЛНЕНИЕ ИЗМЕНЕНИЯ ПЕРВИЧНОГО УЗЛА В РАСПРЕДЕЛЕННОЙ СИСТЕМЕ
PERFORMING MODIFICATION OF PRIMARY NODE IN DISTRIBUTED SYSTEM

Перекрестные ссылки на родственные заявки
[1] Эта заявка является продолжением PCT–заявки № PCT/CN2018/120873, поданной 13 декабря 2018 года, которая полностью включена в данный документ посредством ссылки.
Уровень техники
[2] Системы распределенных реестров (DLS), которые также могут упоминаться как консенсусные сети и/или сети цепочек блоков, позволяют участвующим объектам защищенно и неизменно сохранять данные. DLS обычно упоминаются как сети цепочек блоков без ссылки на конкретные случаи использования. Примеры сетей цепочек блоков могут включать в себя: публичные сети цепочек блоков, приватные сети цепочек блоков и консорциальные сети цепочек блоков. Публичная сеть цепочек блоков является публичной для всех объектов для использования DLS и участия в консенсусном процессе. Приватная сеть цепочек блоков предоставляется для конкретного объекта, который централизованно управляет разрешениями на считывание и запись. Консорциальная сеть цепочек блоков предоставляется для выбранной группы объектов, которые управляют консенсусным процессом, и включает в себя уровень управления доступом.
[3] Консенсусные механизмы представляют собой первичный компонент распределенных систем цепочек блоков. Консенсусный механизм представляет собой процесс в компьютерной науке, который используется для того, чтобы достигать соглашения по одному значению данных между распределенными процессами или системами. Консенсусные механизмы спроектированы с возможностью достигать надежности в сети, заключающей в себе несколько ненадежных узлов. Решение этой задачи (известной как проблема консенсуса) является важным в распределенных вычислительных и мульти-агентных системах.
[4] Цепочка блоков основывается на консенсусных механизмах, чтобы достигать соглашения между узлами. Цепочка блоков представляет собой децентрализованную базу данных, которая администрируется посредством распределенных компьютеров в одноранговой (P2P) сети . Каждый одноранговый узел поддерживает копию реестра, чтобы предотвращать единую точку отказа (SPOF). Обновления и проверки достоверности отражаются во всех копиях одновременно.
[5] Хотя некоторое число существующих технологий может использоваться для выполнения консенсуса между сетевыми узлами системы цепочек блоков, более эффективное решение для выполнения консенсуса должно быть преимущественным.
Сущность изобретения
[6] Реализации настоящего описания изобретения включают в себя машинореализованные способы для разрешения проблем консенсуса в распределенной системе (например, в сети цепочек блоков). Более конкретно, реализации настоящего описания изобретения направлены на выполнение изменения первичного узла в распределенной системе.
[7] В некоторых реализациях, действия включают в себя: определение, посредством резервного узла сети цепочек блоков, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом, при этом текущая эпоха включает в себя консенсусный процесс для достижения консенсуса между некоторым числом сетевых узлов с использованием первичного узла, и при этом консенсусный процесс включает в себя три фазы; определение, посредством резервного узла соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе; определение суммы весовых коэффициентов для резервного узла посредством резервного узла на основе соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз в текущей эпохе; отправку сообщения EPOCH_CHANGE посредством резервного узла упомянутому числу сетевых узлов, отличных от упомянутого сетевого узла, в ответ на определение, что сумма весовых коэффициентов достигает первого предварительно определенного порогового значения, при этом сообщение EPOCH_CHANGE указывает запрос на изменение с текущей опохи с текущим первичным узлом на новую эпоху с резервным узлом являющимся новым первичным узлом, и EPOCH_CHANGE включает в себя сумму весовых коэффициентов резервного узла; прием по меньшей мере одного сообщения NEW_EPOCH посредством резервного узла от по меньшей мере одного из упомянутого числа сетевых узлов, отличных от резервного узла, при этом сообщение NEW_EPOCH указывает подтверждение резервного узла в качестве нового первичного узла; верификацию, посредством резервного узла, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; определение, посредством резервного узла, превышает или нет число достоверных сообщений NEW_EPOCH, по меньшей мере, из одного сообщения NEW_EPOCH, второе предварительно определенное пороговое значение; и определение резервного узла в качестве нового первичного узла в новой эпохе посредством резервного узла в ответ на определение, что число достоверных сообщений NEW_EPOCH превышает второе предварительно определенное пороговое значение.
[8] Другие реализации включают в себя соответствующие системы, оборудование и компьютерные программы, выполненные с возможностью выполнять действия способов, закодированных на компьютерных устройствах хранения данных.
[9] Эти и другие реализации необязательно могут включать в себя одну или более следующих особенностей:
[10] Первая особенность, комбинируемая с любой из следующих особенностей, в которой резервный узел определяет весовой коэффициент резервного узла для первой фазы консенсусного процесса как равный первому значению.
[11] Вторая особенность, комбинируемая с любой из следующих особенностей, в которой резервный узел определяет весовой коэффициент резервного узла для второй фазы консенсусного процесса как первое значение в ответ на определение отказа верификации кворума во второй фазе консенсусного процесса в текущей эпохе, и резервный узел определяет весовой коэффициент резервного узла для второй фазы консенсусного процесса как второе значение, которое превышает первое значение в ответ на определение успешности верификации кворума во второй фазе консенсусного процесса в текущей эпохе.
[12] Третья особенность, комбинируемая с любой из следующих особенностей, в которой верификация кворума во второй фазе для сетевого узла включает в себя прием предварительно определенного числа ECHO–сообщений из других сетевых узлов.
[13] Четвертая особенность, комбинируемая с любой из следующих особенностей, в которой резервный узел определяет весовой коэффициент резервного узла для третьей фазы консенсусного процесса как равный третьему значению в ответ на определение отказа верификации кворума в третьей фазе консенсусного процесса в текущей эпохе, и резервный узел определяет весовой коэффициент резервного узла для третьей фазы консенсусного процесса как четвертое значение, которое превышает третье значение, в ответ на определение успешности верификации кворума в третьей фазе консенсусного процесса в текущей эпохе.
[14] Пятая особенность, комбинируемая с любой из следующих особенностей, в которой верификация кворума в третьей фазе для сетевого узла содержит прием предварительно определенного числа сообщений принятия от других сетевых узлов, при этом каждое из сообщений принятия от других сетевых узлов указывает, что каждый из других сетевых узлов принял предварительно определенное число ECHO–сообщений.
[15] Шестая особенность, комбинируемая с любой из следующих особенностей, в которой сообщение EPOCH_CHANGE дополнительно включает в себя набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов, при этом сообщение NEW_EPOCH включает в себя дайджест сообщения EPOCH_CHANGE.
[16] Седьмая особенность, комбинируемая с любой из следующих особенностей, в которой верификация является или нет по меньшей мере одно достоверное сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным.
[17] Восьмая особенность, комбинируемая с любой из следующих особенностей, в которой верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверными.
[18] Девятая особенность, комбинируемая с любой из следующих особенностей, в которой резервный узел определяет, что изменение эпохи должно выполняться в ответ на определение, что консенсус не достигнут в старой эпохе в течение предварительно определенного периода времени.
[19] Десятая особенность, комбинируемая с любой из следующих особенностей, в которой новая эпоха включает в себя консенсусный процесс для достижения консенсуса между упомянутым числом сетевых узлов с использованием нового первичного узла.
[20] В некоторых реализациях, действия включают в себя: прием, посредством сетевого узла из числа сетевых узлов, сообщения EPOCH_CHANGE от резервного узла, отличного от упомянутого сетевого узла, при этом сообщение EPOCH_CHANGE включает в себя индикатор, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом; верификацию, посредством сетевого узла, является или нет сообщение EPOCH_CHANGE достоверным; в ответ на верификацию, что сообщение EPOCH_CHANGE является достоверным, отправку, посредством сетевого узла, сообщения NEW_EPOCH в другие сетевые узлы, при этом сообщение NEW_EPOCH включает в себя дайджест сообщения EPOCH_CHANGE; прием, посредством сетевого узла по меньшей мере одного сообщения NEW_EPOCH, по меньшей мере, от одного из упомянутого числа сетевых узлов, отличных от сетевого узла; верификацию, посредством сетевого узла, является или нет, по меньшей мере одно сообщение NEW_EPOCH достоверным; определение, посредством резервного узла, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH, предварительно определенное пороговое значение; и в ответ на определение, что число достоверных сообщений NEW_EPOCH превышает предварительно определенное пороговое значение, определение, посредством сетевого узла, резервного узла как нового первичного узла в новой эпохе.
[21] Другие реализации включают в себя соответствующие системы, оборудование и компьютерные программы, выполненные с возможностью выполнять действия способов, закодированных на компьютерных устройствах хранения данных.
[22] Эти и другие реализации необязательно могут включать в себя одну или более следующих особенностей:
[23] Первая особенность, комбинируемая с любой из следующих особенностей, в которой сообщение EPOCH_CHANGE включает в себя сумму весовых коэффициентов, ассоциированную с резервным узлом, и набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов.
[24] Вторая особенность, комбинируемая с любой из следующих особенностей, в которой верификация, является или нет сообщение EPOCH_CHANGE достоверным, включает в себя верификацию, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, при этом верификация, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, включает в себя верификацию, является или нет набор подписей достоверным.
[25] Третья особенность, комбинируемая с любой из следующих особенностей, в которой верификация, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, и при этом верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверными.
[26] Настоящее описание изобретения также предоставляет один или более энергонезависимых машиночитаемых носителей хранения данных, соединенных с одним или более процессоров и имеющих сохраненные на них инструкции, которые, при выполнении посредством одного или более процессоров, инструктируют одному или более процессоров выполнять операции в соответствии с реализациями способов, предусмотренных в данном документе.
[27] Настоящее описание изобретения дополнительно предоставляет систему для реализации способов, предусмотренных в настоящем документе. Система включает в себя один или более процессоров и машиночитаемый носитель хранения данных, соединенный с одним или более процессоров, имеющий сохраненные инструкции, которые, при выполнении посредством одного или более процессоров, инструктируют одному или более процессоров выполнять операции в соответствии с реализациями способов, предусмотренных в данном документе.
[28] Настоящее описание изобретения раскрывает улучшенные консенсусные механизмы, включающие в себя технологии для достижения консенсусов между сетевыми узлами в распределенной системе, выполнения изменения первичного узла в распределенной системе и выполнения процесса восстановления для сетевого узла в распределенной системе. Описанные консенсусные механизмы могут достигать различных преимуществ в различных применениях.
[29] Например, консенсусный процесс, как пояснено ниже, включает в себя множество особенностей, которые улучшают операции системы цепочек блоков, и помогает смягчать узкое место сети. Например, описанный консенсусный процесс включает в себя преобразование запроса транзакции в некоторое число блоков кодов стирания (EC) согласно EC–коду и отправку одного из EC–блоков в каждый из сетевых узлов. EC–блок меньше по размеру, чем исходный запрос транзакции. Соответственно, отправка EC–блока вместо полного запроса транзакции в сетевые узлы уменьшает размер блоков данных, которые передаются между сетевыми узлами сети цепочек блоков, за счет этого экономя полосу пропускания сети и уменьшая сетевую нагрузку. Это дополнительно уменьшает размер данных, которые записываются и считываются в/из пространства запоминающего устройства сетевых узлов, за счет этого уменьшая нагрузку на пространство запоминающего устройства сетевых узлов и повышая эффективность полной системы цепочек блоков.
[30] Кроме того, настоящее описание изобретения описывает процесс изменения эпохи, который включает в себя назначение соответствующих весовых коэффициентов для множественных фаз консенсусного процесса, определение суммы весовых коэффициентов на основе соответствующих весовых коэффициентов множественных фаз и определение нового первичного узла на основе суммы весовых коэффициентов. Процесс изменения эпохи на основе суммы весовых коэффициентов вместо способа круговой проверки может упрощать выбор нового первичного узла, который является неотказавшим, своевременно. В отличие от способа круговой проверки, процесс изменения эпохи в настоящем описании изобретения основывается на сумме весовых коэффициентов, чтобы выбирать новый первичный узел, что может уменьшать время задержки или приостановку при нахождении нового первичного узла, который не является отказавшим. Это дополнительно может повышать эффективность полной системы цепочек блоков в предоставлении услуг на основе цепочек блоков.
[31] Кроме того, настоящее описание изобретения поясняет процесс восстановления, который включает в себя такие операции, как отправка сообщения с запросом состояния посредством сетевого узла, который применяется в качестве нового первичного узла, и прием сообщений с ответом по состоянию из других сетевых узлов. Эти операции выполняются таким образом, что процесс восстановления отказавшего сетевого узла не создает помехи нормальной работе консенсусного процесса между другими неотказавшими сетевыми узлами. Это упрощает экономию вычислительных и сетевых ресурсов для восстановления отказавшего сетевого узла посредством уменьшения сложности процесса восстановления.
[32] Следует принимать во внимание, что способы в соответствии с настоящим описанием изобретения могут включать в себя любую комбинацию аспектов и признаков, описанных в данном документе. Таким образом, способы в соответствии с настоящим описанием изобретения не ограничены комбинациями аспектов и признаков, конкретно описанными в данном документе, но также включают в себя любую предоставленную комбинацию аспектов и признаков.
[33] Подробности одной или более реализаций настоящего описания изобретения изложены на прилагаемых чертежах и в нижеприведенном описании. Другие признаки и преимущества настоящего описания изобретения должны становиться очевидными из описания и чертежей, а также из формулы изобретения.
Описание чертежей
[34] Фиг. 1 иллюстрирует пример окружения, которое может использоваться для того, чтобы выполнять реализации настоящего описания изобретения.
[35] Фиг. 2 иллюстрирует пример концептуальной архитектуры в соответствии с реализациями настоящего описания изобретения.
[36] Фиг. 3 иллюстрирует пример консенсусного процесса, который может выполняться в соответствии с реализациями настоящего описания изобретения.
[37] Фиг. 4 иллюстрирует пример консенсусного процесса, который может выполняться в соответствии с реализациями настоящего описания изобретения.
[38] Фиг. 5 иллюстрирует пример хэш–дерева в соответствии с реализациями настоящего описания изобретения.
[39] Фиг. 6 иллюстрирует пример сообщений, которые передаются между сетевыми узлами распределенной системы в соответствии с реализациями настоящего описания изобретения.
[40] Фиг. 7 иллюстрирует пример процесса выполнения изменения первичного узла в распределенной системе в соответствии с реализациями настоящего описания изобретения.
[41] Фиг. 8 иллюстрирует пример процесса выполнения изменения первичного узла в распределенной системе в соответствии с реализациями настоящего описания изобретения.
[42] Фиг. 9 иллюстрирует пример сообщений, которые передаются между сетевыми узлами распределенной системы в соответствии с реализациями настоящего описания изобретения.
[43] Фиг. 10 иллюстрирует пример процесса выполнения процесса восстановления сетевого узла в распределенной системе в соответствии с реализациями настоящего описания изобретения.
[44] Фиг. 11 иллюстрирует пример процесса выполнения процесса восстановления сетевого узла в распределенной системе в соответствии с реализациями настоящего описания изобретения.
[45] Фиг. 12 иллюстрирует пример сообщений, которые передаются между сетевыми узлами распределенной системы в соответствии с реализациями настоящего описания изобретения.
[46] Фиг. 13 иллюстрирует пример схемы, иллюстрирующей модули консенсусного оборудования, согласно реализации настоящего описания изобретения.
[47] Фиг. 14 иллюстрирует пример схемы, иллюстрирующей модули консенсусного оборудования, согласно реализации настоящего описания изобретения.
[48] Фиг. 15 иллюстрирует пример схемы, иллюстрирующей модули оборудования изменения первичных узлов, согласно реализации настоящего описания изобретения.
[49] Фиг. 16 иллюстрирует пример схемы, иллюстрирующей модули оборудования изменения первичных узлов, согласно реализации настоящего описания изобретения.
[50] Фиг. 17 иллюстрирует пример схемы, иллюстрирующей модули оборудования восстановления, согласно реализации настоящего описания изобретения.
[51] Аналогичные ссылки с номерами на различных чертежах указывают аналогичные элементы.
Подробное описание изобретения
[52] Реализации настоящего описания изобретения включают в себя машинореализованные способы для решения задач при достижении консенсуса в распределенной системе (например, в сети цепочек блоков). Более конкретно, реализации настоящего описания изобретения направлены на выполнение изменения первичного узла в распределенной системе.
[53] В некоторых реализациях, действия включают в себя: определение, посредством резервного узла сети цепочек блоков, , что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом, при этом текущая эпоха включает в себя консенсусный процесс для достижения консенсуса между некоторым числом сетевых узлов с использованием первичного узла, при этом консенсусный процесс включает в себя три фазы; определение, посредством резервного узла соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе; определение суммы весовых коэффициентов для резервного узла посредством резервного узла на основе соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз в текущей эпохе; отправку сообщения EPOCH_CHANGE посредством резервного узла в упомянутое число сетевых узлов, отличных от упомянутого сетевого узла, в ответ на определение того, что сумма весовых коэффициентов достигает первого предварительно определенного порогового значения, при этом сообщение EPOCH_CHANGE указывает запрос на изменение с текущей эпохи с текущим первичным узлом на новую эпоху, в котором резервный узел представляет собой новый первичный узел, и EPOCH_CHANGE включает в себя сумму весовых коэффициентов резервного узла; прием по меньшей мере одного сообщения NEW_EPOCH посредством резервного узла, по меньшей мере, из одного из упомянутого числа сетевых узлов, отличных от резервного узла, при этом сообщение NEW_EPOCH указывает подтверждение резервного узла в качестве нового первичного узла; верификацию, посредством резервного узла, является или нет, по меньшей мере, одно сообщение NEW_EPOCH достоверным; определение, посредством резервного узла, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH второе предварительно определенное пороговое значение; и определение резервного узла в качестве нового первичного узла в новой эпохе посредством резервного узла в ответ на определение что число достоверных сообщений NEW_EPOCH превышает второе предварительно определенное пороговое значение.
[54] В некоторых реализациях, действия включают в себя: прием, посредством сетевого узла из некоторого числа сетевых узлов, сообщения EPOCH_CHANGE из резервного узла, отличного от сетевого узла, при этом сообщение EPOCH_CHANGE включает в себя индикатор, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом; верификацию, посредством сетевого узла, является или нет сообщение EPOCH_CHANGE достоверным; в ответ на верификацию, что сообщение EPOCH_CHANGE является достоверным, отправку, посредством сетевого узла, сообщения NEW_EPOCH в другие сетевые узлы, при этом сообщение NEW_EPOCH включает в себя дайджест сообщения EPOCH_CHANGE; прием, посредством сетевого узла по меньшей мере одного сообщения NEW_EPOCH из по меньшей мере одного из упомянутого числа сетевых узлов, отличных от сетевого узла; верификацию, посредством сетевого узла, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; определение, посредством резервного узла, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH предварительно определенное пороговое значение; и в ответ на определение, что число достоверных сообщений NEW_EPOCH превышает предварительно определенное пороговое значение, определение, посредством сетевого узла, резервного узла в качестве нового первичного узла в новой эпохе.
[55] Чтобы предоставлять дополнительный контекст для реализаций настоящего описания изобретения, и как представлено выше, системы распределенных реестров (DLS), которые также могут упоминаться как консенсусные сети (например, состоящие из узлов между равноправными узлами) или сети цепочек блоков, позволяют участвующим объектам защищенно и неизменно проводить транзакции и сохранять данные. Термин "цепочка блоков" используется в данном документе, чтобы, в общем, означать DLS независимо от конкретных вариантов использования. Как представлено выше, сеть цепочек блоков может предоставляться в качестве публичной сети цепочек блоков, приватной сети цепочек блоков или консорциальной сети цепочек блоков.
[56] Цепочка блоков представляет собой структуру данных, которая сохраняет транзакции таким способом, который обеспечивает возможность верификации будущих транзакций для согласованности со всеми предшествующими транзакциями, сохраненными в цепочке. Цепочка блоков включает в себя один или более блоков. Каждый блок в цепочке связан с предыдущим блоком сразу перед ним в цепочке посредством включения криптографического хэша предыдущего блока. Каждый блок также включает в себя временную метку, собственный криптографический хэш и одну или более транзакций. Транзакции, которые уже верифицированы посредством узлов сети цепочек блоков, хэшируются и кодируются в дерево Меркла. Дерево Меркла представляет собой структуру данных, в которой данные в концевых узлах дерева хэшируются, и все хэши в каждой ветви дерева конкатенируются в корне ветви. Этот процесс продолжается вверх по дереву вплоть до корня всего дерева, которое сохраняет хэш, который представляет все данные в дереве. Хэш, подразумеваемый в качестве транзакции, сохраненной в дереве, может быстро верифицироваться посредством определения, является ли он согласованным со структурой дерева.
[57] Исходя из того, что цепочка блоков представляет собой структуру данных для сохранения транзакций, сеть цепочек блоков представляет собой сеть вычислительных узлов, которые администрируют, обновляют и поддерживают одну или более структур цепочки блоков. Как представлено выше, сеть цепочек блоков может предоставляться в качестве публичной сети цепочек блоков, приватной сети цепочек блоков или консорциальной сети цепочек блоков.
[58] В публичной сети цепочек блоков, консенсусный процесс управляется посредством узлов консенсусной сети. Например, сотни, тысячи, даже миллионы объектов могут взаимодействовать в публичной сети цепочек блоков, каждый из которых оперирует, по меньшей мере, одним узлом в публичной сети цепочек блоков. Соответственно, публичная сеть цепочек блоков может считаться публичной сетью относительно участвующих объектов. В некоторых примерах, большинство объектов (узлов) должны подписывать каждый блок для того, чтобы блок был достоверным и добавлялся в цепочку блоков (распределенный реестр) сети цепочек блоков. Примерные публичные сети цепочек блоков включают в себя конкретные одноранговые платежные сети, которые используют распределенный реестр, называемый "цепочкой блоков". Однако, как отмечено выше, термин "цепочка блоков" используется для того, чтобы, в общем, означать распределенные реестры без конкретной ссылки на конкретные сети цепочек блоков.
[59] В общем, публичная сеть цепочек блоков поддерживает публичные транзакции. Публичная транзакция совместно используется со всеми узлами в публичной сети цепочек блоков и сохраняется в глобальной цепочке блоков. Глобальная цепочка блоков представляет собой цепочку блоков, которая реплицируется по всем узлам. Таким образом, все узлы находятся в идеальном консенсусе состояния относительно глобальной цепочки блоков. Чтобы достигать консенсуса (например, соглашения с добавлением блока в цепочку блоков), консенсусный протокол реализуется в публичной сети цепочек блоков. Примеры консенсусных протоколов включают в себя, без ограничения, доказательство выполнения работы (POW), доказательство доли владения (POS) и доказательство наличия полномочий (POA). POW упоминается дополнительно в данном документе в качестве неограничивающего примера.
[60] В общем, приватная сеть цепочек блоков предоставляется для конкретного объекта, который централизованно управляет разрешениями на считывание и запись. Объект управляет тем, какие узлы имеют возможность участвовать в сети цепочек блоков, так что приватные сети цепочек блоков, в общем, упоминаются в качестве разрешенных сетей, которые устанавливают ограничения касательно того, кому разрешается участвовать в сети, и касательно их уровня участия (например, только в некоторых транзакциях). Различные типы механизмов управления доступом могут использоваться (например, существующие участники голосуют по добавлению новых объектов, контролирующий орган может управлять допуском).
[61] В общем, консорциальная сеть цепочек блоков является приватной между участвующими объектами. В консорциальной сети цепочек блоков, консенсусный процесс управляется посредством авторизованного набора узлов, причем один или более узлов управляются посредством соответствующего объекта (например, финансового учреждения, страховой компании). Например, консорциум из десяти (10) объектов (например, финансовых учреждений, страховых компаний) может оперировать консорциальной сетью цепочек блоков, каждый из которых управляет, по меньшей мере, одним узлом в консорциальной сети цепочек блоков. Соответственно, консорциальная сеть цепочек блоков может считаться приватной сетью относительно участвующих объектов. В некоторых примерах, каждый объект (узел) должен подписывать каждый блок для того, чтобы блок был достоверным и добавлялся в цепочку блоков. В некоторых примерах, по меньшей мере, поднабор объектов (узлов) (например, по меньшей мере, 7 объектов) должен подписывать каждый блок для того, чтобы блок был достоверным и добавлялся в цепочку блоков.
[62] Реализации настоящего описания изобретения подробнее описываются в данном документе со ссылкой на консорциальную сеть цепочек блоков. Однако, предполагается, что реализации настоящего описания изобретения могут осуществляться в любом соответствующем типе сети цепочек блоков.
[63] В дальнейшем подробнее описываются реализации настоящего описания изобретения в данном документе с учетом вышеизложенного контекста. Более конкретно и как представлено выше, реализации настоящего описания изобретения направлены на выполнение процесса восстановления для сетевого узла в распределенной системе.
[64] Цепочка блоков представляет собой защищенный от несанкционированного использования совместно используемый цифровой реестр, который записывает транзакции в публичную или приватную одноранговую сеть. Реестр распределяется во все узлы–члены в сети, и предыстория транзакций с активами, возникающих в сети, постоянно записывается в блоке.
[65] Консенсусные механизмы обеспечивают, что все сетевые узлы в распределенной сети цепочек блоков выполняют транзакции в идентичном порядке и затем записывают в идентичные реестры. Одна задача, на решение которой нацелены консенсусные модели, заключается в том, чтобы преодолевать византийские ошибки. В византийской ошибке, компонент, такой как сервер или сетевой узел распределенной сети цепочек блоков, может несогласованно выглядеть как отказным, так и функционирующим для систем обнаружения отказа, представляя различные признаки для различных наблюдателей. Для других сетевых узлов затруднительно объявлять его отказным и отключать его от сети, поскольку они должны сначала достигать консенсуса относительно того, какой сетевой узел отказывает первым.
[66] В контексте распределенных систем, отказоустойчивость на основе византийского соглашения (BFT) представляет собой способность распределенной компьютерной сети функционировать требуемым образом и корректно достигать достаточного консенсуса, несмотря на злоумышленные компоненты (т.е. сетевые узлы сети цепочек блоков) системы, приводящие к отказу или распространяющие некорректную информацию другим равноправным узлам. Цель состоит в том, чтобы защищать от катастрофических системных отказов посредством уменьшения влияния, которое эти злоумышленные узлы имеют на корректную функцию сети, и правильный консенсус, который достигается посредством честных узлов в системе.
[67] Однако существующие BFT–механизмы оказываются неэффективными во многих аспектах. Например, существующие BFT–механизмы имеют дополнительную сложность реализации для распределенной сети цепочек блоков при попытке преодолевать византийские ошибки таким образом, что время задержки увеличивается для связи между сетевыми узлами распределенной сети цепочек блоков. Практическая отказоустойчивость на основе византийского соглашения (PBFT) представляет собой одну из оптимизаций, которые нацелены на улучшение существующих консенсусных BFT–механизмов. PBFT–модель акцентирует внимание на предоставлении практической репликации византийского конечного автомата, которая допускает византийские отказы (злоумышленные узлы) через предположение, что имеются отказы независимых узлов и манипулируемые сообщения, которые распространяются посредством конкретных независимых узлов.
[68] В PBFT–модели, все узлы упорядочиваются в последовательности, при этом один узел представляет собой первичный узел (лидера), а другие называются "резервными узлами". Все узлы в системе обмениваются данными между собой, и целью является большинство честных узлов, чтобы прийти к соглашению по состоянию системы. Узлы обмениваются данными между собой и не только должны доказывать, что сообщения исходят из конкретного равноправного узла, но также и должны верифицировать то, что сообщение не модифицировано во время передачи.
[69] Для работы PBFT–модели, выдвигается такое допущение, что сумма злоумышленных узлов в сети не может одновременно быть равной или превышать 1/3 от общего числа узлов в системе в данном окне уязвимости. Чем больше узлов в системе, тем более математически маловероятно, что число, приближающееся к 1/3 от всех узлов, являются злоумышленными. Алгоритм эффективно предоставляет как живучесть, так и безопасность при условии, что самое большее (n–1)/3 узлов являются злоумышленными или отказавшими одновременно, где n представляет общее число узлов.
[70] Каждый раунд PBFT–консенсуса (называемый "видами") включает в себя 4 фазы:
[71] (1) Клиент отправляет запрос в узел–лидер, чтобы активировать операцию предоставления услуг;
[72] (2) Узел–лидер многоадресно передает запрос в резервные узлы;
[73] (3) Узлы выполняют запрос и затем отправляют ответ клиенту; и
[74] (4) Клиент ждет f+1 (f представляет максимальное число узлов, которые могут быть отказавшими) ответов из различных узлов с идентичным результатом.
[75] Конечный результат состоит в том, что все честные узлы приходят к соглашению по порядку записи, и они либо принимают, либо отклоняют его. Узел–лидер изменяется в схеме круговой проверки в ходе каждого вида и может даже заменяться протоколом, называемым "изменением вида", если конкретное количество времени проходит без многоадресной передачи, посредством узла–лидера, запроса. Большинство честных узлов также может решать, является или нет лидер отказавшим, и удалять его следующим лидером в линии в качестве замены.
[76] Однако, имеются некоторые ограничения на консенсусный PBFT–механизм. Например, PBFT–модель может хорошо работать в классической форме с относительно небольшими размерами консенсусных групп вследствие огромного объема связи, который требуется между узлами. Большие блочные данные, которые передаются между сетевыми узлами, вызывают проблему сетевой нагрузки и приводят к узкому месту сети. Кроме того, использование кодов аутентификации по методам (MAC) в качестве формата для аутентификационных сообщений в PBFT–модели может быть неэффективным с объемом связи, необходимым между узлами в больших консенсусных группах, таких как криптовалютные сети, и с MAC. Может возникать внутренне присущая неспособность доказывать подлинность сообщений третьей стороне.
[77] Кроме того, появление последовательных злоумышленных узлов при изменении узла–лидера с использованием способа круговой проверки, используемого посредством PBFT, затрагивает услугу на основе цепочек блоков посредством введения времени задержки или приостановки при поиске узла–лидера, который является честным. Например, при выборе первого сетевого узла в качестве нового узла–лидера, первый сетевой узел может представлять собой злоумышленный узел, в силу чего не может выбираться в качестве нового узла–лидера. В способе круговой проверки, второй сетевой узел в линии может выбираться в качестве нового узла–лидера. Тем не менее, если второй сетевой узел также представляет собой злоумышленный узел, другой сетевой узел в линии верифицируется как целесообразный в качестве узла–лидера. Этот процесс продолжается до тех пор, пока новый узел–лидер, который является честным, не идентифицируется. Такое частое изменение узла–лидера вводит значительное время задержки в услугах на основе цепочек блоков.
[78] Кроме того, сетевые узлы в сети цепочек блоков могут подвергаться византийскому отказу или катастрофическому отказу в любое время. Например, сетевой узел может компрометироваться посредством злоумышленного кибервзломщика и вести себя неправильно. Если сетевые узлы, которые компрометируются, не восстанавливаются быстро, злоумышленный кибервзломщик может компрометировать сеть цепочек блоков и услуги посредством коррумпирования более 1/3 сетевых узлов без обнаружения.
[79] Чтобы разрешать вышеописанные сложности и проблемы, ассоциированные с существующими консенсусными BFT–механизмами и консенсусным PBFT–механизмом, настоящее описание изобретения раскрывает улучшенные консенсусные механизмы, включающие в себя технологии для достижения консенсуса между сетевыми узлами в распределенной системе, выполнения изменения первичного узла в распределенной системе и выполнения процесса восстановления для сетевого узла в распределенной системе. Описанные консенсусные механизмы могут достигать различных преимуществ в различных вариантах применения.
[80] Например, консенсусный процесс, как пояснено ниже, включает в себя множество признаков, которые улучшают операции системы цепочек блоков, и помогает смягчать узкое место сети. Например, описанный консенсусный процесс включает в себя преобразование запроса транзакции в определенное число блоков кодов стирания ошибок (EC) согласно EC–коду и отправку одного из EC–блоков в каждый из сетевых узлов. EC–блок меньше по размеру, чем исходный запрос транзакции. Соответственно, отправка EC–блока вместо полного запроса транзакции в сетевые узлы уменьшает размер блоков данных, которые передаются между сетевыми узлами сети цепочек блоков, за счет этого экономя полосу пропускания сети и уменьшая сетевую нагрузку. Это дополнительно уменьшает размер данных, которые записываются и считываются в/из пространства запоминающего устройства сетевых узлов, за счет этого уменьшая нагрузку на пространство запоминающего устройства сетевых узлов и повышая эффективность полной системы цепочек блоков.
[81] Кроме того, настоящее описание изобретения описывает процесс изменения эпохи, который включает в себя назначение соответствующих весовых коэффициентов для нескольких фаз консенсусного процесса, определение суммы весовых коэффициентов на основе соответствующих весовых коэффициентов нескольких фаз и определение нового первичного узла на основе суммы весовых коэффициентов. Процесс изменения эпохи на основе суммы весовых коэффициентов вместо способа круговой проверки может упрощать выбор нового первичного узла, который является неотказавшим, своевременно. Первичный узел может представлять собой узел–лидер, который имеет полномочия инициировать раунд консенсусного процесса между некоторым числом сетевых узлов, включающих в себя первичный узел. Другие сетевые узлы сети цепочек блоков могут упоминаться как резервные узлы. Процесс изменения эпохи может помогать разрешать проблему способа круговой проверки, которая вызывает частое изменение первичного узла, когда несколько сетевых узлов в линии для нового первичного узла являются отказавшими. В отличие от способа круговой проверки, процесс изменения эпохи в настоящем описании изобретения основывается на сумме весовых коэффициентов, чтобы выбирать новый первичный узел, что позволяет уменьшать время задержки или приостановку при нахождении нового первичного узла, который не является отказавшим. Это дополнительно может повышать эффективность полной системы цепочек блоков в предоставлении услуг на основе цепочек блоков.
[82] Кроме того, настоящее описание изобретения поясняет процесс восстановления, который включает в себя такие операции, как отправка сообщения с запросом состояния посредством сетевого узла, который применяется в качестве нового первичного узла, и прием сообщений с ответом по состоянию из других сетевых узлов. Эти операции выполняются таким образом, что процесс восстановления отказавшего сетевого узла не создает помехи нормальной работе консенсусного процесса между другими неотказавшими сетевыми узлами. Это упрощает экономию вычислительных и сетевых ресурсов для восстановления отказавшего сетевого узла посредством уменьшения сложности процесса восстановления.
[83] Фиг. 1 иллюстрирует пример окружения 100, которое может использоваться для того, чтобы выполнять реализации настоящего описания изобретения. В некоторых примерах, окружение 100 обеспечивает возможность объектам участвовать в консорциальной сети 102 цепочек блоков. Окружение 100 включает в себя вычислительные устройства или системы 106, 108 и сеть 110. В некоторых примерах, сеть 110 включает в себя локальную вычислительную сеть (LAN), глобальную вычислительную сеть (WAN), Интернет либо комбинацию вышеозначенного и соединяет веб–узлы, пользовательские устройства (например, вычислительные устройства) и внутренние интерфейсные системы. В некоторых примерах, к сети 110 может осуществляться доступ по линии проводной и/или беспроводной связи. В некоторых примерах, сеть 110 обеспечивает связь с и в консорциальной сети 102 цепочек блоков. В общем, сеть 110 представляет одну или более сетей связи. В некоторых случаях, вычислительные устройства 106, 108 могут представлять собой узлы облачной вычислительной системы (не показана), либо вычислительное устройство 106, 108 может представлять собой отдельную облачную вычислительную систему, включающую в себя множество компьютеров, взаимно соединенных посредством сети, и функционирующую в качестве системы распределенной обработки.
[84] В проиллюстрированном примере, вычислительные системы 106, 108 могут включать в себя любую соответствующую вычислительную систему, которая обеспечивает участие в качестве узла в консорциальной сети 102 цепочек блоков. Примерные вычислительные устройства включают в себя, без ограничения, сервер, настольный компьютер, переносной компьютер, планшетное вычислительное устройство и смартфон. В некоторых примерах, вычислительные системы 106, 108 размещают одну или более машинореализованных услуг для взаимодействия с консорциальной сетью 102 цепочек блоков. Например, вычислительная система 106 может размещать машинореализованные услуги первого объекта (например, пользователя A), к примеру, систему управления транзакциями, которую использует первый объект для того, чтобы управлять своими транзакциями с одним или более других объектов (например, других пользователей). Вычислительная система 108 может размещать машинореализованные услуги второго объекта (например, пользователя B), к примеру, систему управления транзакциями, которую использует второй объект для того, чтобы управлять своими транзакциями с одним или более других объектов (например, других пользователей). В примере по фиг. 1, консорциальная сеть 102 цепочек блоков представляется как сеть с равноправными узлами для узлов, и вычислительные системы 106, 108 предоставляют узлы первого объекта и второго объекта, соответственно, которые участвуют в консорциальной сети 102 цепочек блоков.
[85] Фиг. 2 иллюстрирует пример концептуальной архитектуры 200 в соответствии с реализациями настоящего описания изобретения. Пример концептуальной архитектуры 200 включает в себя системы 202, 204, 206 участников, которые соответствуют участнику A, участнику B и участнику C, соответственно. Каждый участник (например, пользователь, организация) участвует в сети 212 цепочек блоков, предоставленной в качестве одноранговой сети, включающей в себя множество узлов 214, по меньшей мере, некоторые из которых неизменно записывают информацию в цепочку 216 блоков. Хотя одна цепочка 216 блоков схематично проиллюстрирована в сети 212 цепочек блоков, несколько копий цепочки 216 блоков предоставляются и поддерживаются в сети 212 цепочек блоков, как подробнее описано в данном документе.
[86] В проиллюстрированном примере, каждая система 202, 204, 206 участников предоставляется посредством или от имени участника A, участника B и участника C, соответственно, и функционирует в качестве соответствующего узла 214 в сети цепочек блоков. При использовании в данном документе, узел, в общем, означает отдельную систему (например, компьютер, сервер), которая соединяется с сетью 212 цепочек блоков и обеспечивает возможность соответствующему участнику участвовать в сети цепочек блоков. В примере по фиг. 2, участник соответствует каждому узлу 214. Однако предполагается, что участник может управлять несколькими узлами 214 в сети 212 цепочек блоков, и/или несколько участников могут совместно использовать узел 214. В некоторых примерах, системы 202, 204, 206 участников обмениваются данными с/через сеть 212 цепочек блоков с использованием протокола (например, протокола защищенной передачи гипертекста (HTTPS)) и/или с использованием удаленных вызовов процедур (RPC).
[87] Узлы 214 могут иметь различные степени участия в сети 212 цепочек блоков. Например, некоторые узлы 214 могут участвовать в консенсусном процессе (например, в качестве узлов–майнеров, которые добавляют блоки в цепочку 216 блоков), в то время как другие узлы 214 не участвуют в консенсусном процессе. В качестве другого примера, некоторые узлы 214 сохраняют полную копию цепочки 216 блоков, в то время как другие узлы 214 сохраняют копии только частей цепочки 216 блоков. Например, привилегии доступа к данным могут ограничивать данные цепочек блоков, которые соответствующий участник сохраняет в соответствующей системе. В примере по фиг. 2, системы 202, 204, 206 участников сохраняют соответствующие полные копии 216', 216'', 216''' цепочки 216 блоков.
[88] Цепочка блоков (например, цепочка 216 блоков по фиг. 2) состоит из цепочки блоков, причем каждый блок хранит данные. Примеры данных включают в себя данные транзакции, представляющие транзакцию между двумя или более участников. Хотя транзакции используются в данном документе в качестве неограничивающего примера, предполагается, что любые соответствующие данные могут сохраняться в цепочке блоков (например, документы, изображения, видео, аудио). Примеры транзакций могут включать в себя, без ограничения, обмены чем–либо, имеющим стоимость (например, активами, продуктами, услугами и валютой). Данные транзакции неизменно сохраняются в цепочке блоков. Таким образом, данные транзакции не могут изменяться.
[89] До сохранения в блоке, данные транзакции хэшируются. Хэширование представляет собой процесс преобразования данных транзакции (предоставляются в качестве строковых данных) в хэш–значение фиксированной длины (также предоставляется в качестве строковых данных). Невозможно дехэшировать хэш–значение, чтобы получать данные транзакции. Хэширование обеспечивает то, что даже небольшое изменение данных транзакции приводит к совершенно другому хэш–значению. Дополнительно и как отмечено выше, хэш–значение имеет фиксированную длину. Таким образом, независимо от размера данных транзакции, длина хэш–значения является фиксированной. Хэширование включает в себя обработку данных транзакции через хэш–функцию, чтобы формировать хэш–значение. Примеры хэш–функции включают в себя, без ограничения, защищенный хэш–алгоритм (SHA)–256, который выводит 256–битовые хэш–значения.
[90] Данные транзакции для нескольких транзакций хэшируются и сохраняются в блоке. Например, хэш–значения двух транзакций предоставляются и непосредственно хэшируются для того, чтобы предоставлять другой хэш. Этот процесс повторяется до тех пор, пока, для всех транзакций, которые должны сохраняться в блоке, не предоставляется одно хэш–значение. Это хэш–значение упоминается как корневой хэш Меркла и сохраняется в заголовке блока. Изменение любой из транзакций должно приводить к изменению ее хэш–значения и, в конечном счете, к изменению корневого хэша Меркла.
[91] Блоки добавляются в цепочку блоков через консенсусный протокол. Множественные узлы в сети цепочек блоков участвуют в консенсусном протоколе и конкурируют за то, чтобы добавлять блок в цепочку блоков. Такие узлы упоминаются как майнеры (или узлы–майнеры). POW, введенное выше, используется в качестве неограничивающего примера.
[92] Узлы–майнеры выполняют консенсусный процесс, чтобы добавлять транзакции в цепочку блоков. Хотя несколько узлов–майнеров участвуют в консенсусном процессе, только один узел–майнер может записывать блок в цепочку блоков. Таким образом, узлы–майнеры конкурируют в консенсусном процессе за то, чтобы добавлять свой блок в цепочку блоков. Подробнее, узел–майнер периодически собирает отложенные транзакции из пула транзакций (например, вплоть до предварительно заданного предела для числа транзакций, которые могут быть включены в блок, если таковые имеются). Пул транзакций включает в себя сообщения по транзакциям от участников сети цепочек блоков. Узел–майнер конструирует блок и добавляет транзакции в блок. До добавления транзакций в блок, узел–майнер проверяет, включена ли какая–либо из транзакций уже в блок цепочки блоков. Если транзакция уже включена в другой блок, транзакция отбрасывается.
[93] Узел–майнер формирует заголовок блока, хэширует все транзакции в блоке и комбинирует хэш–значение в пары, чтобы формировать дополнительные хэш–значения, до тех пор, пока одно хэш–значение не предоставляется для всех транзакций в блоке (корневой хэш Меркла). Этот хэш добавляется в заголовок блока. Майнер также определяет хэш–значение последнего блока в цепочке блоков (т.е. последнего блока, добавленного в цепочку блоков). Узел–майнер также добавляет значение одноразового номера и временную метку в заголовок блока. В процессе майнинга, узел–майнер пытается находить хэш–значение, которое удовлетворяет обязательным параметрам. Узел–майнер продолжает изменять значение одноразового номера до нахождения хэш–значения, которое удовлетворяет обязательным параметрам.
[94] Каждый майнер в сети цепочек блоков пытается находить хэш–значение, которое удовлетворяет обязательным параметрам, и в силу этого конкурируют друг с другом. В конечном счете один из узлов–майнеров находит хэш–значение, которое удовлетворяет обязательным параметрам, и сообщает это всем другим узлам–майнерам в сети цепочек блоков. Другие узлы–майнеры верифицируют хэш–значение, и, если оно определено как корректное, верифицируют каждую транзакцию в блоке, принимают блок и добавляют блок в свою копию цепочки блоков. Таким образом, глобальное состояние цепочки блоков является согласованным для всех узлов–майнеров в сети цепочек блоков. Вышеописанный процесс представляет собой консенсусный POW–протокол.
[95] Неограничивающий пример предоставляется со ссылкой на фиг. 2. В этом примере, участник A хочет отправлять сумму денежных средств участнику B. Участник A формирует сообщение по транзакции (например, включающее в себя поля From, To и Value) и отправляет сообщение по транзакции в сеть цепочек блоков, которая добавляет сообщение по транзакции в пул транзакций. Каждый узел–майнер в сети цепочек блоков создает блок и принимает все транзакции из пула транзакций (например, вплоть до предварительно заданного предела для номера транзакции, который может добавляться в блок, если таковые имеются) и добавляет транзакции в блок. Таким образом, транзакция, опубликованная посредством участника A, добавляется в блоки узлов–майнеров.
[96] В некоторых сетях цепочек блоков, криптография реализуется, чтобы поддерживать конфиденциальность транзакций. Например, если два узла хотят поддерживать транзакцию приватной таким образом, что другие узлы в сети цепочек блоков не могут различать подробности транзакции, узлы могут шифровать данные транзакции. Примеры криптографических способов включают в себя, без ограничения, симметричное шифрование и асимметричное шифрование. Симметричное шифрование означает процесс шифрования, который использует один ключ для шифрования (формирования зашифрованного текста из простого текста) и дешифрования (формирования простого текста из зашифрованного текста). При симметричном шифровании, идентичный ключ доступен для нескольких узлов, так что каждый узел может шифровать/дешифровать данные транзакции.
[97] Асимметричное шифрование использует пары ключей, которые включают в себя закрытый ключ и открытый ключ, причем закрытый ключ известен только для соответствующего узла, и открытый ключ известен для всех других узлов в сети цепочек блоков. Узел может использовать открытый ключ другого узла, чтобы шифровать данные, и зашифрованные данные могут дешифроваться с использованием закрытого ключа другого узла. Например, и снова ссылаясь на фиг. 2, участник A может использовать открытый ключ участника B, чтобы шифровать данные и отправлять зашифрованные данные участнику B. Участник B может использовать свой закрытый ключ для того, чтобы дешифровать зашифрованные данные (зашифрованный текст) и извлекать исходные данные (простой текст). Сообщения, зашифрованные с помощью открытого ключа узла, могут дешифроваться только с использованием закрытого ключа узла.
[98] Асимметричное шифрование используется для того, чтобы предоставлять цифровые подписи, что обеспечивает возможность участникам транзакции подтверждать других участников транзакции, а также достоверность транзакции. Например, узел может снабжать цифровой подписью сообщение, и другой узел может подтверждать, что сообщение отправлено посредством узла, на основе цифровой подписи участника A. Цифровые подписи также могут использоваться для того, чтобы обеспечивать то, что сообщения не изменяются несанкционированно в транзите. Например, и снова ссылаясь на фиг. 2, участник A должен отправлять сообщение участнику B. Участник A формирует хэш сообщения и затем, с использованием своего закрытого ключа, шифрует хэш, чтобы предоставлять цифровую подпись в качестве зашифрованного хэша. Участник A добавляет цифровую подпись в сообщение и отправляет сообщение с цифровой подписью участнику B. Участник B дешифрует цифровую подпись с использованием открытого ключа участника A и извлекает хэш. Участник B хэширует сообщение и сравнивает хэши. Если хэши являются идентичными, участник B может подтверждать то, что сообщение фактически исходит от участника A и не изменено несанкционированно.
[99] Фиг. 3 иллюстрирует пример процесса 300 для достижения консенсуса между сетевыми узлами (например, узлом 214) распределенной системы (например, сети 102 и 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В частности, фиг. 3 иллюстрирует схему, представляющую примерный вариант осуществления способа 300 достижения консенсуса в нормальном случае, согласно настоящему описанию изобретения. Как проиллюстрировано на фиг. 3, консенсусный процесс 300 включает в себя три фазы или стадии 310, 320 и 330, как пояснено ниже.
0
1
2
3
0
1
2
3
[100] В первой фазе 310 консенсусного процесса 300, первичный узел (или узел–лидер) сети цепочек блоков отправляет первое сообщение в другие сетевые узлы (т.е. резервные узлы). Первое сообщение указывает, что первичный узел инициирует консенсусный процесс. Например, как проиллюстрировано на фиг. 3, первичный узел R отправляет сообщение INITIAL в другие сетевые узлы R, R и R в сети цепочек блоков. Следует отметить, что процесс 300 проиллюстрирован как включающий в себя четыре сетевых узла R, R, R и R только в качестве иллюстрации, процесс 300 может включать в себя любое подходящее число сетевых узлов. Ниже подробнее поясняются первая фаза и формат сообщения INITIAL со ссылкой на фиг. 4–6.
1
0
0
1
2
3
2
3
0
[101] Во второй фазе 320 консенсусного процесса 300, каждый из резервных узлов принимает первое сообщение, которое отправляется посредством первичного узла, подготавливает второе сообщение в ответ на первое сообщение и многоадресно передает второе сообщение в другой сетевой узел. Второе сообщение указывает, что резервный узел принимает первое сообщение из первичного узла и отправляет ответ в ответ на первое сообщение. Например, как проиллюстрировано на фиг. 3, резервный узел R принимает сообщение INITIAL, которое отправляется посредством первичного узла R, и отвечает первичному узлу R с ECHO–сообщением в качестве примера второго сообщения. Между тем, резервный узел R также многоадресно передает ECHO–сообщение в другие резервные узлы, к примеру, в резервные узлы R и R. Аналогично, резервный узел R и R многоадресно передает ECHO–сообщение в другие сетевые узлы, включающие в себя первичный узел R.
[102] Когда сетевой узел, например, такой как первичный узел или резервный узел, принимает ECHO–сообщения из других сетевых узлов, сетевой узел может верифицировать информацию в ECHO–сообщениях. Ниже подробнее поясняются вторая фаза и формат ECHO–сообщения со ссылкой на фиг. 4–6.
0
1
2
3
1
2
2
[103] В третьей фазе 330 консенсусного процесса 300, каждый из сетевых узлов многоадресно передает третье сообщение в другие сетевые узлы. Третье сообщение указывает, что сетевой узел принимает предварительно определенное число вторых сообщений. В некоторых реализациях, третье сообщение может указывать то, что сетевой узел готов выполнять транзакцию. В некоторых реализациях, третье сообщение может указывать то, что транзакция успешно восстановлена в сетевом узле. Например, как проиллюстрировано на фиг. 3, первичный узел R многоадресно передает сообщение ACCEPT в резервные узлы R, R и R. Аналогично, резервные узлы R, R и R многоадресно передают сообщение ACCEPT в другие сетевые узлы. В некоторых реализациях настоящего описания изобретения, до многоадресной передачи сообщения ACCEPT, сетевой узел определяет, отправляется или нет ACCEPT, согласно коду стирания ошибок (EC), и информация в ECHO–сообщениях представляет собой информацию, которая принята во второй фазе. Ниже подробнее поясняются третья фаза, EC–код и формат сообщения ACCEPT со ссылкой на фиг. 4–6.
0
1
2
3
[104] Когда сетевой узел принимает достаточно сообщений ACCEPT из других сетевых узлов, сетевой узел определяет, что консенсус достигнут. Например, если первичный узел R или резервные узлы R, R или R принимают кворумное (например, 2f+1, где f представляет число отказавших сетевых узлов) число сообщений ACCEPT, консенсус достигается автоматически между сетевыми узлами.
0
1
2
3
[105] Фиг. 4 иллюстрирует пример процесса 400 для достижения консенсуса между сетевыми узлами (например, узлом 214 или узлами R, R, R и R) распределенной системы (например, сети 102 или 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В некоторых реализациях, процесс 400 может выполняться с использованием одной или более машиноисполняемых программ, выполняемых с использованием одного или более вычислительных устройств. Для ясности представления, нижеприведенное описание, в общем, описывает способ 400 в контексте других чертежей в этом описании. Следует понимать, что способ 400 может осуществляться, например, посредством любой подходящей системы, окружения, программного обеспечения и аппаратных средств либо комбинации систем, окружений, программного обеспечения и аппаратных средств, надлежащим образом. В некоторых реализациях, различные этапы способа 400 могут выполняться параллельно, в комбинации, циклически или в любом порядке.
[106] В начале, процесс 400 может реализовываться в сочетании с системой 100–300, как проиллюстрировано на фиг. 1–3. В некоторых реализациях настоящего описания изобретения, сеть 102 и/или 212 цепочек блоков включает в себя первичный узел 404 и один или более резервных узлов 406. Сеть 102 и/или 212 цепочек блоков обменивается данными с вычислительной системой 106 и/или 108, к примеру, с клиентскими узлами 402 через сеть 110, чтобы предоставлять услуги на основе цепочек блоков. Каждый из клиентского узла 402, первичного узла 404 и резервного узла 406 может представлять собой компьютер специального назначения или другое оборудование обработки данных, выполненное с возможностью выполнять процессы, поясненные в данном документе. Например, клиентский узел 402 также может называться "клиентским терминалом" или "клиентским устройством", которое взаимодействует с сетью цепочек блоков. Клиентский узел 402 может устанавливать, например, клиентское приложение или клиентский комплект разработки программного обеспечения (SDK) в связи с сетью цепочек блоков для осуществления доступа и обмена данными с сетью цепочек блоков. Первичный узел 404 и один или более резервных узлов 406 также могут упоминаться как консенсусные узлы или сетевые узлы, которые достигают консенсуса и неизменно записывают информацию в сеть цепочек блоков.
[107] Процесс 400 начинается на 408, на котором клиентский узел 402 формирует запрос транзакции. В некоторых реализациях настоящего описания изобретения, запрос транзакции может включать в себя запрос, запрашивающий услугу на основе цепочек блоков из сети 102 и/или 212 цепочек блоков.
[108] На 410, клиентский узел 402 многоадресно передает запрос транзакции в первичный узел 404 сети 102 и/или 212 цепочек блоков. В некоторых реализациях настоящего описания изобретения, первичный узел 404 назначает порядковый номер запросу транзакции для того, чтобы отслеживать запросы на проведение транзакций после приема запроса транзакции из клиентского узла 402.
[109] На 412, первичный узел 404 формирует некоторое число EC–блоков после приема запроса транзакции из клиентского узла 402. В некоторых реализациях настоящего описания изобретения, первичный узел 404 формирует упомянутое число EC–блоков согласно EC–коду с использованием запроса транзакции. Например, ссылаясь на фиг. 5, первичный узел 404 применяет EC–код 504 к запросу 502 транзакции и преобразует запрос 502 транзакции в EC–сообщение 506 с использованием EC–кода 504. EC–код 504 представляет собой код с прямой коррекцией ошибок (FEC) согласно предположению относительно битовых стираний. EC–код 504 преобразует исходный запрос 502 транзакции в более длинное EC–сообщение 506 таким образом, что исходный запрос 502 транзакции может восстанавливаться из части или фрагмента EC–сообщения 506.
[110] В некоторых реализациях настоящего описания изобретения, EC–код 504 представляет собой почти оптимальный код стирания ошибок, такой как торнадо–код или код разреженного контроля по четности. В альтернативных реализациях настоящего описания изобретения, EC–код 504 представляет собой почти оптимальный фонтанный код, такой как фонтанный код, онлайновый код, код на основе преобразования Луби (LT) или хищнический код. В альтернативных реализациях настоящего описания изобретения, EC–код 504 представляет собой оптимальный код стирания ошибок, такой как код четности, пархивный код, код Рида–Соломона или регенерирующий код. В некоторых реализациях настоящего описания изобретения, EC–код 504 может представлять собой любой подходящий тип кода стирания ошибок.
[111] После преобразования запроса 502 транзакции в EC–сообщение 506, первичный узел 404 формирует некоторое число EC–блоков 508 с использованием EC–сообщения 506. Например, как проиллюстрировано на фиг. 5, первичный узел 404 формирует четыре EC–блока 508, EC–блок A, EC–блок B, EC–блок C и EC–блок D, посредством разделения EC–сообщения 506. Следует отметить, что EC–блоки 508 проиллюстрированы на фиг. 5 как включающие в себя четыре блока в качестве иллюстрации, EC–блоки 508 могут формироваться как включающие в себя любое подходящее число EC–блоков 508. EC–блоки 508 должны отправляться в соответствующие резервные узлы 406 в сообщениях INITIAL.
[112] В некоторых реализациях настоящего описания изобретения, EC–блоки 508 имеют идентичный размер. Однако, в альтернативных реализациях, EC–блоки 508 могут иметь размеры, которые отличаются друг от друга.
[113] В некоторых реализациях настоящего описания изобретения, первичный узел 404 формирует хэш–дерево 500 (например, дерево Меркла) с использованием EC–блоков 508. Хэш–дерево 500 включает в себя некоторое число концевых узлов, которые помечаются хэшем блоков данных, и некоторое число неконцевых узлов, которые помечаются криптографическим хэшем меток его дочерних узлов. Например, как проиллюстрировано на фиг. 5, хэш–дерево 500 сконфигурировано как включающее в себя четыре концевых узла 510, хэш A, хэш B, хэш C и хэш D, которые формируются в качестве криптографического хэша соответствующих EC–блоков 508, четыре неконцевых узла 512, которые формируются в качестве хэша конкатенации соответствующих дочерних узлов 510, и неконцевой узел 514, который формируется в качестве хэша дочерних узлов 512 и представляет собой корневой хэш хэш–дерева 500.
[114] Хэш–деревья 500 обеспечивают возможность эффективной и защищенной верификации контента больших структур данных. Хэш–деревья 500 могут использоваться для того, чтобы верифицировать любой вид данных, сохраненных, обработанных и передаваемых в/между компьютерами. Они могут помогать обеспечивать то, что блоки данных, принимаемые от других равноправных узлов в P2P–сети, принимаются неповрежденными и неизмененными, и даже проверять то, что другие равноправные узлы не отправляют поддельные блоки. Ниже подробнее поясняется верификация блоков данных с использованием хэш–дерева 500 со ссылкой на следующие этапы консенсусного процесса 400.
[115] Снова ссылаясь на фиг. 4, первичный узел 404 формирует первое сообщение (например, сообщение INITIAL) после формирования EC–блоков 508 и хэш–дерева 500. Первое сообщение указывает, что первичный узел инициирует консенсусный процесс. В некоторых реализациях, сообщение INITIAL, в качестве примера первого сообщения, формируется с использованием информации в EC–блоках 508 и хэш–дерево 500. В некоторых реализациях настоящего описания изобретения, ссылаясь на фиг. 6, сообщение INITIAL имеет формат <epoch, tx_root_hash, ec_block_hash, ec_block, seq, j>, где "epoch" представляет раунд консенсуса, в котором отправляется сообщение, "tx_root_hash" представляет корневой хэш 514 в хэш–дереве 500, "ec_block_hash" представляет хэши 510 и/или 512 в хэш–дереве 500, "ec_block" представляет EC–блоки 508 в хэш–дереве 500, "seq" представляет порядковый номер, ассоциированный с запросом 502 транзакции, и "j" представляет сетевой узел, который формирует и отправляет сообщение INITIAL. В некоторых реализациях, сообщение INITIAL может иметь другой формат, например, посредством включения дополнительных или других полей.
[116] Снова ссылаясь на фиг. 4, на 416, в первой фазе консенсусного процесса, первичный узел 404 многоадресно передает начальное сообщение в другие сетевые узлы (например, резервные узлы 406). В некоторых реализациях, сообщения INITIAL, которые отправляются в резервные узлы 406, имеют формат <epoch, tx_root_hash, ec_block_hash, ec_block, seq, j>. Например, первичный узел 404 может отправлять первое сообщение INITIAL <epoch 1, Hash ABCD, {Hash B, Hash C, Hash D}, EC block A, 1, 0> в первый резервный узел 406 и второе сообщение INITIAL <epoch 1, Hash ABCD, {Hash A, Hash C, Hash D}, EC block B, 1, 0> во второй резервный узел 406 и т.д. Следует отметить, что информация в сообщении INITIAL, такая как "ec_block", может использоваться с "ec_block_hash" для восстановления хэш–дерева 500. Например, в первом сообщении INITIAL <epoch 1, Hash ABCD, {Hash B, Hash C, Hash D}, EC block A, 1, 0>, EC–блок 508 "EC block A" может хэшироваться, чтобы формировать криптографический хэш 510 "Hash A", который дополнительно используется с другими хэшами 510 "{Hash B, Hash C, Hash D}", чтобы восстанавливать хэш–дерево 500. Восстановленное хэш–дерево 500 используется для того, чтобы верифицировать ECHO–сообщения, как подробнее пояснено ниже со ссылкой на следующие этапы консенсусного процесса.
[117] На этапе 418, каждый из резервных узлов 406 формирует второе сообщение (например, ECHO–сообщение) во второй фазе консенсусного процесса после приема сообщения INITIAL из первичного узла 404. Второе сообщение указывает, что резервный узел принимает первое сообщение из первичного узла. Второе сообщение отправляется в качестве ответа в ответ на первое сообщение. В некоторых реализациях настоящего описания изобретения, ECHO–сообщение формируется посредством резервного узла 406 как включающее в себя сообщение INITIAL или часть сообщения INITIAL и подпись резервного узла 406, ассоциированного с сообщением INITIAL. Например, резервный узел 406 может формировать подпись посредством подписания сообщения INITIAL или дайджеста сообщения INITIAL с использованием закрытого ключа. Подпись с закрытым ключом может использоваться посредством других сетевых узлов с использованием открытого ключа, спаренного с закрытым ключом, чтобы аутентифицировать ECHO–сообщение, которое включает в себя подпись с закрытым ключом.
[118] В некоторых реализациях настоящего описания изобретения, ссылаясь на фиг. 6, ECHO–сообщение имеет формат <epoch, tx_root_hash, ec_block_hash, ec_block, seq, sign_proof, j>, где "epoch" представляет раунд консенсуса, в котором отправляется сообщение, "tx_root_hash" представляет корневой хэш 514 в хэш–дереве 500, "ec_block_hash" представляет хэши 510 и/или 512 в хэш–дереве 500, "ec_block" представляет EC–блоки 508 в хэш–дереве 500, которые принимаются посредством соответствующих резервных узлов 406, "seq" представляет порядковый номер, ассоциированный с запросом 502 транзакции, "sign–proof" представляет подпись резервных узлов 406, ассоциированных с сообщениями INITIAL, и "j" представляет сетевой узел, который формирует и отправляет ECHO–сообщение. В некоторых реализациях, ECHO–сообщение может иметь другой формат, например, посредством включения дополнительных или других полей.
[119] Снова ссылаясь на фиг. 4, на этапе 420, резервные узлы 406 отправляют ECHO–сообщения в первичный узел 404. На  этапе 421, каждый из резервных узлов 406 отправляет ECHO–сообщения в другие резервные узлы 406. На 423, каждый из резервных узлов 406 может принимать ECHO–сообщения из других резервных узлов 406.
[120] На этапе 422, первичный узел 404 верифицирует ECHO–сообщения, которые отправляются посредством резервных узлов 406. В некоторых реализациях настоящего описания изобретения, первичный узел 404 верифицирует, являются или нет ECHO–сообщения достоверными, согласно хэш–дереву 500. Например, первичный узел 404 может принимать первое ECHO–сообщение <epoch 1, Hash ABCD,{Hash B, Hash C, Hash C}, ECHO–block A, 1, 1> из первого резервного узла 406. Первичный узел 404 может извлекать EC–блок 508 "EC block A" из сообщения и хэшировать его, чтобы формировать криптографический хэш 510 "Hash A". Первичный узел 404 дополнительно использует сформированный хэш 510 "Hash A" с другими хэшами 510 "{Hash B, Hash C, Hash C}" в сообщении, чтобы восстанавливать хэш–дерево 500. Затем первичный узел 404 определяет корневой хэш 514 восстановленного хэш–дерева 500 и сравнивает его с корневым хэшем 514 в ECHO–сообщении, таком как "Hash ABCD". Если два корневых хэша 514 совпадают, первичный узел 404 определяет, что ECHO–сообщение является достоверным. Первичный узел 404 может хранить достоверные ECHO–сообщения и отбрасывать ECHO–сообщения, которые определяются как недостоверные.
[121] На этапе 424, первичный узел 404 определяет, превышает или нет число достоверных ECHO–сообщений предварительно определенное пороговое значение. В некоторых реализациях настоящего описания изобретения, первичный узел 404 определяет, достигает или нет число достоверных ECHO–сообщений кворумного числа n–f или 2f+1, где n является общим числом сетевых узлов, и f является максимальным числом отказавших узлов, которые может допускать сеть.
[122] На этапе 426, первичный узел 404 восстанавливает запрос 502 транзакции в ответ на определение, что число достоверных ECHO–сообщений достигает кворумного числа. В некоторых реализациях настоящего описания изобретения, первичный узел 404 восстанавливает запрос 502 транзакции на основе, по меньшей мере, поднабора достоверных ECHO–сообщений согласно EC–коду. Например, первичный узел 404 может извлекать число n–2f или f+1 EC–блоков 508, которые находятся в кворумном числе (например, n–f или 2f+1) достоверных ECHO–сообщений, и использовать извлеченные EC–блоки 508 для того, чтобы восстанавливать запрос 502 транзакции согласно EC–коду 504.
[123] На этапе 428, в третьей фазе консенсусного процесса, первичный узел 404 формирует третье сообщение (например, сообщение подтверждения) в ответ на определение того, что запрос 502 транзакции успешно восстановлен. Третье сообщение указывает, что сетевой узел принимает предварительно определенное число вторых сообщений. В некоторых реализациях, третье сообщение может указывать, что сетевой узел готов выполнять транзакцию. В некоторых реализациях, третье сообщение может указывать, что транзакция успешно восстановлена в сетевом узле. Например, сообщение подтверждения может использоваться для того, чтобы указывать другим сетевым узлам, что запрос 502 транзакции успешно восстановлен. Если первичный узел 404 не может восстанавливать запрос 502 транзакции, первичный узел 404 не может формировать сообщение подтверждения.
[124] В некоторых реализациях настоящего описания изобретения, ссылаясь на фиг. 6, сообщение подтверждения имеет формат <epoch, tx_root_hash, seq, sign_proofs, j>, где "epoch" представляет раунд консенсуса, в котором отправляется сообщение, "tx_root_hash" представляет корневой хэш 514 в хэш–дереве 500, "seq" представляет порядковый номер, ассоциированный с запросом 502 транзакции, "sign–proofs" представляет набор подписей в достоверных ECHO–сообщениях, и "j" представляет сетевой узел, который формирует и отправляет сообщение подтверждения. В некоторых реализациях, сообщение подтверждения может иметь другой формат, например, посредством включения дополнительных или других полей.
[125] Снова ссылаясь на фиг. 4, на этапе 430, первичный узел 404 отправляет сообщение подтверждения в резервные узлы 406.
[126] Аналогично первичному узлу 404, каждый из резервных узлов 406 может восстанавливать запрос транзакции, например, посредством выполнения аналогичных этапов с этапами 422–428 в качестве первичного узла 404. На этапе 432, каждый из резервных узлов 406 формирует сообщение подтверждения в ответ на определение, что запрос 502 транзакции успешно восстановлен посредством резервного узла 406. В некоторых реализациях, первичный узел 404 и резервный узел 406 могут выполнять этапы 422–428 параллельным способом, например, как указано на фиг. 3.
[127] На этапе 434, резервные узлы 406 отправляют сообщения подтверждения в первичный узел 404. Между тем, каждый из резервных узлов 406 может отправлять сообщения подтверждения в другие резервные узлы 406.
[128] На этапе 436, первичный узел 404 выполняет запрос 502 транзакции в ответ на определение, что число сообщений подтверждения превышает предварительно определенное пороговое значение. В некоторых реализациях настоящего описания изобретения, первичный узел 404 определяет, являются или нет принятые сообщения подтверждения идентичными, и достигает или нет число сообщений подтверждения, которые являются идентичными, кворумного числа (например, 2f+1). Если число идентичных сообщений подтверждения достигает кворумного числа, первичный узел 404 определяет, что консенсус достигнут между всеми сетевыми узлами, и затем выполняет запрос 502 транзакции локально. В некоторых реализациях настоящего описания изобретения, если первичный узел 404 определяет, что число сообщений подтверждения, которые являются идентичными, не достигает кворумного числа, первичный узел 404 определяет, что консенсус не достигнут между всеми сетевыми узлами, и затем отказывается от выполнения запроса 502 транзакции.
[129] В некоторых реализациях настоящего описания изобретения, каждый из резервных узлов 406 может выполнять идентичные операции, которые выполняются посредством первичного узла 404, как описано выше на 436 перед выполнением запроса 502 транзакции. Если резервный узел 406 определяет, что сообщения подтверждения, которые он принимает, превышают предварительно определенное пороговое значение, резервный узел 406 определяет, что консенсус достигнут между сетевыми узлами, и выполняет запрос 502 транзакции локально. В некоторых реализациях настоящего описания изобретения, если резервный узел 406 определяет, что число сообщений подтверждения, которые являются идентичными, не достигает кворумного числа, резервный узел 406 определяет, что консенсус не достигнут между всеми сетевыми узлами, и затем отказывается от выполнения запроса 502 транзакции.
[130] На этапе 438, первичный узел 404 отправляет результат транзакции в клиентский узел 402 после выполнения запроса 502 транзакции. Резервные узлы 406, которые успешно выполняют запрос 502 транзакции локально, также могут отправлять свои соответствующие результаты транзакции в клиентский узел 402.
[131] Консенсусный процесс, как пояснено выше, включает в себя множество признаков, которые улучшают работу всей системы цепочек блоков, и помогает смягчать узкое место сети. Например, консенсусный процесс в настоящем описании изобретения включает в себя формирование некоторого числа EC–блоков согласно EC–коду с использованием запроса транзакции и отправку одного из EC–блоков в каждый из сетевых узлов. EC–блок меньше по размеру, чем исходный запрос транзакции. Следовательно, отправка EC–блока вместо запроса транзакции в сетевые узлы уменьшает размер блоков данных, которые передаются между сетевыми узлами сети цепочек блоков, за счет этого экономя полосу пропускания сети и уменьшая сетевую нагрузку. Это дополнительно уменьшает размер данных, которые записываются и считываются в/из пространства запоминающего устройства сетевых узлов, за счет этого уменьшая нагрузку на пространство запоминающего устройства сетевых узлов и повышая эффективность полной системы цепочек блоков.
[132] Во время консенсусного процесса, резервные узлы ожидают запроса из первичного узла. Однако, первичный узел может сталкиваться с византийской ошибкой или катастрофическим отказом таким образом, что первичный узел не может широковещательно передавать запрос в пределах предварительно определенного временного окна. Когда конкретное количество времени проходит без многоадресной передачи, посредством первичного узла, запроса, новый первичный узел, возможно, должен выбираться, чтобы предотвращать неограниченное ожидание посредством резервных узлов запросов, которые следует выполнять.
[133] Фиг. 7 иллюстрирует пример процесса 700 для выполнения изменения первичного узла (например, узла 214 или 404) распределенной системы (например, сети 102 и 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В частности, фиг. 7 иллюстрирует схему, представляющую примерный вариант осуществления способа 700 выполнения изменения первичного узла, согласно настоящему описанию изобретения. В некоторых реализациях, первичный узел ассоциирован со эпохой, которая включает в себя консенсусный процесс, в котором первичный узел представляет собой лидера. Изменение первичного узла может приводить к изменению эпохи.
0
1
2
3
0
0
[134] В некоторых реализациях, в ответ на определение, что первичный узел текущей эпохи должен изменяться, резервный узел сети цепочек блоков отправляет первое сообщение в другие сетевые узлы. Первое сообщение указывает, что резервный узел должен представлять собой новый первичный узел в новой эпохе. Например, как проиллюстрировано на фиг. 7, резервный узел R отправляет сообщение EPOCH_CHANGE в другие сетевые узлы R, R и R в сети цепочек блоков в ответ на то, что резервный узел R определяет, что текущий первичный узел является отказавшим, и на то, что изменение эпохи должно выполняться. Сообщение EPOCH_CHANGE представляет собой пример первого сообщения, указывающего, что резервный узел R применяется в качестве нового первичного узла. Изменение эпохи может вызывать изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом. Следует отметить, что процесс 700 проиллюстрирован как реализованный в сочетании с четырьмя сетевыми узлами только в качестве иллюстрации. Процесс 700 может реализовываться в сочетании с любым подходящим числом сетевых узлов.
1
0
0
0
1
2
3
2
3
[135] Затем каждый из сетевых узлов принимает первое сообщение, которое отправляется посредством резервного узла, подготавливает второе сообщение в ответ на первое сообщение и многоадресно передает второе сообщение в другие сетевые узлы. Например, как проиллюстрировано на фиг. 7, сетевой узел R принимает сообщение EPOCH_CHANGE, которое отправляется посредством резервного узла R, и отвечает резервному узлу R сообщением NEW_EPOCH, указывающим подтверждение, что резервный узел R может становиться новым первичным узлом. Между тем, сетевой узел R также многоадресно передает сообщение NEW_EPOCH в другие сетевые узлы, к примеру, в сетевые узлы R и R. Аналогично, сетевой узел R и R многоадресно передает сообщение NEW_EPOCH в другие сетевые узлы.
[136] Ниже подробнее поясняются процесс изменения эпохи, как пояснено выше, формат сообщения EPOCH_CHANGE и формат сообщения NEW_EPOCH со ссылкой на фиг. 8–9.
[137] Фиг. 8 иллюстрирует пример процесса 800 для выполнения изменения первичного узла в распределенной системе (например, в сети 102 или 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В некоторых реализациях, примерный процесс 800 может выполняться с использованием одной или более машиноисполняемых программ, выполняемых с использованием одного или более вычислительных устройств. Для ясности представления, нижеприведенное описание, в общем, описывает способ 800 в контексте других чертежей в этом описании. Следует понимать, что способ 800 может осуществляться, например, посредством любой подходящей системы, окружения, программного обеспечения и аппаратных средств либо комбинации систем, окружений, программного обеспечения и аппаратных средств, надлежащим образом. В некоторых реализациях, различные этапы способа 800 могут выполняться параллельно, в комбинации, циклически или в любом порядке.
[138] Процесс 800 начинается на этапе 806, на котором резервный узел 802 определяет, что изменение эпохи должно выполняться. Изменение эпохи, поясненное в данном документе, вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом. Примерная эпоха может включать в себя консенсусный процесс (например, консенсусный процесс 300 или 400) для достижения консенсуса между некоторым числом сетевых узлов с использованием первичного узла, как пояснено выше со ссылкой на фиг. 3–6.
[139] В некоторых реализациях настоящего описания изобретения, резервный узел 802 определяет, что изменение эпохи должно выполняться, в ответ на определение, что резервный узел 802 по–прежнему ожидает запроса из текущего первичного узла после того, как конкретное количество времени проходит без приема запроса из текущего первичного узла. Например, текущий первичный узел может сталкиваться с византийской ошибкой или катастрофическим отказом таким образом, что текущий первичный узел не может многоадресно передавать запрос в пределах предварительно определенного временного окна. Следовательно, изменение эпохи инициируется посредством тайм–аутов, которые предотвращают неограниченное ожидание резервными узлами запросов, которые следует выполнять. Процесс изменения эпохи, поясненный в данном документе, предоставляет живучесть и сокращает время сетевой задержки посредством предоставления возможности системе добиваться прогресса, когда первичный узел отказал.
[140] На этапе 808, резервный узел 802 определяет соответствующий весовой коэффициент резервного узла 802, ассоциированного с каждой из фаз консенсусного процесса в текущей эпохе. В некоторых реализациях, консенсусный процесс включает в себя три фазы, как описано выше со ссылкой на фиг. 3–6. Весовой коэффициент представляет собой показатель классификации резервного узла 802 в качестве нового первичного узла в новой эпохе.
[141] В некоторых реализациях настоящего описания изобретения, резервный узел 802 определяет весовой коэффициент резервного узла 802 для первой фазы консенсусного процесса в текущей эпохе в качестве первого значения. Например, резервному узлу 802 может назначаться начальный вес 10%, если резервный узел 802 переходит к первой фазе консенсусного процесса (например, к первой фазе 310 консенсусного процесса 300). В альтернативных реализациях настоящего описания изобретения, резервный узел 802 может назначать любое подходящее значение весового коэффициента резервному узлу 802 для первой фазы текущего консенсусного процесса.
[142] В некоторых реализациях настоящего описания изобретения, резервный узел 802 определяет весовой коэффициент резервного узла 802 для второй фазы консенсусного процесса (например, второй фазы 320 консенсусного процесса 300) в текущей эпохе на основе процесса верификации кворума. Процесс верификации кворума выполняется посредством определения, принимает или нет резервный узел 802 предварительно определенное число (например, 2f+1) ECHO–сообщений из других сетевых узлов во второй фазе консенсусного процесса.
[143] В некоторых реализациях настоящего описания изобретения, если резервный узел 802 не проходит кворумную верификацию (например, резервный узел 802 принимает число ECHO–сообщений, которое ниже предварительно определенного порогового значения), резервный узел 802 может определять весовой коэффициент резервного узла 802 для второй фазы консенсусного процесса в качестве первого значения. Если резервный узел 802 проходит кворумную верификацию (например, резервный узел 802 принимает число ECHO–сообщений, которое равно или превышает предварительно определенное пороговое значение), резервный узел 802 может определять весовой коэффициент резервного узла 802 для второй фазы консенсусного процесса в качестве второго значения. В некоторых реализациях настоящего описания изобретения, второе значение определяется как больше первого значения. Например, если резервный узел 802 не проходит кворумную верификацию, резервному узлу 802 может назначаться значение весового коэффициента в нуль для второй фазы консенсусного процесса. Если резервный узел 802 проходит кворумную верификацию, резервному узлу 802 может назначаться значение весового коэффициента 45% для резервного узла 802 для второй фазы консенсусного процесса. Однако, в альтернативных реализациях настоящего описания изобретения, резервный узел 802 может назначать любое подходящее значение резервному узлу 802 для второй фазы консенсусного процесса в текущей эпохе.
[144] В некоторых реализациях настоящего описания изобретения, верификация кворума дополнительно включает в себя верификацию, являются или нет ECHO–сообщения, которые резервный узел 802 принимает из других сетевых узлов в течение второй фазы консенсусного процесса, достоверными. Например, резервный узел 802 может аутентифицировать подписи с закрытым ключом в ECHO–сообщениях с использованием открытого ключа, чтобы определять, являются или нет ECHO–сообщения достоверными.
[145] Аналогично определению весового коэффициента для второй фазы, в некоторых реализациях, резервный узел 802 определяет весовой коэффициент резервного узла 802 для третьей фазы консенсусного процесса (например, третьей фазы 330 консенсусного процесса 300) в текущей эпохе на основе процесса верификации кворума. Процесс верификации кворума выполняется посредством определения, принимает или нет резервный узел 802 предварительно определенное число (например, 2f+1) сообщений принятия из других сетевых узлов в третьей фазе консенсусного процесса в текущей эпохе. Каждое из сообщений принятия из других сетевых узлов указывает, что каждый из других сетевых узлов принял предварительно определенное число ECHO–сообщений. Сообщение принятия, например, может представлять собой сообщения ACCEPT, описанные выше со ссылкой на третью фазу 330 консенсусного процесса 300.
[146] В некоторых реализациях настоящего описания изобретения, если резервный узел 802 не проходит кворумную верификацию (например, резервный узел 802 принимает некоторое число сообщений ACCEPT, которое ниже предварительно определенного порогового значения), резервный узел 802 может определять весовой коэффициент резервного узла 802 для третьей фазы консенсусного процесса в качестве первого значения. Если резервный узел 802 проходит кворумную верификацию (например, резервный узел 802 принимает некоторое число сообщений ACCEPT, которое равно или превышает предварительно определенное пороговое значение), резервный узел 802 может определять весовой коэффициент резервного узла 802 для третьей фазы консенсусного процесса в качестве второго значения. В некоторых реализациях, второе значение определяется как больше первого значения. Например, если резервный узел 802 не проходит кворумную верификацию, резервному узлу 802 может назначаться значение весового коэффициента в нуль для резервного узла 802 для третьей фазы консенсусного процесса. Если резервный узел 802 проходит кворумную верификацию, резервному узлу 802 может назначаться значение весового коэффициента 45% для резервного узла 802 для третьей фазы консенсусного процесса. Однако, в альтернативных реализациях настоящего описания изобретения, резервный узел 802 может назначать любое подходящее значение резервному узлу 802 для третьей фазы консенсусного процесса в текущей эпохе.
[147] На этапе 810, после определения соответствующих весовых коэффициентов резервного узла 802 для фаз консенсусного процесса в текущей эпохе, резервный узел 802 определяет сумму весовых коэффициентов резервного узла 802 для консенсусного процесса на основе соответствующих весовых коэффициентов. В некоторых реализациях настоящего описания изобретения, сумма весовых коэффициентов представляет собой сумму соответствующих сумм резервных узлов, ассоциированных с каждой из фаз консенсусного процесса в текущей эпохе. Например, если резервный узел 802 определяет первое значение весового коэффициента резервного узла 802 для первой фазы как равное 10%, второе значение весового коэффициента резервного узла 802 для второй фазы как равное 45% и третье значение весового коэффициента резервного узла 802 для третьей фазы как равное 45%, резервный узел 802 определяет сумму весовых коэффициентов как равную 100%. В качестве другого примера, если резервный узел 802 определяет первое значение весового коэффициента резервного узла 802 для первой фазы как равное 10%, второе значение весового коэффициента резервного узла 802 для второй фазы как равное 45% и третье значение весового коэффициента резервного узла 802 для третьей фазы как равное 0, резервный узел 802 определяет сумму весовых коэффициентов как равную 55%.
[148] На этапе 812, резервный узел 802 отправляет сообщение EPOCH_CHANGE в другие сетевые узлы 804, если резервный узел 802 определяет, что сумма весовых коэффициентов, которая определена на 810, достигает или превышает предварительно определенное пороговое значение. Например, резервный узел 802 может отправлять сообщение EPOCH_CHANGE в другие сетевые узлы 804, если сумма весовых коэффициентов, определенная на этапе 810, достигает 100%. Сообщение EPOCH_CHANGE указывает запрос на изменение с текущей эпохе с текущим первичным узлом на новую эпоху, в котором резервный узел представляет собой новый первичный узел.
[149] В некоторых реализациях настоящего описания изобретения, ссылаясь на фиг. 9, сообщение EPOCH_CHANGE имеет формат <weight, epoch+1, ECHO{}, ACCEPT{}, j>, где "weight" представляет сумму весовых коэффициентов резервного узла 802, как определено ранее на этапе 810 для консенсусного процесса, "epoch+1" представляет раунд нового консенсуса (т.е. новой эпохе), ассоциированный с новым первичным узлом, "ECHO{}" представляет набор ECHO–сообщений, которые резервный узел 802 принимает в течение второй фазы консенсусного процесса, "ACCEPT{}" представляет набор сообщений ACCEPT, которые резервный узел 802 принимает в течение третьей фазы консенсусного процесса, и "j" представляет сетевой узел (например, резервный узел 802), который формирует и отправляет сообщение EPOCH_CHANGE. В некоторых реализациях, сообщение EPOCH_CHANGE может иметь другой формат, например, посредством включения дополнительных или других полей.
[150] Снова ссылаясь на фиг. 8, на этапе 814, сетевые узлы 804, отличные от резервного узла 802, верифицируют сообщение EPOCH_CHANGE, которое отправляется посредством резервного узла 802. В некоторых реализациях, каждый из сетевых узлов 804 верифицирует, является или нет сообщение EPOCH_CHANGE достоверным, посредством верификации, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной. В некоторых реализациях, верификация, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, включает в себя верификацию, является ли набор подписей в ECHO–сообщениях, включенных в сообщение EPOCH_CHANGE, достоверным. Например, каждый из сетевых узлов 804 может аутентифицировать набор подписей с закрытым ключом в ECHO–сообщениях, включенных в сообщение EPOCH_CHANGE, с использованием открытого ключа.
[151] На этапе 816, каждый из сетевых узлов 804 отправляет сообщение NEW_EPOCH в резервный узел 802 в ответ на верификацию, что сообщение EPOCH_CHANGE, отправленное посредством резервного узла 802, является достоверным. Сообщение NEW_EPOCH указывает подтверждение резервного узла в качестве нового первичного узла. Например, сообщение NEW_EPOCH, отправленное посредством сетевого узла 804, включает в себя индикатор того, что сетевой узел 804 подтверждает, что резервный узел 802 должен становиться новым первичным узлом в новой эпохе. Между тем, каждый из сетевых узлов 804 также отправляет сообщение NEW_EPOCH в другие сетевые узлы 804.
[152] Ссылаясь на фиг. 9, сообщение NEW_EPOCH формируется как имеющее формат <epoch+1, i, j, seq, ec_digest>, где ""epoch+1" представляет раунд нового консенсуса (т.е. новой эпохи) ассоциированный с новым первичным узлом, "i" представляет новый первичный узел в новой эпохе, "j" представляет сетевой узел 804, который отправляет сообщение NEW_EPOCH, и "ec_digest" представляет дайджест сообщения EPOCH_CHANGE. В некоторых реализациях, дайджест сообщения EPOCH_CHANGE включает в себя хэш–значение сообщения EPOCH_CHANGE. В некоторых реализациях, сообщение NEW_EPOCH может иметь другой формат, например, посредством включения дополнительных или других полей.
[153] Снова ссылаясь на фиг. 8, на этапе 818, резервный узел 802 верифицирует, являются или нет сообщения NEW_EPOCH, которые отправляются посредством сетевых узлов 804, достоверными. В некоторых реализациях, резервный узел 802 верифицирует сообщения NEW_EPOCH посредством верификации, является ли дайджест сообщения EPOCH_CHANGE в сообщениях NEW_EPOCH достоверным. Поскольку дайджест включает в себя информацию сообщения EPOCH_CHANGE, дайджест также включает подписи в сообщение EPOCH_CHANGE. Резервный узел 802 может верифицировать дайджест сообщения EPOCH_CHANGE посредством верификации, является ли набор подписей в сообщении EPOCH_CHANGE достоверным.
[154] На этапе 820, резервный узел 802 определяет, превышает или нет число достоверных сообщений NEW_EPOCH, как определено на этапе 818, предварительно определенное пороговое значение. В некоторых реализациях, предварительно определенное пороговое значение составляет кворумное число (например, 2f+1).
[155] На этапе 822, резервный узел 802 определяет резервный узел 802 в качестве нового первичного узла в новой эпохе в ответ на определение, что некоторое число достоверных сообщений NEW_EPOCH превышает предварительно определенное пороговое значение. Следует отметить, что каждый из сетевых узлов 804 выполняет этапы 818–822, идентичные этапам резервного узла 802, и сетевые узлы 804 и резервный узел 802 могут выполнять этапы 818–822 параллельным способом. Например, каждый из сетевых узлов 804 может верифицировать набор сообщений NEW_EPOCH, которые отправляются из других сетевых узлов 804, определять, превышает ли число достоверных сообщений NEW_EPOCH предварительно определенное пороговое значение, и определять новый первичный узел.
[156] Процесс изменения эпохи (например, процесс 700 или 800), как пояснено выше, включает в себя множество особенностей, которые улучшают работу всей системы цепочек блоков, и помогает смягчать узкое место сети. Например, процесс изменения эпохи в настоящем описании изобретения включает в себя назначение соответствующих весовых коэффициентов для трех фаз консенсусного процесса, определение суммы весовых коэффициентов на основе соответствующих весовых коэффициентов трех фаз и определение нового первичного узла на основе суммы весовых коэффициентов. Процесс изменения эпохи на основе суммы весовых коэффициентов вместо способа круговой проверки может упрощать выбор нового первичного узла, который является неотказавшим, своевременно. Способ круговой проверки может вызывать частое изменение первичного узла, когда несколько сетевых узлов в линии для нового первичного узла являются отказавшими. Это значительно затрагивает услугу на основе цепочек блоков посредством введения времени задержки или приостановки при нахождении первичного узла, который является неотказавшим. В отличие от способа круговой проверки, процесс изменения эпохи в настоящем описании изобретения основывается на сумме весовых коэффициентов, чтобы выбирать новый первичный узел, что позволяет уменьшать время при нахождении нового первичного узла, который не является отказавшим. Это дополнительно может повышать эффективность полной системы цепочек блоков в предоставлении услуг на основе цепочек блоков.
[157] В ходе работы сети цепочек блоков, скорость выполнения некоторых сетевых узлов может запаздывать относительно скорости большинства сетевых узлов вследствие дрожания сети, внезапного отказа подачи мощности, отказа диска и т.п. В этом сценарии, более 1/3 сетевых узлов в системе могут отказывать. BFT предоставляет безопасность и живучесть, если менее 1/3 сетевых узлов отказало в течение продолжительности существования системы. Однако, эти гарантии являются недостаточными для долгосрочных систем, поскольку верхняя граница с большой вероятностью должна превышаться в сценарии, как описано выше. Следовательно, требуется процесс восстановления, который заставляет отказавшие сетевые узлы вести себя корректно снова, и продолжает участвовать в последующих консенсусных процессах, чтобы обеспечивать возможность системе допускать больше f отказов в течение своей продолжительности существования. Кроме того, описанный процесс восстановления может восстанавливать один или более сетевых узлов, которые по–прежнему выполняют консенсусный процесс (например, консенсусный процесс 300 или 400) и не должны ожидать до тех пор, пока консенсус не достигается между всеми сетевыми узлами. В связи с этим, описанный процесс восстановления дополнительно может уменьшать время системной задержки и повышать эффективность сети цепочек блоков.
[158] Фиг. 10 иллюстрирует пример процесса 1000 для выполнения процесса восстановления сетевого узла (например, узла 214 или 404) распределенной системы (например, сети 102 и 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В частности, фиг. 10 иллюстрирует схему, представляющую примерный вариант осуществления способа 1000 выполнения процесса восстановления сетевого узла, согласно настоящему описанию изобретения. Как проиллюстрировано на фиг. 10, процесс 1000 включает в себя несколько фаз и стадий.
0
0
0
0
0
0
0
0
[159] В первой фазе 1010, сетевой узел (например, сетевой узел R), который хочет восстанавливать целевую транзакцию с целевым порядковым номером R, многоадресно передает сообщение с запросом состояния (например, сообщение QUERY_STATE) в другие сетевые узлы, указывающее, что сетевой узел должен восстанавливаться. Сообщение с запросом состояния может включать в себя целевой порядковый номер, который сетевой узел R хочет восстанавливать. Во второй фазе 1020, другие сетевые узлы принимают сообщение с запросом состояния и отправляют сообщение с ответом по состоянию (например, сообщение REPLY_STATE) в сетевой узел R. В третьей фазе 1030, сетевой узел Rотправляет запрашивающее сообщение (например, сообщение FETCH_ECHO) в другие сетевые узлы, запрашивающее ECHO–сообщение из каждого из других сетевых узлов. ECHO–сообщение может быть идентичным ECHO–сообщению, отправленному посредством соответствующих других сетевых узлов во второй фазе 320 консенсусного процесса 300, как описано выше со ссылкой на фиг. 3–6. В четвертой фазе 1040, каждый из других сетевых узлов отправляет ECHO–сообщение в сетевой узел Rв ответ на сообщение FETCH_ECHO. В пятой фазе 1050, сетевой узел R верифицирует ECHO–сообщения и восстанавливает целевую транзакцию согласно EC–коду, например, согласно примерным технологиям восстановления, как описано выше со ссылкой на фиг. 4. В шестой фазе 1060, сетевой узел R отправляет сообщение ACCEPT в другие сетевые узлы, указывающее то, что сетевой узел восстановлен.
[160] Следует отметить, что процесс 1000 проиллюстрирован как реализованный в сочетании с четырьмя сетевыми узлами только в качестве иллюстрации. Процесс 1000 может реализовываться в сочетании с любым подходящим числом сетевых узлов. Ниже подробнее поясняются процесс 1000, формат сообщения QUERY_STATE  и формат сообщения REPLY_STATE со ссылкой на фиг. 11–12.
[161] Фиг. 11 иллюстрирует пример процесса 1100 для выполнения процесса восстановления сетевого узла в распределенной системе (например, в сети 102 или 212 цепочек блоков), который может выполняться в соответствии с реализациями настоящего описания изобретения. В некоторых реализациях, процесс 1100 может выполняться с использованием одной или более машиноисполняемых программ, выполняемых с использованием одного или более вычислительных устройств. Для ясности представления, нижеприведенное описание, в общем, описывает способ 1100 в контексте других чертежей в этом описании. Следует понимать, что способ 1100 может осуществляться, например, посредством любой подходящей системы, окружения, программного обеспечения и аппаратных средств либо комбинации систем, окружений, программного обеспечения и аппаратных средств, надлежащим образом. В некоторых реализациях, различные этапы способа 1100 могут выполняться параллельно, в комбинации, циклически или в любом порядке.
[162] Процесс 1100 начинается на этапе 1106, на котором сетевой узел 1102 многоадресно передает сообщение с запросом состояния в другие сетевые узлы 1104. Сообщение с запросом состояния включает в себя индикатор, что сетевой узел 1102 должен восстанавливать целевую транзакцию с целевым порядковым номером. Сетевой узел 1102 может представлять собой первичный узел или резервный узел.
[163] В некоторых реализациях настоящего описания изобретения, ссылаясь на фиг. 12, сообщение QUERY_STATE, в качестве примера сообщения с запросом состояния, имеет формат <j, seq>, где "j" представляет сетевой узел 1102, который отправляет сообщение QUERY_STATE, и "seq" представляет наибольший порядковый номер или последний порядковый номер для сетевого узла 1102 в текущем консенсусном процессе. В некоторых реализациях, сообщение QUERY_STATE может иметь другой формат, например, посредством включения дополнительных или других полей.
[164] Посредством широковещательной передачи сообщения QUERY_STATE в другие сетевые узлы 1104, сетевой узел 1102 запрашивает другие сетевые узлы 1104, чтобы отправлять последний порядковый номер в сетевой узел 1102, за счет этого получая последнюю информацию блоков в системе цепочек блоков. Кроме того, посредством получения последней информации блоков для всей системы цепочек блоков, сетевой узел 1102 может иметь возможность синхронизироваться с последним состоянием всей системы, за счет этого восстанавливая себя и продолжая участвовать в консенсусном процессе.
[165] Снова ссылаясь на фиг. 11, на 1108, каждый из других сетевых узлов 1104 отправляет сообщение с ответом по состоянию (например, сообщение REPLY_STATE) в сетевой узел 1102 в ответ на прием сообщения с запросом состояния. В некоторых реализациях, сообщение с ответом по состоянию включает в себя предыдущий порядковый номер, ассоциированный с сетевыми узлами 1104.
[166] В некоторых реализациях, ссылаясь на фиг. 12, сообщение REPLY_STATE, в качестве примера сообщения воспроизведения состояния, имеет формат <j, last_seq>, где "j" представляет сетевой узел 1104, который отправляет сообщение REPLY_STATE, и "last_seq" представляет предыдущий порядковый номер для сетевого узла 1104 в текущем консенсусном процессе. В некоторых реализациях, сообщение REPLY_STATE может иметь другой формат, например, посредством включения дополнительных или других полей.
[167] Снова ссылаясь на фиг. 11, на этапе 1110, сетевой узел 1102 определяет, превышает или нет число принимаемых сообщений с ответом по состоянию предварительно определенное пороговое значение. Например, сетевой узел 1102 может определять, превышает или нет число принимаемых сообщений REPLY_STATE кворумное число (например, 2f+1 или n–f). В некоторых реализациях, сетевой узел 1102 дополнительно определяет, включает ли в себя кворумное число принимаемых сообщений REPLY_STATE идентичный порядковый номер. То, что кворумное число принимаемых сообщений REPLY_STATE включает в себя идентичный порядковый номер, означает, что большинство сетевых узлов 1104 согласует общее состояние всей системы.
[168] На этапе 1112, сетевой узел 1102 определяет целевой порядковый номер на основе идентичного порядкового номера, если сетевой узел 1102 определяет, что число сообщений с ответом по состоянию, включающих в себя идентичный порядковый номер, принимаемых из сетевых узлов 1104, превышает предварительно определенное пороговое значение. Например, сетевой узел 1102 может определять целевой порядковый номер в качестве приращения (например, "last_seq+1") идентичного порядкового номера (например, "last_seq").
[169] На этапе 1114, сетевой узел 1102 отправляет запрашивающее сообщение (например, сообщение FETCH_ECHO) в другие сетевые узлы 1104. Сообщение FETCH_ECHO отправляется посредством сетевого узла 1102, чтобы запрашивать ECHO–сообщение из каждого из других сетевых узлов 1104. Как пояснено выше со ссылкой на фиг. 3–6, ECHO–сообщение представляет собой сообщение, передаваемое посредством сетевых узлов 1104 для достижения консенсуса между сетевыми узлами 1104 по целевой транзакции. ECHO–сообщение включает в себя часть целевой транзакции (например, EC–блок) и подпись сетевого узла 1104, который отправляет ECHO–сообщение.
[170] В некоторых реализациях, ссылаясь на фиг. 12, сообщение FETCH_ECHO, в качестве примера запрашивающего сообщения, имеет формат <j, last_seq+1>, где "j" представляет сетевой узел 1102, который отправляет сообщение FETCH_ECHO, и "last_seq+1" представляет целевой порядковый номер, ассоциированный с ECHO–сообщениями, которые сетевой узел 1102 запрашивает из других сетевых узлов 1104. В некоторых реализациях, сообщение FETCH_ECHO может иметь другой формат, например, посредством включения дополнительных или других полей.
[171] Сообщение FETCH_ECHO, как пояснено в данном документе, отправляется посредством сетевого узла 1102, чтобы запрашивать ECHO–сообщения, включающие в себя последний порядковый номер или наибольший порядковый номер, из других сетевых узлов 1104. Посредством сбора ECHO–сообщений, включающих в себя последний порядковый номер или наибольший порядковый номер, из других сетевых узлов 1104, сетевой узел 1102 может иметь возможность восстанавливаться в последнее состояние, ассоциированное с последним порядковым номером.
[172] Снова ссылаясь на фиг. 11, на этапе 1116, каждый из сетевых узлов 1104 отправляет ECHO–сообщение в сетевой узел 1102 в ответ на прием сообщения FETCH_ECHO. В некоторых реализациях, каждый из сетевых узлов 1104 верифицирует сообщение FETCH_ECHO до отправки ECHO–сообщения в сетевой узел 1102. В некоторых реализациях, каждый из сетевых узлов 1104 верифицирует сообщение FETCH_ECHO посредством определения, превышает или нет порядковый номер, включенный в сообщения FETCH_ECHO, последний порядковый номер, ассоциированный с сетевым узлом 1104. Если порядковый номер, включенный в сообщения FETCH_ECHO, равен последнему порядковому номеру, ассоциированному с сетевым узлом 1104, сетевой узел 1104 определяет, что сообщение FETCH_ECHO является достоверным, и, что ECHO–сообщение должно отправляться в сетевой узел 1102. Если порядковый номер, включенный в сообщения FETCH_ECHO, превышает последний порядковый номер, ассоциированный с сетевым узлом 1104, сетевой узел 1104 определяет, что сообщение FETCH_ECHO является недостоверным, и то, что ECHO–сообщение не должно отправляться в сетевой узел 1102.
[173] На этапе 1118, сетевой узел 1102 верифицирует 1102, являются или нет ECHO–сообщения, отправленные посредством сетевых узлов 1104, достоверными. В некоторых реализациях, сетевой узел 1102 верифицирует ECHO–сообщения с использованием дерева Меркла. Например, сетевой узел 1102 может использовать данные, включенные в ECHO–сообщение, для того чтобы восстанавливать дерево Меркла и определять восстановленное значение корневого хэша восстановленного дерева Меркла. Сетевой узел 1102 затем может сравнивать восстановленное значение корневого хэша со значением корневого хэша, включенным в ECHO–сообщение. Если восстановленное значение корневого хэша совпадает со значением корневого хэша, включенным в ECHO–сообщение, сетевой узел 1102 определяет, что ECHO–сообщение является достоверным. Если восстановленное значение корневого хэша не совпадает со значением корневого хэша, включенным в ECHO–сообщение, сетевой узел 1102 определяет, что ECHO–сообщение является недостоверным, и может отбрасывать недостоверное ECHO–сообщение.
[174] В некоторых реализациях, сетевой узел 1102 верифицирует, является или нет ECHO–сообщение достоверным, посредством дополнительной верификации, является KB подпись в ECHO–сообщении достоверной. Например, сетевой узел 1102 может аутентифицировать подпись с закрытым ключом в ECHO–сообщении с использованием открытого ключа, спаренного с закрытым ключом, чтобы верифицировать подпись.
[175] На этапе 1120, сетевой узел 1102 определяет, превышает или нет число достоверных ECHO–сообщений, принимаемых из других сетевых узлов 1104, предварительно определенное пороговое значение. Например, сетевой узел 1102 может определять, превышает или нет число достоверных ECHO–сообщений, принимаемых из других сетевых узлов 1104, кворумное число (например, 2f+1).
[176] На этапе 1122 сетевой узел 1102 восстанавливает целевую транзакцию с целевым порядковым номером в ответ на определение, что число достоверных ECHO–сообщений превышает предварительно определенное пороговое значение. В некоторых реализациях, сетевой узел 1102 восстанавливает целевую транзакцию с использованием данных, включенных в числе достоверных ECHO–сообщений. Например, сетевой узел 1102 может извлекать поднабор EC–блоков, включенных в ECHO–сообщения, чтобы восстанавливать целевую транзакцию согласно EC–коду.
[177] На 1124, сетевой узел 1102 многоадресно передает сообщение ACCEPT в другие сетевые узлы 1104 после восстановления целевой транзакции. Например, сетевой узел 1102 может многоадресно передавать сообщение ACCEPT в другие сетевые узлы 1104 после успешного восстановления целевой транзакции. В некоторых реализациях, сообщение ACCEPT включает в себя набор подписей в ECHO–сообщениях и целевой порядковый номер. Посредством отправки сообщения ACCEPT, включающего в себя подписи и целевой порядковый номер, в другие сетевые узлы 1104, сетевой узел 1102 указывает другим сетевым узлам 1104, что сетевой узел 1102 восстановлен и синхронизирован с последним состоянием системы.
[178] Процесс восстановления, как пояснено выше в настоящем описании изобретения, включает в себя множество особенностей, которые улучшают работу компьютеров, которая реализует процесс восстановления, и помогает смягчать узкое место сети. Например, процесс восстановления в настоящем описании изобретения включает в себя операции, включающие в себя отправку сообщения с запросом состояния посредством сетевого узла, который применяется в качестве нового первичного узла, прием сообщений с ответом по состоянию из других сетевых узлов и отправку сообщения FETCH_ECHO посредством сетевого узла, чтобы запрашивать ECHO–сообщения из других сетевых узлов. Эти операции выполняются таким образом, что процесс восстановления отказавшего сетевого узла не создает помехи нормальной работе консенсусного процесса между другими неотказавшими сетевыми узлами. Это упрощает экономию вычислительных и сетевых ресурсов для восстановления отказавшего сетевого узла посредством уменьшения сложности процесса восстановления.
[179] Ссылаясь на фиг. 13, фиг. 13 является схемой, иллюстрирующей модули консенсусного оборудования 1300, согласно реализации настоящего описания изобретения. Оборудование 1300 для достижения консенсуса может применяться к консенсусной системе на основе технологии работы с цепочками блоков. Например, оборудование 1300 может соответствовать реализациям, показанным на фиг. 1–6. Оборудование 1300 может реализовываться в первичном узле в сети цепочек блоков. Оборудование 1300 включает в себя следующее: приемник или приемный блок 1302, выполненный с возможностью принимать запрос транзакции; блок 1304 формирования, выполненный с возможностью формировать некоторое число блоков кодов стирания ошибок (EC) согласно EC–коду с использованием запроса транзакции; передатчик или передающий блок 1306, выполненный с возможностью отправлять некоторое число первых сообщений в один или более резервных узлов, соответственно, при этом каждое из упомянутого числа первых сообщений включает в себя составное хэш–значение, ассоциированное с числом EC–блоков; приемник или приемный блок 1302, дополнительно выполненный с возможностью принимать по меньшей мере одно второе сообщение, по меньшей мере, из одного из резервных узлов, при этом по меньшей мере одно второе сообщение включает в себя одно из числа первых сообщений и подписи по меньшей мере одного из резервных узлов, ассоциированных с упомянутым одним из числа первых сообщений; блок 1308 верификации, выполненный с возможностью верифицировать, является или нет по меньшей мере одно второе сообщение достоверным, в ответ на прием по меньшей мере одного второго сообщения, по меньшей мере, из одного из резервного узла; блок 1310 определения, выполненный с возможностью определять, превышает или нет число достоверных вторых сообщений предварительно определенное пороговое значение; блок 1312 восстановления, выполненный с возможностью восстанавливать запрос транзакции на основе поднабора числа достоверных вторых сообщений согласно EC–коду в ответ на определение, что число достоверных вторых сообщений превышает предварительно определенное пороговое значение; передатчик или передающий блок 1306, дополнительно выполненный с возможностью отправлять третье сообщение в другие сетевые узлы в ответ на определение, что запрос транзакции успешно восстановлен, при этом третье сообщение включает в себя набор подписей, которые находятся в достоверных вторых сообщениях; приемник или приемный блок 1302, дополнительно выполненный с возможностью принимать по меньшей мере одно третье сообщение, по меньшей мере, из одного из резервных узлов; и блок 1314 выполнения, выполненный с возможностью выполнять запрос транзакции в ответ на прием предварительно определенного числа третьих сообщений, которые являются идентичными.
[180] В необязательной реализации, запрос транзакции ассоциирован с порядковым номером.
[181] В необязательной реализации, формирование множества EC–блоков согласно EC–коду включает в себя следующее: преобразование запроса транзакции в EC–сообщение с использованием EC–кода и разделение EC–сообщения на упомянутое число EC–блоков.
[182] В необязательной реализации, составное хэш–значение числа EC–блоков формируется с использованием хэш–дерева.
[183] В необязательной реализации, хэш–дерево включает в себя дерево Меркла, при этом составное хэш–значение представляет собой значение корневого хэша дерева Меркла.
[184] В необязательной реализации, подпись по меньшей мере одного из резервных узлов, ассоциированных с одним из упомянутого числа первых сообщений, включает в себя подпись с закрытым ключом по меньшей мере одного из резервных узлов, ассоциированных с одним из упомянутого числа первых сообщений.
[185] В необязательной реализации по меньшей мере одно второе сообщение дополнительно включает в себя по меньшей мере один из упомянутого числа EC–блоков.
[186] В необязательной реализации, верификация, является или нет по меньшей мере одно второе сообщение достоверным, включает в себя следующее: формирование восстановленного хэш–дерева с использованием по меньшей мере одного из упомянутого числа EC–блоков, по меньшей мере, в одном втором сообщении; определение восстановленного составного хэш–значения восстановленного хэш–дерева; и определение, совпадает или нет восстановленное составное хэш–значение с составными хэш–значениями, по меньшей мере, в одном втором сообщении.
[187] В необязательной реализации, блок 1310 определения дополнительно выполнен с возможностью определять, что по меньшей мере одно второе сообщение является достоверным, в ответ на определение, что восстановленное составное хэш–значение совпадает с составными хэш–значениями во вторых сообщениях.
[188] В необязательной реализации, предварительно определенное число третьих сообщений, которые являются идентичными, включает в себя предварительно определенное число третьих сообщений, имеющих идентичный набор подписей.
[189] Фиг. 13 является принципиальной схемой, иллюстрирующей внутренний функциональный модуль и структуру консенсусного оборудования 1300. Исполнительный механизм, в сущности, может представлять собой электронное устройство, и электронное устройство включает в себя следующее: по меньшей мере один процессор; и запоминающее устройство, выполненное с возможностью сохранять выполняемую инструкцию по меньшей мере одного процессора.
[190] По меньшей мере один процессор выполнен с возможностью принимать запрос транзакции; формировать некоторое число блоков кодов стирания ошибок (EC) согласно EC–коду с использованием запроса транзакции; отправлять некоторое число первых сообщений в один или более резервных узлов, соответственно, при этом каждое из упомянутого числа первых сообщений включает в себя составное хэш–значение, ассоциированное с числом EC–блоков; принимать по меньшей мере одно второе сообщение, по меньшей мере, из одного из резервных узлов, при этом по меньшей мере одно второе сообщение включает в себя одно из числа первых сообщений и подписи по меньшей мере одного из резервных узлов, ассоциированных с одним из упомянутого числа первых сообщений; верифицировать, является или нет по меньшей мере одно второе сообщение достоверным, в ответ на прием по меньшей мере одного второго сообщения, по меньшей мере, из одного из резервного узла; определять, превышает или нет число достоверных вторых сообщений предварительно определенное пороговое значение; восстанавливать запрос транзакции на основе поднабора числа достоверных вторых сообщений согласно EC–коду в ответ на определение, что число достоверных вторых сообщений превышает предварительно определенное пороговое значение; отправлять третье сообщение в другие сетевые узлы в ответ на определение, что запрос транзакции успешно восстановлен, при этом третье сообщение включает в себя набор подписей, которые находятся в достоверных вторых сообщениях; принимать по меньшей мере одно третье сообщение, по меньшей мере, из одного из резервных узлов; и выполнять запрос транзакции в ответ на прием предварительно определенного числа третьих сообщений, которые являются идентичными.
[191] Необязательно, запрос транзакции ассоциирован с порядковым номером.
[192] Необязательно, формирование множества EC–блоков согласно EC–коду включает в себя следующее: преобразование запроса транзакции в EC–сообщение с использованием EC–кода и разделение EC–сообщения на упомянутое число EC–блоков.
[193] Необязательно, составное хэш–значение числа EC–блоков формируется с использованием хэш–дерева.
[194] Необязательно, хэш–дерево включает в себя дерево Меркла, при этом составное хэш–значение представляет собой значение корневого хэша дерева Меркла.
[195] Необязательно, подпись по меньшей мере одного из резервных узлов, ассоциированных с одним из упомянутого числа первых сообщений, включает в себя подпись с закрытым ключом по меньшей мере одного из резервных узлов, ассоциированных с одним из упомянутого числа первых сообщений.
[196] Необязательно по меньшей мере одно второе сообщение дополнительно включает в себя по меньшей мере один из упомянутого числа EC–блоков.
[197] Необязательно, верификация, является или нет по меньшей мере одно второе сообщение достоверным, включает в себя следующее: формирование восстановленного хэш–дерева с использованием по меньшей мере одного из упомянутого числа EC–блоков, по меньшей мере, в одном втором сообщении; определение восстановленного составного хэш–значения восстановленного хэш–дерева; и определение, совпадает или нет восстановленное составное хэш–значение с составными хэш–значениями, по меньшей мере, в одном втором сообщении.
[198] Необязательно, по меньшей мере один процессор дополнительно выполнен с возможностью определять, что по меньшей мере одно второе сообщение является достоверным, в ответ на определение, что восстановленное составное хэш–значение совпадает с составными хэш–значениями во вторых сообщениях.
[199] Необязательно, предварительно определенное число третьих сообщений, которые являются идентичными, включает в себя предварительно определенное число третьих сообщений, имеющих идентичный набор подписей.
[200] Ссылаясь на фиг. 14, фиг. 14 является схемой, иллюстрирующей модули консенсусного оборудования 1400, согласно реализации настоящего описания изобретения. Оборудование 1400 для достижения консенсуса может применяться к консенсусной системе на основе технологии работы с цепочками блоков. Оборудование 1400 может соответствовать реализациям, показанным на фиг. 1–6. Например, оборудование 1400 может реализовываться в резервном узле сети цепочек блоков. Оборудование 1400 включает в себя следующее: приемник или приемный блок 1402, выполненный с возможностью принимать первое сообщение из первичного узла, при этом первое сообщение включает в себя составное хэш–значение, ассоциированное с числом EC–блоков, при этом число EC–блоков формируется посредством первичного узла согласно EC–коду с использованием запроса транзакции; передатчик или передающий блок 1404, выполненный с возможностью отправлять, посредством резервного узла, второе сообщение в другие сетевые узлы в ответ на прием первого сообщения, при этом второе сообщение включает в себя первое сообщение и подпись резервного узла, ассоциированного с первым сообщением; приемник или приемный блок 1402, дополнительно выполненный с возможностью принимать по меньшей мере одно второе сообщение, по меньшей мере, из одного резервного узла, отличного от резервного узла; блок 1406 верификации, выполненный с возможностью верифицировать, является или нет по меньшей мере одно второе сообщение достоверным, в ответ на прием по меньшей мере одного второго сообщения, по меньшей мере, из одного резервного узла; блок 1408 определения, выполненный с возможностью определять, превышает или нет число достоверных вторых сообщений предварительно определенное пороговое значение; блок 1410 восстановления, выполненный с возможностью восстанавливать запрос транзакции на основе поднабора числа достоверных вторых сообщений согласно EC–коду в ответ на определение, что число достоверных вторых сообщений превышает предварительно определенное пороговое значение; передатчик или передающий блок 1404, выполненный с возможностью отправлять третье сообщение в другие сетевые узлы в ответ на определение, что запрос транзакции успешно восстановлен, при этом третье сообщение включает в себя набор подписей, которые находятся в достоверных вторых сообщениях; приемник или приемный блок 1402, дополнительно выполненный с возможностью принимать по меньшей мере одно третье сообщение, по меньшей мере, из одного из резервных узлов; и блок 1412 выполнения, выполненный с возможностью выполнять запрос транзакции в ответ на прием предварительно определенного числа третьих сообщений, которые являются идентичными.
[201] В необязательной реализации, формирование множества EC–блоков согласно EC–коду включает в себя следующее: преобразование запроса транзакции в EC–сообщение с использованием EC–кода; и разделение EC–сообщения на упомянутое число EC–блоков.
[202] В необязательной реализации, составное хэш–значение множества EC–блока формируется с использованием хэш–дерева.
[203] В необязательной реализации, хэш–дерево включает в себя дерево Меркла, и составное хэш–значение представляет собой значение корневого хэша дерева Меркла.
[204] В необязательной реализации, подпись резервного узла, ассоциированного с первым сообщением, включает в себя подпись с закрытым ключом резервного узла, ассоциированного с первым сообщением.
[205] В необязательной реализации, по меньшей мере одно второе сообщение дополнительно включает в себя по меньшей мере один из упомянутого числа EC–блоков.
[206] В необязательной реализации, верификация, является или нет по меньшей мере одно второе сообщение достоверным, включает в себя следующее: формирование восстановленного хэш–дерева с использованием по меньшей мере одного из упомянутого числа EC–блоков, по меньшей мере, в одном втором сообщении; определение восстановленного составного хэш–значения восстановленного хэш–дерева; сравнение восстановленного составного хэш–значения с составным хэш–значением, по меньшей мере, в одном втором сообщении; и определение, совпадает или нет восстановленное составное хэш–значение с составными хэш–значениями, по меньшей мере, в одном втором сообщении.
[207] В необязательной реализации, блок 1408 определения дополнительно выполнен с возможностью определять, что по меньшей мере одно второе сообщение является достоверным, в ответ на определение, что восстановленное составное хэш–значение совпадает с составными хэш–значениями во вторых сообщениях.
[208] В необязательной реализации, предварительно определенное число третьих сообщений, которые являются идентичными, включает в себя предварительно определенное число третьих сообщений, имеющих идентичный набор подписей.
[209] Фиг. 14 является принципиальной схемой, иллюстрирующей внутренний функциональный модуль и структуру консенсусного оборудования 1400. Исполнительный механизм, в сущности, может представлять собой электронное устройство, и электронное устройство включает в себя следующее: по меньшей мере один процессор; и запоминающее устройство, выполненное с возможностью сохранять выполняемую инструкцию по меньшей мере одного процессора.
[210] По меньшей мере один процессор выполнен с возможностью принимать первое сообщение из первичного узла, при этом первое сообщение включает в себя составное хэш–значение, ассоциированное с числом EC–блоков, при этом число EC–блоков формируется посредством первичного узла согласно EC–коду с использованием запроса транзакции; отправлять, посредством резервного узла, второе сообщение в другие сетевые узлы в ответ на прием первого сообщения, при этом второе сообщение включает в себя первое сообщение и подпись резервного узла, ассоциированного с первым сообщением; принимать, по меньшей мере одно второе сообщение, по меньшей мере, из одного резервного узла, отличного от резервного узла; верифицировать, является или нет по меньшей мере одно второе сообщение достоверным, в ответ на прием по меньшей мере одного второго сообщения, по меньшей мере, из одного резервного узла; определять, превышает или нет число достоверных вторых сообщений предварительно определенное пороговое значение; восстанавливать запрос транзакции на основе поднабора числа достоверных вторых сообщений согласно EC–коду в ответ на определение, что число достоверных вторых сообщений превышает предварительно определенное пороговое значение; отправлять третье сообщение в другие сетевые узлы в ответ на определение, что запрос транзакции успешно восстановлен, при этом третье сообщение включает в себя набор подписей, которые находятся в достоверных вторых сообщениях; принимать по меньшей мере одно третье сообщение, по меньшей мере, из одного из резервных узлов; и выполнять запрос транзакции в ответ на прием предварительно определенного числа третьих сообщений, которые являются идентичными.
[211] Необязательно, формирование множества EC–блоков согласно EC–коду включает в себя следующее: преобразование запроса транзакции в EC–сообщение с использованием EC–кода; и разделение EC–сообщения на упомянутое число EC–блоков.
[212] Необязательно, составное хэш–значение множества EC–блока формируется с использованием хэш–дерева.
[213] Необязательно, хэш–дерево включает в себя дерево Меркла, и составное хэш–значение представляет собой значение корневого хэша дерева Меркла.
[214] Необязательно, подпись резервного узла, ассоциированного с первым сообщением, включает в себя подпись с закрытым ключом резервного узла, ассоциированного с первым сообщением.
[215] Необязательно, по меньшей мере одно второе сообщение дополнительно включает в себя по меньшей мере один из упомянутого числа EC–блоков.
[216] Необязательно, верификация, является или нет, по меньшей мере одно второе сообщение достоверным, включает в себя следующее: формирование восстановленного хэш–дерева с использованием по меньшей мере одного из упомянутого числа EC–блоков, по меньшей мере, в одном втором сообщении; определение восстановленного составного хэш–значения восстановленного хэш–дерева; сравнение восстановленного составного хэш–значения с составным хэш–значением, по меньшей мере, в одном втором сообщении; и определение, совпадает или нет восстановленное составное хэш–значение с составными хэш–значениями, по меньшей мере, в одном втором сообщении.
[217] Необязательно, по меньшей мере один процессор дополнительно выполнен с возможностью определять, что по меньшей мере одно второе сообщение является достоверным, в ответ на определение, что восстановленное составное хэш–значение совпадает с составными хэш–значениями во вторых сообщениях.
[218] Необязательно, предварительно определенное число третьих сообщений, которые являются идентичными, включает в себя предварительно определенное число третьих сообщений, имеющих идентичный набор подписей.
[219] Ссылаясь на фиг. 15, фиг. 15 является схемой, иллюстрирующей модули оборудования 1500 изменения первичных узлов, согласно реализации настоящего описания изобретения. Оборудование 1500 для изменения первичного узла может применяться к консенсусной системе на основе технологии работы с цепочками блоков. Оборудование 1500 может соответствовать реализациям, показанным на фиг. 7–9. Например, оборудование 1500 может реализовываться в резервном узле сети цепочек блоков. Оборудование 1500 включает в себя следующее: блок 1502 определения, выполненный с возможностью определять, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом, при этом текущая эпоха содержит консенсусный процесс для достижения консенсуса между упомянутым числом сетевых узлов с использованием первичного узла, причем консенсусный процесс включает в себя три фазы; блок 1502 определения, дополнительно выполненный с возможностью определять соответствующий весовой коэффициент резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, при этом весовой коэффициент представляет собой показатель классификации резервного узла в качестве нового первичного узла; блок 1502 определения, дополнительно выполненный с возможностью определять сумму весовых коэффициентов для резервного узла на основе соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз в текущей эпохе; передатчик или передающий блок 1504, выполненный с возможностью отправлять сообщение EPOCH_CHANGE в упомянутое число сетевых узлов, отличных от сетевого узла, в ответ на определение, что сумма весовых коэффициентов достигает первого предварительно определенного порогового значения, при этом сообщение EPOCH_CHANGE указывает запрос на изменение с текущей эпохи с текущим первичным узлом на новую эпоху, в которой резервный узел представляет собой новый первичный узел, и сообщение EPOCH_CHANGE включает в себя сумму весовых коэффициентов резервного узла; приемник или приемный блок 1506, выполненный с возможностью принимать по меньшей мере одно сообщение NEW_EPOCH, по меньшей мере, из одного из упомянутого числа сетевых узлов, отличных от резервного узла, при этом сообщение NEW_EPOCH указывает подтверждение резервного узла в качестве нового первичного узла; блок 1508 верификации, выполненный с возможностью верифицировать, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; блок 1502 определения, дополнительно выполненный с возможностью определять, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH второе предварительно определенное пороговое значение; и блок 1502 определения, дополнительно выполненный с возможностью определять резервный узел в качестве нового первичного узла в новой эпохе в ответ на определение, что число достоверных сообщений NEW_EPOCH  превышает второе предварительно определенное пороговое значение.
[220] В необязательной реализации, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя определение весового коэффициента резервного узла для первой фазы консенсусного процесса в качестве первого значения.
[221] В необязательной реализации, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя следующее: в ответ на определение отказа верификации кворума во второй фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для второй фазы консенсусного процесса в качестве первого значения; и в ответ на определение успешности верификации кворума во второй фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для второй фазы консенсусного процесса в качестве второго значения, при этом первое значение меньше второго значения.
[222] В необязательной реализации, верификация кворума во второй фазе для сетевого узла включает в себя прием предварительно определенного числа ECHO–сообщений из других сетевых узлов.
[223] В необязательной реализации, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя следующее: в ответ на определение отказа верификации кворума в третьей фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для третьей фазы консенсусного процесса в качестве третьего значения; и в ответ на определение успешности верификации кворума в третьей фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для третьей фазы консенсусного процесса в качестве четвертого значения, при этом третье значение меньше четвертого значения.
[224] В необязательной реализации, верификация кворума в третьей фазе для сетевого узла включает в себя прием предварительно определенного числа сообщений принятия из других сетевых узлов, при этом каждое из сообщений принятия из других сетевых узлов указывает, что каждый из других сетевых узлов принял предварительно определенное число ECHO–сообщений.
[225] В необязательной реализации, сообщение EPOCH_CHANGE дополнительно включает в себя набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов, при этом сообщение NEW_EPOCH содержит дайджест сообщения EPOCH_CHANGE.
[226] В необязательной реализации, верификация, является или нет по меньшей мере одно достоверное сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, и верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверным.
[227] В необязательной реализации, определение, что изменение эпохи должно выполняться, включает в себя определение, что изменение эпохи должно выполняться, в ответ на определение, что консенсус не достигнут в старой эпохе в течение предварительно определенного периода времени.
[228] В необязательной реализации, оборудование 1500 изменения первичных узлов дополнительно включает в себя следующее: функциональный блок 1510, выполненный с возможностью работать в новой эпохе с новым первичным узлом, при этом новая эпоха содержит консенсусный процесс для достижения консенсуса между множеством сетевых узлов с использованием нового первичного узла.
[229] Фиг. 15 является принципиальной схемой, иллюстрирующей внутренний функциональный модуль и структуру оборудования 1500 изменения первичных узлов. Исполнительный механизм, в сущности, может представлять собой электронное устройство, и электронное устройство включает в себя следующее: по меньшей мере один процессор; и запоминающее устройство, выполненное с возможностью сохранять выполняемую инструкцию по меньшей мере одного процессора.
[230] По меньшей мере один процессор выполнен с возможностью определять, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом, при этом текущая эпоха содержит консенсусный процесс для достижения консенсуса между упомянутым числом сетевых узлов с использованием первичного узла, причем консенсусный процесс включает в себя три фазы; определять соответствующий весовой коэффициент резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, при этом весовой коэффициент представляет собой показатель классификации резервного узла в качестве нового первичного узла; определять сумму весовых коэффициентов для резервного узла на основе соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз в текущей эпохе; отправлять сообщение EPOCH_CHANGE в упомянутое число сетевых узлов, отличных от сетевого узла, в ответ на определение, что сумма весовых коэффициентов достигает первого предварительно определенного порогового значения, при этом сообщение EPOCH_CHANGE указывает запрос на изменение с текущей эпохи с текущим первичным узлом на новую эпоху, в которой резервный узел представляет собой новый первичный узел, и сообщение EPOCH_CHANGE включает в себя сумму весовых коэффициентов резервного узла; принимать по меньшей мере одно сообщение NEW_EPOCH, по меньшей мере, из одного из упомянутого числа сетевых узлов, отличных от резервного узла, при этом сообщение NEW_EPOCH указывает подтверждение резервного узла в качестве нового первичного узла; верифицировать, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; определять, превышает или нет число достоверных сообщений NEW_EPOCH, по меньшей мере, из одного сообщения NEW_EPOCH второе предварительно определенное пороговое значение; и определять резервный узел в качестве нового первичного узла в новой эпохе в ответ на определение, что число достоверных сообщений NEW_EPOCH  превышает второе предварительно определенное пороговое значение.
[231] Необязательно, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя определение весового коэффициента резервного узла для первой фазы консенсусного процесса в качестве первого значения.
[232] Необязательно, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя следующее: в ответ на определение отказа верификации кворума во второй фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для второй фазы консенсусного процесса в качестве первого значения; и в ответ на определение успешности верификации кворума во второй фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для второй фазы консенсусного процесса в качестве второго значения, при этом первое значение меньше второго значения.
[233] Необязательно, верификация кворума во второй фазе для сетевого узла включает в себя прием предварительно определенного числа ECHO–сообщений из других сетевых узлов.
[234] Необязательно, определение соответствующего весового коэффициента резервного узла, ассоциированного с каждой из трех фаз консенсусного процесса в текущей эпохе, включает в себя следующее: в ответ на определение отказа верификации кворума в третьей фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для третьей фазы консенсусного процесса в качестве третьего значения; и в ответ на определение успешности верификации кворума в третьей фазе консенсусного процесса в текущей эпохе, определение весового коэффициента резервного узла для третьей фазы консенсусного процесса в качестве четвертого значения, при этом третье значение меньше четвертого значения.
[235] Необязательно, верификация кворума в третьей фазе для сетевого узла включает в себя прием предварительно определенного числа сообщений принятия из других сетевых узлов, при этом каждое из сообщений принятия из других сетевых узлов указывает, что каждый из других сетевых узлов подтверждает принял предварительно определенное число ECHO–сообщений.
[236] Необязательно, сообщение EPOCH_CHANGE дополнительно включает в себя набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов, при этом сообщение NEW_EPOCH содержит дайджест сообщения EPOCH_CHANGE.
[237] Необязательно, верификация, является или нет по меньшей мере одно достоверное сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении новой эпохи достоверным, и верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверным.
[238] Необязательно, определение, что изменение эпохи должно выполняться, включает в себя определение, что изменение эпохи должно выполняться, в ответ на определение, что консенсус не достигнут в старой эпохе в течение предварительно определенного периода времени.
[239] Необязательно, по меньшей мере один процессор дополнительно выполнен с возможностью работать в новой эпохе с новым первичным узлом, при этом новая эпоха содержит консенсусный процесс для достижения консенсуса между множеством сетевых узлов с использованием нового первичного узла.
[240] Ссылаясь на фиг. 16, фиг. 16 является схемой, иллюстрирующей модули оборудования 1600 изменения первичных узлов, согласно реализации настоящего описания изобретения. Оборудование 1600 для изменения первичного узла может применяться к консенсусной системе на основе технологии работы с цепочками блоков. Оборудование 1600 соответствует реализациям, показанным на фиг. 7–9. Например, оборудование 1400 может реализовываться в сетевом узле сети цепочек блоков. Оборудование 1600 включает в себя следующее: приемник или приемный блок 1602, выполненный с возможностью принимать сообщение EPOCH_CHANGE из резервного узла, отличного от сетевого узла, при этом сообщение EPOCH_CHANGE включает в себя индикатор того, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом; блок 1604 верификации, выполненный с возможностью верифицировать, является или нет сообщение EPOCH_CHANGE достоверным; передатчик или передающий блок 1606, выполненный с возможностью отправлять сообщение NEW_EPOCH в другие сетевые узлы в ответ на верификацию, что сообщение EPOCH_CHANGE является достоверным, при этом сообщение NEW_EPOCH содержит дайджест сообщения EPOCH_CHANGE; приемник или приемный блок 1602, дополнительно выполненный с возможностью принимать по меньшей мере одно сообщение NEW_EPOCH, по меньшей мере, из одного из упомянутого числа сетевых узлов, отличных от сетевого узла; блок 1604 верификации, дополнительно выполненный с возможностью верифицировать, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; блок 1608 определения, выполненный с возможностью определять, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH предварительно определенное пороговое значение; и блок 1608 определения, дополнительно выполненный с возможностью определять резервный узел в качестве нового первичного узла в новой эпохе в ответ на определение, что число достоверных сообщений NEW_EPOCH превышает предварительно определенное пороговое значение.
[241] В необязательной реализации, сообщение EPOCH_CHANGE включает в себя сумму весовых коэффициентов, ассоциированную с резервным узлом, и набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов.
[242] В необязательной реализации, верификация, является или нет сообщение EPOCH_CHANGE достоверным, включает в себя верификацию, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, и верификация, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, включает в себя верификацию, является или нет набор подписей достоверным.
[243] В необязательной реализации, верификация, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, и верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверным.
[244] Фиг. 16 является принципиальной схемой, иллюстрирующей внутренний функциональный модуль и структуру оборудования 1600 изменения первичных узлов. Исполнительный механизм, в сущности, может представлять собой электронное устройство, и электронное устройство включает в себя следующее: по меньшей мере один процессор; и запоминающее устройство, выполненное с возможностью сохранять выполняемую инструкцию по меньшей мере одного процессора.
[245] По меньшей мере один процессор выполнен с возможностью принимать сообщение EPOCH_CHANGE из резервного узла, отличного от сетевого узла, при этом сообщение EPOCH_CHANGE включает в себя индикатор, что изменение эпохи должно выполняться, при этом изменение эпохи вызывает изменение с текущей эпохи с текущим первичным узлом на новую эпоху с новым первичным узлом; верифицировать, является или нет сообщение EPOCH_CHANGE достоверным; отправлять сообщение NEW_EPOCH в другие сетевые узлы в ответ на верификацию, что сообщение EPOCH_CHANGE является достоверным, при этом сообщение NEW_EPOCH содержит дайджест сообщения EPOCH_CHANGE; принимать по меньшей мере одно сообщение NEW_EPOCH, по меньшей мере, из одного из упомянутого числа сетевых узлов, отличных от сетевого узла; верифицировать, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным; определять, превышает или нет число достоверных сообщений NEW_EPOCH из по меньшей мере одного сообщения NEW_EPOCH предварительно определенное пороговое значение; и определять резервный узел в качестве нового первичного узла в новой эпохе в ответ на определение, что число достоверных сообщений NEW_EPOCH превышает предварительно определенное пороговое значение.
[246] Необязательно, сообщение EPOCH_CHANGE включает в себя сумму весовых коэффициентов, ассоциированную с резервным узлом, и набор подписей, ассоциированных с набором сетевых узлов из упомянутого числа сетевых узлов.
[247] Необязательно, верификация того, является или нет сообщение EPOCH_CHANGE достоверным, включает в себя верификацию того, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, и верификация того, является или нет сумма весовых коэффициентов в сообщении EPOCH_CHANGE достоверной, включает в себя верификацию того, является или нет набор подписей достоверным.
[248] Необязательно, верификация, является или нет по меньшей мере одно сообщение NEW_EPOCH достоверным, включает в себя верификацию, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, и верификация, является или нет дайджест сообщения EPOCH_CHANGE, по меньшей мере, в одном сообщении NEW_EPOCH достоверным, включает в себя верификацию, является или нет набор подписей в сообщении EPOCH_CHANGE достоверным.
[249] Ссылаясь на фиг. 17, фиг. 17 является схемой, иллюстрирующей модули оборудования 1700 восстановления, согласно реализации настоящего описания изобретения. Оборудование 1700 для восстановления может применяться к консенсусной системе на основе технологии работы с цепочками блоков. Оборудование 1700 может соответствовать реализациям, показанным на фиг. 10–12. Например, оборудование 1700 может реализовываться в сетевом узле сети цепочек блоков. Оборудование 1700 включает в себя следующее: широковещательный передающий блок 1702, выполненный с возможностью передавать в широковещательном режиме, посредством сетевого узла сети цепочек блоков, сообщение с запросом состояния в некоторое число других сетевых узлов сети цепочек блоков, при этом сетевой узел должен восстанавливать целевую транзакцию целевого порядкового номера; приемник 1704 или приемный блок 1704, выполненный с возможностью принимать некоторое число сообщений с ответом по состоянию из упомянутого числа других сетевых узлов, при этом каждое из упомянутого числа сообщений с ответом по состоянию включает в себя порядковый номер; блок 1706 идентификации, выполненный с возможностью идентифицировать целевой порядковый номер на основе целевого порядкового номера в ответ на определение, что число сообщений с ответом по состоянию превышает предварительно определенное пороговое значение, при этом каждое из упомянутого числа сообщений с ответом по состоянию содержит целевой порядковый номер; передатчик 1708 или передающий блок 1708, выполненный с возможностью отправлять запрашивающее сообщение в упомянутое число других сетевых узлов, при этом запрашивающее сообщение запрашивает ECHO–сообщение из каждого из упомянутого числа других сетевых узлов, при этом ECHO–сообщение представляет собой сообщение, передаваемое посредством каждого из упомянутого числа других сетевых узлов для достижения консенсуса между упомянутым числом других сетевых узлов по целевой транзакции, имеющей целевой порядковый номер, и ECHO–сообщение включает в себя часть целевой транзакции и подпись каждого из упомянутого числа других сетевых узлов; приемник 1704 или приемный блок 1704, дополнительно выполненный с возможностью принимать некоторое число ECHO–сообщений из упомянутого числа других сетевых узлов; блок 1710 определения, выполненный с возможностью определять число достоверных ECHO–сообщений из упомянутого числа ECHO–сообщений, при этом каждое из упомянутого числа достоверных ECHO–сообщений включает в себя целевой порядковый номер; блок 1712 восстановления, выполненный с возможностью восстанавливать целевую транзакцию, имеющую целевой порядковый номер в сетевом узле на основе упомянутого числа достоверных ECHO–сообщений в ответ на определение, что упомянутое число достоверных ECHO–сообщений превышает предварительно определенное пороговое значение; и передатчик 1708, дополнительно выполненный с возможностью отправлять сообщение в упомянутое число других сетевых узлов, указывающее, что сетевой узел восстановлен.
[250] В необязательной реализации, упомянутое число сетевых узлов включает в себя первичный узел и один или более резервных узлов.
[251] В необязательной реализации, сетевой узел представляет собой первичный узел или резервный узел.
[252] В необязательной реализации, запрашивающее сообщение включает в себя целевой порядковый номер.
[253] В необязательной реализации, оборудование 1700 восстановления дополнительно включает в себя следующее: блок 1714 верификации, выполненный с возможностью верифицировать, посредством каждого из упомянутого числа других сетевых узлов, отличных от сетевого узла, запрашивающее сообщение до отправки ECHO–сообщений в сетевой узел.
[254] В необязательной реализации, блок 1714 верификации дополнительно выполнен с возможностью верифицировать, является или нет каждое из ECHO–сообщений достоверным, при этом верификация, является или нет каждое из ECHO–сообщений достоверным, включает в себя верификацию, является или нет каждое из ECHO–сообщений достоверным, с использованием дерева Меркла.
[255] В необязательной реализации, верификация, является или нет каждое ECHO–сообщение достоверным, дополнительно включает в себя верификацию, является или нет подпись в ECHO–сообщении достоверной.
[256] В необязательной реализации, каждое из ECHO–сообщений дополнительно включает в себя по меньшей мере один из некоторого числа блоков кодов стирания ошибок (EC), ассоциированных с целевой транзакцией, при этом упомянутое число EC–блоков формируется согласно EC–коду с использованием целевой транзакции.
[257] В необязательной реализации, восстановление целевой транзакции, имеющей целевой порядковый номер в сетевом узле, на основе упомянутого числа достоверных ECHO–сообщений, содержит восстановление целевой транзакции с использованием поднабора множества EC–блоков, которые находятся в числе достоверных ECHO–сообщений.
[258] В необязательной реализации, сообщение в упомянутое число других сетевых узлов, указывающее, что сетевой узел восстановлен, включает в себя набор подписей в числе достоверных ECHO–сообщений и целевой порядковый номер.
[259] Система, оборудование, модуль или блок, проиллюстрированные в предыдущих реализациях, могут реализовываться посредством использования компьютерной микросхемы или объекта либо могут реализовываться посредством использования продукта, имеющего определенную функцию. Устройство согласно типичной реализации представляет собой компьютер, и компьютер может представлять собой персональный компьютер, переносной компьютер, сотовый телефон, камерофон, смартфон, персональное цифровое устройство, мультимедийный проигрыватель, навигационное устройство, устройство приема и отправки электронной почты, игровую приставку, планшетный компьютер, носимое устройство либо любую комбинацию этих устройств.
[260] Для процесса реализации функций и ролей каждого блока в оборудовании, следует обратиться к процессу реализации соответствующих этапов в предыдущем способе. Подробности опускаются здесь для простоты.
[261] Поскольку реализация оборудования по существу соответствует реализации способа, для получения сведений по соответствующим частям, следует обратиться к соответствующим описаниям в реализации способа. Вышеописанная реализация оборудования представляет собой просто пример. Блоки, описанные в качестве отдельных частей, могут быть или не быть физически отдельными, и части, отображаемые в качестве блоков, могут быть или не быть физическими блоками, могут быть расположены в одной позиции либо могут быть распределены по множеству сетевых блоков. Некоторые или все модули могут выбираться на основе фактических потребностей для достижения целей решений настоящего описания изобретения. Специалист в данной области техники может понимать и реализовывать реализации настоящей заявки без творческих усилий.
[262] Фиг. 17 является принципиальной схемой, иллюстрирующей внутренний функциональный модуль и структуру оборудования 1700 восстановления. Исполнительный механизм, в сущности, может представлять собой электронное устройство, и электронное устройство включает в себя следующее: по меньшей мере один процессор; и запоминающее устройство, выполненное с возможностью сохранять выполняемую инструкцию по меньшей мере одного процессора.
[263] По меньшей мере один процессор выполнен с возможностью широковещательно передавать, посредством сетевого узла сети цепочек блоков, сообщение с запросом состояния в некоторое число других сетевых узлов сети цепочек блоков, при этом сетевой узел должен восстанавливать целевую транзакцию целевого порядкового номера; принимать некоторое число сообщений с ответом по состоянию из упомянутого числа других сетевых узлов, при этом каждое из упомянутого числа сообщений с ответом по состоянию включает в себя порядковый номер; идентифицировать целевой порядковый номер на основе целевого порядкового номера в ответ на определение, что число сообщений с ответом по состоянию превышает предварительно определенное пороговое значение, при этом каждое из упомянутого числа сообщений по состоянию содержит целевой порядковый номер; отправлять запрашивающее сообщение в упомянутое число других сетевых узлов, при этом запрашивающее сообщение запрашивает ECHO–сообщение из каждого из упомянутого числа других сетевых узлов, при этом ECHO–сообщение представляет собой сообщение, передаваемое посредством каждого из упомянутого числа других сетевых узлов для достижения консенсуса между упомянутым числом других сетевых узлов по целевой транзакции, имеющей целевой порядковый номер, и ECHO–сообщение включает в себя часть целевой транзакции и подпись каждого из других сетевых узлов; принимать некоторое число ECHO–сообщений из множества других сетевых узлов; определять число достоверных ECHO–сообщений из упомянутого числа ECHO–сообщений, при этом каждое из упомянутого числа достоверных ECHO–сообщений включает в себя целевой порядковый номер; восстанавливать целевую транзакцию, имеющую целевой порядковый номер в сетевом узле, на основе упомянутого числа достоверных ECHO–сообщений в ответ на определение, что упомянутое число достоверных ECHO–сообщений превышает предварительно определенное пороговое значение; и отправлять сообщение в упомянутое число других сетевых узлов, указывающее, что сетевой узел восстановлен.
[264] Необязательно, упомянутое число сетевых узлов включают в себя первичный узел и один или более резервных узлов.
[265] Необязательно, сетевой узел представляет собой первичный узел или резервный узел.
[266] Необязательно, запрашивающее сообщение включает в себя целевой порядковый номер.
[267] Необязательно, по меньшей мере один процессор дополнительно выполнен с возможностью верифицировать, посредством каждого из упомянутого числа других сетевых узлов, отличных от сетевого узла, запрашивающее сообщение до отправки ECHO–сообщений в сетевой узел.
[268] Необязательно, по меньшей мере один процессор дополнительно выполнен с возможностью верифицировать, является или нет каждое из ECHO–сообщений достоверным, при этом верификация, является или нет каждое из ECHO–сообщений достоверным, включает в себя верификацию, является или нет каждое из ECHO–сообщений достоверным, с использованием дерева Меркла.
[269] Необязательно, верификация, является или нет каждое ECHO–сообщение достоверным, дополнительно включает в себя верификацию, является или нет подпись в ECHO–сообщении достоверной.
[270] Необязательно, каждое из ECHO–сообщений дополнительно включает в себя по меньшей мере один из числа блоков кодов стирания ошибок (EC), ассоциированных с целевой транзакцией, при этом число EC–блоков формируется согласно EC–коду с использованием целевой транзакции.
[271] Необязательно, восстановление целевой транзакции, имеющей целевой порядковый номер в сетевом узле, на основе числа достоверных ECHO–сообщений, включает в себя восстановление целевой транзакции с использованием поднабора числа EC–блоков, которые находятся в числе достоверных ECHO–сообщений.
[272] Необязательно, сообщение в упомянутое число других сетевых узлов, указывающее, что сетевой узел восстановлен, включает в себя набор подписей в числе достоверных ECHO–сообщений и целевой порядковый номер.
[273] Реализации предмета изобретения и действий и операций, описанных в этом подробном описании, могут реализовываться в цифровой электронной схеме, в материально осуществленном компьютерном программном обеспечении или микропрограммном обеспечении, в компьютерных аппаратных средствах, включающих в себя структуры, раскрытые в этом подробном описании, и их структурные эквиваленты, либо в комбинациях одного или более из означенного. Реализации предмета изобретения, описанного в этом подробном описании, могут осуществляться как одна или более компьютерных программ, т.е. один или более модулей компьютерных программных инструкций, закодированных на носителе программ, для выполнения или управления работой оборудования обработки данных. Носитель может представлять собой материальный энергонезависимый компьютерный носитель хранения данных. Альтернативно или дополнительно, носитель может представлять собой искусственно сформированный распространяемый сигнал, например, машиносформированный электрический, оптический или электромагнитный сигнал, который формируется для того, чтобы кодировать информацию для передачи в подходящее приемное оборудование для выполнения посредством оборудования обработки данных. Компьютерный носитель хранения данных может представлять собой или составлять часть машиночитаемого устройства хранения данных, машиночитаемой платы хранения данных, запоминающего устройства с произвольным или последовательным доступом либо комбинации одного или более из означенного. Компьютерный носитель хранения данных не представляет собой распространяемый сигнал.
[274] Термин "оборудование обработки данных" охватывает все виды оборудования, устройств и машин для обработки данных, включающие в себя в качестве примера программируемый процессор, компьютер либо множественные процессоры или компьютеры. Оборудование обработки данных может включать в себя логическую схему специального назначения, например, FPGA (программируемую пользователем вентильную матрицу), ASIC (специализированную интегральную схему) или GPU (графический процессор). Оборудование также может включать в себя, в дополнение к аппаратным средствам, код, который создает среду выполнения для компьютерных программ, например, код, который составляет микропрограммное обеспечение процессора, стек протоколов, систему управления базами данных, операционную систему либо комбинацию одного или более из означенного.
[275] Компьютерная программа, которая также может называться или описываться как программа, программное обеспечение, программное приложение, приложение, модуль, программный модуль, механизм, сценарий или код, может быть написана на любой форме языка программирования, включающей в себя компилируемые или интерпретируемые языки либо декларативные или процедурные языки; и она может развертываться в любой форме, в том числе в качестве автономной программы или в качестве модуля, компонента, механизма, вложенной процедуры или другого блока, подходящего для выполнения в вычислительном окружении, причем это окружение может включать в себя один или более компьютеров, взаимно соединенных посредством сети передачи данных в одном или более местоположений.
[276] Компьютерная программа может, но не обязательно должна, соответствовать файлу в файловой системе. Компьютерная программа может сохраняться в части файла, который хранит другие программы или данные (например, один или более сценариев, сохраняемых в документе на языке разметки), в одном файле, выделенном для рассматриваемой программы, или в нескольких координированных файлах (например, в файлах, которые сохраняют один или более модулей, подпрограмм либо частей кода).
[277] Процессы и логические последовательности операций, описанные в этом описании изобретения, могут выполняться посредством одного или более компьютеров, выполняющих одну или более компьютерных программ, чтобы осуществлять операции посредством обработки входных данных и формирования вывода. Процессы и логические последовательности операций также могут выполняться посредством логической схемы специального назначения, например, FPGA, ASIC или GPU, либо посредством комбинации логической схемы специального назначения и одного или более запрограммированных компьютеров.
[278] Компьютеры, подходящие для выполнения компьютерной программы, могут быть основаны на микропроцессорах общего или специального назначения либо на том и на другом, либо на любом другом виде центрального процессора. В общем, центральный процессор принимает инструкции и данные из постоянного запоминающего устройства или оперативного запоминающего устройства, либо из того и из другого. Элементы компьютера могут включать в себя центральный процессор для выполнения инструкций и одно или более запоминающих устройств для сохранения инструкций и данных. Центральный процессор и запоминающее устройство могут дополняться или включаться в логическую схему специального назначения.
[279] Обычно, компьютер должен соединяться, по меньшей мере, с одним энергонезависимым машиночитаемым носителем хранения данных (также называемым "машиночитаемым запоминающим устройством"). Носитель хранения данных, соединенный с компьютером, может представлять собой внутренний компонент компьютера (например, интегрированный жесткий диск) или внешний компонент (например, жесткий диск по стандарту универсальной последовательной шины (USB) или систему хранения данных, доступную по сети). Примеры носителей хранения данных могут включать в себя, например, магнитные, магнитооптические или оптические диски, полупроводниковые накопители, сетевые ресурсы хранения, к примеру, системы облачного хранения данных или другие типы носителей хранения данных. Тем не менее, компьютер не должен обязательно иметь такие устройства. Кроме того, компьютер может встраиваться в другое устройство, например, в мобильный телефон, персональное цифровое устройство (PDA), мобильный аудио– или видеопроигрыватель, игровую приставку, приемник на основе глобальной системы позиционирования (GPS) или портативное устройство хранения данных, например, флэш–накопитель по стандарту универсальной последовательной шины (USB), помимо прочего.
[280] Чтобы предоставлять взаимодействие с пользователем, реализации предмета изобретения, описанного в этом подробном описании, могут реализовываться или конфигурироваться с возможностью обмениваться данными с компьютером, имеющим устройство отображения, например, монитор ЖК–дисплея (жидкокристаллического дисплея), для отображения информации пользователю и устройство ввода, посредством которого пользователь может предоставлять ввод в компьютер, например, клавиатуру и указательное устройство, например, мышь, шаровой манипулятор или панель касания. Другие виды устройств также могут использоваться для того, чтобы предоставлять взаимодействие с пользователем; например, обратная связь, предоставляемая пользователю, может представлять собой любую форму сенсорной обратной связи, такую как визуальная обратная связь, акустическая обратная связь или тактильная обратная связь; и ввод от пользователя может приниматься в любой форме, включающей в себя акустический, речевой или тактильный ввод. Помимо этого, компьютер может взаимодействовать с пользователем посредством отправки документов и приема документов из устройства, которое используется пользователем; например, посредством отправки веб–страниц в веб–браузер на устройстве пользователя в ответ на запросы, принимаемые из веб–браузера, либо посредством взаимодействия с приложением, выполняющимся на пользовательском устройстве, например, на смартфоне или электронном планшетном компьютере. Кроме того, компьютер может взаимодействовать с пользователем посредством отправки текстовых сообщений или других форм сообщения в персональное устройство, например, в смартфон, который выполняет приложение обмена сообщениями и принимает ответные сообщения от пользователя в ответ.
[281] Это описание изобретения использует термин "выполнен с возможностью" в связи с системами, оборудованием и компьютерными программными компонентами. Для системы из одного или более компьютеров, "выполненный с возможностью" выполнять конкретные операции или действия означает то, что система имеет установленное на ней программное обеспечение, микропрограммное обеспечение, аппаратные средства либо комбинацию означенного, которая при работе инструктирует системе выполнять операции или действия. Для одной или более компьютерных программ, "выполненный с возможностью" с возможностью выполнять конкретные операции или действия означает то, что одна или более программ включают в себя инструкции, которые, при выполнении посредством оборудования обработки данных, инструктируют оборудованию выполнять операции или действия. Для логической схемы специального назначения, "выполненный с возможностью" с возможностью выполнять конкретные операции или действия означает то, что схема имеет электронную логику, которая выполняет операции или действия.
[282] Хотя это описание изобретения содержит множество конкретных сведений по реализации, они не должны истолковываться в качестве ограничений на заявленный объем, который задается посредством формулы изобретения, а вместо этого должны истолковываться в качестве описаний признаков, которые могут быть конкретными для конкретных реализаций. Некоторые признаки, которые описываются в этом подробном описании в контексте отдельных реализаций, также могут реализовываться, в комбинации, в одной реализации. Наоборот, различные признаки, которые описываются в контексте одной реализации, также могут быть реализованы в нескольких реализациях по отдельности либо в любой подходящей субкомбинации. Кроме того, хотя признаки могут описываться выше как работающие в определенных комбинациях и даже первоначально заявляться в формуле изобретения по существу, один или более признаков из заявленной комбинации в некоторых случаях могут быть исключены из комбинации, и формула изобретения может быть направлена на субкомбинацию или на изменение субкомбинации.
[283] Аналогично, хотя операции проиллюстрированы на чертежах и приведены в формуле изобретения в конкретном порядке, это не следует понимать как обязательность того, что такие операции должны выполняться в конкретном показанном порядке либо в последовательном порядке, либо того, что все проиллюстрированные операции должны выполняться, чтобы достигать требуемых результатов. При некоторых обстоятельствах, может быть преимущественной многозадачная и параллельная обработка. Кроме того, разделение различных системных модулей и компонентов в реализациях, описанных выше, не должно пониматься как требующее такого разделения во всех реализациях, и следует понимать, что описанные программные компоненты и системы, в общем, могут интегрироваться в один программный продукт либо комплектоваться в несколько программных продуктов.
Описаны конкретные реализации предмета изобретения. Другие реализации находятся в пределах объема прилагаемой формулы изобретения. Например, действия, изложенные в формуле изобретения, могут выполняться в другом порядке и при этом достигать требуемых результатов. В качестве одного примера, процессы, проиллюстрированные на прилагаемых чертежах, не обязательно требуют конкретного показанного порядка или последовательного порядка, чтобы достигать желаемых результатов. В некоторых случаях, может быть преимущественной многозадачная и параллельная обработка.