Допис
Діліться своїми знаннями.
Як я можу зателефонувати з програми node js за допомогою SUI TS SDK
Ось фрагмент ходу Суї
public enum Category has copy, drop, store {
A,
B,
C
}
public entry fun process_categories(categories: vector<Category>, ctx: &mut TxContext)
Як я можу викликати з програми node js за допомогою SUI TS SDK, щоб викликати функцію process_category, зокрема надіслати категорії як аргумент?
- Sui
Відповіді
1Щоб викликати вашу process_categories
функцію з додаткаNode.jsза допомогоюSui TypeScript SDK, вам потрібно передати categories
аргумент як вектор значень enum у форматі, сумісному з Move-сумісним. Ось як правильно це зробити за допомогою SDK:
✅ Повний приклад використання 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);
})();
🔎 Порада реального світу
Оскільки енуми є * користувацькими структурованими типи*, вам потрібно кодувати їх за допомогою формату SuiBCS (бінарна канонічна серіалізація). Ви не можете просто передати ["A", "B"]
безпосередньо - ви повинні правильно серіалізувати їх, щоб Move міг інтерпретувати значення.
📘 Детальніше
Докладніше про кодування BCS у Sui SDK: https://docs.sui.io/build/typescript-sdk/advanced-usage#bcs-serialization
А на типах Move і виклику функції: https://docs.sui.io/build/typescript-sdk/dev-guide
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?53
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок43
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції25
- Як обмеження здібностей взаємодіють з динамічними полями в гетерогенних колекціях?05