Files
smart-updown-token/README.md
T

137 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Smart-Updown — пакет развёртывания (localnet)
Бинарная игра UP/DOWN на цену SOL. Пользователь ставит на направление (UP/DOWN)
на 15 секунд; при выигрыше получает ставку + 30% (1.3x). Дом (контракт) — оппонент.
Цена берётся off-chain релеером (он же админ) с вашей БД; SOL хранится в ваулте (PDA `global`).
Программа: **Anchor v2 (fork `otter-sec/anchor`, ветка `anchor-next`)**, Solana, Rust.
---
## Состав пакета
```
smart-updown/
├── deploy/
│ ├── smart_updown.so # скомпилированная программа (SBF-байткод, кроссплатформенный)
│ └── smart_updown-keypair.json # authority-ключар программы (ID = E7Hg55...)
├── idl/
│ ├── smart_updown.json # IDL (для клиента)
│ └── smart_updown.ts # типы TypeScript для клиента
├── relayer/ # off-chain релеер (админ + закрытие ставок)
│ ├── package.json
│ ├── tsconfig.json
│ ├── .env.example
│ ├── idl/ # копия IDL для клиента
│ └── src/
│ ├── index.ts # главный цикл
│ ├── ops.ts # initialize / createBet / closeBet / fundVault
│ ├── pda.ts # вывод PDA
│ ├── program.ts # клиент из IDL
│ ├── priceSource.ts # ЗАГЛУШКА цены SOL (вставить свой запрос к БД)
│ └── frontStub.ts # ЗАГЛУШКА фронта (откуда приходит выбор пользователя)
├── program/ # исходники контракта (опционально, для пересборки)
│ ├── Anchor.toml
│ ├── Cargo.toml / Cargo.lock
│ ├── rust-toolchain.toml # пинит Rust 1.89.0
│ └── programs/smart-updown/{src,tests}
├── deploy-localnet.sh # развёртывание на localnet
└── README.md
```
---
## 1. Требования (Linux x86_64)
- **Solana CLI (Agave)** — даёт `solana-test-validator`, `solana program deploy`,
`cargo build-sbf`, `solana-keygen`. Установка:
`sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"`
- **Node.js 18+ / npm** — для relayer.
- (опционально) **Rust 1.89.0** через rustup — только если пересобираете программу.
> **Важно про `.so`**: это SBF-байткод и он не зависит от архитектуры хоста,
> поэтому `deploy/smart_updown.so`, собранный на macOS, **работает на Linux-валидаторе**
> как есть — пересобирать не нужно.
## 2. Развёртывание (localnet)
```bash
chmod +x deploy-localnet.sh
./deploy-localnet.sh
```
Скрипт:
1. переключает `solana config` на `http://127.0.0.1:8899`;
2. запускает `solana-test-validator` с программой (`--bpf-program E7Hg55...`);
3. проверяет, что программа поднята под ID `E7Hg55ywRDKRZJ35rDMJGC3YFThQbh6nAK9GDayG4sr3`.
Подытог — программа доступна на localnet под тем же адресом, что зашит в IDL.
## 3. Relayer (админ + закрытие ставок)
```bash
cd relayer
npm install
cp .env.example .env # при желании поправить значения
# инициализация контракта (ваулт/Global):
npm run init
# один прогон ставки:
npm run run
# непрерывный цикл:
npm run loop
```
`init` создаёт `Global` (админ + релеер = keypair из `SMART_ADMIN_KEYPAIR`,
по умолчанию `~/.config/solana/id.json`). На localnet скрипт сам делает airDrop
bettor'ам и догружает ваулт банка. На mainnet airDrop выключите
(`SMART_ALLOW_AIRDROP=0`) и пополняйте ваулт переводами с админа.
> AirDrop на localnet выполняется от keypair, настроенного в `solana config`.
> Убедитесь, что он существует и имеет SOL (в скрипте деплоя это `id.json`,
> см. `solana config get`).
## 4. Заглушки — куда вставить реальное
- `relayer/src/priceSource.ts` — функция `getPrice()`. **Замените** на запрос цены
SOL из вашей БД. Единицы любые, главное согласованность между entry и exit.
- `relayer/src/frontStub.ts` — функция `nextBetRequest()`. **Замените** на приём
со стороны фронта: направление (UP/DOWN) и сумма, которые выбрал пользователь.
## 5. Деплой в новом окружении (если уже есть валидатор, без перезапуска)
```bash
solana config set --url http://127.0.0.1:8899
solana program deploy --program-id deploy/smart_updown-keypair.json deploy/smart_updown.so
```
## 6. (Опционально) Пересборка программы из исходников + тесты
Та же команда, что использовалась для сборки:
```bash
cd program
rustup toolchain install 1.89.0 # если нет
# собрать .so:
cargo build-sbf --manifest-path programs/smart-updown/Cargo.toml
# артефакт появится в program/target/deploy/smart_updown.so
# интеграционные тесты (LiteSVM), без валидатора:
cargo test -p smart-updown
```
Если пересобираете, IDL не меняется, пока не меняете layout аккаунтов/инструкций.
После изменения контракта: пересоберите `.so`, перегенерируйте IDL
(`anchor build`, при наличии anchor-cli 2.0.0-rc.1) и обновите `relayer/idl/`
и `idl/`.
## 7. Переменные окружения relayer (см. .env.example)
| Переменная | По умолчанию | Описание |
|---|---|---|
| `SMART_RPC_URL` | `http://127.0.0.1:8899` | RPC кластера |
| `SMART_ALLOW_AIRDROP` | `1` | airDrop bettors/ваулта (localnet) |
| `SMART_ADMIN_KEYPAIR` | `~/.config/solana/id.json` | keypair админа/релеера |
| `SMART_MIN_AMOUNT` | `100000000` | мин. ставка (лампорты) |
| `SMART_MAX_AMOUNT` | `10000000000` | макс. ставка (лампорты) |
| `SMART_MULTIPLIER_BPS` | `13000` | выплата 1.3x (bps) |
| `SMART_EXPIRY_SECONDS` | `15` | экспирация (сек) |