Aller au contenu principal

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 :

  1. Signature : vous devez signer cryptographiquement la requête pour prouver la propriété des fonds.
  2. 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/sui pour signer la transaction.

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

Terminal
npm install @mysten/sui
avertissement

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.

transfer.js
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}`);
astuce

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 :

transfer.js
// 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.

Cycle de vie de la transaction PTB
┌─────────────────────────┐ ┌─────────────────────────┐ ┌───────────────────────────┐
│ 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 :

  1. Estime le gas : calcule la complexité de calcul et définit le budget de gas requis.
  2. Signe : applique votre signature keypair pour approuver le changement d'état.
  3. Soumet : transmet la transaction signée via le fullnode RPC au réseau.
transfer.js
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) :

Sortie du terminal
📦 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 :