Programma's Deployen

De SDK kan een programma in één aanroep deployen vanuit lokale bouw-artefacten. Er zijn twee varianten: automatische detectie voor Anchor/Agave-workspaces met conventionele paden, en expliciete implementatie wanneer u wilt bepalen waar de bytes vandaan komen.

Beide varianten registreren het programma op het door de IDL opgegeven adres (of op de public key van het keypair-bestand) en, als er een IDL beschikbaar is, registreren deze bij de runtime via surfnet_registerIdl zodat RPC-clients accountgegevens kunnen decoderen.

Automatisch een Anchor-Workspace Ontdekken

deployProgram / deploy_program neemt de programmanaam en zoekt naar deze bestanden relatief aan de huidige werkdirectory:

BestandDoel
target/deploy/{name}.soGecompileerde programma-bytecode (vereist)
target/deploy/{name}-keypair.jsonProgramma-keypair — de public key wordt de programma-ID (vereist)
target/idl/{name}.jsonAnchor IDL JSON (optioneel; geregistreerd indien aanwezig)
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}");

Bouwen vóór deployen

Voer anchor build (of cargo build-sbf) uit vóór het aanroepen van deployProgram zodat de .so en keypair-artefacten daadwerkelijk op schijf bestaan. De SDK voert de bouw niet voor u uit.

Expliciete Implementatie

Wanneer de artefacten zich op een niet-standaard locatie bevinden — een gebouwd CI-artefact, een vooraf ingericht testbestand, een ingesloten byte-slice — geef een expliciete deploy- configuratie op.

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"),
)?;

Deployen Vanuit Ruwe Bytes

Wanneer de bytecode zich al in het geheugen bevindt — gegenereerd door een bouwstap, gedownload vanuit een artefactopslag, of ingesloten via include_bytes! — sla het bestandssysteem volledig over.

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 Referentie (Rust)

Constructor / setterSignatuurDoel
DeployProgram::new(program_id: Pubkey) -> SelfBouw een deployment voor een bekend programma-ID.
DeployProgram::from_keypair_path(path: impl AsRef<Path>) -> SurfnetResult<Self>Lees een Solana keypair bestand; de publieke sleutel wordt het programma-ID.
.so_path(path: impl Into<PathBuf>)Pad naar het gecompileerde .so artifact op schijf.
.so_bytes(bytes: Vec<u8>)Ruwe programma-bytes (wederzijds exclusief met so_path).
.idl_path(path: impl Into<PathBuf>)Optionele Anchor IDL JSON om te registreren na deployment.

DeployOptions Type Referentie (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 en soBytes zijn wederzijds exclusief — geef er precies één op.

Wat er wordt geregistreerd

Na een succesvolle deployment doet de runtime drie dingen:

  1. Schrijft het program account op programId met de .so bytes via surfnet_writeProgram.
  2. Markeert het account als uitvoerbaar zodat het aangeroepen kan worden via normale RPC-aanroepen.
  3. Registreert de IDL (indien opgegeven) via surfnet_registerIdl, waardoor RPC-clients accountgegevens kunnen decoderen met behulp van het IDL-schema van het programma.

Zeldzaam: niet-uitvoerbaar program account

Als u programma-bytes naar een account wilt schrijven maar het niet-uitvoerbaar wilt houden, gebruik dan SetAccount rechtstreeks in plaats van deploy. Het pad via deploy markeert het account altijd als uitvoerbaar.

Fouten

OorzaakSymptoom
.so bestand ontbreekt of is niet leesbaarSurfnetError::Cheatcode("...failed to read...") of gegenereerde JS-fout
Programma-ID komt niet overeen met het keypair bestandSurfnetError::Cheatcode("...mismatched program id...")
IDL JSON is ongeldigSurfnetError::Cheatcode("...invalid IDL...")
Surfnet is offline en het program account bestaat al upstreamDeployment slaagt toch; de lokale kopie overschrijft de upstream versie

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.