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 programma | cargo build-sbf |
Distribuire un nuovo programma | solana program deploy <path_to_program.so> |
Aggiornare un programma esistente | solana program deploy <path_to_program.so> (uguale alla distribuzione) |
Mostrare info del programma | solana program show <program-id> |
Trasferire autorità del programma | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
Rendere il programma immutabile | solana program set-upgrade-authority <program-id> --final |
Chiudere il programma | solana program close <program-id> --bypass-warning |
Controllare il saldo del wallet | solana 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:
$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:
$solana config get
Passa da un cluster all'altro secondo necessità:
$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
:
$solana airdrop 2
Controlla il saldo del tuo wallet:
$solana balance
Operazioni di base
Compilazione del programma
Per compilare un programma, usa il comando cargo build-sbf
:
$cargo build-sbf
Programma di esempio
Ecco un programma Solana minimale che stampa "Hello, Solana!" nei log del programma.
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
:
$cargo build-sbf
Questo crea due file importanti in target/deploy/
:
hello_world-keypair.json
: Un file keypair la cui chiave pubblica sarà utilizzata come tuo Program IDhello_world.so
: L'eseguibile del programma compilato
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:
$wc -c < ./target/deploy/hello_world.so
Calcola il SOL necessario per questa dimensione (in byte):
$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:
$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:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Puoi generare nuovi keypair usando il comando solana-keygen
:
$solana-keygen new -o ./custom-keypair.json
Aggiornamento del programma
Aggiorna il tuo programma utilizzando lo stesso comando solana program deploy
:
- Apporta modifiche al codice del tuo programma
- Ricompila il tuo programma:
cargo build-sbf
- Distribuisci l'aggiornamento:
$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:
$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
:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Esempio di output:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 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
:
$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:
$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
:
$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à:
$solana program show --programs
Esempio di output:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
Scaricare un programma distribuito
Per scaricare un programma distribuito, usa il comando solana program dump
:
$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:
$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?