docs: README под актуальную SBPFv3-сборку (anchor 0.31.1, --tools-version v1.57, two-arch тесты)

This commit is contained in:
2026-09-03 13:57:31 +03:00
parent 515adb25c9
commit 32faec7515
+21 -14
View File
@@ -4,7 +4,8 @@
на 15 секунд; при выигрыше получает ставку + 30% (1.3x). Дом (контракт) — оппонент.
Цена берётся off-chain релеером (он же админ) с вашей БД; SOL хранится в ваулте (PDA `global`).
Программа: **Anchor v2 (fork `otter-sec/anchor`, ветка `anchor-next`)**, Solana, Rust.
Программа: **Anchor 0.31.1 + Solana 2.x (Rust)**, собирается в **SBPFv3** —
совместимо с агave-валидатором 4.2.x (= текущий mainnet Solana).
> **Фронтенд игры** живёт в отдельном репозитории:
> **https://git.binom.pw/subochev/fun-game-front2**
@@ -51,11 +52,13 @@ smart-updown/
`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 — только если пересобираете программу.
- (опционально) **Rust 1.85+** через rustup — только если пересобираете программу.
> **Важно про `.so`**: это SBF-байткод и он не зависит от архитектуры хоста,
> поэтому `deploy/smart_updown.so`, собранный на macOS, **работает на Linux-валидаторе**
> как есть — пересобирать не нужно.
> **Важно про `.so` и SBPF-версию**: контракт собирается под конкретный SBPF-архитектуру
> (здесь — **SBPFv3**, под агave 4.2.x). Собранный `.so` кроссплатформенный
> по CPU хоста (работает и с macOS-сборкой), но **должен совпадать по SBPF-версии
> с валидатором**, иначе деплой падает (`Detected sbpf_version ... not enabled`).
> При сборке через `cargo build-sbf --tools-version v1.57` — артефакт SBPFv3.
## 2. Развёртывание (localnet)
@@ -110,22 +113,26 @@ solana program deploy --program-id deploy/smart_updown-keypair.json deploy/smart
## 6. (Опционально) Пересборка программы из исходников + тесты
Та же команда, что использовалась для сборки:
Сборка контракта под **SBPFv3** (для агave 4.2.x):
```bash
cd program
rustup toolchain install 1.89.0 # если нет
# собрать .so:
cargo build-sbf --manifest-path programs/smart-updown/Cargo.toml
# собрать .so (SBPFv3, с entrypoint):
cargo build-sbf --tools-version v1.57 --manifest-path programs/smart-updown/Cargo.toml
# артефакт появится в program/target/deploy/smart_updown.so
# интеграционные тесты (LiteSVM), без валидатора:
cargo test -p smart-updown
# интеграционные тесты (solana-program-test 2.x, 10 кейсов):
SBF_OUT_DIR="$(pwd)/target/deploy" cargo test -p smart-updown
```
> `--tools-version v1.5x` критичен: v1.57 даёт rustc ≥1.85 (нужен для edition2024)
> и валидный `.so` с символом `entrypoint`. **Нюанс про SBPF-версии для тестов**:
> тестовый рантайм `solana-program-test` не грузит SBPFv3-ELF — он принимает максимум
> arch-v0. Поэтому тесты гоняются на `.so`, собранном под v0 (тот же код), а в
> прод деплоится SBPFv3-артефакт. Логика контракта одна — различается только arch-цель.
Если пересобираете, IDL не меняется, пока не меняете layout аккаунтов/инструкций.
После изменения контракта: пересоберите `.so`, перегенерируйте IDL
(`anchor build`, при наличии anchor-cli 2.0.0-rc.1) и обновите `relayer/idl/`
и `idl/`.
При смене дискриминаторов (напр. уход от `#[discrim]` при миграции на anchor 0.31.1)
обязательно перегенерируйте IDL и обновите `relayer/idl/` и `idl/`.
## 7. Переменные окружения relayer (см. .env.example)