Wdrażanie programów

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:

PlikPrzeznaczenie
target/deploy/{name}.soSkompilowany kod bajtowy programu (wymagany)
target/deploy/{name}-keypair.jsonkeypair programu — klucz publiczny staje się identyfikatorem programu (wymagany)
target/idl/{name}.jsonAnchor 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 / setterSygnaturaPrzeznaczenie
DeployProgram::new(program_id: Pubkey) -> SelfTworzy 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 at
soPath?: string; // path to .so on disk
soBytes?: ByteArrayLike; // or raw bytes in memory
idlPath?: 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:

  1. Zapisuje program account pod adresem programId z bajtami .so za pomocą surfnet_writeProgram.
  2. Oznacza konto jako wykonywalne, dzięki czemu może być wywoływane przez standardowe wywołania RPC.
  3. 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

PrzyczynaObjaw
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 keypairSurfnetError::Cheatcode("...mismatched program id...")
Plik JSON IDL jest nieprawidłowySurfnetError::Cheatcode("...invalid IDL...")
Surfnet jest offline, a program account już istnieje w górnym źródleWdrożenie nadal się powiedzie; lokalna kopia zastępuje wersję z górnego źródła

Is this page helpful?

Spis treści

Edytuj stronę