Sui.

Publication

Partagez vos connaissances.

article banner.
harry phan.
Apr 09, 2025
Article

Guide des transactions Sui : de la configuration à l'exécution et à la vérification

Guide des transactions Sui : de la configuration à l'exécution et à la vérification

Si vous êtes curieux de connaître les détails de l'exécution de transactions sur la blockchain Sui et que vous souhaitez un guide pratique et détaillé qui vous guide à chaque étape.

Dans cet article, nous allons explorer l'ensemble du processus, de la configuration de votre environnement client à la vérification des objets de votre portefeuille, en passant par le calcul des frais de gaz, la signature et l'exécution d'une transaction, et enfin la vérification de ses détails.

Décomposons-le étape par étape :

Qu'est-ce qui rend Sui si spécial ? 🔥

Sui propose une plate-forme hautement optimisée pour les applications décentralisées (DApps) et les contrats intelligents. Son design élégant en matière de gestion des frais de gaz et de logique de transaction en fait un terrain de jeu passionnant pour les développeurs qui cherchent à repousser les limites de la technologie Web3.

N° 2. Pour commencer : configuration de l'environnement et configuration du portefeuille ⚙️

2.1. Configuration de votre environnement client Sui

Avant de vous lancer dans les transactions, assurez-vous que votre client Sui est correctement configuré. Sui prend en charge plusieurs réseaux (devnet, mainnet, testnet), et vous pouvez vérifier lequel est actif à l'aide de la commande ci-dessous :

➜ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet  │ https://fullnode.devnet.sui.io:443  │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │        │
│ testnet │ https://fullnode.testnet.sui.io:443 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

Cela confirme que vous êtes connecté au réseau de test. Être sur le bon réseau est la première étape d'une transaction réussie.

N° 2.2. Vérifier votre portefeuille actif

Vérifiez ensuite l'adresse de votre portefeuille actif. Ceci est crucial car chaque transaction est liée à l'identité de votre portefeuille :

➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73

N° 2.3. Interroger des objets possédés

À l'aide de l'API Suix_GetOwnedObjects, vous pouvez récupérer des informations sur les objets (comme les pièces) que vous possédez sur la blockchain. Cette commande vous permet de vérifier le solde de votre compte et les actifs disponibles pour les transactions :

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "suix_getOwnedObjects",
  "params": [
      "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
      {
          "filter": {
              "MatchAll": [
                  {
                      "StructType": "0x2::coin::Coin<0x2::sui::SUI>"
                  }
              ]
          },
          "options": {
              "showType": true,
              "showOwner": true,
              "showPreviousTransaction": true
          }
      }
  ]
}

Cette étape est essentielle pour vérifier que votre portefeuille contient les pièces nécessaires (dans ce cas, des pièces SUI) avant de tenter toute transaction.

N° 3. Calcul du gaz : budgétisation des coûts de transaction 💸

Le gaz est le carburant qui alimente les transactions blockchain. Il est essentiel de comprendre à la fois le prix du gaz et le budget du gaz pour éviter les échecs de transaction.

3.1. Connaître le prix de l'essence

Le prix actuel du gaz peut être récupéré à l'aide de l'appel d'API Suix_GetReferenceGasPrice :

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "suix_getReferenceGasPrice",
  "params": []
}

Si l'API renvoie « 1000 », cela signifie que chaque unité de gaz coûte 1 000 MIST. N'oubliez pas que 1 SUI est égal à 10^9 MIST, donc même de petits nombres dans MIST peuvent s'additionner lors de la budgétisation.

3.2. Établissement du budget du gaz

Votre budget d'essence est la quantité maximale d'essence (en MIST) que vous êtes prêt à dépenser. Pour notre exemple, supposons que votre budget de gaz soit de 4964 000 MIST. Le coût total d'une transaction est généralement calculé comme suit :

Coût total = coût de calcul + coût de stockage — Rabais d'entreposage

Par exemple : • Coût de calcul : 1 000 000 MIST • Coût de stockage : 2 964 000 MIST • Rabais sur l'entreposage : 978 120 MIST

Ainsi, le coût net devient 1 000 000 + 2 964 000 − 978 120 = 2 985 880 MIST.

La définition précise de votre budget d'essence garantit que votre transaction dispose de suffisamment de fonds pour être exécutée avec succès.

N° 4. Confectionner la transaction : une mince affaire de confiance 🔧

Avant d'envoyer une transaction en direct, il est préférable de procéder à un « essai à sec » pour détecter tout problème potentiel. Cela vous permet de valider la logique de transaction sans dépenser d'essence.

#4.1. Création d'une transaction à sec

Voici un exemple de fonction TypeScript qui montre comment préparer et exécuter une transaction à vide. Ce code explique comment fractionner les pièces et préparer les opérations de transfert :

export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
  const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
  const keypair = Ed25519Keypair.fromSecretKey(privateKey);
  const tx = newTransaction();

  // Configure gas payment, price, and sender
  tx.setGasPayment(coinRefs);
  tx.setGasPrice(gasPrice);
  tx.setSender(keypair.toSuiAddress());

  // Split coins based on each recipient's amount
  const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
  recipients.forEach((transfer, index) => {
    tx.transferObjects([coins[index]], transfer.to);
  });

  // Build and sign the transaction with the client
  const client = newSuiClient({ url: getFullnodeUrl(network) });
  const bytes = await tx.build({ client });
  const { signature } = await keypair.signTransaction(bytes);
  await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });

  return JSON.stringify([toBase64(bytes), signature]);
};

