Пост
Поделитесь своими знаниями.
Как позвонить из приложения node js с помощью SUI TS SDK
Вот фрагмент хода Sui
public enum Category has copy, drop, store {
A,
B,
C
}
public entry fun process_categories(categories: vector<Category>, ctx: &mut TxContext)
Как вызвать функцию process_categories из приложения node js с помощью SUI TS SDK, в частности отправить категории в качестве аргумента?
- Sui
Ответы
1Чтобы вызвать process_categories
функцию из приложенияNode.jsс использованием SDK**Sui TypeScript, вам необходимо передать categories
аргумент в виде вектора значений перечислений в формате, совместимом с Move. Вот как правильно это сделать с помощью SDK:
✅ Полный пример использования 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);
})();
🔎 Советы из реального мира
Поскольку перечисления представляют собой специальные структурированные типы*, их необходимо кодировать в формате 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