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:
| Bestand | Doel |
|---|---|
target/deploy/{name}.so | Gecompileerde programma-bytecode (vereist) |
target/deploy/{name}-keypair.json | Programma-keypair — de public key wordt de programma-ID (vereist) |
target/idl/{name}.json | Anchor 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 / setter | Signatuur | Doel |
|---|---|---|
DeployProgram::new | (program_id: Pubkey) -> Self | Bouw 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 atsoPath?: string; // path to .so on disksoBytes?: ByteArrayLike; // or raw bytes in memoryidlPath?: 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:
- Schrijft het program account op
programIdmet de.sobytes viasurfnet_writeProgram. - Markeert het account als uitvoerbaar zodat het aangeroepen kan worden via normale RPC-aanroepen.
- 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
| Oorzaak | Symptoom |
|---|---|
.so bestand ontbreekt of is niet leesbaar | SurfnetError::Cheatcode("...failed to read...") of gegenereerde JS-fout |
| Programma-ID komt niet overeen met het keypair bestand | SurfnetError::Cheatcode("...mismatched program id...") |
| IDL JSON is ongeldig | SurfnetError::Cheatcode("...invalid IDL...") |
| Surfnet is offline en het program account bestaat al upstream | Deployment slaagt toch; de lokale kopie overschrijft de upstream versie |
Is this page helpful?