Publication
Partagez vos connaissances.
Comment puis-je appeler depuis une application node js à l'aide du SDK SUI TS
Voici un extrait d'un mouvement de Sui
public enum Category has copy, drop, store {
A,
B,
C
}
public entry fun process_categories(categories: vector<Category>, ctx: &mut TxContext)
Comment puis-je appeler depuis une application node js à l'aide du SDK SUI TS, pour appeler la fonction process_categories, en particulier envoyer des catégories en argument ?
- Sui
Réponses
1Pour appeler votre process_categories
fonction depuis uneapplication Node.jsà l'aide duSDK Sui TypeScript, vous devez transmettre l'categories
argument sous forme de vecteur de valeurs d'énumération dans un format compatible MOVE. Voici comment procéder correctement à l'aide du SDK :
✅ Exemple complet utilisant le SDK Sui TS
import { SuiClient, TransactionBlock } from "@mysten/sui.js/client";
import { Ed25519Keypair } from "@mysten/sui.js/keypairs";
import { fromB64 } from "@mysten/bcs";
// Setup your client and keypair
const keypair = Ed25519Keypair.deriveKeypair("your mnemonic or private key");
const suiClient = new SuiClient({ url: "https://fullnode.devnet.sui.io" });
// Build transaction
const tx = new TransactionBlock();
// Define enum variants
const categories = ["A", "B", "C"]; // example Move enum values
// Encode the enum values using bcs
const bcs = tx.bcs;
const CategoryEnum = bcs.enum("Category", {
A: null,
B: null,
C: null,
});
// Register Category type
bcs.registerEnumType("Category", {
A: null,
B: null,
C: null,
});
// Encode enum vector
const encoded = bcs.vector(CategoryEnum).serialize(categories.map((cat) => ({ [cat]: null }))).toBase64();
// Call your move function with serialized vector
tx.moveCall({
target: "0xYourPackage::YourModule::process_categories",
arguments: [
tx.pure(encoded, "vector<Category>"),
],
});
// Sign and execute
(async () => {
const result = await suiClient.signAndExecuteTransactionBlock({
signer: keypair,
transactionBlock: tx,
options: { showEffects: true },
});
console.log("Transaction Result:", result);
})();
🔎 Astuce du monde réel
Étant donné que les énumérations sont des types structurés personnalisés, vous devez les encoder à l'aide du formatBCS (Binary Canonical Serialization) de Sui. Vous ne pouvez pas simplement les transmettre ["A", "B"]
directement, vous devez les sérialiser correctement pour que Move puisse interpréter les valeurs.
📘 En savoir plus
Pour en savoir plus sur l'encodage BCS dans le SDK Sui : https://docs.sui.io/build/typescript-sdk/advanced-usage#bcs-serialization
Et lors des types Move et des appels de fonctions : https://docs.sui.io/build/typescript-sdk/dev-guide
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