Publicación
Comparte tu conocimiento.
¿Cómo puedo llamar desde una aplicación node js usando SUI TS SDK?
Aquí hay un fragmento de un movimiento de Sui
public enum Category has copy, drop, store {
A,
B,
C
}
public entry fun process_categories(categories: vector<Category>, ctx: &mut TxContext)
¿Cómo puedo llamar desde una aplicación node js usando SUI TS SDK para llamar a la función process_categories y enviar categorías específicamente como argumento?
- Sui
Respuestas
1Para llamar a tu process_categories
función desde una aplicaciónNode.jscon elSui TypeScript, debes pasar el categories
argumento como un vector de valores de enumeración en un formato compatible con Move. A continuación, te explicamos cómo hacerlo correctamente con el SDK:
✅ Ejemplo completo con Sui TS SDK
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);
})();
🔎 Consejo para el mundo real
Como las enumeraciones son tipos estructurados personalizados, debes codificarlas usando el formatoBCS (serialización canónica binaria) de Sui. No puedes simplemente pasarlos ["A", "B"]
directamente, tienes que serializarlos correctamente para que Move pueda interpretar los valores.
📘 Leer más
Para obtener más información sobre la codificación BCS en el SDK de Sui: https://docs.sui.io/build/typescript-sdk/advanced-usage#bcs-serialization
Y on Move escribe y llama a funciones: https://docs.sui.io/build/typescript-sdk/dev-guide
Sabes la respuesta?
Inicie sesión y compártalo.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.
- ¿Por qué BCS requiere un orden de campo exacto para la deserialización cuando las estructuras Move tienen campos con nombre?53
- «Errores de verificación de múltiples fuentes» en las publicaciones del módulo Sui Move: resolución automática de errores43
- Fallo en la transacción Sui: objetos reservados para otra transacción25
- ¿Cómo interactúan las restricciones de capacidad con los campos dinámicos en colecciones heterogéneas?05