Bài viết
Chia sẻ kiến thức của bạn.
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
Câu trả lời
1Để gọi process_categories
hà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ủ categories
Move-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]
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.
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.
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động43
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác25
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?05