Skip to content

Decentralized prediction market smart contracts for forecasting token prices over customizable time intervals

Notifications You must be signed in to change notification settings

Pynex/Betum-Smart-Contracts

Repository files navigation

BetManager — Контракт для децентрализованного рынка предсказаний

Описание

Контракт BetManager реализует функционал ставок на изменение цены токена с использованием USDT и получения данных о ценах через DEX-роутер. Контракт поддерживает проведение раундов, прием ставок, автоматическое распределение выигрышей и комиссий, а также предоставляет методы для интеграции с фронтендом и бекендом.


Основные структуры

BetInfo

Структура, описывающая ставку пользователя:

struct BetInfo {
    uint256 amount;      // Сумма ставки
    bool direction;      // true — ставка на рост, false — на падение
    bool claimed;        // true — выигрыш/возврат уже получен
}

Геттеры для фронтенда

Получение истории ставок пользователя

function getUserRounds(address user, uint256 cursor, uint256 size)
    external view
    returns (
        uint256[] memory roundIds,
        BetInfo[] memory bets,
        uint256 nextCursor
    );
  • Позволяет получить список раундов и информацию о ставках пользователя с пагинацией.

Количество ставок пользователя

function getUserRoundsLength(address user) external view returns (uint256);
  • Возвращает общее количество раундов, в которых участвовал пользователь.

Получение текущей цены пары

function getCurrentPrice() external view returns (uint256);
  • Возвращает актуальную цену пары токенов через DEX-роутер.

Проверка возможности получения выигрыша или возврата

function claimable(uint32 roundId, address user) external view returns (bool);
function refundable(uint32 roundId, address user) external view returns (bool);
  • Проверяют, может ли пользователь получить выигрыш или возврат по раунду.

Основные методы для взаимодействия (бекенд/фронтенд)

Ставка

function placeBet(uint32 roundId, bool direction, uint256 amount) external;
  • Делает ставку на текущий раунд. Один пользователь — одна ставка на раунд.

Получение выигрыша/возврата

function claim(uint32[] calldata roundIds) external;
  • Получение выигрыша или возврата по завершённым раундам.

Управление раундами (вызывать с бекенда)

Запуск первого раунда

function initialStartRound() external payable;
  • Запускает первый раунд (только один раз).

Лок первого раунда

function initialLockRound() external payable;
  • Локает первый раунд и запускает следующий.

Проведение очередного раунда

function executeRound() external payable;
  • Локирует текущий, завершает предыдущий, рассчитывает награды, запускает новый раунд.

Порядок работы (бекенд)

  1. Вызвать initialStartRound() для запуска первого раунда.
  2. В нужный момент вызвать initialLockRound() для его локировки.
  3. Для каждого следующего раунда вызывать executeRound() по расписанию.
  4. Пользователи делают ставки через placeBet().
  5. После завершения раунда пользователи вызывают claim() для получения выигрыша или возврата.

About

Decentralized prediction market smart contracts for forecasting token prices over customizable time intervals

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published