Aller au contenu principal

Utilisation de l'opération d'écriture pour envoyer une transaction

Audience: Développeurs prêts à effectuer leur première opération de changement d'état.

Préalables: Un portefeuille Sui Devnet financé et une configuration Node.js de base.

Objectif: Écrire un script pour transférer des jetons Sui à une autre adresse, en comprenant le rôle de l'essence et des signatures.


Introduction

Dans nos précédents tutoriels, nous avons effectué des Opérations de lecture. Nous avons demandé des informations au SuiClient (le greffier), ce qui était gratuit et anonyme.

Maintenant, nous allons effectuer une Opération d'écriture. Nous allons transférer des jetons Sui de votre portefeuille vers une autre adresse. Comme cela modifie l'état de la blockchain, deux nouvelles exigences s'appliquent :

  1. Signature: Vous devez signer cryptographiquement la demande pour prouver que vous possédez les fonds.
  2. Gaz (affranchissement): Vous devez payer des frais en jetons Sui pour dédommager le réseau du traitement de la transaction.

Conditions préalables

Pour ce tutoriel, vous ne pouvez pas utiliser un point de terminaison public aléatoire seul. Vous avez besoin de :

  1. Un portefeuille financé: Une phrase de récupération de 12 mots pour un portefeuille qui possède des jetons Sui Devnet.
  2. La bibliothèque de paires de clés Ed25519: Pour signer la transaction.

Installez le paquet de cryptographie requis (si ce n'est pas déjà fait) :

npm install @mysten/sui
attention

Dans une vraie application, 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). Pour ce tutoriel, nous utiliserons une variable pour simplifier, mais ne confiez pas ce code à GitHub.

Guide étape par étape

Étape 1 : Importer les outils et configurer le client

Créez un fichier nommé transfer.js. Nous avons besoin du SuiClient pour la connexion et de Ed25519Keypair pour agir comme notre "stylo" pour signer.

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)
// REMPLACER CECI par votre phrase mnémonique réelle de 12 mots
const MNEMONIC = "mot1 mot2 mot3 ... mot12";
const keypair = Ed25519Keypair.deriveKeypair(MNEMONIC);
const senderAddress = keypair.getPublicKey().toSuiAddress();

console.log(`📦 Adresse de l'expéditeur : ${senderAddress}`);

Étape 2 : Construire le "paquet" (transaction)

Dans Sui, vous n'envoyez pas de commandes brutes. Vous construisez une Transaction. Imaginez que vous remplissez l'étiquette d'expédition et que vous placez les articles dans la boîte avant de la sceller.

Nous utiliserons la commande tx.splitCoins. Elle dit au réseau : "Prends ma pièce SUI principale, sépare un montant spécifique et prépare-le pour le transfert."

// 3. Définir le destinataire
const RECIPIENT = '0x9999...'; // Remplacez par l'adresse d'un ami ou une adresse de brûlure

// 4. Créer le conteneur de transaction
const tx = new Transaction();

// Diviser 1000 MIST (la plus petite unité de SUI) de la pièce de gaz
const [coinToSend] = tx.splitCoins(tx.gas, [1000]);

// Transférer la pièce divisée au destinataire
tx.transferObjects([coinToSend], RECIPIENT);

Étape 3 : Signer, payer l'affranchissement et expédier

C'est l'étape critique où le Gaz est calculé.

Lorsque vous exécutez le code ci-dessous, le SuiClient :

  1. Estime le gaz: Il regarde votre boîte tx, la pèse (complexité de calcul), et détermine l'affranchissement requis.
  2. Signe: Il utilise votre keypair pour signer cryptographiquement la transaction.
  3. Exécute: Il soumet la transaction signée au réseau.
async function sendTransaction() {
try {
console.log("📝 Signature et soumission de la transaction...");

const result = await client.signAndExecuteTransactionBlock({
signer: keypair,
transactionBlock: tx,
});

console.log("✅ Transaction soumise !");
console.log(`Digest (ID de suivi) : ${result.digest}`);

} catch (error) {
console.error("❌ La transaction a échoué :", error);
}
}

sendTransaction();

Comprendre le gaz dans cette transaction

Vous remarquerez peut-être que nous n'avons pas explicitement fixé de montant pour les frais.

  • Budgétisation automatique: Par défaut, le SDK estime automatiquement le coût du gaz pour vous. Il s'assure que vous ne payez pas trop cher tout en fournissant assez pour que la transaction soit traitée.
  • La source de paiement: Le SDK sélectionne automatiquement un objet pièce Sui de votre portefeuille pour payer ces frais. C'est pourquoi vous ne pouvez pas envoyer tout votre Sui ; vous devez toujours laisser un petit peu derrière pour payer le gaz du transfert lui-même.

Résultat attendu

En cas de succès, vous recevrez un Digest de transaction. C'est votre numéro de suivi.

📦 Adresse de l'expéditeur : 0x123...
📝 Signature et soumission de la transaction...
✅ Transaction soumise !
Digest (ID de suivi) : 5T7x...9B2a

Vous pouvez copier ce Digest et le coller dans un explorateur Sui (comme Suiscan) pour voir l'enregistrement permanent de votre transfert, y compris exactement combien de gaz il a consommé.