Proof-of-Stake (PoS): что это за алгоритм и как он работает
Популярный механизм консенсуса Proof-of-Stake (PoS) — алгоритм, по правилам которого, для того чтобы стать валидатором, добавлять новые блоки в блокчейн, подтверждать легитимность транзакций и получать за это вознаграждение, нужно владеть токенами сети и заблокировать их некоторое количество на определенный период времени (отправить в стейкинг).
На Proof-of-Stake работают такие известные сети, как Solana, Cardano, Toncoin, BNB Chain, BNB Smart Chain и другие популярные блокчейны, а в сентябре 2022 года с PoW на PoS перешел и второй по капитализации блокчейн Ethereum.
Механизм консенсуса: что это такое и чем он так важен
Механизм консенсуса представляет собой набор правил, по которым участники блокчейна (валидаторы) формируют новые блоки транзакций. Блокчейны не имеют единого органа управления, который подтверждал бы транзакции, так как это децентрализованные системы, и протоколы консенсуса призваны обеспечивать безопасность сети и гарантировать согласие всех ее участников одну версию блокчейна.
Простыми словами: алгоритм консенсуса — это перечень правил, по которым живет, работает и развивается блокчейн. Каждый новый блок в цепочке формируется согласно этим правилам.
Существуют различные консенсуальные протоколы: Proof of Work (PoW), Proof of Stake (PoS), Practical Byzantine Fault Tolerance (PBFT), Proof of Burn (PoB) и др. Из них самые известные — PoW (доказательство выполнения работы) и PoS (доказательство доли владения).
Как появился PoS
Впервые PoS был использован в августе 2012 года в PPCoin в гибридном варианте: новые монеты распределялись через майнинг, а транзакции мог обрабатывать любой узел, который хранил PPC. Первой «чистой» криптой на PoS стал Nxt, запущенный в ноябре 2013 года.
Алгоритм Proof-of-Stake оказался очень удачным и гибким, поэтому его начали использовать во множестве блокчейнов в разных вариантах.
Proof-of-Stake: как это работает
Итак, алгоритм PoS не требует от участников сети вычисления сложных математических функций, а право на генерацию нового блока предоставляется валидатору псевдослучайным образом, в зависимости от количества монет, заблокированных им в блокчейне. Этот механизм еще называют форжингом или минтингом, а формирование блоков — чеканкой.
Простыми словами: форжинг — процесс генерации новых блоков сети с использованием механизма консенсуса PoS за вознаграждение.
Опишем принцип работы PoS.
1. Нода блокирует монеты, как только это сделано, блокчейн считает, что узел готов к работе. Минимальный порог входа в каждом блокчейне разный. В Ethereum, например, для того чтобы стать валидатором, нужно заблокировать 32 ETH.
2. Все валидаторы соревнуются за право добавления нового блока в цепь распределенного реестра.
3. Сеть случайным образом на основе определенных критериев выбирает ноду для добавления блока. Есть несколько вариантов выбора вычислительного устройства для форжинга блока.
- По «возрасту» монеты с учетом времени, на протяжении которого валидатор стейкал свои монеты, а также общему числу всех монет, заблокированных в виде стейка. После того, как какой-то узел выбирается валидатором, «возраст» его монет обнуляется.
- По показателям стейкинга, то есть количеству отправленных в стейкинг монет, и значению хэша. Чем выше показатель стейкинга и чем ниже значение хэша, тем больше у ноды шансов создать новый блок.
4. Валидатор проверяет легитимность транзакций в блоке, подписывает его, другие узлы подтверждают легитимность блока, и если большинство из них считают его действительным, он записывается в блокчейн-цепочку.
Если блок классифицируется другими валидаторами как нелегитимный, выбранная нода теряет свой стейк (все монеты в стейкинге), и весь процесс перезапускается, а фальсификатор в будущем не сможет генерировать блоки.
5. Нода получает вознаграждение в виде комиссии за транзакции. Вознаграждение и стейк узла замораживается на некоторое время, чтобы сеть могла перепроверить легитимность транзакций.
Преимущества и недостатки Proof-of-Stake
Среди главных преимуществ Proof-of-Stake можно выделить:
- отсутствие необходимости в дорогостоящем оборудовании;
- значительно более низкие энергозатраты по сравнению с алгоритмом PoW;
- высокий уровень безопасности (чтобы совершить атаку 51%, придется завладеть более чем половиной всей криптовалюты сети, а это огромные деньги, и даже если злоумышленники наберут такую сумму, атака станет финансово нецелесообразной);
- высокая скорость проведения транзакций;
- прекратить свою деятельность как валидатора в PoS очень просто, достаточно разблокировать и продать свои монеты;
- полученное вознаграждение можно реинвестировать, и его прибыльность будет возрастать в долгосрочной перспективе, в PoW это сделать сложнее, так как майнерам приходится вкладывать деньги в оборудование.
Есть у Proof-of-Stake и минусы. Главный — это, в некотором роде, тяготение к централизации, ведь чем больше у валидатора монет, тем больший вес имеет его голос. Наконец, несмотря на то, что атака 51% невыгодна, она вполне возможна.
Разновидности Proof-of-Stake
На принципах классического PoS разработано большое количество алгоритмов консенсуса, которые отличаются друг от друга определенными деталями. Вот некоторые из них.
- Делегированное доказательство доли (DPoS, Delegated Proof-of-Stake). Участники сети используют свои токены для того, чтобы выбрать валидаторов. Используется, например, в сети Bitshares.
- Арендованное доказательство доли (LPoS, Leased Proof-of-Stake). Валидатор арендует у участников сети их криптовалюту и выплачивает им за это вознаграждение. Применяется, например, в сети Waves.
- Номинированное доказательство доли (NPoS, Nominated Proof-of-Stake). Среди участников блокчейна присутствуют так называемые номинаторы, которые вносят залоги за валидаторов и несут ответственность за их добропорядочность. Используется, например, в блокчейне Polkadot.
- Чистое доказательство доли (PPoS, Pure Proof-of-Stake). Используется в сети Algorand. Суть механизма в том, что валидатора нового блока случайным образом и анонимно выбирают из криптокошельков, на которых есть более 1 ALGO.
- Доказательство авторитета (PoA, Proof-of-Authority). Механизм, при котором каждый валидатор должен быть утвержден разработчиками блокчейна. То есть это доказательство доли + репутация. Валидаторы проходят верификацию. Алгоритм используется в сети BNB Chain.
Виды стейкинга
Поучаствовать в поддержании работы блокчейна на PoS можно разными способами.
- Классический стейкинг (самостоятельный технический). Пользователь сам выступает валидатором. Самая большая проблема такого способа — минимальная сумма, которую нужно заморозить на кошельке. Она может оказаться неподъемной для многих. Это, например, 32 ETH в сети Ethereum (приблизительно $44 600 на момент написания статьи), 1 000 DASH в одноименном блокчейне ($47 820),10 000 XTZ в Tezos ($8400). Что же касается сроков стейкинга, то они могут колебаться от нескольких дней до нескольких лет. Если валидатор уйдет в офлайн, его ждет штраф.
- Холодный стейкинг. Монеты блокируются на балансе холодного кошелька, постоянно находиться онлайн не нужно, начисления прекращаются сразу после разморозки и вывода монет.
- Делегированный стейкинг. Монеты переводятся посреднику, а он размещает их вместе с криптовалютой других клиентов. Если клиентов много, посредник аккумулирует большое количество монет и, соответственно, получает высокие шансы на право генерации блока и получение дохода.
Заключение
Алгоритм консенсуса Proof-of-Stake имеет большой потенциал. Он значительно доступнее для людей, которые хотят стать валидаторами, чем Proof-of-Work для тех, кто хочет майнить.
Но самое главное его достоинство — экологичность, поскольку он не требует сверхмощного оборудования и, как следствие, высоких энергетических затрат.
Что такое популярный алгоритм PoS простыми словами
Proof-of-Stake — это подход, используемый в криптовалютной индустрии для подтверждения транзакций в блокчейне. Блокчейн –– это набор распределенных узлов в децентрализованной базе данных. Для координации работы систем на основе блокчейна необходимы алгоритмы консенсуса.
В реестре блокчейна проверка транзакций криптовалюты может происходить с помощью множества различных распределенных подходов. Они известны как алгоритмы консенсуса, включая Proof-of-Stake (PoS) и протокол Proof-of-Work (PoW). Оба метода достигают одинакового результата проверки транзакции путем добавления нового блока в базовую цепочку блоков криптовалюты. Хотя два механизма консенсуса дают одинаковый результат, они работают по-разному.
В качестве алгоритма консенсуса PoS использует валидаторы. Они фиксируют установленное количество криптовалюты или криптотокенов, свою долю в смарт-контракте на блокчейне. Взамен получают возможность подтверждать новые транзакции и получать вознаграждение. Но если валидаторы неправильно проверят данные, они могут потерять часть или всю свою долю.
Solana, Terra и Cardano являются одними из крупнейших криптовалют, использующих PoS.
Криптовалюта Ethereum, вторая по величине и рыночной капитализации после Биткойна, также перешла от механизма Proof-of-Work к Proof-of-Stake.
Протокол Proof-of-Work заработал плохую репутацию из-за огромного количества вычислительной мощности и электроэнергии, которую он потребляет. Учитывая повышенную озабоченность по поводу воздействия на окружающую среду блокчейнов, использующих Proof-of-Work, таких как Биткойн, Proof-of-Stake потенциально может принести лучшие результаты для окружающей среды.
«В глобальном масштабе Proof-of-Work наиболее выгоден там, где энергия может быть получена с наименьшими затратами», — уточнил Мариус Смит, руководитель отдела развития бизнеса в компании Finoa.
Это концентрирует добычу криптовалюты в нескольких регионах, где затраты на электроэнергию самые низкие. Скромное же энергопотребление протокола PoS решает эту проблему и широко распределяет инфраструктуру, потенциально делая систему блокчейна более надежной.
Proof-of-Stake открывает двери большему количеству людей, участвующих в системах блокчейна в качестве валидаторов. Нет необходимости покупать дорогие вычислительные системы и потреблять огромное количество электроэнергии для стейкинга криптовалюты. Все, что вам нужно — это монеты.
Криптовалютные биржи, такие как Coinbase, Binance и Kraken, предлагают стейкинг на своих платформах. Существуют даже специальные платформы для ставок, такие как Everstake. В зависимости от блокчейна владельцы криптовалюты могут получать доход от 5% до 14% от своих активов, делая ставки.
Еще одно преимущество блокчейнов с механизмом PoS дает потенциал на будущее механизма: они могут быть более масштабируемыми, чем их аналоги с протоколом Proof-of-Work. Блокчейны с доказательством доли теоретически могут поддерживать больше одновременных транзакций без ущерба для безопасности или децентрализации.
Естественно, PoS не лишен недостатков, и теперь подробнее поговорим о них.
Основатель e.Cash Амори Сеше утвержает, что механизм Proof-of-Stake не так тщательно проверяется, как Proof-of-Work, которой уже более десяти лет обеспечивает безопасность блокчейнов на миллиарды долларов.
Действительно, определенные реализации PoS могут сделать блокчейны более уязвимыми для различных видов атак, чем PoW, таких как атаки с целью получения взятки по низким ценам. Подверженность атакам снижает общую безопасность блокчейна.
Валидаторы, которые владеют большим количеством токенов или криптовалюты блокчейна, могут иметь огромное влияние на систему PoS. Переход криптовалюты с PoW на PoS — сложный и тщательно продуманный процесс. Любая криптовалюта, которая хочет изменить механизмы консенсуса, должна будет пройти сложный процесс планирования, чтобы обеспечить целостность блокчейна от начала до конца и далее.
Как мы уже упоминали выше, существуют два механизма консенсуса, которые обычно используются в приложениях криптовалюты и DeFi: PoS и PoW. В то время как первый использует стейкинг, PoW требует от майнеров решения сложных математических головоломок, чтобы определить, какие участники сети могут проверять транзакции и расширять блокчейн.
Плюсы и минусы Proof-of-Stake:
- Требуются валидаторы для хранения части токена или криптовалюты блокчейна.
- Не требует значительных вычислительных мощностей для проверки транзакций.
- Это более новый подход, чем PoW, с меньшим принятием в качестве механизма консенсуса.
- Криптовалюты, использующие алгоритм PoS, могут быть более привлекательными для портфеля ESG из-за меньшего воздействия на окружающую среду.
- Возможность неправомерного влияния. Ключевое обещание криптовалют заключается в том, что они децентрализованы. При необходимости делать ставки на монеты вполне возможно, что крупная заинтересованная сторона может оказать значительное влияние на проверку транзакций в сети блокчейн.
Плюсы и минусы Proof-of-Work:
- PoW имеет более длительную проверенную историю использования в качестве механизма консенсуса блокчейна.
- Майнерам не нужно хранить какие-либо активы блокчейна, им нужна вычислительная мощность только для проверки транзакции.
- Может потреблять очень значительное количество электроэнергии. Криптовалюты, использующие Proof-of-Work, часто исключаются из портфелей ESG из-за энергопотребления.
Proof-of-Stake становится все более распространенным механизмом консенсуса в мире криптовалют. В настоящее время существуют около 80 различных криптовалют, использующих этот протокол в качестве алгоритма консенсуса.
Некоторые самые популярные монеты, использующие PoS:
- Ethereum (ETH).
- Cardano (ADA).
- Solana (SOL).
- Tron (TRX).
- EOS (EOS).
- Cosmos (ATOM).
- Tezos (XTC).
Итак, протокол PoS используется в качестве механизма консенсуса для блокчейна, но обладает значительно большим потенциалом. PoS имеет низкое энергопотребление и высокий уровень доступности для участия обычных людей в качестве валидаторов. Механизм в скором времени может стать основным в безопасности блокчейна. Тем более в связи с обострившейся потребностью уменьшения энергопотребления в мире он может дать лучшие результаты для окружающей среды.
Мнения экспертов могут не совпадать с позицией редакции. Traffic Cardinal не дает инвестиционных советов, материал опубликован исключительно в ознакомительных целях.
Proof-of-Stake: взгляд изнутри
Эта статья будет полезной всем разработчикам, кто уже столкнулся с уязвимостями PoS или кому всё ещё только предстоит.
Ужасаемся под катом.
Крупица истории
На просторах интернета прослеживается зарождение Proof-of-Stake (PoS) в Peercoin после дискуссии на одном из форумов в 2011 году, последующее использование в Novaсoin и дальнейшее распространение в PIVX и прочих форках Bitcoin. Достаточно примитивную PoS-логику вынесли в модуль kernel.h / kernel.cpp , которая и кочует по пространствам форков в виде различных франкенштейнов.
Алгоритм PoS прошёл несколько стадий развития, кто-то даёт им версии. Сейчас варианты PoS разделились по естественным причинам, появился DPoS. Одним из самых передовых решений является протокол Casper в Ethereum.
Любому блокчейну требуется генерация блоков и за кем-то должно быть право построить новый блок. Если в таком блокчейне как система контроля версий Git это делает автор без особой конкуренции, то в криптовалютах идёт ожесточённая борьба за награду блока в рамках Proof-of-Work (PoW) — нахождение такой комбинации переменных входных параметров путём подбора, которая даёт результат, соответствующий детерминировано заданной цели (добыча, майнинг).
PoS заменяет Proof-of-Work (PoW) с целью избежать бесполезной траты ресурсов на майнинг. Вместо этого все входные параметры строго заданы с константной характеристикой на основе существующих сбережений держателей монет. Поэтому PoW требуется как стартовый этап для PoS, если не прибегать к различным вариантам изначального заложенного обогащения создателей монеты.
Зачем?
Экономия электроэнергии примерно так же важна разработчикам и держателям монет как ограничение выбросов парниковых газов для производителей и потребителей. Жестокая правда в другом:
- проекты на основе PoW подвержены т.н. «атакам 51 процента»: атакующие могут накинуть большие мощности, создать паралелльную цепь, а потом внезапно опубликовать её с иным движением монет по счетам (т.е. двойная трата),
- майнерам PoW необходимо покрывать свои затраты и вкладываться в наращивание мощностей — это прямой отток капитала из проектов,
- владельцы сбережений желают поддерживать её покупательную способность путём самонаращивания капитала, а не смотреть на естественную инфляцию.
На живом примере: в ноябре-декабре 2018 были попытки атак; потом в декабре-феврале был ажиотаж как на самую доходную монету для майнинга на видеокартах; курс просел с 2+ до 0.5 USD; после перехода на PoS, курс поднялся до 1 USD уже через неделю и приток инвестиций усилился.
Технические моменты
Внимание: в данном разрезе речь идёт именно о «традиционном» PoS в том виде, как он есть в Peercoin, PIVX и их форках.
Надо понимать, что отсутствует какая-либо централизация и учёт «очков». В данном варианте работает всё тот же принцип удачи как и в PoW.
1. Терминология
Терминология относительно общая, но в различных реализация свои нюансы:
- PoW target — цель = базовая цель, обычно 2^240 (0x0000ffff. ), делённая на сложность блока (увеличивает количество нулей спереди).
- Block difficulty — сложность блока относительно базовой цели, детерминировано устанавливаемая на основе текущего темпа роста цепи.
- UTXO — Unspent Transaction Output, пара из хеша транзакции и номер выхода.
- CoinBase — специальная транзакция с индексом 0 в блоке, где содержится вознаграждение.
- Stake или CoinStake — специальная транзакция с индексом 1 в блоке.
- Stake Input — UTXO, который соответствует требованиям для ставки по размеру и возрасту.
- Stake Modifier — специальный детерминировано вычисляемый параметр для каждого Stake Input.
- Stake Hash — результат хеширования, который должен быть арифметически меньше Stake Target.
- Stake Target — то же, что и PoW target, но пропорционально увеличенная суммой Stake Input относительно минимальной ставки.
- Block Signature — подпись блока.
- Fork — разветвление цепи.
- Split — разделение сети.
- Orphan — отброшенные блоки из-за выбора другой альтернативы.
2. Анатомия
- Находим все UTXO, которые соответствуют требования Stake Input
- Находим Stake Modifier.
- Умножаем PoW Target на сумму Stake Input
- в миллионных долях по факту — поэтому 1 MH PoW хешрейта экспериментально выходит равным одной монете.
- Получаем Stake Hash = H(Stake Modifier, Stake Block Time, UTXO output index, UTXO txid, Current Block Time) .
- переменный параметр только Current Block Time
- Если Stake Hash >= Stake Target , то пытаемся подобрать Current Block Time в допустимом промежутке.
- нужно учитывать возможность переполнения Stake Target при умножении на сумму Stake Input в зависимости от реализации.
- Запихиваем Coinbase в tx[0], а CoinStake в tx[1].
- бенефициар’ом Coinbase является тот же скрипт (адрес), что и у Stake Input.
- Подписываем блок.
2.1. Время блока:
Нетрудно заметить, что жульничество со временем может дать некоторую выгоду. Стандартный консенсус ограничивает нижний и верхний предел.
Нижним всегда задаётся среднее время блоков за последние N блоков, обычно за 11. Это допуск на неточность времени на генерирующих узлах.
Исторический верхний предел был задан для PoW пальцем в небо в 2 часа. Увеличение интервалов уменьшает сложность и делает ветку менее привлекательной — поэтому нет смысла. Зато для PoS смысл есть.
PIVX и другие ограничивают время в будущем в максимум 3 минуты. Некоторые ставят более жёсткое ограничение, но это создаёт проблемы у пользователей. Некоторые реализации PoS решили изменить минимальные интервалы Current Block Time с одной секунды до 15-16 секунд.
2.2. Stake Modifier:
Stake Modifier задумывался как средство для затруднения предсказания и строительства цепи наперёд, но что-то пошло не так.
Есть различные варианты его вычисления: последние биты хешей блоков у концов прогрессивно заданных временных интервалов, [неочень] плохо предсказуемые значения из предыдущих блоков и т.п. Местами больше похоже на обфускацию кода чем на что-то вменяемое.
В оригинале берётся промежуток в 64 интервала. Этот промежуток прогрессивно делится на 64 неравные части. Границы округляются к минутам. По границам выбираются существующие блоки и с них берётся по одному последнему биту. Так получается число в 64-бита, чем-то похожее на Nonce.
Интервал в Peercon 20 минут, но ребята из PIVX решили что интервал в 1 минуту, округлённый до минуты — это то, что доктор прописал.
В общем, в некоторых реализациях типа Blackcoin V2+ всё исправлено и Stake Modifier считается от головы, а в Peercoin V03, PIVX, Blackcoin V1 и других от блока Stake Input. Последнее почти полностью уничтожает смысл. Есть предположение что путаница пошла из-за банальной проблемы именования переменных, дальнейших метаморфоз и бездумной копипасты. И сам автор достаточно поздно обнаружил проблему пока всё внимание было сконцентрировано на защите от DoS. Не попадитесь!
2.3. Подпись блока
Поскольку хеш блока больше не служит доказательством работы, а любой может взять подписанную транзакцию CoinStake из чужого блока, то требуется проверить что блок создан владельцом Stake. Поэтому заголовок подписывается тем же приватным ключом, что и CoinStake.
2.4. Скрипт выхода CoinBase и CoinStake
Одни и те же скрипты выхода, или как в народе называют адреса кошельков, требуются для сохранения приватности и избегания связывания отдельных адресов в одном кошельке.
2.5 Что и куда?
Есть разные вариации как распоряжаются с суммами в CoinBase и CoinStake. Логика и мотивация в конкретном случае:
- Суммы должны быть раздельны чтобы избежать даже малейшего варианта потери средств пользователя из-за ошибки обработки.
- CoinBase сохраняет свои 100 подтверждений, а вот CoinStake может быть потрачен сразу, что конечно оставляет риск двойной траты.
- привязывание к глубине блоков ещё и противоречит цензу по возрасту для использования в качестве Stake Input.
- CoinBase и CoinStake никогда не должны попадать в mempool, а все основанные на них транзакции должны удаляться при перестройке цепи.
3. Полные блоки против заголовков
Вступление полноценного узла в сеть начинается с синхронизации. В Bitcoin, синхронизация идёт в первую очередь на основе заголовков блоков, т.к. в них находится достаточная информация для предварительной проверки на соответствие консенсусу. Сначала вытягиваются и проверяются относительное маленькие заголовки пачками до 2000 штук с одного стороннего узла. Если изначальная проверка прошла успешно, то вытягиваются уже все блоки параллельно со всех подключённых узлов.
Защита от флуда строится на том, что локальный узел сравнивает лучший известный заголовок с тем, что у него есть и запрашивает всю цепь заголовков. По мере скачивания, всё проверяется малыми затратами дискового пространства и вычислений. Цепи сравниваются по своему весу на основе такой характеристики как chainwork, которая складывается из сложности каждого отдельного блока. Для построения такой сильной альтернативной цепи потребуются крайне большие вложения ресурсов, что делает атаки малоперспективными.
С PoS такой подход не работает, т.к. для проверки блоков требуется обработать полные предыдущие блоки хотя бы до границы минимального возраста Stake. Просмотренные автором реализации не стали извращаться, а просто отказались от работы с заголовками.
Поэтому автор реализовал параллельное оппортунистическое скачивание блоков вслед за заголовками, что значительно увеличивает скорость синхронизации из-за использования всех соединений. Мелкие задержки возникают только если пиры находятся на разных цепях — тогда соединение разрывается после незначительного таймаута как по стандартной схеме. Как минус, склонность к выбору ложной цепи на момент синхронизации.
К слову, стандартный клиент Bitcoin и его форки достаточно долго набирают минимальное стандартное количество исходящих соединений в 8 штук, если какие-то из них срываются по различным причинам. Это было решено асинхронными исходящими соединениями.
4. Форки, сплиты и орфаны
При конкуренции создания блоков, альтернативные цепи в 1-2 звена являются относительно обычным явлением. Более длинные форки в развитых сетях естественным путём происходят только при эпичных сбоях в консенсусе из-за ошибки программирования или глобального разрыва интернета.
Даже при наличии разделения, обычно нет угрозы целостности обработки транзакций, т.к. при отсоединении блоков все транзакции попадают обратно в mempool и включаются уже в другие блоки. Mempool — это временное хранилище транзакций после их создания. Сам mempool сохраняется на диск в последних версиях. Награда же за блок уничтожается. Именно поэтому для наград устанавливается минимальное количество подтверждений (глубина).
Бывает что локальные сегменты сети теряют связь с внешним миром и продолжают майнить, предполагая наличие соединения с основной сетью. Такие ветки обычно не представляют угрозы из-за своей естественной слабости.
Главная атака 51% для PoW уже описана выше — она крайне ресурсоёмка, а вот для PoS она становится относительно доступна. По этой причине становится технически возможным плодить множество ветвей из различных звеньев цепи. Одно из классических решений — это запрещать форки ниже определённой глубины.
Основная проблема такой защиты заключается в невозможности узлам из сегментов-отшельников самостоятельно вернуться к основной цепи после перезапуска.
Поэтому был реализован подход в запрещении форков старше определённого промежутка времени только если верхушка цепи достаточно молодая.
При целевом интервале блоков в 1 минуту, критерий старого форк был выбран в 1 час, что примерно соответствует 60% подтверждений CoinBase, а критерий молодости макушки в 15 минут — в 3+ раза выше максимального статистического запаздывания блока.
5. Хеш блока и сплиты
В PoW хеш блока полностью покрывает все данные. Он же используется для проверки относительно цели. В PoS, Stake Hash является отдельным значением, т.к. необходимо исключить возможность его подбора. Это открывает основную угрозу — возможность плодить неограниченное количество различных версий блока на основе одного и того же совпавшего Stake, которыми легко зафлудить и положить сеть или её отдельные узлы.
Наивные подходы к защите порождают новые ещё более серьёзные уязвимости сплита. Один из таких подходов в разных вариациях — это разрешить использование Stake Input только один раз. Простая атака — послать разные блоки разным узлам, что сразу порождает мягкий сплит.
Ещё более фатально возможно это усугубить DoS-баном, что разделит не только цепи, но и саму сеть на разные сегменты.
Возникают и другие проблемы — невозможность использовать Stake из отброшенного блока.
Поэтому в качестве наиболее безопасного решения был выбран метод дросселя — один и тот же Stake может использоваться не более одного раза в минуту. Логика проста: атака может длиться только в интервале 1 часа (см. старый форк выше), за который возможно зафлудить не более 60 блоков. В лучшем случае, на следующем блоке сеть уже перейдёт на единую цепь. В худшем случае при непрерывной атаке это произойдёт через час. Вероятность самого худшего случая — нахождения нескольких блоков подряд, тает в геометрической прогрессии.
Всё равно остаются некоторые моменты, при которых узлы уязвимы к умеренному флуду до момента полной синхронизации.
6. Минимальный возраст
У некоторых это ограничение вызывает недоумение, но оно крайне важно для стабильности сети, т.к. данный параметр напрямую связан с максимальной длиной альтернативной сети, которую локальный узел сможет проверить без серьёзных технических извращений.
Как было упомянуто ранее, локальный узел должен обработать все блоки до временной границы возраста чтобы иметь возможность проверить что Stake Input а) имеет место быть b) действительно является UTXO и не был потрачен.
Проверить такое возможно только через функционал т.н. CoinView, который представляет из себя состояние движения монет на момент конкретного блока — верхушки главной цепи в понимании локального узла.
Реализация полноценной проверки альтернативных цепей через временные интервалы или даже специальным образом сохранённые CoinView выглядит малоперспективным, т.к. количество этих альтернативных цепей бесконечно велико.
Слишком большая планка для возрастного ценза UTXO негативно сказывается на пользователях, которые хотят потратить или объединить часть своих монет.
Если указывать эту границу в глубине блоков, то возможна гипотетическая патовая ситуация полной остановки цепи из-за того, что нет подходящего UTXO. В случае же единиц времени происходит хоть какое-то движение.
Поэтому используется сбалансированный и работающий в других сетях выбор в 1 час в абсолютных единицах времени, а не глубине блоков.
7. Что лучше N UTXO по минимальной сумме или один UTXO с N суммой?
Здесь сама напрашивается аналогия: что лучше одна пушка с точностью 0.9 или три пушки с точностью 0.3, но при вероятностях порядка 1/2^20 результаты таких расчётов казалось бы нивелируются. Немного карты спутывает ценз зрелости.
Бытующее мнение, что много маленьких транзакций находят больше блоков, наверно пошло со времён когда возраст Stake Input тоже учитывался для определения веса. Тогда старые маленькие транзакции действительно имели значительный смысл.
В данный момент на основе практических экспериментов и теоретических расчётов, сгруппированные в большие UTXO суммы приносят больше блоков. Вдобавок, меньшее количество UTXO требует меньше работы CPU. Кто-то утверждает и обратное.
Поэтому думайте сами.
8. Забегание блоков вперёд
PoS майнеры естественным путём немного опережают время блоков. Это отражается на сложности сети в худшую сторону. Стандартный код Bitcoin выбирает первый полученный блок, невзирая на указанное в нём время. Так же поступает большинство PoS реализаций.
Поэтому логика PoS майнера была изменена так, чтобы начинать подбор от среднего времени блоков, если время текущего блока ушло вперёд. В то же время перед сравнением очередности узлы сравнивают указанное время блоков. PoS майнер отправляет найденный блок в сеть даже если видит, что он порождает форк.
Таким путём сеть защищается и от гипотетических преждевременно отосланных блоков, Stake Input которых невозможно использовать в ближайшие 60 секунд с таким же Stake Modifier’ом из-за DoS-защиты. Как бы двойное наказание за жульничество со временем.
9. Небольшой чеклист
- Stake Input должен быть действительным UTXO до fork point:
- в случае главной цепи fork point — это tip,
- в случае альтернативной цепи — UTXO после fork point может привести к само-DoS при переключении,
- само собой подразумевается, что UTXO не должен быть в mempool’е.
- Не принимать CoinStake в mempool при перестройке основной цепи:
- такое же происходит с CoinBase,
- это может уничтожить цепь транзакций (маловероятно).
- Не принимать форки от старых блоков, если верхушка вполне себе живая.
- Возрастной ценз в абсолютных единицах времени для Stake Input необходим для стабильности и безопасности.
- Stake Hash должен изменяться только от времени блока.
- Stake Modifier не должен быть привязан к блоку Stake Input.
- Работа с заголовками блоков требует особой обработки в сети и при переиндексировании.
- CoinStake записываются в локальном кошельке и требуют некоторых изменений для корректного отображения орфанов.
- PoS майнеры скорее всего имеют достаточно косяков и требуют доработки напильником.
- Re-index требует доработки, т.к. работает по аналогии с заголовками — сначала грузит и проверяет только индекс блоков, а потом только пытается обработать блоки.
- Если переход на PoS не жёстко задан, а через spork, то его нужно ловить на загрузке, т.к. sporks не сохраняются.
- Checkpoints в Dash и Bitcoin практически бутафория и требует очень серьёзной доработки.
- Если форк Dash до версии 0.13, то есть проблемы с обработкой данных мастернод в режиме использования простого пользователя.
- При частом перезапуске клиента, представление сети искажается.
- Лучше просто игнорировать кеш, если запущен в графическом режиме.
- Изменить выбор лучшего блока с учётом времени блока.
- В некоторых операциях Bitcoin присутствует неоправданная проверка уже проверенных блоков при чтении с диска.
- Кошелёк может пытаться отсылать в сеть и в mempool CoinStake из орфанов.
Внедрение в жизнь
Теперь немного о реальной истории. Первые полгода mainnet прекрасно работал на PoW и давление от майнеров не сильно ощущалось, не смотря на то, что маркетинг изначально пытался продавить PoS, предвидя возможные проблемы по своему опыту. PoS был запланирован при переходе на платформу Ethereum после внедрения Casper’а.
Официальный GPU майнер был доведён до ума и даже чем-то превосходил своего донора — ethminer’а. Был сделан официальный пул и несколько сторонних с общим хешрейтом 150-200 GH (ethash). В какой-то момент цена стремительна пошла вверх давление от майнеров стало ощутимым и вопрос досрочного перехода на PoS встал ребром.
В качестве донора была установка взять PoS ядро из PIVX 2.x как «проверенного временем и стабильного». Отсутствие каких-либо автоматических тестов в PIVX должно было насторожить автора сразу, но не тем менее основная головная боль заключалась в необходимости прикрутить всё остальное, описанное выше. Лишь потом автор узнал о всей той боли разработчиков, которые по неосмотрительности брали PIVX 2.x за основу своих проектов. Благо сам проект основывался на Dash и был благополучно обновлён до последней версии ветки 0.12 с множеством изменений из основного Bitcoin’а.
В концу всех работ по доведению до ума стало известно, что другие проекты с PoS спешно латают дыры с подачи исследователей. Как оказалось мы всё и так знали, а их официально опубликованные документы не покрывают даже того, что изложено в этой статье.
Подготовительные работы
Документация
Найти достаточно вменяемую документацию оказалось сложно. В основном это были обрывистые неполные материалы уровня постов на форуме. Поэтому внутренний whitepaper скорее стал продуктом реверс-инженерии.
Первое приближение
В изначальном варианте были перенесены все изменения PoS из PIVX с учётом более новой базовой версии Bitcoin/Dash. Некоторые изменения вроде индикатора CoinStake и сохранения последнего бита хеша в отдельном поле показались чрезмерными. Поэтому было решено максимально сузить PoS логику до отдельного модуля.
В этом процессе был упущен нюанс, что в индексе блока сохраняется Stake Modifier не для Stake Hash текущего блока, а для использования связанных с ним Stake Input в последующих блоках. Из-за этого вышел небольшой каламбур с логикой, но из-за другой упомянутой проблемы PIVX это практически не проявляется.
Динамичные чекпойнты
Первое и главное что вы захотите в своих проектах — это чтобы действительно надёжно работали чекпойнты. Лишь некоторые из проблем:
- Они не работают в принципе и могут легко привести к нерабочей базе.
- Они не интегрированы на этапе загрузки и соответственно бесполезны.
- Отмеченные как некорректные блоки не восстанавливаются — т.е. если старый клиент сломает, то даже новый уже не сможет работать.
- При выборе наилучшего блока не учитывается, что где-то в истории может быть некорректный предок, что в лучшем случае приведёт к отказу в работе.
Наличие статичных чекпойнтов не сильно поможет когда действовать нужно решительно и быстро. Для этого функционал spork’ов был расширен динамическими чекпойнтами, что уже подтвердило свою эффективность на практике.
Безусловно, такая сила может быть использована не по назначению. Поэтому принцип контроля spork’ов уже меняется в других проектах.
Переход на PoS не должен быть жёстко зашит
В нашем реальном мире с необходимостью согласованного обновления всех систем под контролем сторонних проектов, жёстко зашивать какие-то изменения консенсуса весьма недальновидно. Единственный разумный способ это всё тот же spork, но надо учитывать, что их значения не сохраняются.
Новая версия протокола
Это обязательно, т.к. после перехода вы захотите отрезать несовместимые узлы сети чтобы не создавать себе лишних проблем. По опыту, лучше сразу заложить такой функционал в виде изменяемого значения.
Публичное тестирование
Более одной недели добровольцы мучили testnet, но благо проблем консенсуса не было выявлено.
Для testnet был установлен ценз возраста в 3 минуты вместо 1 часа для mainnet, что подтвердило предположение о необходимости достаточно большого значения.
Калькулятор доходности
В отличии от PoW хешрейта, с PoS казалось бы сложно сделать какую-то аппроксимацию, но использование миллионных долей монеты как бы само намекает на делитель 1e6 для стандартных приближений по методологии для PoW.
На основе этих данных возможно вычислить среднее время между нахождением блоков. По опыту mainnet оказалось что к нему следует добавить возрастной ценз для Stake Input.
На основе такого уточнённого времени выходят более корректные прогнозы по доходности.
Переход на PoS в жизни
За сутки до часа X был установлен spork с номером первого PoS блока. Из-за ухода майнеров и нестабильности в сложности сети, блок пришёл на два часа раньше.
При переходе было заложено обнуление сложности сети чтобы избежать потенциально трудно преодолимого барьера. В принципе, это было лишнее. Предсказуемо посыпался дождь из блоков и множество конфликтов.
Изначально сформировалось несколько активных цепей, но сеть сама пришла к консенсусу, который был подкреплён динамическими чекпойнтами.
Ложка дёгтя
Обнаруженный после запуска недосмотр в Stake Modifier немного огорчил. Вышла ещё более кривая калька с кривой кальки. С другой стороны PIVX ведь как-то живёт… Безусловно, это необходимо было бы исправить, если бы не переход на кодовую базу Ethereum, чего и всем желается.
Заключение
В вышеописанном нет какой-то коммерческой ценности в мире открытого кода, а так же это временное решение на основе устаревающей технологии. Тем не менее, множество других проектов недавно столкнулось с атаками на реализацию PoS и есть надежда, что это статья поможет укрепить безопасность узлов сети. Автору уж точно не хватало материала в начале.
Примечание: в статье намерено убрано название и какие-то прямые отсылки на ресурсы проекта чтобы избежать ложных обвинений в рекламе.
Смелый Новый Мир Стейкинга: Руководство по Proof of Stake (PoS)
Все больше блокчейн-приложений внедряют Proof of Stake (PoS). Энергоэффективность, в совокупности с низким барьером для входа, а также более низкая склонность к централизации, делают PoS все более популярной альтернативой Proof of Work (PoW), используемый для достижения консенсуса в текущих имплементациях Bitcoin и Ethereum.
Сегодня капитализация стейкинг-рынка приближается к 18 миллиардам долларов, что является рекордным показателем за последних 18 месяцев, при этом общая стоимость вложений в стейкинг достигла рекордно высокого уровня — более 11 миллиардов долларов. Около 50% самых ценных криптовалют по рыночной капитализации используют PoS механизм. Несколько крупных проектов находятся в процессе перехода на PoS, например Etherium. Такое развитие обусловлено рядом преимуществ PoS в сравнении с исторически более доминирующими алгоритмами Proof of Work.
Достижение Консенсуса, от Work к Stake
В блокчейн, механизм консенсуса гарантирует, что каждая транзакция является валидной и подтвержденной и все участники в блокчейн согласны с этим статусом. На сегодняшний используются различные механизмы достижения консенсуса. К числу наиболее распространенных из них относятся Proof of Work (PoW) и Proof of Stake (PoS).
PoW предполагает решения сложной вычислительной проблемы, прежде чем новые транзакции могут быть добавлены в блокчейн. Участники с большим количеством вычислительных ресурсов имеют более высокую вероятность решения задачи и, соответственно получением следующего блока.
Использование PoW является весьма энергозатратным процессом, и потребление ресурсов продолжает расти по мере расширения сети и увеличения количество транзакций. Например ресурсами сети биткоин потребляется больше электроэнергии чем некоторыми крупными государствами. Кроме того, PoW блокчейн имеет тенденцию к централизации, движимый экономией при создании вычислительной мощности, необходимой для майнинга.
Внушительная потребность в ресурсах и энергии, и другие недостатки PoW привели к повышению популярности консенсуса с помощью Proof of Stake (PoS).
Преимущества Proof of Stake
В PoS право на валидацию следующего блока назначается на основе количества токенов которыми владеет участник. Вместо того, чтобы сосредоточиться на вычислительной мощности, участники заинтересованы в максимизации количества криптовалютных токенов. Справедливость обеспечивается на основе того как долго токены находятся в стейкинге или же с помощью рандомизации.
Основные различия между PoS и PoW:
- Энергоэффективность: с Proof of Stake нет необходимости в отчаяной гонке за решениями сложных, и соответственно требовательных к ресурам вычислительных задач. В результат, PoS является значительно более энергоэффективным механизмом достижения консенсуса, чем PoW.
- Децентрализация: PoW способствует концентрации инвестиций в вычислительных ресурсах. Присоединение к майнинг пулу открывает экспоненциальные выгоды для отдельных майнеров, так как концентрация (и централизация) ресурсов приводит к непропорционально высокой вероятности майнинга следующего блока. В PoS, награды пропорциональны количество депонированых токенов. Это может привести к некоторой централизации, но с гораздо более слабыми последствиями по сравнению с PoW.
- Безопасность: В PoS, нечестный игрог должен владеть минимум 51% от общего количество токенов для того что бы начать манипулировать сетью. Это также означает, что наибольший ущерб будет нанесен инициатору манипуляции. Также сокращение инвестиционной доли нечестных игроков, устраняют все стимулы для такого поведения.
- Стабильность валюты: В PoS новые транзакции проверяются участниками, наиболее инвестирующими в валюту. Как результат владение и стейкинг валюты поощряются. Это разительно отличается от PoW-сетей, которые требуют значительных инвестиций в вычислительные ресурсы и электроэнергию. Такие инвестиции требуют вывода токенов для конверсии в валюту расчета (например USD), что оказывает понижательное давление на их стоимость.
Новый мир достижения консенсуса
Ряд привлекательных блокчейн-проектов используют PoS для защиты своих сетей, предотвращения централизации и повышения скорости работы консенсус алгоритмов:
Ethereum уже несколько лет работает над переходом от PoW к PoS, и в 2017 году был опубликован первый публичный проект спецификации их консенсус протокола под названием Casper. Основными факторами этого перехода являются тенденция к централизации и высокий уровень энергопотребления при использовании PoW. Протокол Casper от Ethereum будет включать в себя пенальти для лучшей защиты сети.
EOS использует алгоритм делегирования в PoS для управления процессом достижения консенсуса. Делегаты постоянно вибираются системой для управления консенсусом. Сокращая число проверяющих сторон (валидаторов) с помощью делегирования, новые блоки транзакций могут быть проверены за более короткие промежутки времени.
Tezos использует динамический PoS (ближайшее по смыслу значение LPOS), который задействует как прямое, так и делегированное голосование для достижения консенсуса. Участники могут голосовать самостоятельно или же передав свое право делегаторам. Использование делегирования делает данную модель весьма масштабируемой, поскольку любой участник, который не может представить свой голос, может его просто передать.
В структуре Cosmos Network, Tendermint отвечает за сеть и консенсус для блокчейн, в то время как приложение определяет условия работы валидатора. Блокчейн на основе Cosmos использует PoS для выбора валидаторов на основе количества принадлежащих им монет (в отличие от частного блокчейн, где валидаторы назначаются при помощи приложения).
Являясь частью экосистемы Cosmos, Akash Network также использует PoS в качестве внутрений валюты для решения проблемы волатильности (одна из главных сложностей внедрения крипто), в то же время обеспечивая экономическую безопасность нашего публичного блокчейн. Главной ценностью Akash токена (AKT) является выполнение ним роли стейкинг-механизма для обеспечения безопасности сети и нормализации цен на облачные вычисления.
Частота, с которой валидатор может предложить новый блок, а также его вес в голосах для получения блока определяется количеством прикрепленных к нему АКТ. В обмен на депозит валидатору, владелец АКТ получает право на вознаграждение за блок (выплачиваемые в АКТ), а также часть транзакционных сборов и платы за услуги (выплачиваемые в любом токене из белого списка).
Стимулируем ставки
Участники Pos-блокчейн могут зарабатывать депонируя свои такены. В качестве вознаграждения за депозит, владельцы токенов получают вознаграждение, сумма которого записит от размера депозита, а также других параметров сети. Akash также распределяет вознаграждения в зависимости от продолжительности времени блокировки Akash токенов (AKT).
Владельцы могут депонировать токены через кошелек, стейкинг пул или обмен. За создание каждого нового блока, участники получают вознаграждение. Вознаграждение варьируется для разных токенов. Среди 70+ токенов, Staking Rewards отслеживает среднюю доходность в 13,4%.
В последнее время все больше и больше инструментов поддерживают модель стейкинга: от специализированных кошельков до стейкинг пулов. Такие инструменты направлены на устранение основных препятствий для входа новых участников, в частности на обеспечение безопасности и простоты использования.
Выпуск нового блока на стандартном PoS вынуждает стейкхолдера постоянно находиться в режиме онлайн. Это приводит к большому энергопотреблению и увеличивает риск хакерских атак.
Стейкинг пулы освобождают держателей от такой зависимости. Пулы должны обеспечивать надлежащий контроль за организацией и защиту блочного производства. Стейкинг пулы также имеют и недостатки. Среди них более высокий риск взлома и менее понятный процесс налогообложению.
Что нам готовит Proof of Stake
Преимущества механизма Proof of Stake над Proof of Work, в частности энергоэффективность, масштабируемость и более нуход от централизации, привели к быстрому росту PoS сетей.
Постоянная доработка и развитие экосистемы развеивает любые оставшиеся волнения по поводу безопасности PoS блокчейн, которые могли возникнуть из-за того, что они не были затронуты исторически высокими объемами операций PoW.
Стейкинг PoS блокчейн и получение инвестиционных выгод становятся более простыми и безопасными благодаря кошелькам, стейкинг пулам и обменам, что значительно снижает барьер для входа новых участников. Для поддержания роста числа приложений и непрерывного увеличения объема операций распространение PoS является важнейшим шагом на пути к устойчивости, масштабируемости и дальнейшей децентрализации блокчейн.