В предыдущем посте блога исследовательский отдел IOTA, в сотрудничестве с одним из наших получателей исследовательских грантов, доктором Себастьяном Мюллером, опубликовал результаты моделирования протокола FPC, сокращенно от «Быстрый вероятностный консенсус», который был предложен доктором Сергеем Поповым и доктором Биллом Бьюкенен.
Сегодня мы рады поделиться с вами исходным кодом симулятора, который мы используем для получения некоторых результатов FPC. Выпуск симулятора FPC для общественности позволяет нам включать сообщество, открывать технологии и поощрять их тестирование в условиях дикой природы.
Наш симулятор написан на Go, и вы можете получить доступ к коду из следующего репозитория:
Симулятор оптимизирован для оценки поведения FPC в определенных условиях. Мы упростили исходный код для голосования по отдельным транзакциям. В симуляции узлы могут вести себя либо честно, либо отрицательно.
Для каждой транзакции мы определяем среднее начальное мнение о честных узлах, стратегию для противников, а также другие параметры. Мы кратко обсудим некоторые из этих параметров в следующем разделе.
Вид сети
В документе FPC мы предполагаем, что каждый узел имеет полное представление о сети, но нас также интересует, что произойдет, если вместо этого мы предположим частичное представление о сети. Другими словами, мы хотим проанализировать, как отсутствие полных знаний обо всех других узлах в сети влияет на способность достичь консенсуса.
Для изучения этого сценария мы включили модель Ваттса-Строгатца, которая позволяет моделировать сеть в виде графикаа со свойствами малого мира. Для создания этих графиков добавлены два параметра:
Во-первых, параметр δ, который задает долю сети, с которой может взаимодействовать узел, и параметр γ, который представляет собой вероятность перемонтажа. График создается следующим образом: сначала мы создаем кольцевой график, в котором каждый узел соседствует с ближайшими соседями δN-1, где N — общее количество узлов.
Затем для половины из этих соединений новый одноранговый узел выбирается случайным образом из оставшихся узлов с вероятностью перемонтирования γ. Отметим, что при γ = 0 мы получаем кольцевой график, который максимизирует диаметр графика при фиксированном δ. Последнее может быть понято как наихудший сценарий с учетом графика Ваттса-Строгатца.
Хаотичность
Мы включили возможность уменьшения вероятности получения случайного числа. Это позволяет изучить производительность протокола в случае, если случайный порог не предусмотрен для каждого раунда. Это имеет особое значение для понимания того, сколько случайности требует протокол FPC.
Стратегии противника
Кроме того, мы предоставляем возможность включить две осторожные стратегии противника. В первом случае противник пытается атаковать целостность мнений, то есть переворачивать первоначальное мнение, непрерывно голосуя за первоначальное мнение меньшинства. Во втором случае злоумышленник пытается атаковать сеть, пытаясь создать ошибку соглашения и нарушить консенсус между узлами.
Метрики и оценка
В настоящее время симулятор поддерживает следующие основные метрики, для которых мы также предоставляем оценочные сценарии:
TerminationRate: скорость, с которой все честные узлы завершают работу до максимально допустимого раунда.
AgreementRate: скорость, с которой все честные узлы приходят к единому мнению
IntegrityRate: скорость, с которой все честные узлы сходятся в одном мнении, а окончательное мнение совпадает с исходным большинством.
EtaEvolution: гистограмма честных значений η для каждого раунда для узлов, которые еще не завершены.
Для этого мы включили три оценочных скрипта, написанных на Python с Matplotlib.
plot.py и plot2d.py: эти два сценария позволяют выполнять оценку с 1 и 2 векторами входных данных соответственно. Мы используем скрипт для извлечения данных из CSV-файлов вывода, которые генерируются кодом моделирования.
Например, на рисунках ниже мы применяем сценарий plot.py для отображения данных, полученных путем оценки эффектов частичного сетевого просмотра. На первом рисунке мы придерживаемся консервативной точки зрения и предполагаем, что график принимает форму кольца. Можно видеть, что частичное представление сети достаточно для того, чтобы узлы пришли к соглашению.
Для второго рисунка мы рандомизировали топологию, считая, что некоторые из соединений пересоединены с вероятностью γ. Мы показываем, что скорость соглашения может быть значительно увеличена при сохранении небольшого обзора сети.
