О PoW-майнинге написано множество статей, в которых обсудили все нюансы, но PoS, появившийся в 2011 году, до сих пор остаётся загадкой для многих. Сейчас есть определенная тенденция смешивая двух этих методов, чтобы они компенсировали недостатки друг друга. Но материалов на русском об этом явно недостаточно, поэтому мы в Hashflare решили сделать этот перевод.
Проблема «proof of stake» («подтверждения доли») все еще вызывает самые яростные споры в мире криптовалют. Несмотря на то, что данная идея обладает множеством несомненных преимуществ, включая эффективность, больший запас безопасности и способность противостоять проблемам централизации, связанным с аппаратной частью, алгоритмы «proof of stake» сложнее, чем альтернативные методы на базе «доказательства работы» (proof of work»). Скептицизм вызывает и сама работоспособность «proof of stake», в особенности, когда речь идет о такой глобальной, по всеобщему мнению, проблеме как «nothing at stake» («в доле ничего нет»). Тем не менее, как оказалось, проблемы вовсе не безнадежны, и можно даже обосновать успешное применение многообещающего алгоритма «proof of stake», при этом себестоимость его будет умеренной. Данная статья призвана дать четкие объяснения по вопросам стоимости и способам ее минимизации.
Экономически эффективные группы и «Nothing at Stake»
Начнем с введения. В целом, целью консенсусного алгоритма является обеспечение безопасного обновления состояния согласно определенным правилам смены состояний, когда право выполнения перехода/смены состояний распределяется среди экономически эффективного круга. Экономически эффективная группа (сет) представляет собой круг пользователей, которые могут получить право осуществления коллективных транзакций посредством некоторого алгоритма. Важным свойством данного круга является то, что экономическая группа, используемая для достижения консенсуса, должна быть надежно децентрализована – это значит, что никакой участник, или же группа участников, тайно вступившая в сговор, не может получить преобладающее большинство в группе, даже если у участника на счету крупная сумма средств и имеется материальная заинтересованность. В настоящее время мы обладаем информацией о трех безопасно децентрализованных экономически эффективных группах, каждая из которых сопоставлена совокупности алгоритмов консенсуса:
- Владельцы вычислительных мощностей: стандартное «доказательство работы» («proof of work») или TaPoW. Следует отметить, что речь идет о специализированном аппаратном обеспечении, и (хотелось бы надеяться) о модификациях универсальной аппаратуры.
- Стейкхолдеры (основные игроки): всё множество вариантов «proof of stake»
- Пользовательская социальная сеть: консенсус в стиле Ripple/Stellar
Напомним, что в недавнем времени предпринимались попытки разработки алгоритмов консенсуса на базе теории традиционной задачи византийских генералов; тем не менее, все эти подходы базируются на модели защиты M-of-N, а сама концепция «Задачи византийских генералов» все еще не дала ответа на вопрос о том, из какого сета следует выбирать N. В большинстве случаев используемым сетом являются стейкхолдеры (основные игроки), поэтому мы будет считать эти новые BFT парадигмы всего лишь более умными подкатегориями «proof of stake».
У «proof of work» имеется свойство, значительно облегчающее разработку для него эффективных алгоритмов: для участия в экономическом сете необходимо потребление ресурса за пределами системы. Это означает, что майнер, при внесении своего вклада в блочную цепь, должен выбрать для какой из всех возможных форков он будет майнить (или же лучше попытаться начать майнить новую цепочку), при этом разные опции являются взаимоисключающими. Двойное голосование, включая двойное голосование, когда второй голос отдается через много лет после первого, невыгодно, так как вынуждает пользователя распределять производительность майнинга между разными голосами; поэтому стратегия распределения мощностей майнинга исключительно на ту цепочку, которую пользователь считает перспективной, всегда будет преобладающей.
Тем не менее, в случае с «proof of stake, дела обстоят иначе. Несмотря на то, что включение в экономический сет может дорого обойтись (хотя, как мы далее убедимся, не всегда), голосование осуществляется бесплатно. Это означает, что алгоритмы «примитивного подтверждения доли» («naive proof of stake»), которые просто стараются скопировать «доказательство работы» («proof of work») создавая каждую монетку методом «смоделированного комплекта майнинга» («simulated mining rig»): раз в секунду у каждого аккаунта есть определенный шанс для генерирования действующего блока, имеют фатальную ошибку: при существовании множества форков лучше всего будет проголосовать за все форки сразу. В этом суть «nothing at stake».
Обратите внимание на доказательство того, что пользователю может быть нецелесообразно голосовать за один форк в среде «proof-of-stake»: превосходство альтруистов. Альтруистически направленная деятельность является комбинацией истинного альтруизма (со стороны пользователей или разработчиков ПО), который выражается в виде заботы о благе других пользователей и сети, и морально-психологического неприятия совершения действий, которые могут причинить кому-либо явное зло (двойное голосование), а также «ложного альтруизма», который имеет место быть в связи с тем, что владельцы монет не желают смиряться с падением стоимости их монеток.
К сожалению нельзя полагаться на один лишь «истинный альтруизм», так как стоимость монеток, обусловленная целостностью протокола, является общественной и, следовательно, она не получит должную поддержку (например, если активность каждого из 1000 имеет шанс 1% на то, чтобы стать решающей для успеха атаки, в результате которой стоимость монетки снизиться до нуля, тогда каждый стейкхолдер получит вознаграждение равное всего 1% от того, что он имеет). В случае распределения эквивалентном блоку генезиса Ethereum, в зависимости от того, как вы оцениваете вероятность каждого из пользователей на успех, необходимое количество компенсаций будет находиться в диапазоне от 0.3% до 8.6% от всей доли (или даже меньше если атака для валюты не фатальна). Тем не менее, разработчики алгоритмов не должны забывать о концепции истинного альтруизма, чтобы извлечь из нее максимальную выгоду, если она сработает должным образом.
Краткосрочность и долгосрочность
Сосредоточившись исключительно на краткосрочных форках (short-range forks) – форках длительностью менее некоторого числа блоков, возможно, 3000, можно найти решение проблемы «nothing at stake»: гарантийные взносы. Пользователь, для того, чтобы получить право на вознаграждение за голосование по блоку, должен внести гарантийный взнос, и если пользователь будет изобличен за голосованием по множеству форков, тогда доказательство этой транзакции будет включено в исходную цепочку, унося вместе с собой награду. Следовательно, выгодной стратегией снова будет голосование только за один форк.
Другой набор стратегий под названием “Slasher 2.0″ (в отличие от Slasher 1.0, исходного алгоритма «proof of stake” на базе гарантийного взноса), предполагает простое наложение штрафа на тех пользователей, которые проголосовали за неправильный форк, но не на тех, кто проголосовал дважды. Таким образом, анализ значительно упрощается, так как исчезает необходимость предварительного отбора голосующих за много блоков вперед для предотвращения вероятностных стратегий двойного голосования, хотя и у него есть своя цена, так как пользователи могут не захотеть вообще ничего подписывать, если существует две альтернативы блока заданной высоты. Если мы хотим, чтобы у пользователей была возможность подписи в этом случае, можно использовать вариант логарифмических правил подсчета результатов (более подробная информация приведена по ссылке). Применительно к целям данной статьи свойства Slasher 1.0 и Slasher 2.0 идентичны.
Причина того, почему это работает только для краткосрочных форков, проста: в перспективе пользователь должен иметь право забрать гарантийный взнос, а после того как взнос будет забран, исчезает фактор стимулирующий не голосовать за долгосрочный форк, который был начат задолго в прошлом, используя эти монетки. Одной из стратегий, которая ставит своей целью справиться с этой проблемой, является перевод взноса (депозита) в постоянное состояние, однако у этой стратегии имеются и собственные недочеты: за исключением тех случаев, когда стоимость монетки продолжает постоянно расти, непрерывно привлекая новых подписчиков, сет консенсуса обрывается, застывая в виде некоего постоянного сословия. Учитывая то, что одна из основных идеологических трудностей, связанной с популярностью криптовалют, это то, что централизация демонстрирует тенденцию к формированию застывших сословий, которые удерживают постоянные мощности, копирование такого сословия, скорее всего, окажется неприемлемым для большинства пользователей, как минимум для тех блочных цепей, которые нацелены на перманентность. Модель сословия может стать точным подходом для специализированных мимолетных блочных цепей, для которых предусмотрена быстрая смерть (например, можно представить такую блочную цепь, существующую для цикла игры на базе блочной цепи).
Одним из классов подходов по решению проблемы является комбинация вышеописанного механизма Slasher в рамках краткосрочных форков, с бэкапом, транзациями-как-доказательство доли («transactions-as-proof-of-stake»), для долгосрочных форков. В основном работа TaPoS заключается в подсчете плат за транзакции в рамках «счета» блока (требуя, чтобы каждая транзакция включала несколько байт из хэша предыдущего блока, чтобы транзакции не были заведомо переводимыми). Теоретически атакующий форк должен потратить большое количество средств, чтобы достичь успеха. Тем не менее, у данного гибридного подхода имеется фундаментальная ошибка: если мы предполагаем, что вероятность успешности атаки ничтожно мала, тогда у каждого подписавшегося есть мотив предложить услугу переподписки всех их транзакций в новую блочную цепь в обмен на небольшое вознаграждение; следовательно, нулевая вероятность атаки не является теоретически стабильной для игры. Разве ситуация, когда каждый пользователь будет создавать веб-приложения на node.js для получения компенсаций, не может стать реальностью? Даже если и так, существует и более легкий способ проделать это: продать старые, более не используемые частные ключи на черном рынке. При этом система «proof of stake», даже не принимая во внимание черные рынки, всегда будет подвержена угрозе со стороны отдельных пользователей, которые изначально участвовали в предварительной продаже и имеют долю в вышедшем блоке, и которые со временем находят друг друга и объединяются для запуска форка.
Учитывая все вышеприведенные аргументы, мы можем с уверенностью заключить, что данная угроза, исходящая от атакующего, создающего форк в условно беспорядочном долгосрочном диапазоне, к сожалению, является наиболее существенной, и в целом невырожденные реализации вопроса не позволяет алгоритму «proof of stake» успешно работать в модели обеспечения защиты «proof of work». Тем не менее, мы сможем обойти это фундаментальное препятствие посредством незначительного, но, тем не менее, фундаментального изменения модели обеспечения защиты.
Слабая субъективность
Несмотря на массу способов классификации алгоритмов консенсуса, в данной статье мы сосредоточимся на нижеследующем. В первую очередь, сегодня мы представим две самых распространенных парадигмы:
- Объективность: новый узел, появляющийся в сети, которому неизвестно ничего за исключением (i) определения протокола и (ii) сета всех блоков и других «важных» сообщений, которые были опубликованы, может независимым образом прийти к тому же заключению по текущему состоянию, как и остальная сеть.
- Субъективность: система имеет стабильные состояния, когда различные узлы приходят к различным выводам, и для участия необходим большой объем социальной информации (то есть, репутация).
Все системы, использующие социальные сети в качестве своего сета консенсуса (например, Ripple), являются субъективными в обязательном порядке; новый узел, которому неизвестно ничего, кроме протокола и данных, может быть убежден атакующим в том, что 100000 узлов заслуживают доверия, а, не имея репутации, понять, что это атака, невозможно. С другой стороны, «proof of work», является объективным: текущее состояние это всегда состояние, которое содержит наибольшее ожидаемое количество «доказательства работы» («proof of work»).
И сейчас, ради «proof of stake», мы добавим третью парадигму:
- Weakly subjective: новый узел, появляющийся в сети, которому неизвестно ничего за исключением (i) определения протокола, (ii) сета всех блоков и и других «важных» сообщений, которые были опубликованы и (iii) состояния, начинающегося на менее чем N блоков в прошлое, о котором известно, что он валидный, может самостоятельно прийти точно к такому же заключению по текущему состоянию, как и остальная сеть, за исключением тех случаев, когда имеется атакующий, который постоянно контролирует более Х процента всего сета консенсуса.
В рамках данной модели четко видно прекрасную работу «proof of stake»: мы просто запрещаем узлам возвращать более N блоков, и устанавливаем N протяженностью гарантийного взноса. Иначе говоря, если состояние S было валидным, и стало предком как минимум N валидных состояний, тогда с этого момента никакое из состояний S’, которое не является потомком S, не может быть валидным. Теперь долгосрочные атаки не представляют проблемы, по той простой причине, что мы установили, что долгосрочные форки невалидны в рамках определения протокола. Очевидно, что данное правило является слабо субъективным, с дополнительным преимуществом в виде того, что X = 100% (то есть, никакая атака не может привести к постоянному сбою за исключением тех случаев, когда она длится более N блоков).
Еще одним слабо субъективным методом подсчета является экспоненциальная субъективная оценка по баллам, определяемая следующим образом:
- Каждое состояние S содержит количественный показатель результатов («счет» («score») и «собственный вес» («gravity»))
- score(genesis) = 0, gravity(genesis) = 1
- score(block) = score(block.parent) + weight(block) * gravity(block.parent), где weight(block) обычно 1, хотя можно также использовать и более продвинутые весовые функции (например, в Bitcoin также хорошо работает weight(block) = block.difficulty)
- Если узел видит новый блок B’ с B в качестве родителя, тогда, если n является длиной самой длинной цепочки потомков B в то время, gravity(B’) = gravity(B) * 0.99 ^ n (учтите, что значения, отличные от 0.99, также могут использоваться).
Gravity | Собственный вес |
Score | Счет |
По большому счету, мы однозначно штрафуем более поздние форки. Согласно свойству ESS, в отличие от более примитивных подходов к субъективности, в основном избегаются постоянные разделения сети; если промежуток времени между тем, как первый узел в сети услышал о блоке B и последний узел в сети услышал о блоке B, является интервалом k блоков, тогда форк является неприемлемым, за исключением тех случаев, когда длины форков сохраняются в диапазоне около k процентов относительно друг друга (в таком случае, различные собственные веса форков позволяют удостовериться в том, что половина сети будет все время видеть один форк как имеющий больший счет, а вторая половина будет поддерживать другой форк). Следовательно, ESS является слабо субъективным с X примерно соответствующим тому, насколько атакующий может приблизиться к уровню расщепления сети 50/50 (например, если атакующий может добиться расщепления 70/30, тогда X = 0.29).
Number | Номер |
Gravity | Собственный вес |
Score | Счет |
В целом, правило «max возвращает N блоков» (“max revert N blocks”) лучше и проще, однако ESS может быть оправдано в тех ситуациях, когда пользователей устраивают высокие степени субъективности (то есть, N является маленьким) в обмен на быстрый подъем до очень высоких уровней защиты (то есть, неуязвимы для 99% атак после N блоков).
Результаты
Итак, как мог бы выглядеть мир, в котором царит слабо субъективный консенсус? В первую очередь, в наилучшем положении оказались бы те узлы, которые постоянно находятся онлайн, в тех случаях слабая субъективность по определению эквивалентна объективности. Узлы, которые изредка появляются в сети, или не реже одного раза за каждые N блоков, также будут в порядке, так как они смогут постоянно получать обновленное состояние сети. Тем не менее, у новых узлов, входящих в сеть и тех узлов, которые появляются в сети спустя очень долгий промежуток времени, не будет алгоритма консенсуса, который мог бы обеспечить им надежную защиту. К счастью, для таких узлов существует простое решение: в первый раз при регистрации и каждый раз, когда они очень долгое время пребывают оффлайн, им нужно всего лишь получить последний хэш блока от друга, программы анализа блочной цепи или от своего поставщика программного обеспечения, и вставить этот хэш в свой клиент блочной цепи в качестве «контрольной цифры». С этого момента они смогут обновлять свой взгляд на текущее состояние в безопасном режиме.
Данное предположение по обеспечению безопасности, идея «получения хэша блока от друга», может показаться многим неточной; разработчики Bitcoin часто высказывают соображение о том, что если решение проблемы долгосрочных атак является некоторой альтернативой решения механизма X, то безопасность блочной цепи целиком зависит от X, и, таким образом, алгоритм в действительности не более безопасен, чем в случае непосредственного использования X – подразумевая, что большинство X, включая наш подход, связанный с социальным консенсусом, являются небезопасными.
Тем не менее, данная логика игнорирует причину того, почему вообще существуют алгоритмы консенсуса. Консенсус является социальным прогрессом, а люди достаточно успешно достигают согласия самостоятельно без помощи каких либо алгоритмов. Возможно наилучшим примером являются Камни Раи, с помощью которых племена, живущие на островах Яп по сути установили и поддерживали блочную цепь, регистрируя переход права собственности на камни (использование в качестве биткоин-подобного имущества нулевой собственной стоимости) в рамках коллективной памяти. Причина необходимости алгоритмов консенсуса достаточно проста, так как люди не обладают бесконечными вычислительными возможностями, и предпочитают полагаться на программные агенты в плане достижения консенсуса. Умные программные агенты поддерживают консенсус по безгранично многочисленным состояниям с крайне сложными наборами правил и с высокой степенью точности, но при этом они также демонстрируют и высокую степень невежества в том плане, что у них очень мало социальной информации. Проблема алгоритмов консенсуса кроется в необходимости создании алгоритма, вклад социальной информации в который стремится к наибольшему возможному минимуму.
Слабая субъективность является абсолютно правильным решением. Благодаря этому решению удается разобраться с долгосрочными проблемами «proof of stake», полагаясь на социальную информацию, зависящую от человеческого фактора. При этом алгоритму консенсуса достается роль того, кто сокращает сроки достижения консенсуса от нескольких недель до двенадцати секунд. При этом такое решение позволяет использовать очень сложные наборы правил и работать с достаточно большими состояниями. Роль консенсуса, обусловленного человеческим фактором, относится к обеспечению консенсуса по хэшам блока в течение долгих временных промежутков, то есть того, с чем люди достаточно хорошо справляются. Правление, которое гипотетически является достаточно мощным для угнетения и внесение путаницы по действительному значению хэша блока возрастом от одного года в прошлом, также будет иметь возможности для подавления любого алгоритма «proof of work», а также внесения путаницы по правилам протокола блочной цепи.
Следует отметить, что нам не нужно настраивать N; теоретически мы можем предложить алгоритм, который позволяет пользователям блокировать свои депозиты в течение времени, превышающего N блоков, после чего пользователи могут извлечь выгоду из своих депозитов в плане получения более точного значения своего уровня защиты. Например, если пользователь не заходил в систему со времени T блоков назад, и продолжительность 23% депозитов превышает T, тогда пользователь может предложить свою собственную субъективную функцию подсчета, которая игнорирует подписи с более свежими депозитами, и, следовательно, обезопасить себя от атак до 11.5% от всей доли. Кривую роста размера процентной ставки можно использовать для повышения привлекательности долгосрочных вкладов на фоне краткосрочных, или же ради упрощения мы можем просто полагаться на альтруизм.
Предельные издержки: другие возражения
Противники долгосрочных вкладов считают, что хозяевам таких вкладов выгодно держать их в блокированном состоянии, что неэффективно. Проблема, абсолютно идентичная проблеме доказательства работы («proof of work»). В противовес этому, однако, приводятся четыре довода.
Во-первых, предельные издержки не являются полной себестоимостью, а коэффициент полной себестоимости, деленный на максимальную себестоимость, намного меньше для «proof of stake», нежели для «proof of work». Пользователи со схожим опытом, безболезненно блокирующие до 50% своих средств в течение нескольких месяцев, пользователи, испытывающие некоторые затруднения в результате блокировки до 70%, посчитают блокирование сверх 85% неприемлемым без большого вознаграждения. Кроме того, у каждого пользователя свои предпочтения по поводу желаемой длительности блокировки средств. Так как оба фактора складываются, вне зависимости от того, к чему приведут уравновешенные процентные ставки, наибольший объем средств будет блокирован на уровне намного меньшем, чем предельные издержки.
Во-вторых, блокировка средств имеет для его владельца свою цену, однако также и затрагивает общественные интересы. Наличие заблокированных средств означает, что уменьшилось количество денег в обращении, которые можно было бы использовать в транзакциях, а также то, что стоимость валюты вырастет, что приведет к перераспределению средств для всех остальных, создавая общественную выгоду.
В-третьих, гарантийные взносы являются весьма безопасным средством сбережения, то есть (i) они являются заменителем использования денег в качестве персонального страхового инструмента в условиях кризиса, и (ii) множество пользователей сможет брать кредиты в той же валюте, обеспеченной гарантийным взносом.
И наконец, поскольку «proof of stake» может в действительности забирать депозиты за плохое поведение, а не только вознаграждать, он может обеспечить более высокий уровень безопасности по сравнению с уровнем вознаграждений, в то время как в « proof of work» уровень безопасности может лишь сравняться с уровнем вознаграждений. Протокол «proof of work» никоим образом не может уничтожить микросхемы ASIC тех майнеров, которые ведут себя ненадлежащим образом.
К счастью, существует способ проверки данных предположений: запуск монетки «proof of stake» с вознаграждением за участие в размере 1%, 2%, 3%, и так далее, в год, и посмотреть какой процент монеток в каждом из случаев превратился в депозиты. Пользователи не будут действовать самим себе во вред, поэтому мы можем использовать количество средств, потраченных на консенсус вместо того, к какому уровню бесполезности привел алгоритм консенсуса; если «proof of stake» обладает достаточным уровнем защиты при более низком уровне вознаграждения, нежели «proof of work», тогда мы можем быть уверены в том, что «proof of stake» является более эффективным механизмом консенсуса, и мы можем использовать уровни участия на разных уровнях вознаграждения с целью получения точного представления о соотношении полной себестоимостью и максимальной себестоимости. В конечном счете, на то, чтобы получить точное представление о том, во сколько обходится блокировка средств, могут уйти годы.
В общей сложности мы теперь точно знаем, что (i) алгоритмы «proof of stake» могут быть безопасными, а слабая субъективность является как достаточной, так и необходимой для коренного изменения модели безопасности, чтобы обойти опасения, связанные с «nothing-at-stake» для достижения данной цели, и (ii) существуют значительные экономические причины для уверенности в том, что экономическая эффективность алгоритма «proof of stake» в действительности выше, нежели у алгоритма «proof of work». При этом «proof of stake» вовсе не является чем-то неизведанным; за последние полгода, потраченных на формализованные описания и исследования, удалось выявить сильные и слабые стороны этого алгоритма. Теперь мы знаем о нем не меньше, чем о «proof of work», который возможно всегда будет характеризоваться обилием вопросов по централизации майнинга. В данный момент речь идет просто о стандартизации алгоритмов и предоставлении выбора разработчикам блочных цепей.
Аренда оборудования для майнинга в облаке:
ссылка на оригинал статьи http://geektimes.ru/post/261298/
Добавить комментарий