SDK może wdrożyć program z lokalnych artefaktów budowania w jednym wywołaniu. Istnieją dwie opcje: automatyczne wykrywanie dla przestrzeni roboczych Anchor/Agave z konwencjonalnymi ścieżkami oraz jawne wdrożenie, gdy chcesz kontrolować, skąd pochodzą bajty.
Obie opcje rejestrują program pod adresem zadeklarowanym w IDL (lub pod kluczem
publicznym pliku keypair) i, jeśli IDL jest dostępny, rejestrują go w środowisku
uruchomieniowym za pomocą surfnet_registerIdl, dzięki czemu klienci RPC mogą
dekodować dane kont.
Automatyczne wykrywanie przestrzeni roboczej Anchor
deployProgram / deploy_program przyjmuje nazwę programu i szuka
następujących plików względem bieżącego katalogu roboczego:
| Plik | Przeznaczenie |
|---|---|
target/deploy/{name}.so | Skompilowany kod bajtowy programu (wymagany) |
target/deploy/{name}-keypair.json | keypair programu — klucz publiczny staje się identyfikatorem programu (wymagany) |
target/idl/{name}.json | Anchor IDL JSON (opcjonalny; rejestrowany, jeśli jest obecny) |
use surfpool_sdk::Surfnet;let surfnet = Surfnet::start().await?;let cheats = surfnet.cheatcodes();let program_id = cheats.deploy_program("my_program")?;println!("deployed at {program_id}");
Zbuduj przed wdrożeniem
Uruchom anchor build (lub cargo build-sbf) przed wywołaniem
deployProgram, aby artefakty .so i keypair faktycznie istniały na dysku.
SDK nie wywołuje za ciebie procesu budowania.
Jawne wdrożenie
Gdy artefakty znajdują się w niestandardowej lokalizacji — zbudowany artefakt CI, gotowy fixture testowy, wbudowany wycinek bajtów — przekaż jawną konfigurację wdrożenia.
use surfpool_sdk::cheatcodes::builders::DeployProgram;use surfpool_sdk::Surfnet;let cheats = Surfnet::start().await?.cheatcodes();// Derive the program ID from a keypair file.let program_id = cheats.deploy(DeployProgram::from_keypair_path("fixtures/my_program-keypair.json")?.so_path("fixtures/my_program.so").idl_path("fixtures/my_program.idl.json"),)?;
Wdrożenie z surowych bajtów
Gdy kod bajtowy jest już w pamięci — wygenerowany przez krok budowania, pobrany
z magazynu artefaktów lub osadzony za pomocą include_bytes! — pomiń system
plików całkowicie.
use surfpool_sdk::cheatcodes::builders::DeployProgram;use surfpool_sdk::{Pubkey, Surfnet};const PROGRAM_BYTES: &[u8] = include_bytes!("../fixtures/my_program.so");let cheats = Surfnet::start().await?.cheatcodes();let program_id: Pubkey = "DemoProgram111111111111111111111111111111111".parse()?;cheats.deploy(DeployProgram::new(program_id).so_bytes(PROGRAM_BYTES.to_vec()),)?;
Dokumentacja Buildera DeployProgram (Rust)
| Konstruktor / setter | Sygnatura | Przeznaczenie |
|---|---|---|
DeployProgram::new | (program_id: Pubkey) -> Self | Tworzy wdrożenie dla znanego identyfikatora programu. |
DeployProgram::from_keypair_path | (path: impl AsRef<Path>) -> SurfnetResult<Self> | Odczytuje plik keypair Solany; klucz publiczny staje się identyfikatorem programu. |
.so_path | (path: impl Into<PathBuf>) | Ścieżka do skompilowanego artefaktu .so na dysku. |
.so_bytes | (bytes: Vec<u8>) | Surowe bajty programu (wzajemnie wykluczające się z so_path). |
.idl_path | (path: impl Into<PathBuf>) | Opcjonalny plik JSON Anchor IDL do zarejestrowania po wdrożeniu. |
Dokumentacja Typu DeployOptions (JS)
type ByteArrayLike = Uint8Array | number[];interface DeployOptions {programId: string; // base58 address to deploy atsoPath?: string; // path to .so on disksoBytes?: ByteArrayLike; // or raw bytes in memoryidlPath?: string; // optional Anchor IDL JSON}
soPath i soBytes wzajemnie się wykluczają — podaj dokładnie jedno z nich.
Co zostaje zarejestrowane
Po pomyślnym wdrożeniu środowisko uruchomieniowe wykonuje trzy czynności:
- Zapisuje program account pod adresem
programIdz bajtami.soza pomocąsurfnet_writeProgram. - Oznacza konto jako wykonywalne, dzięki czemu może być wywoływane przez standardowe wywołania RPC.
- Rejestruje IDL (jeśli podano) za pomocą
surfnet_registerIdl, co umożliwia klientom RPC dekodowanie danych kont przy użyciu schematu IDL programu.
Rzadkie: niewykonywalne program account
Jeśli chcesz zapisać bajty programu do konta, ale zachować je jako
niewykonywalne, użyj bezpośrednio SetAccount zamiast deploy. Ścieżka
deploy zawsze oznacza konto jako wykonywalne.
Błędy
| Przyczyna | Objaw |
|---|---|
Plik .so jest niedostępny lub nie można go odczytać | SurfnetError::Cheatcode("...failed to read...") lub zgłoszony błąd JS |
| Identyfikator programu nie zgadza się z plikiem keypair | SurfnetError::Cheatcode("...mismatched program id...") |
| Plik JSON IDL jest nieprawidłowy | SurfnetError::Cheatcode("...invalid IDL...") |
| Surfnet jest offline, a program account już istnieje w górnym źródle | Wdrożenie nadal się powiedzie; lokalna kopia zastępuje wersję z górnego źródła |
Is this page helpful?