Как ноды синхронизируют время в сети ТЕРА[RUS]

Yuriy Ivanov
2 min readJul 27, 2020

В децентрализованной сети для достижения консенсуса обязательно необходима синхронность процессов (в асинхронных сетях консенсус теоретически недостижим).

В классических pow блокчейнах (например, биткоине) период формирования блока не задан жестко временными рамками, но зато задан минимальным значением сложности расчета хэша. Так как рано или поздно такой хэш будет рассчитан, то сеть можно считать синхронной и в итоге консенсус, как мы знаем, достигается. Но это занимает время — порядка минут.

В блокчейне Тера новые блоки формируются с жестко заданной периодичностью (каждые 3 секунды):

  1. В первый период ноды обмениваются транзакциями, формируют так называемый мемпул (mempool).
  2. Во второй период ноды складывают полученные транзакции в блок и рассчитывают новый блок с учетом хэша предыдущего блока, таким образом соединяя блоки в цепочку. Рассчитанный хэш блока отправляется другим нодам (ноды стремятся рассчитать как можно более сложный хэш блока, так как за это они получают награду).
  3. В третий период ноды записывают в свою базу данных наилучшую полученную цепочку, она состоит из самой большей суммы сложностей блоков.

Для того чтобы корректно сравнивать цепочки нужно чтобы их высота всегда была одинаковой, для этого первый блок должен быть записан в момент старта сети, а последний блок — в текущий момент времени. Таким образом время на всех нодах должно быть синхронизировано.

Алгоритм синхронизации времени состоит из двух частей:

  1. Получение достоверных меток времени

Достоверность меток времени опирается на майнеров, принимаются метки только от майнеров с максимальным pow — одна метка за один период. Таким образом алгоритм будет надежно работать, пока 51% вычислительной мощности сети будет принадлежать честным майнерам.

2.Расчет корректирующего времени

Для этого подсчитывается статистика полученных меток времени, рассчитывается среднее значение, откидывается шум — значения выходящие за среднеквадратичные отклонения и далее принимается решение о корректировки часов (вместо непосредственной корректировки системных часов выполняется изменения константы DELTA_CURRENT_TIME).

Stay tuned on our resources:

--

--