Обзор
Block-Sena — это лотерея on-chain, в которой покупка билетов, блокировка раунда, розыгрыш и розыгрыш призов Распределение фиксируется в помещении. В протоколе используется двухфазный поток: blockSenaPauseDraw (блокирует раунд и записывает обязательство) и blockSenaDrawPay (раскрывает, рисует и платит).
Цель
Гарантируйте проверяемый, воспроизводимый процесс с прозрачными правилами выплат для каждого раунда.
Проверяемость
Любой может проверить входные данные (фиксацию, соль, целевой блок), расчет начального числа, выпавшие числа и события расчета.
Фиксация-обнародование (2 этапа)
Функция blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) запирает раунд для новых покупок устанавливает будущий целевой блок и сохраняет только секретную соль хэш.
Функция blockSenaDrawPay(соль) подтверждает это keccak256(соль) == commitHash, использует целевой блок блокхеш, генерирует 6 уникальных номеров и осуществляет выплаты.
блокхеш можно прочитать только ~256 блоков. Если срок его действия истекает, требуется раунд. оперативный сброс. Этот сброс является редким отказоустойчивым с тайм-аутом on-chain, и при каждом использовании on-chain остается открытым.
Соляные обязательства
Целевой блок
Поток рисования (21:00 UTC -> +5 блоков -> DrawPay)
Операционный поток Block-Sena четко разделен закрытие билета от генерация 6 чисел. Такое разделение исключает риск покупки билетов. после того, как станет известен результат, или пытаются подогнать билеты в соответствии с выпавшими числами.
Функция blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) запирает раунд, блокирует новые покупки, записывает commitHash, определяет целевойБлок = номер блока + 5и сохраняет снимок пула в долларах США.
После PauseDraw, ни один новый билет не может войти в этот раунд. В тот момент, blockhash(targetBlock) до сих пор не существует, поэтому последние 6 чисел пока невозможно предсказать или вычислить.
Функция blockSenaDrawPay(соль) проверяет соль на соответствие коммиту, читает целевой блок блокхеш, последовательно 6 уникальных чисел и выполнение Выплаты за токен. Если возникает перед целевым блоком, транзакция получает on-chain.
Любой желающий может проверить в проводнике: blockSenaPauseDraw Техас, целевойблок, blockSenaDrawPay Техас, раскрытая соль, выпавшие номера и события расчета/выплаты.
Это невозможно купить билет после просмотра 6 чисел раунда, потому что раунд уже заблокирован blockSenaPauseDraw до того, как был проведен розыгрыш.
Это невозможно знать 6 чисел во время блокировки, потому что формула зависит в будущем блоке (целевойблок), которого на данный момент еще не существует.
Это невозможно провести розыгрыш до технического времени, поскольку blockSenaDrawPay требуется on-chain, чтобы текущий блок уже прошел целевойблок.
blockSenaResetDraw существует только для того, чтобы предотвратить постоянное застревание раунда если постоянно поддерживать сбой отсутствия (например: сбои RPC, сервисное обслуживание, в сетях/инфраструктуре или долгосрочных проблемах) и DrawPay не может быть выполнено раньше blockhash(targetBlock) истекает.
В обычном потоке ожидаемое поведение заключается в выполнении DrawPay через несколько кварталов после PauseDraw (цель на +5 блоки). Сброс — это гарантия жизнеспособности, не является частью обычного процесса рисования.
Математическая формула розыгрыша (6 уникальных чисел)
Начальное значение отрисовки получается из комбинации будущего блока, зафиксированной соли и круглых данных. Из него контракт генерирует числа от 1 до 30, отбрасывая дубликаты, пока не достигнет 6 уникальных чисел.
С точки зрения оперативной безопасности: поскольку билеты уже заморожены в PauseDraw на этапе до того, как этот будущий блок существует, розыгрыш не может быть «создан» соответствовать билету, вставленному позже, и ни один участник не может делать ставки в том же раунде после зная результат.
Нарисовать семя
Генерация каждого номера
Эта процедура предотвращает повторение чисел в конечном результате и сохраняет розыгрыш в допустимом диапазоне. 1..30.
Билет с множественным выбором (от 6 до 10 номеров) и комбинаторные квоты
В Block-Sena билет можно оставить от 6 до 10 цифр. Этот билет представляет собой несколько эквивалентные комбинации из 6 цифр. Расчет приза основан на выигрыш квот (комбинации), а не просто «люди».
Всего комбинаций для билета с k номерами
Выигрышные квоты по уровням (4/5/6)
Рассмотрим билет с к цифры и х совпадения внутри 6 выпавших номеров.
Пример (10-значный билет с 6 выпавшими числами внутри 10)
q6 = 1, q5 = 24, q4 = 90. Один и тот же билет может выиграть одновременно во всех трех уровнях.
Выплата по нескольким токенам (расчет за токен)
Каждый пул токенов (например, участок, USDC, USDT) рассчитывается независимо. В контракте изобретательные победители и призы по раундам. и, кстати, сохранение точной истории в RoundTokenStats.
Разделение уровней
Приз за выигравшую квоту
Если нет победителей
Сумма этого уровня не зависит: в следующем раунде для этого токена она станет carry-over.
Если победителей несколько
Приз делится по квотам выигрышей. Один и тот же кошелек может получить несколько квот, объединенных в один платеж за токен.
Как провести аудит раунда (шаг за шагом)
- Найдите blockSenaPauseDraw спасибо и обратите внимание commitHash и целевойблок.
- После целевого блока найдите blockSenaDrawPay Передайте и прочитайте отправленное соль.
- Пересчитать keccak256 (соль) и подтвердите, что он соответствует commitHash.
- Читать blockhash(targetBlock) в проводнике и prevrandao из блока Draw TX.
- Воспроизведите начальное число и процедуру генерации 6 чисел (отбрасывая дубликаты) и сравните с НичьяВыполнено.
- Если произошел редкий эксплуатационный сбой, проверьте DrawReset (roundId, targetBlock, блок сброса) для проверки тайм-аута и сброса трассируемости.
- Проверять RoundTokenSettled события для пулов, выплаты по уровням и токены carry-over.
- Подтвердите переводы в формате ERC20, чтобы обеспечить справедливые выплаты победителям.
Гарантии, прозрачность и операционные ограничения
Block-Sena был разработан таким образом, чтобы результаты округлений были проверяемые, воспроизводимые и прозрачные. Фиксация-раскрытие в Контракте с будущим блоком значительно снижает возможность ручного манипулирования результатом.
В техническом плане модель дает результат непредсказуемый во время блокировки, потому что раунд закрывается до blockhash(targetBlock) используемый в семени существует. Это позволяет сделать формулу общедоступной и доступной для проверки, не позволяя делать последующие ставки на основе результата.
Что держится on-chain
Правила розыгрыша, расчет квот, разделение выплат по уровням (80/15/5), история каждого токена, события и отслеживание каждого шага.
Аварийная операция
Существует функция сброса отрисовки для различных технических условий (например, истечение срока действия хэша, вызванное долго сбой работы/сети). Его можно восстановить только при заблокированном раунде и после таймаута on-chain. Каждое использование является общедоступным, записывается on-chain и может быть проверено в проводнике.
Сброс не перемещает средства, не удаляет билеты и не изменяет пул. Он только разблокирует круглый цикл, чтобы позволить новая попытка ничьей тот же раунд в редком сценарии отказа.
Призовые средства остаются в договоре до момента розыгрыша и автоматических выплат победителям. Если нет победителей на уровне значения остается наблюдаемым как carry-over для следующего раунда. У владельца нет функции Вывести средства, уже зачисленные в призовой фонд.
rescueAll функция существует только для спасения неучтенный излишек (например, ошибочные прямые переводы), рассчитывая реальный баланс - учетный пул. Оно не достигает призовые фонды уже учтены в пуле.
другие слова: Block-Sena не требует слепого доверия. Он обеспечивает поток, который можно наблюдать, математически воспроизведено и проверено on-chain кем угодно и когда угодно.