Sui.

Bài viết

Chia sẻ kiến thức của bạn.

harry phan.
Jul 15, 2025
Hỏi đáp Chuyên Gia

Làm cách nào tôi có thể gọi từ ứng dụng node js bằng cách sử dụng SUI TS SDK

Đây là một đoạn trích của một động thái của Sui

public enum Category has copy, drop, store {
        A,
        B,
        C
    }
public entry fun process_categories(categories: vector<Category>, ctx: &mut TxContext)

Làm cách nào tôi có thể gọi từ ứng dụng node js bằng SUI TS SDK, để gọi hàm process_category, cụ thể gửi danh mục dưới dạng đối số?

  • Sui
0
1
Chia sẻ
Bình luận
.

Câu trả lời

1
24p30p.
Jul 15 2025, 07:22

Để gọi process_categorieshàm của bạn từ ứng dụngNode.jssử dụngSui TypeScript SDK, bạn cần truyền đối số dưới dạng vectơ của các giá trị enum ở định dạng tuân thủ categoriesMove-tuân thủ. Dưới đây là cách làm điều đó đúng cách bằng cách sử dụng SDK:


✅ Ví dụ đầy đủ sử dụng 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);
})();

🔎 Mẹo trong thế giới thực

Vì các enum là * các kiểu có cấu trúc tùy chỉnh*, bạn cần mã hóa chúng bằng định dạngBCS (Binary Canonical Serialization) của Sui. Bạn không thể chỉ truyền ["A", "B"]trực tiếp - bạn phải nối tiếp chúng một cách chính xác để Move có thể giải thích các giá trị.


📘 Đọc thêm

Để biết thêm về mã hóa BCS trong SDK Sui: [https://docs.sui.io/build/typescript-sdk/advanced-usage#bcs-serialization](https://docs.sui.io/build/typescript-sdk/advanced-usage#bcs-serialization]

Và trên Move kiểu và chức năng gọi: [https://docs.sui.io/build/typescript-sdk/dev-guide](https://docs.sui.io/build/typescript-sdk/dev-guide]


0
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.

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

420Bài viết611Câu trả lời
Sui.X.Peera.

Kiếm phần của bạn từ 1000 Sui

Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

Chiến dịch phần thưởngTháng Bảy