🇷🇺 Кратко Контракт случайных розыгрышей TON на Tolk. Создаёт розыгрыши, принимает ставки, выбирает победителя и выплачивает приз с учётом комиссии (fee).
🇺🇸 Brief TON random draw contract (Tolk). Creates draws, accepts entries, picks a winner, pays prize minus fee.
CreateDraw(drawId, minEntryAmount, entryLimit, value)— создаёт розыгрыш с начальными средствамиvalue, пустой картой участников иparticipantCounter = 0.LuckRoll(drawId)— фиксирует ставку и увеличиваетpoolSum. Еслиvalue < minEntryAmount, выполняется рефанд (возврат остатка входящего сообщения). При достиженииpoolSum >= entryLimitвсе адреса участников собираются в цепочку ячеек и хешируются вместе сrandom.getSeed()иblockchain.now(); индекс победителя =entropy % participantCounter, адрес берётся из индексированного словаря. Выплата(poolSum * (100 - fee)) / 100отправляется send mode0(комиссии сети удерживаются из самой выплаты, а не из баланса контракта), затем розыгрыш удаляется.TopUpTonsили пустое тело — пополняют баланс, на розыгрыши не влияют.get_draw(drawId)— возвращает структуруDrawсparticipantCounterи картой ставок.
- Комиссии сети при выплате списываются из отправляемой суммы (контракт не доплачивает сверху, send mode 0).
- Рефанд при недоплате гарантирован (
value < minEntryAmount). - Источник энтропии: хеш адресов участников +
random.getSeed()+ текущее время. При необходимости усиливайте его с учётом практических требований.
- Покрыты сценарии: создание/двойное создание, рефанд при недоплате, минимальный вход, суммирование ставок и уникальных участников, одиночный и многопользовательский розыгрыш, payout и удаление draw, пустое тело, неправильный opcode, нагрузки на 10/50/100 участников с логом дельты баланса.
- Запуск:
npm test
- Сборка контрактов:
npx blueprint build - Тесты:
npx blueprint test - Запуск скриптов:
npx blueprint run