Проверка статуса контракта

черновик рекомендуемой процедуры

Цель

Получение статуса контракта с заданным уровнем доверия от сети.

Входные параметры

  • Один из: Kt или Nt (см ниже)
  • CurrentNetworkSize (текущий размер сети)

параметром протокола является величина KT - коэффициент доверия - который можеь принимать значение 0 < Kt < 0.9, либо Nt - количество нод, положительный ответ от которых считается достаточным.

Nt получается из Кt по формуле

> Nt = ceil(CurrentNetworkSize*Kt)

Когда Nt найден, или если он задан изначально, он проверяется и при необходимости ограничивается в диапазоне:

2 <= Nt <= floor(CurrentNetworkSize*0.9)

Алгоритм

1. Расчитываем и запоминаем параметр который равен количеству 10% нод + 1 нода:

N10 = floor(CurrentNtworkLength*0.1) + 1

2. Рассчитываем количество нод для проверки:

Nn = (Nt + 1) < N10 ? Nt + 1 : N10

3. Выбираем случайно Nn нод, которые еще не опрашивались (на первом шаге это вся сеть), или сколько осталось неопрошенными, если их меньше Nn

4. Опрашиваем параллельно эти ноды и для каждого ответа проводим анализ:

4.1. Если ответ PENDING, то помещаем ноду в список неопрошенных, для повторной проверки.

4.2. Если ответ положительный, то суммируем его с другими положительными. Если сумма положительных ответов достигла Nt, то завершаемся с положительным результатом.

4.3. Если результат отрицательный, то суммируем его с удргими отрицательными. Если сумма достигла N10, то завершаемся с отрицательным результатом.

5. Этот шаг достигается когда Nn ответов учтено и завершения не произошло. Повтор с шага 3.

Вариант реализации

Для уменьшения количества повторных опросов нод, вернувших PENDING, на шаге 4.1 их можно добавлять в отдельный список (PENDING-лист). До тех пор пока основной список неопрошенных нод не пуст, опрашиваемые ноды выбираются случайным образом только из него. Как только в основном списке не осталось нод, опрашиваются ноды, выбранные случайным образом из PENDING-листа.

Завершение алгоритма

Во время завершения часть запросов к нодам могут быть в процессе выполнения. Их не следует прерывать, но их результаты требуется отбросить.