Écrire sur le réseau

Dans la section précédente, vous avez appris comment lire des données du réseau Solana. Maintenant, vous allez apprendre comment y écrire des données. Écrire sur le réseau Solana implique l'envoi de transactions contenant une ou plusieurs instructions.

Les programmes définissent la logique métier pour ce que chaque instruction fait. Lorsque vous soumettez une transaction, le runtime Solana exécute chaque instruction en séquence et de manière atomique. Les exemples dans cette section montrent comment construire et envoyer des transactions pour invoquer des programmes Solana, ils incluent :

  1. Transférer des SOL entre comptes
  2. Créer un nouveau token

Transférer des SOL

L'exemple ci-dessous transfère des SOL entre deux comptes. Chaque compte a un programme propriétaire, qui est le seul programme pouvant déduire le solde en SOL du compte.

Tous les comptes de portefeuille appartiennent au System Program. Pour transférer des SOL, vous devez invoquer l'instruction transfer du System Program.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");
const sender = new Keypair();
const receiver = new Keypair();
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});
const transaction = new Transaction().add(transferInstruction);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const senderBalance = await connection.getBalance(sender.publicKey);
const receiverBalance = await connection.getBalance(receiver.publicKey);
console.log("Sender Balance:", `${senderBalance}`);
console.log("Receiver Balance:", `${receiverBalance}`);
Console
Click to execute the code.

Créez un Connection pour gérer l'envoi des transactions et la récupération des données de compte.

Dans cet exemple, nous nous connectons au validateur de test local qui s'exécute sur localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Générez de nouvelles paires de clés à utiliser comme comptes émetteur et récepteur.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Ajoutez des SOL au compte émetteur. Sur les réseaux autres que le mainnet, vous pouvez utiliser la méthode requestAirdrop pour obtenir des SOL à des fins de test.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

La méthode SystemProgram.transfer() crée une instruction qui transfère des SOL du compte fromPubkey vers le compte toPubkey pour le nombre spécifié de lamports.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Créez une transaction et ajoutez l'instruction à la transaction. Dans cet exemple, nous créons une transaction avec une seule instruction. Cependant, vous pouvez ajouter plusieurs instructions à une transaction.

Transaction
const transaction = new Transaction().add(transferInstruction);

Signez et envoyez la transaction au réseau. Le keypair de l'expéditeur est requis dans le tableau des signataires pour autoriser le transfert de SOL depuis son compte.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

La signature de transaction est un identifiant unique qui peut être utilisé pour consulter la transaction sur Solana Explorer.

Créez un Connection pour gérer l'envoi des transactions et la récupération des données de compte.

Dans cet exemple, nous nous connectons au validateur de test local qui s'exécute sur localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Générez de nouvelles paires de clés à utiliser comme comptes émetteur et récepteur.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Ajoutez des SOL au compte émetteur. Sur les réseaux autres que le mainnet, vous pouvez utiliser la méthode requestAirdrop pour obtenir des SOL à des fins de test.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

La méthode SystemProgram.transfer() crée une instruction qui transfère des SOL du compte fromPubkey vers le compte toPubkey pour le nombre spécifié de lamports.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Créez une transaction et ajoutez l'instruction à la transaction. Dans cet exemple, nous créons une transaction avec une seule instruction. Cependant, vous pouvez ajouter plusieurs instructions à une transaction.

Transaction
const transaction = new Transaction().add(transferInstruction);

Signez et envoyez la transaction au réseau. Le keypair de l'expéditeur est requis dans le tableau des signataires pour autoriser le transfert de SOL depuis son compte.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

La signature de transaction est un identifiant unique qui peut être utilisé pour consulter la transaction sur Solana Explorer.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");

Créer un token

L'exemple ci-dessous crée un nouveau token sur Solana en utilisant le Token Extensions Program. Cela nécessite deux instructions :

  1. Invoquer le System Program pour créer un nouveau compte.
  2. Invoquer le Token Extensions Program pour initialiser ce compte en tant que Mint.
Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
// Fund the wallet with SOL
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
// Generate keypair to use as address of mint account
const mint = new Keypair();
// Calculate lamports required for rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);
// Instruction to create new account with space for new mint account
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});
// Instruction to initialize mint account
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);
// Build transaction with instructions to create new account and initialize mint account
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet, // payer
mint // mint address keypair
]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const mintData = await getMint(
connection,
mint.publicKey,
"confirmed",
TOKEN_2022_PROGRAM_ID
);
);
Console
Click to execute the code.

