Sui.

Допис

Діліться своїми знаннями.

harry phan.
Jul 15, 2025
Питання та відповіді експертів

Як я можу зателефонувати з програми 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
0
1
Поділитися
Коментарі
.

Відповіді

1
24p30p.
Jul 15 2025, 07:22

Щоб викликати вашу 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


0
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

420Пости611Відповіді
Sui.X.Peera.

Зароби свою частку з 1000 Sui

Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

Кампанія винагородЛипень