Das SDK kann ein Programm aus lokalen Build-Artefakten in einem einzigen Aufruf deployen. Es gibt zwei Varianten: Auto-Discovery für Anchor/Agave-Workspaces mit konventionellen Pfaden und explizites Deployment, wenn Sie selbst bestimmen möchten, woher die Bytes stammen.
Beide Varianten registrieren das Programm unter der im IDL deklarierten Adresse
(oder unter dem öffentlichen Schlüssel der keypair-Datei) und, falls ein IDL
verfügbar ist, registrieren es mit der Laufzeitumgebung über
surfnet_registerIdl, damit RPC-Clients Konten-Daten dekodieren können.
Einen Anchor-Workspace automatisch erkennen
deployProgram / deploy_program nimmt den Programmnamen und sucht nach diesen
Dateien relativ zum aktuellen Arbeitsverzeichnis:
| Datei | Zweck |
|---|---|
target/deploy/{name}.so | Kompilierter Programm-Bytecode (erforderlich) |
target/deploy/{name}-keypair.json | Programm-keypair — der öffentliche Schlüssel wird zur Programm-ID (erforderlich) |
target/idl/{name}.json | Anchor-IDL-JSON (optional; wird registriert, falls vorhanden) |
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}");
Vor dem Deployment bauen
Führen Sie anchor build (oder cargo build-sbf) aus, bevor Sie
deployProgram aufrufen, damit die .so- und keypair-Artefakte tatsächlich
auf dem Datenträger vorhanden sind. Das SDK startet den Build-Prozess nicht
für Sie.
Explizites Deployment
Wenn sich die Artefakte an einem nicht standardmäßigen Ort befinden — ein erstelltes CI-Artefakt, eine vorgefertigte Test-Fixture, ein eingebettetes Byte-Slice — übergeben Sie eine explizite Deploy- Konfiguration.
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"),)?;
Aus Rohbytes deployen
Wenn der Bytecode bereits im Speicher vorhanden ist — generiert durch einen
Build-Schritt, heruntergeladen von einem Artefakt-Store oder eingebettet über
include_bytes! — kann das Dateisystem vollständig umgangen werden.
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()),)?;
DeployProgram Builder Referenz (Rust)
| Konstruktor / Setter | Signatur | Zweck |
|---|---|---|
DeployProgram::new | (program_id: Pubkey) -> Self | Erstellt ein Deployment für eine bekannte Programm-ID. |
DeployProgram::from_keypair_path | (path: impl AsRef<Path>) -> SurfnetResult<Self> | Liest eine Solana keypair-Datei; der öffentliche Schlüssel wird zur Programm-ID. |
.so_path | (path: impl Into<PathBuf>) | Pfad zum kompilierten .so-Artefakt auf dem Datenträger. |
.so_bytes | (bytes: Vec<u8>) | Rohe Programmbytes (schließt sich gegenseitig mit so_path aus). |
.idl_path | (path: impl Into<PathBuf>) | Optionale Anchor IDL JSON-Datei zur Registrierung nach dem Deployment. |
DeployOptions Typreferenz (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 und soBytes schließen sich gegenseitig aus — geben Sie genau eines
an.
Was registriert wird
Nach einem erfolgreichen Deployment führt die Laufzeitumgebung drei Aktionen aus:
- Schreibt das program account unter
programIdmit den.so-Bytes übersurfnet_writeProgram. - Markiert das Konten als ausführbar, sodass es über normale RPC-Aufrufe aufgerufen werden kann.
- Registriert das IDL (falls angegeben) über
surfnet_registerIdl, wodurch RPC-Clients Kontendaten anhand des IDL-Schemas des Programms dekodieren können.
Selten: nicht-ausführbares program account
Wenn Sie Programmbytes in ein Konten schreiben, es aber nicht ausführbar
halten möchten, verwenden Sie SetAccount direkt anstelle von deploy. Der
deploy-Pfad markiert das Konten immer als ausführbar.
Fehler
| Ursache | Symptom |
|---|---|
.so-Datei fehlt oder ist nicht lesbar | SurfnetError::Cheatcode("...failed to read...") oder ausgelöster JS-Fehler |
| Programm-ID stimmt nicht mit der keypair-Datei überein | SurfnetError::Cheatcode("...mismatched program id...") |
| IDL JSON ist fehlerhaft | SurfnetError::Cheatcode("...invalid IDL...") |
| Surfnet ist offline und das program account existiert bereits vorgelagert | Deployment ist trotzdem erfolgreich; die lokale Kopie überschreibt die vorgelagerte Version |
Is this page helpful?