SDK voi ottaa ohjelman käyttöön paikallisista koontitiedostoista yhdellä kutsulla. Tähän on kaksi tapaa: automaattinen tunnistus Anchor/Agave-työtiloja varten perinteisillä poluilla, sekä eksplisiittinen käyttöönotto, kun haluat hallita, mistä tavut tulevat.
Molemmat tavat rekisteröivät ohjelman IDL:n määrittelemässä osoitteessa (tai
keypair-tiedoston julkisessa avaimessa) ja, jos IDL on saatavilla, rekisteröivät
sen ajonaikaiseen ympäristöön surfnet_registerIdl kautta, jotta RPC-asiakkaat
voivat purkaa tilitietojen koodauksen.
Tunnista Anchor-työtila automaattisesti
deployProgram / deploy_program ottaa ohjelman nimen ja etsii näitä
tiedostoja suhteessa nykyiseen työhakemistoon:
| Tiedosto | Tarkoitus |
|---|---|
target/deploy/{name}.so | Käännetty ohjelmatavukoodi (pakollinen) |
target/deploy/{name}-keypair.json | Ohjelman keypair — julkisesta avaimesta tulee ohjelmatunnus (pakollinen) |
target/idl/{name}.json | Anchor IDL JSON (valinnainen; rekisteröidään jos löytyy) |
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}");
Kokoa ennen käyttöönottoa
Suorita anchor build (tai cargo build-sbf) ennen kuin kutsut
deployProgram, jotta .so ja keypair-tiedostot ovat olemassa levyllä. SDK
ei käynnistä koontia puolestasi.
Eksplisiittinen käyttöönotto
Kun tiedostot sijaitsevat epätavallisessa paikassa — CI-koontitiedostona, valmiiksi luotuna testitiedostona tai upotettuna tavuviipaleena — anna eksplisiittinen käyttöönottoasetukset.
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"),)?;
Käyttöönotto raakatavuista
Kun tavukoodi on jo muistissa — luotu koontivaiheessa, ladattu
tiedostovarastosta tai upotettu include_bytes! kautta — ohita
tiedostojärjestelmä kokonaan.
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 -viite (Rust)
| Konstruktori / asettaja | Allekirjoitus | Tarkoitus |
|---|---|---|
DeployProgram::new | (program_id: Pubkey) -> Self | Rakentaa käyttöönoton tunnetulle ohjelmatunnukselle. |
DeployProgram::from_keypair_path | (path: impl AsRef<Path>) -> SurfnetResult<Self> | Lukee Solana keypair -tiedoston; julkisesta avaimesta tulee ohjelmatunnus. |
.so_path | (path: impl Into<PathBuf>) | Polku käännettyyn .so -artefaktiin levyllä. |
.so_bytes | (bytes: Vec<u8>) | Raakaohjelmatavut (keskenään poissulkeva so_path:n kanssa). |
.idl_path | (path: impl Into<PathBuf>) | Valinnainen Anchor IDL JSON rekisteröitäväksi käyttöönoton jälkeen. |
DeployOptions-tyypin viite (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 ja soBytes ovat keskenään poissulkevia — anna täsmälleen yksi niistä.
Mitä rekisteröidään
Onnistuneen käyttöönoton jälkeen ajoympäristö tekee kolme asiaa:
- Kirjoittaa program account -tilin osoitteeseen
programId.so-tavuillasurfnet_writeProgram:n kautta. - Merkitsee tilin suoritettavaksi, jotta sitä voidaan kutsua tavallisten RPC-kutsujen kautta.
- Rekisteröi IDL:n (jos annettu)
surfnet_registerIdl:n kautta, minkä ansiosta RPC-asiakkaat voivat purkaa tilin datan ohjelman IDL-skeeman avulla.
Harvinainen: ei-suoritettava program account
Jos haluat kirjoittaa ohjelmatavut tilille mutta pitää sen ei-suoritettavana,
käytä suoraan SetAccount:ää deploy:n sijaan. deploy merkitsee tilin aina
suoritettavaksi.
Virheet
| Syy | Oire |
|---|---|
.so -tiedosto puuttuu tai on lukukelvoton | SurfnetError::Cheatcode("...failed to read...") tai heitetty JS-virhe |
| Ohjelmatunnus ei vastaa keypair-tiedostoa | SurfnetError::Cheatcode("...mismatched program id...") |
| IDL JSON on viallinen | SurfnetError::Cheatcode("...invalid IDL...") |
| Surfnet on offline ja program account on jo olemassa ylävirrassa | Käyttöönotto onnistuu silti; paikallinen kopio korvaa ylävirran version |
Is this page helpful?