Το SDK μπορεί να αναπτύξει ένα πρόγραμμα από τοπικά αρχεία κατασκευής με μία μόνο κλήση. Υπάρχουν δύο παραλλαγές: αυτόματη ανακάλυψη για χώρους εργασίας Anchor/Agave με συμβατικές διαδρομές, και ρητή ανάπτυξη όταν θέλετε να ελέγχετε την προέλευση των bytes.
Και οι δύο παραλλαγές καταχωρούν το πρόγραμμα στη δηλωμένη διεύθυνση του IDL (ή
στο δημόσιο κλειδί του αρχείου keypair) και, εφόσον υπάρχει IDL, το καταχωρούν
στο runtime μέσω surfnet_registerIdl ώστε οι RPC clients να μπορούν να
αποκωδικοποιούν δεδομένα λογαριασμών.
Αυτόματη Ανακάλυψη Χώρου Εργασίας Anchor
deployProgram / deploy_program λαμβάνει το όνομα του προγράμματος και
αναζητά αυτά τα αρχεία σχετικά με τον τρέχοντα κατάλογο εργασίας:
| Αρχείο | Σκοπός |
|---|---|
target/deploy/{name}.so | Μεταγλωττισμένος κώδικας bytecode προγράμματος (απαιτείται) |
target/deploy/{name}-keypair.json | keypair προγράμματος — το δημόσιο κλειδί γίνεται το ID προγράμματος (απαιτείται) |
target/idl/{name}.json | IDL JSON του Anchor (προαιρετικό· καταχωρείται αν υπάρχει) |
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}");
Build before you deploy
Εκτελέστε anchor build (ή cargo build-sbf) πριν καλέσετε deployProgram
ώστε τα αρχεία .so και keypair να υπάρχουν πραγματικά στον δίσκο. Το SDK δεν
εκτελεί την κατασκευή για εσάς.
Ρητή Ανάπτυξη
Όταν τα αρχεία βρίσκονται σε μη τυπική τοποθεσία — ένα αρχείο CI, μια προκατασκευασμένη δοκιμαστική σταθερά, ένα ενσωματωμένο τμήμα bytes — περάστε μια ρητή διαμόρφωση ανάπτυξης.
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"),)?;
Ανάπτυξη από Ακατέργαστα Bytes
Όταν ο κώδικας bytecode βρίσκεται ήδη στη μνήμη — δημιουργήθηκε από ένα βήμα
κατασκευής, λήφθηκε από αποθετήριο αρχείων ή ενσωματώθηκε μέσω include_bytes!
— παραλείψτε εντελώς το σύστημα αρχείων.
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()),)?;
Αναφορά Builder DeployProgram (Rust)
| Κατασκευαστής / setter | Υπογραφή | Σκοπός |
|---|---|---|
DeployProgram::new | (program_id: Pubkey) -> Self | Δημιουργία ανάπτυξης για γνωστό αναγνωριστικό προγράμματος. |
DeployProgram::from_keypair_path | (path: impl AsRef<Path>) -> SurfnetResult<Self> | Ανάγνωση αρχείου keypair του Solana· το δημόσιο κλειδί γίνεται το αναγνωριστικό προγράμματος. |
.so_path | (path: impl Into<PathBuf>) | Διαδρομή προς το μεταγλωττισμένο αντικείμενο .so στο δίσκο. |
.so_bytes | (bytes: Vec<u8>) | Ακατέργαστα bytes προγράμματος (αμοιβαία αποκλειόμενο με so_path). |
.idl_path | (path: impl Into<PathBuf>) | Προαιρετικό Anchor IDL JSON για καταχώριση μετά την ανάπτυξη. |
Αναφορά Τύπου DeployOptions (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 και soBytes είναι αμοιβαία αποκλειόμενα — δώστε ακριβώς ένα από τα
δύο.
Τι Καταχωρείται
Μετά από μια επιτυχημένη ανάπτυξη, το περιβάλλον εκτέλεσης κάνει τρία πράγματα:
- Εγγράφει το program account στο
programIdμε τα bytes.soμέσωsurfnet_writeProgram. - Επισημαίνει τον λογαριασμό ως εκτελέσιμο ώστε να μπορεί να κληθεί μέσω κανονικών κλήσεων RPC.
- Καταχωρεί το IDL (εφόσον παρέχεται) μέσω
surfnet_registerIdl, το οποίο επιτρέπει στους πελάτες RPC να αποκωδικοποιούν δεδομένα λογαριασμού χρησιμοποιώντας το σχήμα IDL του προγράμματος.
Σπάνιο: μη εκτελέσιμο program account
Εάν θέλετε να εγγράψετε bytes προγράμματος σε έναν λογαριασμό αλλά να τον
διατηρήσετε μη εκτελέσιμο, χρησιμοποιήστε απευθείας το SetAccount αντί του
deploy. Η διαδρομή deploy επισημαίνει πάντα τον λογαριασμό ως εκτελέσιμο.
Σφάλματα
| Αιτία | Σύμπτωμα |
|---|---|
Το αρχείο .so λείπει ή δεν είναι αναγνώσιμο | SurfnetError::Cheatcode("...failed to read...") ή σφάλμα JS |
| Το αναγνωριστικό προγράμματος δεν ταιριάζει με το αρχείο keypair | SurfnetError::Cheatcode("...mismatched program id...") |
| Το IDL JSON είναι κακοσχηματισμένο | SurfnetError::Cheatcode("...invalid IDL...") |
| Το Surfnet είναι εκτός σύνδεσης και το program account υπάρχει ήδη ανάντη | Η ανάπτυξη εξακολουθεί να επιτυγχάνει· το τοπικό αντίγραφο παρακάμπτει την έκδοση ανάντη |
Is this page helpful?