• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Кворумы в Dash

alex-ru

Well-known member
ПЕРЕВОД.
Оригинал: https://blog.dash.org/quorums-in-dash-e1f19a66f4bf
Александр Блок (Разработчик Core в Dash)


КВОРУМЫ в DASH

В этой статье я бы хотел описать, что представляют из себя кворумы Dash, как и какие решения они принимают. Кроме того, хотелось бы объяснить связанные с этим проблемы, трудности их масштабирования и развития. Первоначально этот текст был частью другой статьи, которую я сейчас пишу и собираюсь опубликовать в скором времени. Я попробую описать, что такое кворумы, для чего они в настоящее время используются и каковы их текущие ограничения, а в следующей статье дать ответ, как мы планируем их обойти.


Что такое Кворумы?

Кворум – это собрание участников, которые могут проголосовать за что-либо (обычно каждый участник может отдать только один свой голос по одному вопросу). Если 51% и более голосов отдано за какой-либо вариант - большинство считается достигнутым. Причём большинство голосов либо достигнуто, либо нет, без каких-либо промежуточных вариантов.

Это полезно, когда вероятность разногласий очень велика: например, при рассылке транзакций по сети и обработке возникающих конфликтов. В Биткойне был представлен способ регулирования таких случаев: по принципу «кого увидели первым». Dash унаследовал этот способ, который в общих чертах означает следующее: если возникает конфликт (например, в случае транзакции с двойной тратой), то первая увиденная нодой транзакция является единственной, которую нода должна принять и рассылать, игнорируя все другие.

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


Функция InstantSend

Dash уже решил эту проблему благодаря функции InstantSend. InstantSend - первое применение кворумов для решения такой неоднозначности в сети. На каждый вход транзакции выбирается новый кворум из 10 мастернод, каждая из которых должна подписать и отправить свой голос за него. Если 6 из этих 10 мастернод проделают это, то мы можем быть уверены, что большинство сети также увидело эту транзакцию в первую очередь. И в этом случае нода может уверенно отклонить все другие транзакции, конфликтующие с этой, даже если они были локально увидены первыми. Таким образом при соперничестве между двумя конфликтующими транзакциями, только одна из двух будет принята сетью.

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

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


Атаки Сивиллы и мастерноды

У вас может возникнуть вопрос, почему данное решение не было использовано другими криптовалютами, например Биткойном? Причина в том, что такая система защищена только в том случае, если вероятность так называемых атак Сивиллы (sybil attacks) практически равна нулю. Атака Сивиллы означает, что одиночный участник (возможно, злоумышленник) может легко создать столько голосующих единиц, сколько необходимо, чтобы получить контроль над результатами голосования.

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

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

Мастерноды Dash решают все эти вопросы путём требования залога в размере 1000 Dash и выплатой владельцам мастернод части вознаграждения за созданный блок. Это ограничивает количество возможных участников кворума и стимулирует мастерноды вести себя честно. Кто-либо, владеющий многими мастернодами, рискует потерять своё вознаграждение и вложенные средства, пытаясь обмануть систему.


Масштабирование кворумов и InstantSend

В настоящее время мгновенные платежи InstantSend является дополнительной функцией, осуществляемой за дополнительную комиссию. В общем и целом, вы платите некие дополнительные средства для того, чтобы получатель InstantSend-транзакции получил перевод быстрее. Сообщество Dash неоднократно высказывало пожелание изменить код так, чтобы каждая транзакция становилась InstantSend-транзакцией.

Однако, это совсем не так просто, как можно было бы ожидать. Кворумы, используемые для InstantSend, создают увеличенную нагрузку на сеть, поскольку требуют рассылки гораздо большего количества сообщений, чем обычная транзакция. Как правило, InstantSend создаёт примерно в 10 раз больше сообщений, которые должны быть полностью разосланы сетью. InstantSend также более требователен к характеристикам оборудования (ЦП и ОЗУ).

Причина в том, что каждый участник кворума создает один голос за каждый вход транзакции и рассылает его на всю сеть (то есть 10 сообщений на один вход транзакции). Соответственно, транзакция с 10 входами уже потребует 100 сообщений. В то же время каждая нода в сети должна проверять эти сообщения, а затем сохранять их в памяти до тех пор, пока транзакция не будет включена в блокчейн и не будет подтверждена несколькими блоками. Представьте себе, что это будет значить, если все люди в мире начнут использовать Dash...

Нагрузка на сеть не только повысит требования к оборудованию и сети, но также и снизит стабильность, надёжность и безопасность всей сети. Это связано с тем, что каждый голос обрабатывается как отдельное сообщение, и только если 6 из 10 присутствуют на местном уровне, большинство можно считать достигнутым. Нагрузка увеличивает вероятность того, что разные ноды будут видеть разные подмножества голосов, и тогда медленная и неопределённая рассылка повысит уязвимости сети для злоумышленников.


Новые варианты использования кворумов

Существует много других случаев, когда кворумы оказываются полезны, а в некоторых случаях без чего-то похожего на кворумы просто не обойтись.

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

Однако увеличение размера кворумов будет параболически увеличивать нагрузку на сеть. Например, если нам понадобится 100 участников в кворуме, тогда уже не 10, а 100 голосов должны будут рассылаться от каждого каждому.


Evolution и кворумы

Платформа Evolution содержит некоторые фундаментальные особенности, которые в основном полагаются на решения большинства, принятые в кворумах. Первоначально планировалось повторно использовать существующую систему кворумов, но в ходе работы мы столкнулись со значительным количеством ограничений.

Помимо тех же ограничений, что и при масштабировании применения InstantSend, выявились некоторые новые. Так, например, нам нужно хранить результаты решений кворума в блокчейне, чтобы они могли быть проверены кем угодно и когда угодно. Но сохранение каждый раз 100 или более ECDSA-подписей в блоке врядли можно считать технологией, которая сможет легко масштабироваться ;)


Вывод

Кворумы, используемые сейчас в Dash, достаточно хороши для своей текущей области применения. Тем не менее, уже сейчас мы нуждаемся в лучшем решении, если хотим продолжать развиваться. В одной из следующих статей я расскажу о решении, над которым мы работаем уже довольно давно.
 
Back
Top