Utilisation d'une opération d'écriture pour envoyer une transaction
Public visé : développeurs prêts à effectuer leur première opération de modification d'état.
Prérequis : un portefeuille approvisionné sur le devnet de Sui et un environnement Node.js de base.
Objectif : écrire un script pour transférer des jetons Sui vers une autre adresse, en comprenant le rôle du gas et des signatures.
Introduction
Dans les tutoriels précédents, vous avez effectué des opérations de lecture en interrogeant le SuiClient pour obtenir des données sans encourir de frais de réseau.
À présent, vous effectuez une opération d'écriture pour transférer des jetons Sui depuis votre portefeuille vers une autre adresse. Étant donné que cela modifie l'état sur la chaîne, deux exigences s'appliquent :
- Signature : vous devez signer cryptographiquement la requête pour prouver la propriété des fonds.
- Gas (frais d'envoi) : vous devez payer des frais en jetons Sui pour rémunérer le réseau pour le traitement de la transaction.
Prérequis
Pour suivre ce tutoriel, vous avez besoin de :
- Un portefeuille approvisionné : une phrase de récupération de 12 mots pour un portefeuille contenant des jetons Sui
devnet. Vous pouvez demander des jetons de test gratuits via le robinet Sui Discord ou directement dans un portefeuille compatible Sui. - Le package de paire de clés Ed25519 :
@mysten/suipour signer la transaction.
Installez le package requis (si ce n'est pas déjà fait) :
npm install @mysten/sui
Dans les applications de production, ne codez jamais en dur votre clé privée ou votre phrase de récupération. Utilisez toujours des variables d'environnement (par exemple, .env). Ce tutoriel utilise une variable en mémoire à des fins de démonstration, mais ne commitez jamais de phrases de récupération privées sur GitHub.
1. Importer les dépendances et configurer le client
Créez un fichier nommé transfer.js. Importez SuiClient pour la communication réseau et Ed25519Keypair pour signer la transaction.
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
import { Transaction } from '@mysten/sui/transactions';
// 1. Se connecter au Devnet
const client = new SuiClient({ url: getFullnodeUrl('devnet') });
// 2. Charger votre portefeuille (l'expéditeur)
// REMPLACEZ CECI par votre phrase mnémonique réelle de 12 mots
const MNEMONIC = "word1 word2 word3 ... word12";
const keypair = Ed25519Keypair.deriveKeypair(MNEMONIC);
const senderAddress = keypair.getPublicKey().toSuiAddress();
console.log(`📦 Adresse de l'expéditeur : ${senderAddress}`);
Avant d'envoyer une transaction, votre adresse d'expéditeur a besoin de jetons de test pour payer le gas. Copiez l'Adresse de l'expéditeur affichée dans votre terminal et demandez des jetons via le canal #devnet-faucet sur le Discord de Sui.
2. Construire la transaction
Sur Sui, vous construisez une Transaction plutôt que d'envoyer des commandes brutes. Considérez cela comme remplir une étiquette d'expédition et emballer des articles dans un colis avant de le sceller.
Utilisez la commande tx.splitCoins pour séparer un montant spécifique de votre pièce de gas principale :
// 3. Définir le destinataire
const RECIPIENT = '0x9999...'; // Remplacez par l'adresse d'un ami ou une adresse de destruction
// 4. Créer le conteneur de transaction
const tx = new Transaction();
// Séparer 1000 MIST (la plus petite unité de SUI) de la pièce de gas
const [coinToSend] = tx.splitCoins(tx.gas, [1000]);
// Transférer la pièce séparée au destinataire
tx.transferObjects([coinToSend], RECIPIENT);
3. Signer et soumettre la transaction
Cette étape calcule et paie le gas avant d'exécuter la transaction sur la chaîne.
┌─────────────────────────┐ ┌─────────────────────────┐ ┌───────────────────────────┐
│ 1. Créer la transaction │ ──► │ 2. Signer par Keypair │ ──► │ 3. Soumettre via SuiClient│
│ (splitCoins, transfer) │ │ (Preuve cryptographique)│ │ (Diffusion sur Devnet) │
└─────────────────────────┘ └─────────────────────────┘ └───────────────────────────┘
Lorsque vous appelez signAndExecuteTransaction, le SuiClient :
- Estime le gas : calcule la complexité de calcul et définit le budget de gas requis.
- Signe : applique votre signature
keypairpour approuver le changement d'état. - Soumet : transmet la transaction signée via le fullnode RPC au réseau.
async function sendTransaction() {
try {
console.log("📝 Signature et soumission de la transaction...");
const result = await client.signAndExecuteTransaction({
signer: keypair,
transaction: tx,
});
console.log("✅ Transaction soumise !");
console.log(`Digest (identifiant de suivi) : ${result.digest}`);
} catch (error) {
console.error("❌ Échec de la transaction :", error);
}
}
sendTransaction();
Comprendre le gas dans cette transaction
Vous n'avez pas besoin de calculer les coûts de gas manuellement.
- Budgétisation automatique : par défaut, le SDK estime le coût du gas pour vous. Il définit un budget suffisant pour l'exécution sans surcoût excessif.
- Source de paiement : le SDK sélectionne automatiquement un objet pièce SUI de votre portefeuille pour régler ces frais. Pour cette raison, réservez toujours une petite quantité de SUI dans votre portefeuille pour couvrir le gas.
Sortie attendue
En cas de succès, le script génère un Transaction Digest (votre identifiant de suivi de transaction) :
📦 Adresse de l'expéditeur : 0x123...
📝 Signature et soumission de la transaction...
✅ Transaction soumise !
Digest (identifiant de suivi) : 5T7x...9B2a
Copiez ce digest et recherchez-le sur Suiscan. L'explorateur affiche l'enregistrement permanent sur la chaîne, y compris la consommation de gas et l'état d'exécution.
Prochaines étapes
Maintenant que vous avez exécuté votre première transaction d'écriture sur la chaîne :
- Consultez Comment récupérer les données d'un objet pour examiner l'objet nouvellement reçu par le destinataire.
- Consultez L'architecture de SuiClient pour le modèle conceptuel des nœuds et employés Sui.
- Explorez la référence de l'API
getObjectpour interroger les effets détaillés des transactions et les schémas d'objets.