Documentation SolanaDéveloppement de programmes

Déploiement de programmes

Cette section explique le processus de base pour déployer un programme Solana en utilisant la CLI Solana.

Référence des commandes CLI

TâcheCommande
Compiler le programmecargo build-sbf
Déployer un nouveau programmesolana program deploy <path_to_program.so>
Mettre à jour un programme existantsolana program deploy <path_to_program.so> (identique au déploiement)
Afficher les infos du programmesolana program show <program-id>
Transférer l'autorité du programmesolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Rendre le programme immuablesolana program set-upgrade-authority <program-id> --final
Fermer le programmesolana program close <program-id> --bypass-warning
Vérifier le solde du portefeuillesolana balance
Demander un airdrop (devnet/localhost)solana airdrop 2

Concepts clés

Avant de commencer, clarifions quelques termes :

  • ID du programme : L'adresse de votre programme sur la blockchain. Les utilisateurs interagissent avec votre programme en référençant l'ID du programme.
  • Program Account : Le compte sur la blockchain qui stocke les métadonnées de votre programme. L'adresse du program account est l'ID du programme. Le program account stocke également l'adresse du ProgramData Account.
  • ProgramData Account : Le compte sur la blockchain qui stocke le code exécutable déployé de votre programme.
  • Autorité du programme : Le compte qui a la permission de mettre à jour ou de fermer le programme. Par défaut, il s'agit de votre portefeuille CLI.

Prérequis

Configurer le portefeuille

Après l'installation, créez un portefeuille local avec une paire de clés. L'adresse de ce portefeuille est définie comme l'autorité du programme par défaut lors du déploiement des programmes :

Terminal
$
solana-keygen new

Cela crée une paire de clés à ~/.config/solana/id.json par défaut.

Configurer le cluster

Choisissez le cluster Solana sur lequel déployer. Utilisez la commande solana config get pour vérifier votre configuration actuelle :

Terminal
$
solana config get

Basculez entre les clusters selon vos besoins :

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"

Financer le portefeuille

Vous aurez besoin de SOL pour payer les déploiements de programmes. Le montant dépend de la taille de votre programme.

Pour devnet ou localhost, financez votre portefeuille à l'aide de la commande solana airdrop :

Terminal
$
solana airdrop 2

Vérifiez le solde de votre portefeuille :

Terminal
$
solana balance

Opérations de base

Compiler le programme

Pour compiler un programme, utilisez la commande cargo build-sbf :

Terminal
$
cargo build-sbf

Programme d'exemple

Voici un programme Solana minimal qui affiche "Hello, Solana!" dans les logs du programme.

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(())
}

Résultat de la compilation

Compilez votre programme en utilisant la commande cargo build-sbf :

Terminal
$
cargo build-sbf

Cela crée deux fichiers importants dans target/deploy/ :

  1. hello_world-keypair.json : Un fichier keypair dont la clé publique sera utilisée comme votre ID de programme
  2. hello_world.so : L'exécutable du programme compilé

Programme d'exemple

Voici un programme Solana minimal qui affiche "Hello, Solana!" dans les logs du programme.

Résultat de la compilation

Compilez votre programme en utilisant la commande cargo build-sbf :

Terminal
$
cargo build-sbf

Cela crée deux fichiers importants dans target/deploy/ :

  1. hello_world-keypair.json : Un fichier keypair dont la clé publique sera utilisée comme votre ID de programme
  2. hello_world.so : L'exécutable du programme compilé
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(())
}

Vérifier la taille et le coût du programme

Le déploiement d'un programme nécessite que des SOL soient alloués au compte du programme en fonction de la taille du programme. Les programmes plus volumineux coûtent plus de SOL à déployer.

Vérifiez la taille de votre programme :

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

Calculez les SOL nécessaires pour cette taille (en octets) :

Terminal
$
solana rent 18504

Vous aurez besoin d'un peu plus de SOL que ce qui est indiqué pour couvrir les frais de transaction du déploiement.

Déployer le programme

Utilisez la commande solana program deploy pour déployer votre programme :

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

L'ID du programme affiché est l'adresse permanente de votre programme sur le réseau.

Pour déployer avec un ID de programme spécifique (au lieu de celui généré automatiquement), utilisez :

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

Vous pouvez générer de nouveaux keypairs en utilisant la commande solana-keygen :

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

Mettre à jour le programme

Mettez à jour votre programme en utilisant la même commande solana program deploy :

  1. Apportez des modifications à votre code de programme
  2. Recompilez votre programme : cargo build-sbf
  3. Déployez la mise à jour :
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Si votre programme mis à jour nécessite plus d'espace (octets) que ce qui est actuellement alloué, le déploiement étendra automatiquement le compte du programme. Cela se produit lorsque votre nouveau programme est plus volumineux que la version précédente. Le compte du programme a besoin d'octets supplémentaires pour stocker le nouveau programme. L'interface en ligne de commande calculera automatiquement le SOL requis et le déduira de votre portefeuille.

Vous pouvez également étendre manuellement un programme pour allouer plus d'octets :

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000

Gestion du programme

Une fois votre programme déployé, il existe plusieurs commandes courantes pour gérer le compte du programme.

Afficher les métadonnées du programme

Pour vérifier les métadonnées de votre programme, utilisez la commande solana program show :

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Exemple de sortie :

$ 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

Transférer l'autorité du programme

Pour transférer l'autorité du programme à un compte différent, utilisez la commande solana program set-upgrade-authority :

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

Après avoir transféré l'autorité du programme, vous ne pourrez plus mettre à jour le programme à moins d'avoir accès à la nouvelle paire de clés d'autorité.

Rendre votre programme immuable

Pour rendre votre programme immuable, utilisez la commande solana program set-upgrade-authority avec l'option --final pour supprimer l'autorité du programme :

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

Une fois qu'un programme est immuable, il ne peut plus jamais être mis à jour ou fermé.

Fermer votre programme

Pour fermer votre programme et récupérer le SOL alloué au compte du programme, utilisez la commande solana program close :

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

Une fois fermé, l'ID du programme ne peut pas être réutilisé. Vous ne pouvez pas déployer un nouveau programme à la même adresse.

Commandes utilitaires

Lister tous les programmes

Afficher tous les programmes où votre portefeuille actuel est l'autorité :

Terminal
$
solana program show --programs

Exemple de sortie :

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

Télécharger un programme déployé

Pour télécharger un programme déployé, utilisez la commande solana program dump :

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

Options avancées

Drapeaux de déploiement

Lorsque le réseau Solana est congestionné, utilisez ces drapeaux pour faciliter le déploiement de programmes.

Exemple d'utilisation :

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

Explication des options :

  • --with-compute-unit-price : Définit les frais prioritaires en micro-lamports (0,000001 SOL) par unité de calcul. Consultez l'API de frais prioritaires Helius pour les tarifs actuels. Les frais prioritaires sont des frais supplémentaires payés au leader actuel pour prioriser votre transaction.
  • --max-sign-attempts : Nombre de tentatives avec un nouveau blockhash si les transactions expirent. (Par défaut : 5)
  • --use-rpc : Envoie les transactions au RPC configuré. Ce drapeau nécessite une connexion RPC pondérée par enjeu fournie par des prestataires tels que Triton ou Helius.

Is this page helpful?