La création d'un token nécessite l'utilisation des bibliothèques @solana/web3.js et @solana/spl-token. Le code dans l'exemple ci-dessous va :

  • Créer une connexion
  • Générer un keypair pour payer la transaction
  • Demander un airdrop pour financer le keypair
Connection & wallet setup
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Générer un keypair pour le mint account. La clé publique sera utilisée comme adresse du mint account.

Mint keypair
const mint = new Keypair();

Calculer le minimum de lamports requis pour un mint account. La fonction getMinimumBalanceForRentExemptMint calcule combien de lamports doivent être alloués pour les données sur un mint account.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

La première instruction invoque l'instruction createAccount du System Program pour :

  1. Allouer le nombre d'octets nécessaires pour stocker les données du mint.
  2. Transférer des lamports du portefeuille pour financer le nouveau compte.
  3. Attribuer la propriété du compte au programme Token Extensions.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

La deuxième instruction invoque l'instruction createInitializeMint2Instruction du Token Extensions Program pour initialiser le mint account avec les données suivantes :

  • 2 décimales
  • Portefeuille comme autorité de mint et autorité de gel
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Ajoutez les deux instructions à une seule transaction. Cela garantit que la création du compte et son initialisation se produisent de manière atomique. (Soit les deux instructions réussissent, soit aucune ne réussit.)

Cette approche est courante lors de la construction de transactions Solana complexes, car elle garantit que toutes les instructions s'exécutent ensemble.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Signez et envoyez la transaction. Deux signatures sont requises :

  • Le compte portefeuille signe en tant que payeur pour les frais de transaction et la création du compte
  • Le compte mint signe pour autoriser l'utilisation de son adresse pour le nouveau compte
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

La signature de transaction retournée peut être utilisée pour examiner la transaction sur Solana Explorer.

La création d'un token nécessite l'utilisation des bibliothèques @solana/web3.js et @solana/spl-token. Le code dans l'exemple ci-dessous va :

  • Créer une connexion
  • Générer un keypair pour payer la transaction
  • Demander un airdrop pour financer le keypair
Connection & wallet setup
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Générer un keypair pour le mint account. La clé publique sera utilisée comme adresse du mint account.

Mint keypair
const mint = new Keypair();

Calculer le minimum de lamports requis pour un mint account. La fonction getMinimumBalanceForRentExemptMint calcule combien de lamports doivent être alloués pour les données sur un mint account.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

La première instruction invoque l'instruction createAccount du System Program pour :

  1. Allouer le nombre d'octets nécessaires pour stocker les données du mint.
  2. Transférer des lamports du portefeuille pour financer le nouveau compte.
  3. Attribuer la propriété du compte au programme Token Extensions.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

La deuxième instruction invoque l'instruction createInitializeMint2Instruction du Token Extensions Program pour initialiser le mint account avec les données suivantes :

  • 2 décimales
  • Portefeuille comme autorité de mint et autorité de gel
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Ajoutez les deux instructions à une seule transaction. Cela garantit que la création du compte et son initialisation se produisent de manière atomique. (Soit les deux instructions réussissent, soit aucune ne réussit.)

Cette approche est courante lors de la construction de transactions Solana complexes, car elle garantit que toutes les instructions s'exécutent ensemble.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Signez et envoyez la transaction. Deux signatures sont requises :

  • Le compte portefeuille signe en tant que payeur pour les frais de transaction et la création du compte
  • Le compte mint signe pour autoriser l'utilisation de son adresse pour le nouveau compte
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

La signature de transaction retournée peut être utilisée pour examiner la transaction sur Solana Explorer.

Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Is this page helpful?

Table des matières

Modifier la page

Géré par

© 2025 Fondation Solana.
Tous droits réservés.
Restez connecté
Écrire sur le réseau | Solana