Как майнер выбирается в Proof Of Stake?

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

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

Здесь упоминается довольно много: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ , но я не могу найти ответ на свой вопрос.

Ответы (3)

Алгоритм майнинга для стейкинга отличается для разных монет; например, в BlackCoin она отличается от Cardano.

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

Чтобы дать конкретный ответ на ваш вопрос, я опишу конкретный случай протокола Proof-of-Stake, который доказал свою безопасность: протокол Ouroboros Praos .

В протоколе Praos вы можете представить, что каждый сатоши соответствует паре открытого/закрытого ключа. Протокол Praos для ставок работает следующим образом: если вы честный игрок, вы смотрите на текущую дату и время и округляете их до ближайшей секунды (единица времени, до которой вы округляете ее, в целом настраивается и соответствует синхронным «слотам»). "протокола). Скажем, например, что вы получаете d = "2018-07-01 00:19:24". Вы берете эту дату и время в качестве входных данных и подписываете их своим закрытым ключом, соответствующим вашему сатоши, получая подпись s. Затем вы сравниваете эту подпись с целевой сложностью T, чтобы увидеть,s <= T, аналогично тому, как биткойн сравнивает хэши блоков со сложностью. Если это так, то вы были «избраны лидером» и вам разрешено генерировать блок. Сначала вы генерируете содержимое блока x, состоящее из транзакций в вашем мемпуле, а также указатель на предыдущий блок. Затем вы подписываете x, используя свой открытый ключ, и создаете другую подпись s'. Затем вы транслируете в сеть свою подпись s, подтверждающую, что вы избраны; текущая дата и время dподтверждения выборов; подтвержденные транзакции x, которые также включают ссылку на предыдущий блок; и ваша подпись над содержимым блока s'. Кортеж (s, d, x, s')— это блок.

Теперь другие валидаторы могут проверить, что вы являетесь законно избранным лидером. Они проверяют, что sэто подпись для d, s'это подпись для x, которая xсодержит действительные транзакции и указывает на конец предыдущей цепочки блоков (с более старой отметкой времени и неконфликтующими транзакциями). Наконец, они должны убедиться, что вы соответствуете цели: sдолжно быть ниже T.

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

Несколько деталей:

  • Злоумышленники могут генерировать несколько блоков содержимого для одной и той же даты и времени, когда они были избраны лидером. Это не вызывает проблем, потому что честные стороны будут генерировать только блоки, фиксирующие один более старый блок, тем самым разрывая связи.
  • Возможно, что две честные стороны генерируют блок одновременно. Это не проблема и также может произойти с биткойнами. Такие связи будут разрешены, если параметры протокола настроены таким образом, чтобы не допускать слишком частого появления блоков между слотами (точные параметры указаны в документе).
  • Я сказал выше, что sэто «подпись» текущего времени d, но технический момент заключается в том, что это не подпись, а на самом деле то, что мы называем VRF — проверяемой случайной функцией . Это похоже на подпись, за исключением того, что она гарантирует, что вывод ведет себя как случайный вывод (например, идеальный хэш ведет себя как «случайный оракул»).
(на самом деле вы пытаетесь генерировать блоки настолько заранее, насколько это позволяют другие узлы)

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

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

Эти расчеты согласованы и проверяемы по сети, так что это вопрос распространения и проверки того, приняты ли они.