From 32faec75154e6a0f4ac20f9088a21da81764cb18 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 3 Sep 2026 13:57:31 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20README=20=D0=BF=D0=BE=D0=B4=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20SBPFv3?= =?UTF-8?q?-=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D1=83=20(anchor=200.31.1,=20--t?= =?UTF-8?q?ools-version=20v1.57,=20two-arch=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index bec8f94..5f6dff6 100644 --- a/README.md +++ b/README.md @@ -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)