Avalanche consensus family. Snowball. Confidence.

stsoen
AVA Russia
Published in
5 min readFeb 11, 2020

Все семейство консенсусов Avalanche основано на метастабильности, при которой система всегда стремится к какому-либо конечному результату под воздействием внешних факторов. В предыдущих Slush и Snowflake, несмотря на их авангардность, стоит проблема доверия. То есть, если брать все тот же пример с красным и синим цветами — они оба равнозначны в плане выбора между ними, и теоретически консенсус может привести к выбору каждого из них с одинаковой вероятностью. Счетчик в Snowflake нужен скорее для ускорения консенсуса и уменьшения количества раундов.

А для решения проблемы с доверительностью создан Snowball. Он дополняет предыдущий Snowflake еще одним слоем счетчиков, определяющим степень достоверности(confidence counter). Если в Snowflake счетчик сбрасывается после выбора цвета узлом IN (узлом-лидером отдельной выборки), то в Snowball он уже сохраняет то, сколько раз узел выбирал тот или иной цвет. Если чаще всего им оказывался красный — то соответственно, больше вероятности, что в конце узел примет именно его. Это добавляет голосованиям больше уверенности и шансов выбора легитимного решения, поскольку злоумышленникам станет сложнее протолкнуть попытку атаки — со временем будет расти разрыв между цветами, как вы сможете заметить дальнейших примерах. И будет также формироваться динамика необратимости — заставить сеть принять противоположное решение станет почти невозможно из-за критического перевеса в голосах.

Как и в прошлых статьях, на схемах узел, вокруг которого формируется случайная выборка, обозначается IN (Initial node), счетчик — cnt. IN принимает транзакцию в виде красного цвета, окрашивается в него, а его счетчик становится в позицию cnt=0.

1ый раунд

Далее проходит первый раунд голосования, в случайной выборке 5 нод, 4 красных против одной синей, IN оставляет красный цвет, его cnt=1. Запись об этом идет в счетчик достоверности Snowball, уровень доверия красного цвета увеличивается на 1.

2ой раунд

Во втором раунде в выборке 3 красных против 2 синих, IN опять оставляет красный цвет, его счетчик cnt=2. Степень доверности красного цвета увеличивается до 2, уровень синего по-прежнему 0.

3ий раунд

А вот в 3ем раунде большинство нод в выборке оказывается синего цвета. В Snowflake узел IN сбросил бы свой счетчик cnt на 0 и изменил бы цвет на синий. Но у нас же теперь укаждого цвета есть степень валидности. Поэтому IN не меняет красный цвет — он пока валиднее и предпочтительнее. Уровень доверия к синему цвету повышается до 1 против 2 у красного.

4ый раунд

В 4ом раунде в выборке снова оказывается большинство узлов синего цвета, показатели красного и синего сравнивается до 2. Но IN остается красным, потому что в Snowball узел не меняет цвет до тех пор, пока счетчик достоверности для его текущего (или изначального) цвета равен или больше значения другого цвета.

5ый раунд

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

Раунды повторяются до тех пор, пока шкала степени достоверности не заполнится и не достигнет параметра безопасности ß. Как и в Snowflake, ß соответствует последовательным записям одного и то же цвета. В Snowball общий смысл похож, параметр в примере установлен на 4 итоговых значения (в реальности он будет гораздо больше, это лишь схематичное описание работы консенсуса). По прошествии 9 раундов, в 6 из которых у IN был красный цвет, в счетчике доверительности заполняется шкала и порог безопасности ß, после чего IN необратимо принимает красный цвет как свой собственный (то есть, подтверждает транзакцию).

И уже только после того, как этот IN примет свой окончательный цвет, он сможет сам участвовать в дальнейших рандомных выборках, сообщая другим IN о своем неизменном цвете. Напомним, что ноды в выборке могут как иметь свой цвет, так и быть без него — в этом случае берут себе цвет узла-лидера выборки (IN).

В итоге Snowball усиливает Snowflake за счет концепции постоянного счетчика доверия. Ноды дополняют счетчик разными цветами, и не меняют цвет каждый раз, как в Snowflake при сбросе cnt на 0, если в выборке большинство оказывается противоположным. В Snowball узел меняет цвет только в том случае, если достоверность для другого цвета оказывается выше, чем для его текущего цвета.

Все это дает очень большую устойчивость к атакам по типу византийской неустойчивости, злоумышленникам сложно протолкнуть “плохую” транзакцию, чтобы сеть посчитала ее правильной. Тем более нода будет считать транзакцию подтвержденной только в том случае, если заполнится параметр безопасности ß, а это происходит внесением результатов голосований совершенно рандомными выборками узлов вокруг IN в каждом раунде.

Часть 1, Slush

Часть 2, Snowflake

Подписывайтесь на наши социальные сети и следите за обновлениями!

--

--