Page: протокол проверки статуса контракта
2019-05-19 17:05
Проверка статуса контракта
черновик рекомендуемой процедуры
Цель
Получение статуса контракта с заданным уровнем доверия от сети.
Входные параметры
- Один из: 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-листа.
Завершение алгоритма
Во время завершения часть запросов к нодам могут быть в процессе выполнения. Их не следует прерывать, но их результаты требуется отбросить.