Cette étape préliminaire est cruciale pour s'assurer que chaque détail est correct avant d'engager des fonds réels.

N° 5. Signature et exécution de la transaction : tout mettre en place ✍️

Après un essai réussi, l'étape suivante consiste à signer et à envoyer votre transaction sur la blockchain.

#5.1. Signature de la transaction

Vous trouverez ci-dessous un exemple de fonction affiné qui signe la transaction avec le budget de gaz spécifié :

const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
  const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
  const keypair = Ed25519Keypair.fromSecretKey(privateKey);
  const tx = newTransaction();

  // Set up gas parameters, including the gas budget
  tx.setGasPayment(coinRefs);
  tx.setGasPrice(gasPrice);
  tx.setGasBudget(gasBudget);
  tx.setSender(keypair.toSuiAddress());

  // Split coins for each recipient
  const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
  recipients.forEach((transfer, index) => {
    tx.transferObjects([coins[index]], transfer.to);
  });

  // Build the transaction and sign it
  const client = newSuiClient({ url: getFullnodeUrl(network) });
  const bytes = await tx.build({ client });
  const { signature } = await keypair.signTransaction(bytes);
  await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });

  return JSON.stringify([toBase64(bytes), signature]);
};

Cette fonction intègre tous les paramètres nécessaires, y compris les détails du gaz et les destinataires, garantissant que votre transaction est signée en toute sécurité et prête à être exécutée.

5.2. Exécution de la transaction

Une fois signée, la transaction est envoyée à la blockchain à l'aide du point de terminaison de l'API SUI_ExecuteTransactionBlock :

curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_executeTransactionBlock",
  "params": [
    "<base64-encoded-transaction>",
    ["<signature>"],
    {
      "showInput": true,
      "showRawInput": true,
      "showEffects": true,
      "showEvents": true,
      "showObjectChanges": true,
      "showBalanceChanges": true
    },
    "WaitForLocalExecution"
  ]
}'

Cet appel renvoie une réponse JSON détaillée contenant des informations telles que le résumé de la transaction, la consommation de gaz, les modifications apportées aux objets et les mises à jour du solde.

N° 6. Vérifier votre transaction : Cross-Check Everything 🔍

Après avoir exécuté la transaction, il est essentiel de vérifier que tout s'est déroulé comme prévu.

N° 6.1. Vérification du navigateur

Vous pouvez vérifier votre transaction sur un explorateur de blockchain comme Suivision Testnet Explorer. L'explorateur affiche tous les détails des transactions dans un format visuel intuitif, ce qui permet de détecter plus facilement les problèmes.

N° 6.2. Vérification de la ligne de commande

Pour un audit plus détaillé, utilisez la ligne de commande :

sui client tx-block -- 3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD

Cette commande fournit une ventilation complète de la transaction, y compris les détails de l'expéditeur, le paiement du gaz, les modifications apportées aux objets et l'état d'exécution.

Numéro 7. Analyse de la réponse JSON : comprendre les couches d'une transaction

Décompressons la réponse JSON que vous recevez après avoir exécuté votre transaction :

N° 7.1. Vue d'ensemble des transactions

  • jsonrpc & id : champs standard pour le protocole JSON-RPC.
  • condensé : le hachage unique de la transaction (par exemple, « 3FoPudy5QZKM1KLRFZcDi8LYNADyM9J15NavxZuH6nyd »), qui est utilisé pour le suivi.
  • TimestampMS et point de contrôle : fournissez un contexte indiquant quand la transaction a été exécutée et le point de contrôle de la blockchain à ce moment-là.

N° 7.2. Contenu de la transaction

  • Données sur l'expéditeur et le gaz : incluent l'adresse de l'expéditeur et toutes les configurations liées au gaz (paiement, prix, budget).
  • Opérations (transactions) : la logique des transactions comprend des opérations telles que :
  • SplitCoins : cassez une pièce de gaz en petits morceaux.
  • TransferObjects : déplacement de segments de pièces vers les adresses de destinataire spécifiées.
  • Signatures : les signatures cryptographiques (encodées en Base64) garantissent l'authenticité de la transaction.

N° 7.3. Effets d'exécution

  • État : le statut « Succès » confirme que la transaction a été traitée sans erreur.
  • Consommation de gaz : détaille les coûts de calcul et de stockage ainsi que les remises applicables.
  • Modifications d'objets : indique quels objets ont été modifiés, créés ou mis à jour à la suite de la transaction.
  • Dépendances : répertorie les hachages de transactions associés dont dépend cette transaction.

Cette ventilation granulaire est essentielle pour le débogage et l'amélioration des performances de votre DApp.

N° 8. Informations pratiques pour les développeurs : conseils et points à retenir

Comprendre chaque étape de ce processus vous donne les compétences nécessaires pour créer des applications Web3 sécurisées et efficaces sur Sui. Ces informations vous aident non seulement à résoudre les problèmes, mais vous permettent également d'innover en toute confiance au sein de l'écosystème Sui.

  • Sui
  • SDKs and Developer Tools
  • Transaction Processing
3
Partager
Commentaires
.
Nous utilisons des cookies pour vous assurer la meilleure expérience sur notre site Web.
Plus d'infos