Sui.

Publication

Partagez vos connaissances.

MoonBags.
Jul 25, 2025
Questions et Réponses avec des Experts

Comment puis-je appeler depuis une application node js à l'aide du SDK SUI TS ?

Voici un extrait d'une base de code Sui Move

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 tant qu'argument ?

  • Sui
1
4
Partager
Commentaires
.

Réponses

4
Owen.
Owen4662
Jul 30 2025, 17:07

process_categories``categories``[0, 1]Pour appeler la Afonction depuis une application Node.js à l'aide du SDK Sui TypeScript, transmettez l'Bargument sous la forme d'un tableau de nombres correspondant aux variantes d'énumération (par exemple, for,). Le Move vector<Category>désérialisera automatiquement les valeurs numériques dans les variantes d'énumération correctes. Utilisez l'transactionobjet du SDK pour créer l'appel :

const tx = new Transaction();
tx.moveCall({
  target: `${packageId}::module_name::process_categories`,
  arguments: [tx.pure([0, 1])], // e.g., Category::A, Category::B
});

Assurez-vous que l'énumération est définie dans votre module Move et que le package est correctement référencé.

8
Commentaires
.
Paul.
Paul4340
Jul 31 2025, 15:05

Pour appeler la process_categoriesfonction depuis votre application Node.js à l'aide du SDK Sui TypeScript, procédez comme suit :

1.Installez le SDK Sui

Tout d'abord, assurez-vous que le SDK Sui est installé dans votre projet :

npm install @mysten/sui.js

###2.Configurer la connexion

Ensuite, vous devez vous connecter au réseau Sui. Cela se fait avec le JsonRpcProviderpour accéder à la blockchain.

import { JsonRpcProvider, RawSigner, Ed25519Keypair } from '@mysten/sui.js';

const provider = new JsonRpcProvider('https://fullnode.devnet.sui.io:5001'); // Change the URL if you're using Testnet/Mainnet
const keypair = Ed25519Keypair.fromFile('path/to/your/secret.key'); // Path to your private key
const signer = new RawSigner(keypair, provider);

3.Créez le vecteur des catégories

La fonction que vous appelez prend un vecteur de Categoryvaleurs, vous devez donc le transmettre en argument. Puisque vous transmettez des valeurs d'énumération telles que A``B, etC, vous devez préparer le tableau des catégories.

const categories = ["A", "B", "C"];  // These are the categories you want to pass

##4.Créez et envoyez la transaction

Vous allez maintenant créer une transaction qui appelle votre process_categoriesfonction, en passant les catégories en argument. Vous allez l'utiliser TransactionBlockpour le configurer.

import { TransactionBlock } from '@mysten/sui.js';

const tx = new TransactionBlock();

// Create the vector of categories as an argument
const categoriesArg = tx.makeMoveVec(categories.map(category => tx.pure(category)));

// Call the Move function, passing the categories
tx.moveCall({
  target: '0xYourPackageAddress::YourModule::process_categories', // Replace with your actual package and module address
  arguments: [categoriesArg],
});

// Sign and execute the transaction
const response = await signer.signAndExecuteTransactionBlock({ transactionBlock: tx });
console.log('Transaction response:', response);

Qu'est-ce qui se passe :

*Création de catégories : Vous créez un vecteur des catégories A``B, sous la forme d'un Csimple tableau et vous les convertissez dans un format que Sui comprend. *Appel de la fonction Move : vous demandez à Sui d'appeler process_categoriesavec le vecteur des catégories. *Signature de la transaction : RawSignerLa transaction est signée, puis vous l'exécutez sur le réseau.

Remarques principales :

*Adresse du colis : remplacez 0xYourPackageAddress::YourModule::process_categoriespar l'adresse réelle de votre module Move. *Confirmation de la transaction : Cela devrait envoyer la transaction et vous recevrez une réponse dans votre console. En cas de problème, la réponse vous indiquera généralement ce qui n'a pas fonctionné.

