Programme deployen

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:

DateiZweck
target/deploy/{name}.soKompilierter Programm-Bytecode (erforderlich)
target/deploy/{name}-keypair.jsonProgramm-keypair — der öffentliche Schlüssel wird zur Programm-ID (erforderlich)
target/idl/{name}.jsonAnchor-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 / SetterSignaturZweck
DeployProgram::new(program_id: Pubkey) -> SelfErstellt 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 at
soPath?: string; // path to .so on disk
soBytes?: ByteArrayLike; // or raw bytes in memory
idlPath?: 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:

  1. Schreibt das program account unter programId mit den .so-Bytes über surfnet_writeProgram.
  2. Markiert das Konten als ausführbar, sodass es über normale RPC-Aufrufe aufgerufen werden kann.
  3. 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

UrsacheSymptom
.so-Datei fehlt oder ist nicht lesbarSurfnetError::Cheatcode("...failed to read...") oder ausgelöster JS-Fehler
Programm-ID stimmt nicht mit der keypair-Datei übereinSurfnetError::Cheatcode("...mismatched program id...")
IDL JSON ist fehlerhaftSurfnetError::Cheatcode("...invalid IDL...")
Surfnet ist offline und das program account existiert bereits vorgelagertDeployment ist trotzdem erfolgreich; die lokale Kopie überschreibt die vorgelagerte Version

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten
© 2026 Solana Foundation. Alle Rechte vorbehalten.