Déploiement de votre premier programme Solana

Dans cette section, vous allez construire, déployer et tester un programme Solana simple (smart contract) en utilisant le framework Anchor. À la fin, vous aurez déployé votre premier programme sur la blockchain Solana.

L'objectif de cette section est de vous familiariser avec Solana Playground. Le guide présente un exemple plus détaillé dans les sections Programme Derived Address (PDA) et Cross-Program Invocation (CPI). Pour plus de détails, consultez la page Programmes sur Solana.

Créer un projet Anchor

Tout d'abord, ouvrez https://beta.solpg.io dans un nouvel onglet du navigateur.

  • Cliquez sur le bouton "Create a new project" dans le panneau de gauche.

  • Saisissez un nom de projet, sélectionnez Anchor comme framework, puis cliquez sur le bouton "Create" .

Nouveau projetNouveau projet

Vous verrez un nouveau projet créé avec le code du programme dans le fichier src/lib.rs.

Ce programme Solana de base crée un nouveau compte et y stocke un nombre. Le programme contient une instruction (initialize) qui :

  • Requiert un paramètre data: u64 comme entrée
  • Crée un nouveau compte
  • Enregistre la valeur du paramètre data: u64 dans les données du compte
  • Journalise un message dans les logs du programme de la transaction
lib.rs
use anchor_lang::prelude::*;
// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("11111111111111111111111111111111");
#[program]
mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
ctx.accounts.new_account.data = data;
msg!("Changed data to: {}!", data); // Message will show up in the tx logs
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
// We must specify the space in order to initialize an account.
// First 8 bytes are default account discriminator,
// next 8 bytes come from NewAccount.data being type u64.
// (u64 = 64 bits unsigned integer = 8 bytes)
#[account(
init,
payer = signer,
space = 8 + 8
)]
pub new_account: Account<'info, NewAccount>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct NewAccount {
data: u64
}

Compiler et déployer le programme

Pour compiler le programme, exécutez simplement build dans le terminal. La commande build compile le programme. Le bytecode du programme est ensuite stocké dans un compte de programme exécutable lors du déploiement.

Terminal
$
build

Solana Playground met à jour l'adresse dans declare_id!(). Cette adresse représente l'adresse on-chain de votre programme (ID du programme).

Après avoir compilé le programme, exécutez deploy dans le terminal pour déployer le programme sur le réseau (devnet par défaut). Le déploiement du programme nécessite l'allocation de SOL au compte on-chain qui stocke le programme.

Avant le déploiement, assurez-vous d'avoir suffisamment de SOL. Vous pouvez obtenir du SOL sur devnet soit en exécutant solana airdrop 5 dans le terminal Playground, soit en utilisant le Web Faucet.

Terminal
$
deploy

Vous pouvez également utiliser les boutons Build et Deploy sur le panneau latéral gauche.

Compiler et déployerCompiler et déployer

Après avoir déployé le programme, vous pouvez appeler ses instructions.

Tester le programme

Le code de démarrage inclut un fichier de test situé dans tests/anchor.test.ts. Ce fichier démontre comment invoquer l'instruction initialize sur le programme depuis le client.

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const data = new BN(42);
const txHash = await pg.program.methods
.initialize(data)
.accounts({
newAccount: newAccountKp.publicKey,
signer: pg.wallet.publicKey,
systemProgram: web3.SystemProgram.programId
})
.signers([newAccountKp])
.rpc();
console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);
// Confirm transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const newAccount = await pg.program.account.newAccount.fetch(
newAccountKp.publicKey
);
console.log("On-chain data is:", newAccount.data.toString());
// Check whether the data on-chain is equal to local 'data'
assert(data.eq(newAccount.data));
});
});

Pour exécuter le fichier de test après avoir déployé le programme, exécutez test dans le terminal.

Terminal
$
test

Recherchez une sortie qui confirme que le test a réussi.

Vous pouvez également utiliser le bouton Test sur le panneau latéral gauche.

Exécuter le testExécuter le test

Vous pouvez ensuite consulter les logs de transaction en exécutant la commande solana confirm -v et en spécifiant le hash de transaction (signature) à partir de la sortie du test :

Terminal
$
solana confirm -v [TxHash]

Par exemple :

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

Vous pouvez également consulter les détails de la transaction sur SolanaFM ou Solana Explorer en recherchant la signature de transaction (hash).

N'oubliez pas de mettre à jour la connexion au cluster (réseau) sur l'Explorateur que vous utilisez pour correspondre à Solana Playground. Solana Playground utilise le cluster devnet par défaut.

Fermer le programme

Enfin, la fermeture du programme permet la récupération complète du SOL alloué au programme on-chain.

Vous pouvez fermer un programme en exécutant la commande suivante et en spécifiant l'adresse du programme trouvée dans declare_id!() :

Terminal
$
solana program close [ProgramID]

Par exemple :

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Félicitations. Vous venez de construire et de déployer votre premier programme Solana en utilisant le framework Anchor.

Is this page helpful?

Table des matières

Modifier la page