Контракт BetManager реализует функционал ставок на изменение цены токена с использованием USDT и получения данных о ценах через DEX-роутер. Контракт поддерживает проведение раундов, прием ставок, автоматическое распределение выигрышей и комиссий, а также предоставляет методы для интеграции с фронтендом и бекендом.
Структура, описывающая ставку пользователя:
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;- Локирует текущий, завершает предыдущий, рассчитывает награды, запускает новый раунд.
- Вызвать
initialStartRound()для запуска первого раунда. - В нужный момент вызвать
initialLockRound()для его локировки. - Для каждого следующего раунда вызывать
executeRound()по расписанию. - Пользователи делают ставки через
placeBet(). - После завершения раунда пользователи вызывают
claim()для получения выигрыша или возврата.