вступление

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

Подробнее о бессмертной лотерее здесь.

Основы лотереи

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

Пример: Алиса вносит 100 000 CLO в контракт, а Боб вносит в контракт 50 000 CLO. 10% немедленно изымаются из пула вознаграждений и перераспределяются между держателями токенов лотереи и финансированием отдела безопасности.

У Алисы будет 66% шанс выиграть 135 000 CLO в конце раунда, а у Боба будет 33% шанс выиграть эти 135 000 CLO.

Источник энтропии для блокчейнов EthereumVM

Источник энтропии - критическая часть любой системы, в которой присутствует случайность. Выбор победителя в бессмертной лотерее случаен.

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

Проблемы ончейн-источников энтропии:

  • Полная прозрачность. В блокчейне все прозрачно, и за каждой транзакцией могут наблюдать третьи лица. Сделать что-то «секретным» невозможно.
  • Проверяемость. Даже несмотря на то, что результат функции случайности действительно непредсказуем, все же должно быть доказано, что это действительно случайное или действительно случайное значение в момент его создания.
  • Отказоустойчивость. Поскольку нет встроенного источника энтропии, необходимо полагаться на внешние ненадежные источники. Система должна быть спроектирована так, чтобы противостоять любым ошибкам или попыткам манипуляции со стороны потенциального источника энтропии.

Пользовательский ввод как источник энтропии

Контракт будет полагаться на пользовательский ввод в качестве источника энтропии.

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

Контракт должен позволять пользователям намеренно генерировать энтропию и предоставлять ее (в зашифрованном виде) с помощью специальной функции. Пользователи должны быть заинтересованы в этом, и они получат% вознаграждений в лотерее после раскрытия введенной энтропии.

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

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

Правило энтропии

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

Отношение между «пулом вознаграждения» и «энтропийным обеспечением» определяет, насколько справедливой должна быть лотерея. На данный момент считается, что 45% залога будет достаточно.

Количество энтропийных депозитов должно быть обеспечено залогом в размере не менее 45% от размера пула вознаграждений.

Защита от нарушения энтропии

Поскольку пользователи будут использовать хорошо известные методы криптографии для передачи данных по контракту, они могут неосознанно нарушить игровой процесс. sha256 (a, b) - вывод этой функции - это, казалось бы, хаотический «хеш», но если вы используете одну и ту же пару (a, b) несколько раз, то вывод функции также будет таким же. Это делает пару (a, b) предсказуемой и потенциально позволяет пользователям манипулировать функцией случайности.

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

Q/A

Могу ли я заработать деньги в этой лотерее, не играя?

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

Держатели токенов лотереи также получат% от каждого пула вознаграждений.

Безопасно ли вносить свои средства в качестве залога, чтобы стать поставщиком энтропии?

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

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

Могу ли я использовать ставку CLO в качестве залога?

No.

Как долго провайдер энтропии должен ждать освобождения залога?

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

Есть ли верхний предел количества поставщиков энтропии?

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