Publication
Partagez vos connaissances.
Existe-t-il un moyen de fusionner des pièces et de les diviser en une seule transaction à l'aide du sui sdk ?
Nous pouvons utiliser CoinWithBalance intent L'intention CoinWithBalance gère toutes les opérations, y compris le fractionnement et la fusion de pièces. Cela signifie que vous n'avez pas toujours besoin de mapper manuellement l'ID de l'objet, de le fusionner, puis de le scinder : CoinWithBalance s'occupe de tout automatiquement.
import { coinWithBalance } from "@mysten/sui/transactions";
const coin = coinWithBalance({
balance: 1000000000,
type: "0x9f992cc2430a1f442ca7a5ca7638169f5d5c00e0ebc3977a65e9ac6e497fe5ef::wal::WAL",
});
- Sui
Réponses
2utiliser CoinWithBalance intent L'intention CoinWithBalance gère toutes les opérations, y compris le fractionnement et la fusion de pièces. Cela signifie que vous n'avez pas toujours besoin de mapper manuellement l'ID de l'objet, de le fusionner, puis de le scinder : CoinWithBalance s'occupe de tout automatiquement.
Oui, vous pouvezfusionner et diviser des pièces dans le cadre d'une même transactionà l'aide du SDK Sui en créant un TransactionBlock
qui regroupe les deux actions avant de les soumettre. Ceci est utile lorsque vous souhaitez consolider vos jetons, puis en extraire une quantité spécifique, le tout en une seule opération atomique. Sui vous permet d'enchaîner plusieurs actions dans un seul bloc de transactions, et tant que vous gérez correctement les références, cela fonctionne parfaitement.
@mysten/sui.js
Voici un exempleTypeScriptutilisant le SDK :
import { TransactionBlock } from '@mysten/sui.js/transactions';
import { SuiClient } from '@mysten/sui.js/client';
// Assume you already have your SuiClient and signer configured
const client = new SuiClient({ url: 'https://fullnode.mainnet.sui.io' });
const txb = new TransactionBlock();
// Your coin object IDs
const coin1 = '0xabc...';
const coin2 = '0xdef...';
// Step 1: Merge two coins
const merged = txb.mergeCoins(
txb.object(coin1), // target coin
[txb.object(coin2)] // coins to merge into target
);
// Step 2: Split the merged coin into a specific amount
const [splitCoin] = txb.splitCoins(merged, [txb.pure(1000000)]); // amount in MIST (1 SUI = 1e9 MIST)
// (Optional) You can now use `splitCoin` for a transfer or any other action
// Send the transaction
const result = await client.signAndExecuteTransactionBlock({
transactionBlock: txb,
signer: yourSigner,
options: { showEffects: true },
});
console.log('Tx result:', result);
Dans ce code :
mergeCoins
combinecoin2``coin1
et renvoie une référence à la pièce fusionnée.splitCoins
utilise cette pièce fusionnée pour extraire exactement 1 000 000 MIST (c'est-à-dire 0,001 SUI).- Vous pouvez ensuite utiliser le résultat du fractionnement (par exemple
splitCoin
) pour transférer ou financer une autre opération.
Cette méthode est efficace car toute la gestion des pièces s'effectue en une seule transaction, ce qui réduit la consommation de gaz et simplifie la logique.
Pour en savoir plus et voir d'autres exemples, consultez la documentation du SDK Sui : https://docs.sui.io/build/sdk.
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gagne ta part de 1000 Sui
Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.
- Pourquoi BCS exige-t-il un ordre de champs exact pour la désérialisation alors que les structures Move ont des champs nommés ?53
- « Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs43
- Échec de la transaction Sui : objets réservés pour une autre transaction25
- Comment les contraintes de capacité interagissent-elles avec les champs dynamiques dans des collections hétérogènes ?05