Documentazione SolanaSviluppo di programmi

Distribuzione dei programmi

Questa sezione illustra il processo base di distribuzione di un programma Solana utilizzando la CLI di Solana.

Riferimento comandi CLI

AttivitàComando
Compilare il programmacargo build-sbf
Distribuire un nuovo programmasolana program deploy <path_to_program.so>
Aggiornare un programma esistentesolana program deploy <path_to_program.so> (uguale alla distribuzione)
Mostrare info del programmasolana program show <program-id>
Trasferire autorità del programmasolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Rendere il programma immutabilesolana program set-upgrade-authority <program-id> --final
Chiudere il programmasolana program close <program-id> --bypass-warning
Controllare il saldo del walletsolana balance
Richiedere airdrop (devnet/localhost)solana airdrop 2

Concetti chiave

Prima di iniziare, chiariamo alcuni termini:

  • Program ID: L'indirizzo on-chain del tuo programma. Gli utenti interagiscono con il tuo programma facendo riferimento al Program ID.
  • Program Account: L'account on-chain che memorizza i metadati del tuo programma. L'indirizzo del program account è il Program ID. Il program account memorizza anche l'indirizzo del ProgramData Account.
  • ProgramData Account: L'account on-chain che memorizza il codice eseguibile del tuo programma distribuito.
  • Program Authority: L'account che ha il permesso di aggiornare o chiudere il programma. Per impostazione predefinita, questo è il tuo wallet CLI.

Prerequisiti

Configurare il wallet

Dopo l'installazione, crea un wallet con keypair locale. L'indirizzo di questo wallet viene impostato come autorità predefinita del programma durante la distribuzione dei programmi:

Terminal
$
solana-keygen new

Questo crea un keypair in ~/.config/solana/id.json per impostazione predefinita.

Configurazione del cluster

Scegli su quale cluster Solana effettuare il deployment. Usa il comando solana config get per verificare la tua configurazione attuale:

Terminal
$
solana config get

Passa da un cluster all'altro secondo necessità:

Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"

Finanzia il wallet

Avrai bisogno di SOL per pagare i deployment dei programmi. La quantità dipende dalla dimensione del tuo programma.

Per devnet o localhost, finanzia il tuo wallet usando il comando solana airdrop:

Terminal
$
solana airdrop 2

Controlla il saldo del tuo wallet:

Terminal
$
solana balance

Operazioni di base

Compilazione del programma

Per compilare un programma, usa il comando cargo build-sbf:

Terminal
$
cargo build-sbf

Programma di esempio

Ecco un programma Solana minimale che stampa "Hello, Solana!" nei log del programma.

src/lib.rs
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

Output di compilazione

Compila il tuo programma usando il comando cargo build-sbf:

Terminal
$
cargo build-sbf

Questo crea due file importanti in target/deploy/:

  1. hello_world-keypair.json: Un file keypair la cui chiave pubblica sarà utilizzata come tuo Program ID
  2. hello_world.so: L'eseguibile del programma compilato

Programma di esempio

Ecco un programma Solana minimale che stampa "Hello, Solana!" nei log del programma.

Output di compilazione

Compila il tuo programma usando il comando cargo build-sbf:

Terminal
$
cargo build-sbf

Questo crea due file importanti in target/deploy/:

  1. hello_world-keypair.json: Un file keypair la cui chiave pubblica sarà utilizzata come tuo Program ID
  2. hello_world.so: L'eseguibile del programma compilato
lib.rs
Cargo.toml
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

Controlla dimensione e costo del programma

La distribuzione di un programma richiede che del SOL venga allocato all'account del programma in base alla dimensione del programma. Programmi più grandi costano più SOL per essere distribuiti.

Controlla la dimensione del tuo programma:

Terminal
$
wc -c < ./target/deploy/hello_world.so

Calcola il SOL necessario per questa dimensione (in byte):

Terminal
$
solana rent 18504

Avrai bisogno di un po' più SOL di quanto mostrato per coprire le commissioni di transazione per la distribuzione.

Distribuisci il programma

Usa il comando solana program deploy per distribuire il tuo programma:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

L'ID del programma mostrato è l'indirizzo permanente del tuo programma sulla rete.

Per distribuire con un ID programma specifico (invece di quello generato automaticamente), usa:

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

Puoi generare nuovi keypair usando il comando solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json

Aggiornamento del programma

Aggiorna il tuo programma utilizzando lo stesso comando solana program deploy:

  1. Apporta modifiche al codice del tuo programma
  2. Ricompila il tuo programma: cargo build-sbf
  3. Distribuisci l'aggiornamento:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Se il tuo programma aggiornato richiede più spazio (byte) rispetto a quello attualmente allocato, la distribuzione estenderà automaticamente il program account. Questo accade quando il tuo nuovo programma è più grande della versione precedente. Il program account necessita di byte aggiuntivi per memorizzare il nuovo programma. La CLI calcolerà automaticamente il SOL necessario e lo detrarrà dal tuo portafoglio.

Puoi anche estendere manualmente un programma per allocare più byte:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000

Gestione del programma

Una volta che il tuo programma è stato distribuito, ci sono diversi comandi comuni per gestire il program account.

Visualizzazione dei metadati del programma

Per controllare i metadati del tuo programma, usa il comando solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Esempio di output:

$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL

Trasferire l'autorità del programma

Per trasferire l'autorità del programma a un account diverso, usa il comando solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

Dopo aver trasferito l'autorità del programma, non potrai più aggiornare il programma a meno che tu non abbia accesso al nuovo keypair dell'autorità.

Rendere il tuo programma immutabile

Per rendere il tuo programma immutabile, usa il comando solana program set-upgrade-authority con il flag --final per rimuovere l'autorità del programma:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final

Una volta che un programma è immutabile, non potrà mai più essere aggiornato o chiuso.

Chiudere il tuo programma

Per chiudere il tuo programma e recuperare il SOL allocato all'account del programma, usa il comando solana program close:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning

Una volta chiuso, l'ID del programma non può essere riutilizzato. Non puoi implementare un nuovo programma allo stesso indirizzo.

Comandi di utilità

Elencare tutti i programmi

Visualizza tutti i programmi in cui il tuo wallet attuale è l'autorità:

Terminal
$
solana program show --programs

Esempio di output:

Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328

Scaricare un programma distribuito

Per scaricare un programma distribuito, usa il comando solana program dump:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

Opzioni avanzate

Flag di distribuzione

Quando la rete Solana è congestionata, usa questi flag per facilitare la distribuzione del programma.

Esempio di utilizzo:

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc

Spiegazione delle opzioni:

  • --with-compute-unit-price: Imposta la commissione prioritaria in micro-lamports (0.000001 SOL) per unità di calcolo. Controlla l'API per commissioni prioritarie di Helius per le tariffe attuali. Una commissione prioritaria è una commissione aggiuntiva pagata al leader attuale per dare priorità alla tua transazione.
  • --max-sign-attempts: Numero di tentativi con un nuovo blockhash se le transazioni scadono. (Predefinito: 5)
  • --use-rpc: Invia transazioni all'RPC configurato. Questo flag richiede una connessione RPC ponderata in base allo stake da provider come Triton o Helius.

Is this page helpful?