Publication
Partagez vos connaissances.
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
Réponses
4process_categories``categories``[0, 1]
Pour appeler la A
fonction depuis une application Node.js à l'aide du SDK Sui TypeScript, transmettez l'B
argument 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'transaction
objet 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é.
Pour appeler la process_categories
fonction 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 JsonRpcProvider
pour 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 Category
valeurs, 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_categories
fonction, en passant les catégories en argument. Vous allez l'utiliser TransactionBlock
pour 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 C
simple tableau et vous les convertissez dans un format que Sui comprend.
*Appel de la fonction Move : vous demandez à Sui d'appeler process_categories
avec le vecteur des catégories.
*Signature de la transaction : RawSigner
La transaction est signée, puis vous l'exécutez sur le réseau.
Remarques principales :
*Adresse du colis : remplacez 0xYourPackageAddress::YourModule::process_categories
par 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é.
Pour appeler process_categories
depuis Node.js à l'aide du SDK Sui TS, vous devez :
1.Sérialisez le Category
vecteur 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 :
A``B``C
Enregistrez l'énumération BCS : faites correspondre l'énumération Move (,,).bcs.vector()
Serialize Vector : à utiliser pour l'argument. 3.Call Move Function : spécifiez le package, le module et la fonction.
###Remarques :
- Remplacez
0xPACKAGE_ID
etmodule_name
par vos valeurs réelles. - Assurez-vous que le portefeuille (
wallet
) et le client (client
) sont initialisés.
Pour appeler la process_categories
fonction 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, Category
il s'agit d'un Move enum
avec 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 TransactionBlock
et 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 target
adresse 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
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 ?65
- Comment maximiser la détention de profits SUI : Sui Staking contre Liquid Staking514
- « Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs55
- Erreur Sui Move - Impossible de traiter la transaction Aucune pièce de gaz valide n'a été trouvée pour la transaction417
- Échec de la transaction Sui : objets réservés pour une autre transaction49