docs: README под актуальную SBPFv3-сборку (anchor 0.31.1, --tools-version v1.57, two-arch тесты)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user