6
Commentaires
.
Arnold.
Arnold3036
Jul 29 2025, 15:13

Pour appeler process_categoriesdepuis Node.js à l'aide du SDK Sui TS, vous devez : 1.Sérialisez le Categoryvecteur enumà l'aide de BCS. 2.Créez et exécutez la transaction.

####Exemple de code (Node.js) :

import { Transaction } from '@mysten/sui.js/transactions';
import { bcs } from '@mysten/sui.js/bcs';

// Define BCS type for the enum (must match Move definition)
bcs.registerEnumType('Category', {
  A: null,
  B: null,
  C: null,
});

const tx = new Transaction();
tx.moveCall({
  target: '0xPACKAGE_ID::module_name::process_categories',
  arguments: [
    tx.pure(bcs.vector(bcs.Category).serialize(['A', 'B', 'C']), // Categories vector
    tx.pure.address('0xYourAddress'), // TxContext (if needed)
  ],
});

// Sign and execute
const signedTx = await wallet.signTransaction(tx);
const result = await client.executeTransaction(signedTx);

###Étapes clés :

  1. A``B``CEnregistrez l'énumération BCS : faites correspondre l'énumération Move (,,).
  2. bcs.vector()Serialize Vector : à utiliser pour l'argument. 3.Call Move Function : spécifiez le package, le module et la fonction.

###Remarques :

  • Remplacez 0xPACKAGE_IDet module_namepar vos valeurs réelles.
  • Assurez-vous que le portefeuille (wallet) et le client (client) sont initialisés.
5
Commentaires
.
shamueely.
Jul 26 2025, 18:12

Pour appeler la process_categoriesfonction depuis une application Node.js à l'aide du SDK Sui TypeScript et transmettre vector<Category>un comme argument, vous devez sérialiser les valeurs d'énumération dans le format attendu par Sui Move lors de l'exécution de la transaction. Dans votre cas, Categoryil s'agit d'un Move enumavec des variantes A``B,, etC, qui sont représentées sous forme dediscriminantsnumériques (0, 1, 2) en codage BCS. vector<Category>Puisque Move attend avector<u8>, vous devrez sérialiser les valeurs d'énumération sous forme de a TransactionBlocket les transmettre correctement à la fonction à l'aide du.

Voici comment vous pouvez le faire à partir de Node.js en utilisant @mysten/sui.js:

import { TransactionBlock, SuiClient, getFullnodeUrl } from '@mysten/sui.js';
import { bcs } from '@mysten/bcs';

// Enum mapping: A = 0, B = 1, C = 2
const CategoryEnum = {
  A: 0,
  B: 1,
  C: 2,
};

// Example categories you want to send
const selectedCategories = [CategoryEnum.A, CategoryEnum.B];

// Serialize the enum values into a BCS vector<u8>
const serializedCategories = bcs.vector(bcs.u8()).serialize(selectedCategories).toBytes();

// Build the transaction
const tx = new TransactionBlock();
tx.moveCall({
  target: '0xYourPackage::your_module::process_categories',
  arguments: [tx.pure(serializedCategories, 'vector<u8>')],
});

// Execute the transaction
const client = new SuiClient({ url: getFullnodeUrl('testnet') });
const result = await client.signAndExecuteTransactionBlock({
  signer: yourWalletOrKeypair,
  transactionBlock: tx,
});

console.log('Transaction result:', result);

Ce modèle garantit que vos valeurs d'énumération sont transmises correctement codées vector<Category>de JavaScript à Move. Assurez-vous simplement que votre module Move est publié en chaîne et que vous faites référence à la bonne targetadresse et au nom du module.

Pour plus de référence sur les arguments Move et la sérialisation des énumérations à l'aide de BCS, voir : https://docs.sui.io/build/programmable-transactions

2
Commentaires
.

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.

1186Publications3756Réponses
Sui.X.Peera.

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.

Campagne de RécompensesSeptembre