fix: vault как ATA + фандинг беттора; E2E на localnet ok

This commit is contained in:
Caffeine
2026-09-10 02:12:07 +03:00
parent fb9a7f4e8b
commit f937c8993d
15 changed files with 267 additions and 148 deletions
+29
View File
@@ -0,0 +1,29 @@
# TASK — Выдавать фантики бетторам на localnet (как SOL airdrop)
Репозиторий: `smart-updown-token`, файл `relayer/src/index.ts` (+ возможно `ops.ts`).
## Проблема (обнаружено на localnet E2E)
`createBet` падает: `Tokenkeg... Transfer: insufficient funds`.
Причина: беттор имеет SOL (ренту/комиссии, `fundBettor` airdrop'ит SOL), но НЕ имеет
наших фантиков в своём ATA. Контракт верно требует средства игрока. Для localnet
нужно наливать игроку фантики (по аналогии с SOL-airdrop), потому что swap ещё не подключён.
## Что исправить (релейер)
1. В `relayer/src/ops.ts`: в `ensureBettorTokenAccount` (или рядом) при
`cfg.allowAirdrop === true` — после создания ATA наливать токен:
`mintTo(connection, admin, mint, ata, admin, startBalance)`.
- `startBalance` — например, `10_000_000_000` (10 тыс. фантиков, по модулю
`minAmount`..`maxAmount` достаточно). Логировать.
- Учесть, что `admin` — mint authority (на localnet таковым является админская keypair).
2. `relayer/src/index.ts` фандинг беттора: вызывать новую логику наливания токенов
(удобно чтобы работало через `ensureBettorTokenAccount`).
## Гейт
- `npm run typecheck` — 0 ошибок.
- `npm test` — зелёное.
- На localnet: createBet проходит (беттор имеет фантики), closeBet выплачивает.
## НЕ делать
- Не трогать контракт (`program/`).
- Не менять логику цен/ставок.
- Не коммитить.