Program Dağıtımı

SDK, yerel yapı dosyalarından tek bir çağrıyla program dağıtabilir. İki farklı yöntem mevcuttur: geleneksel yollarla Anchor/Agave çalışma alanları için otomatik keşif ve baytların nereden geleceğini kontrol etmek istediğinizde açık dağıtım.

Her iki yöntem de programı IDL'de belirtilen adreste (veya keypair dosyasının public key'inde) kaydeder ve IDL mevcutsa, RPC istemcilerinin hesap verilerini çözümleyebilmesi için surfnet_registerIdl aracılığıyla çalışma zamanına kaydeder.

Bir Anchor Çalışma Alanını Otomatik Keşfet

deployProgram / deploy_program program adını alır ve şu dosyaları mevcut çalışma dizinine göre arar:

DosyaAmaç
target/deploy/{name}.soDerlenmiş program bayt kodu (gerekli)
target/deploy/{name}-keypair.jsonProgram keypair — public key, program kimliği olur (gerekli)
target/idl/{name}.jsonAnchor IDL JSON (isteğe bağlı; mevcutsa kaydedilir)
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}");

Dağıtmadan önce derleyin

deployProgram'i çağırmadan önce anchor build (veya cargo build-sbf) komutunu çalıştırın; böylece .so ve keypair dosyaları gerçekten diskte mevcut olur. SDK derlemeyi sizin adınıza başlatmaz.

Açık Dağıtım

Dosyalar standart dışı bir yerde bulunduğunda — bir CI yapı dosyası, önceden hazırlanmış bir test verisi, gömülü bir bayt dilimi — açık bir dağıtım yapılandırması belirtin.

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

Ham Baytlardan Dağıtım

Bayt kodu zaten bellekteyken — bir derleme adımıyla üretilmiş, bir yapı deposundan indirilmiş veya include_bytes! aracılığıyla gömülmüş — dosya sistemini tamamen atlayın.

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 Referansı (Rust)

Yapıcı / ayarlayıcıİmzaAmaç
DeployProgram::new(program_id: Pubkey) -> SelfBilinen bir program ID'si için dağıtım oluşturur.
DeployProgram::from_keypair_path(path: impl AsRef<Path>) -> SurfnetResult<Self>Bir Solana keypair dosyası okur; public key program ID'si olur.
.so_path(path: impl Into<PathBuf>)Diskteki derlenmiş .so dosyasının yolu.
.so_bytes(bytes: Vec<u8>)Ham program baytları (so_path ile birbirini dışlar).
.idl_path(path: impl Into<PathBuf>)Dağıtımdan sonra kaydedilecek isteğe bağlı Anchor IDL JSON'u.

DeployOptions Tür Referansı (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 ve soBytes birbirini dışlar — yalnızca birini sağlayın.

Nelerin Kaydedildiği

Başarılı bir dağıtımın ardından çalışma zamanı üç işlem yapar:

  1. program account'u yazar programId adresine .so baytlarını surfnet_writeProgram aracılığıyla.
  2. Hesabı çalıştırılabilir olarak işaretler, böylece normal RPC çağrıları aracılığıyla çağrılabilir.
  3. IDL'yi kaydeder (sağlanmışsa) surfnet_registerIdl aracılığıyla; bu, RPC istemcilerinin program'ın IDL şemasını kullanarak hesap verilerini çözmesine olanak tanır.

Nadir: çalıştırılamaz program account

Program baytlarını bir hesaba yazmak ancak çalıştırılamaz tutmak istiyorsanız, deploy yerine doğrudan SetAccount kullanın. deploy yolu her zaman hesabı çalıştırılabilir olarak işaretler.

Hatalar

NedenBelirti
.so dosyası eksik veya okunamıyorSurfnetError::Cheatcode("...failed to read...") veya JS hatası fırlatılır
Program ID keypair dosyasıyla eşleşmiyorSurfnetError::Cheatcode("...mismatched program id...")
IDL JSON hatalı biçimlendirilmişSurfnetError::Cheatcode("...invalid IDL...")
Surfnet çevrimdışı ve program account zaten yukarı akışta mevcutDağıtım yine de başarılı olur; yerel kopya yukarı akış sürümünü geçersiz kılar

Is this page helpful?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.