#1 2015.08.02 18:52:55
0
При некотором упрощении, Ripple можно представить, как систему транзакций в сети интернет, которая основывается на определённых «договорённостях» между серверами (узлами) сети Ripple. Сердцем системы является «реестр» (ledger) в виде распределённой базы данных. Этот реестр - общий между всеми серверами, т.е. у каждого сервера своя копия базы, содержащая информацию о всех аккаунтах сети Ripple. Новый реестр создаётся каждые несколько секунд.
Самый актуальный реестр называется LCL (Last Close Ledger – последний зафиксированный реестр). В любой момент времени LCL является точным отражением состояния всех аккаунтов сети. Транзакция в сети Ripple – это любое предложенное (любым узлом, сервером) изменение реестра, причём инициатором транзакции может быть любой сервер сети. Каждая транзакция распространяется по всей сети активных узлов (серверов) Ripple аналогично ряби на спокойной поверхности водоёма. Получив или сформировав транзакцию, серверы автоматически приходят к консенсусу, какие новые транзакции стоит добавить в реестр, а какие исключить из добавления.
Как же работает консенсус? Давайте разберёмся. Цель консенсуса – добавление одинакового набора новых транзакций к текущему реестру LCL на всех серверах сети. Каждый сервер постоянно обменивается новыми транзакциями с другими серверами сети, а все эти транзакции формируют набор кандидатов, ждущих добавления в реестр.
В то же время каждый сервер получает предполагаемые наборы в кандидаты от других серверов и для предложенного набора транзакций будет решаться, добавлять ли их в реестр. Сервер принимает предлагаемые наборы от так называемого списка уникальных узлов (UNL – unique node list). Этот список (список внешних серверов) есть у каждого сервера, а предлагаемые наборы от других серверов, отсутствующих в списке UNL, игнорируются. Транзакции из предлагаемых наборов сравниваются с набором кандидатов самого сервера.
Если транзакция из предлагаемого набора присутствует в кандидатах, она получает один голос за добавление. Сервер продолжает сравнивать предложения с набором кандидатов, пока не истекает время. Затем сервер берёт транзакции, которые получили не менее 50% голосов и формирует из них свой новый предлагаемый набор. Это предложение распространяется к другим серверам по всей сети.
Затем процесс повторяется, но с важной разницей – необходимый для попадания в набор кандидатов, процент голосов увеличивается до 60%. Сервер опять получает предлагаемые наборы и рассматривает их, только если они поступили от серверов из списка UNL, а затем сравнивает их со своим набором кандидатов. Транзакции с подтверждением не менее 60% формируют новый предлагаемый набор и рассылаются по сети. По истечению установленного времени порог подтверждения устанавливается на 70%. С каждым шагом (итерацией) предлагаемые наборы становятся всё более и более похожи друг на друга, а количество подтверждений увеличивается.
В результате этого процесса спорные транзакции неизбежно отбраковываются, в то время как принятые множеством серверов транзакции включаются в предлагаемый набор. Разница между предлагаемыми наборами быстро стремится к нулю - в этом случае считается, что сеть пришла к консенсусу. Сервер знает, что состояние считается консенсусом, если для каждого кандидата как минимум 80% голосов положительны, т.е. 80% серверов сети считают набор кандидатов корректным (валидным). В данном случае 80% - это порог, задающий математическую определённость. Когда набор достигает порога 80%, сервер утверждает его, уведомляет об этом сеть и останавливает процесс консенсуса. Утверждённый набор транзакций добавляется к реестру LCL, а все сомнительные транзакции с меньшим рейтингом отбрасываются.
Таким образом создаётся новый реестр LCL с консенсусом всех серверов сети Ripple. Транзакции, не включённые в реестр, остаются в наборе кандидатов. Туда же попадают и все новые транзакции, полученные сервером во время консенсуса, а затем процесс начинается заново. Такая непрерывная цикличная работа сети позволяет проводить транзакции за достаточно небольшой промежуток времени с сохранением высокой степени достоверности.
Самый актуальный реестр называется LCL (Last Close Ledger – последний зафиксированный реестр). В любой момент времени LCL является точным отражением состояния всех аккаунтов сети. Транзакция в сети Ripple – это любое предложенное (любым узлом, сервером) изменение реестра, причём инициатором транзакции может быть любой сервер сети. Каждая транзакция распространяется по всей сети активных узлов (серверов) Ripple аналогично ряби на спокойной поверхности водоёма. Получив или сформировав транзакцию, серверы автоматически приходят к консенсусу, какие новые транзакции стоит добавить в реестр, а какие исключить из добавления.
Как же работает консенсус? Давайте разберёмся. Цель консенсуса – добавление одинакового набора новых транзакций к текущему реестру LCL на всех серверах сети. Каждый сервер постоянно обменивается новыми транзакциями с другими серверами сети, а все эти транзакции формируют набор кандидатов, ждущих добавления в реестр.
В то же время каждый сервер получает предполагаемые наборы в кандидаты от других серверов и для предложенного набора транзакций будет решаться, добавлять ли их в реестр. Сервер принимает предлагаемые наборы от так называемого списка уникальных узлов (UNL – unique node list). Этот список (список внешних серверов) есть у каждого сервера, а предлагаемые наборы от других серверов, отсутствующих в списке UNL, игнорируются. Транзакции из предлагаемых наборов сравниваются с набором кандидатов самого сервера.
Если транзакция из предлагаемого набора присутствует в кандидатах, она получает один голос за добавление. Сервер продолжает сравнивать предложения с набором кандидатов, пока не истекает время. Затем сервер берёт транзакции, которые получили не менее 50% голосов и формирует из них свой новый предлагаемый набор. Это предложение распространяется к другим серверам по всей сети.
Затем процесс повторяется, но с важной разницей – необходимый для попадания в набор кандидатов, процент голосов увеличивается до 60%. Сервер опять получает предлагаемые наборы и рассматривает их, только если они поступили от серверов из списка UNL, а затем сравнивает их со своим набором кандидатов. Транзакции с подтверждением не менее 60% формируют новый предлагаемый набор и рассылаются по сети. По истечению установленного времени порог подтверждения устанавливается на 70%. С каждым шагом (итерацией) предлагаемые наборы становятся всё более и более похожи друг на друга, а количество подтверждений увеличивается.
В результате этого процесса спорные транзакции неизбежно отбраковываются, в то время как принятые множеством серверов транзакции включаются в предлагаемый набор. Разница между предлагаемыми наборами быстро стремится к нулю - в этом случае считается, что сеть пришла к консенсусу. Сервер знает, что состояние считается консенсусом, если для каждого кандидата как минимум 80% голосов положительны, т.е. 80% серверов сети считают набор кандидатов корректным (валидным). В данном случае 80% - это порог, задающий математическую определённость. Когда набор достигает порога 80%, сервер утверждает его, уведомляет об этом сеть и останавливает процесс консенсуса. Утверждённый набор транзакций добавляется к реестру LCL, а все сомнительные транзакции с меньшим рейтингом отбрасываются.
Таким образом создаётся новый реестр LCL с консенсусом всех серверов сети Ripple. Транзакции, не включённые в реестр, остаются в наборе кандидатов. Туда же попадают и все новые транзакции, полученные сервером во время консенсуса, а затем процесс начинается заново. Такая непрерывная цикличная работа сети позволяет проводить транзакции за достаточно небольшой промежуток времени с сохранением высокой степени достоверности.
Отредактировано: Panda 2022.08.16 08:11:27