Sui.

Bài viết

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

MoonBags.
Jul 25, 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 mã của cơ sở mã di chuyển 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
1
4
Chia sẻ
Bình luận
.

Câu trả lời

4
Owen.
Owen4662
Jul 30 2025, 17:07

process_categories``categoriesĐể gọi [0, 1]hàm từ ứng dụng Node.js bằng SDK Sui TypeScript, hãy chuyển đối số dưới Adạng một mảng số tương ứng với các biến thể enum (ví dụ: Bfor,). Move vector<Category>sẽ tự động giải mã các giá trị số thành các biến thể enum chính xác. Sử dụng transactionđối tượng trong SDK để xây dựng cuộc gọi:

const tx = new Transaction();
tx.moveCall({
  target: `${packageId}::module_name::process_categories`,
  arguments: [tx.pure([0, 1])], // e.g., Category::A, Category::B
});

Đảm bảo enum được xác định trong mô-đun Move của bạn và gói được tham chiếu chính xác.

8
Bình luận
.
Paul.
Paul4340
Jul 31 2025, 15:05

Để gọi process_categorieshàm từ ứng dụng Node.js của bạn bằng Sui TypeScript SDK, đây là những gì bạn cần làm:

1.** Cài đặt Sui SDK**

Trước tiên, hãy đảm bảo rằng bạn đã cài đặt Sui SDK trong dự án của mình:

npm install @mysten/sui.js

2.** Thiết lập kết nối**

Tiếp theo, bạn sẽ cần kết nối với mạng Sui. Điều này được thực hiện với JsonRpcProviderviệc có quyền truy cập vào blockchain.

import { JsonRpcProvider, RawSigner, Ed25519Keypair } from '@mysten/sui.js';

const provider = new JsonRpcProvider('https://fullnode.devnet.sui.io:5001'); // Change the URL if you're using Testnet/Mainnet
const keypair = Ed25519Keypair.fromFile('path/to/your/secret.key'); // Path to your private key
const signer = new RawSigner(keypair, provider);

3.** Tạo vectơ danh mục**

Hàm bạn đang gọi lấy một vectơ của Categorycác giá trị, vì vậy bạn sẽ cần chuyển nó vào dưới dạng một đối số. Vì bạn đang truyền các giá trị enum như A``B, vàC, bạn sẽ muốn chuẩn bị mảng danh mục.

const categories = ["A", "B", "C"];  // These are the categories you want to pass

4.** Xây dựng và gửi giao dịch**

Bây giờ, bạn sẽ tạo một giao dịch gọi process_categorieshàm của bạn, chuyển các danh mục dưới dạng một đối số. Bạn sẽ sử dụng TransactionBlockđể thiết lập nó.

import { TransactionBlock } from '@mysten/sui.js';

const tx = new TransactionBlock();

// Create the vector of categories as an argument
const categoriesArg = tx.makeMoveVec(categories.map(category => tx.pure(category)));

// Call the Move function, passing the categories
tx.moveCall({
  target: '0xYourPackageAddress::YourModule::process_categories', // Replace with your actual package and module address
  arguments: [categoriesArg],
});

// Sign and execute the transaction
const response = await signer.signAndExecuteTransactionBlock({ transactionBlock: tx });
console.log('Transaction response:', response);

Chuyện gì đang xảy ra:

*** Tạo danh mục**: Bạn đang tạo một vector của các danh mục và dưới dạng A``B``Cmột mảng đơn giản và chuyển đổi chúng thành định dạng mà Sui hiểu. Gọi chức năng di chuyển: Bạn đang yêu cầu Sui gọi process_categoriesbằng vectơ của danh mục. *** Ký giao dịch*: Ký RawSignergiao dịch, sau đó bạn thực hiện giao dịch trên mạng.

Ghi chú chính:

*** Địa chỉ gói**: Thay thế 0xYourPackageAddress::YourModule::process_categoriesbằng địa chỉ thực tế của mô-đun Di chuyển của bạn. *Xác nhận giao dịch: Điều này sẽ gửi giao dịch và bạn sẽ nhận được phản hồi trong bảng điều khiển của mình. Nếu có vấn đề, câu trả lời thường sẽ cho bạn biết điều gì đã xảy ra.

6
Bình luận
.
Arnold.
Arnold3036
Jul 29 2025, 15:13

Để gọi process_categoriestừ Node.js bằng Sui TS SDK, bạn cần: 1.** Sê-ri hóa Categoryvectơ enumbằng cách sử dụng BCS. 2. Xây dựng và thực hiện giao dịch**.

####** Mã ví dụ (Node.js) :**

import { Transaction } from '@mysten/sui.js/transactions';
import { bcs } from '@mysten/sui.js/bcs';

// Define BCS type for the enum (must match Move definition)
bcs.registerEnumType('Category', {
  A: null,
  B: null,
  C: null,
});

const tx = new Transaction();
tx.moveCall({
  target: '0xPACKAGE_ID::module_name::process_categories',
  arguments: [
    tx.pure(bcs.vector(bcs.Category).serialize(['A', 'B', 'C']), // Categories vector
    tx.pure.address('0xYourAddress'), // TxContext (if needed)
  ],
});

// Sign and execute
const signedTx = await wallet.signTransaction(tx);
const result = await client.executeTransaction(signedTx);

###Các bước chính:

  1. A``B``CĐăng ký số BCS: Khớp với enum Move (,,).
  2. bcs.vector()Serialize Vector: Sử dụng cho đối số. 3.** Chức năng di chuyển cuộc gọi**: Chỉ định gói, mô-đun và chức năng.

###Ghi chú:

  • Thay thế 0xPACKAGE_IDmodule_namevới các giá trị thực tế của bạn.
  • Đảm bảo ví (wallet) và client (client) được khởi tạo.
5
Bình luận
.
shamueely.
Jul 26 2025, 18:12

Để gọi process_categorieshàm từ ứng dụng Node.js bằng Sui TypeScript SDK và truyền a dưới vector<Category>dạng đối số, bạn sẽ cần phải sắp xếp các giá trị enum thành định dạng mà Sui Move mong đợi trong quá trình thực thi giao dịch. Trong trường hợp của bạn, Categoryđó là một Move enumvới Acác biến thểB, vàC, được biểu diễn dưới dạng** phân biệt số (0, 1, 2) trong mã hóa BCS. vector<Category>Vì Move mong đợi avector<u8>, bạn sẽ cần phải sắp xếp các giá trị enum thành TransactionBlocka và chuyển chúng vào hàm một cách chính xác bằng cách sử dụng.

Đây là cách bạn có thể làm điều này từ Node.js bằng cách sử dụng@mysten/sui.js:

import { TransactionBlock, SuiClient, getFullnodeUrl } from '@mysten/sui.js';
import { bcs } from '@mysten/bcs';

// Enum mapping: A = 0, B = 1, C = 2
const CategoryEnum = {
  A: 0,
  B: 1,
  C: 2,
};

// Example categories you want to send
const selectedCategories = [CategoryEnum.A, CategoryEnum.B];

// Serialize the enum values into a BCS vector<u8>
const serializedCategories = bcs.vector(bcs.u8()).serialize(selectedCategories).toBytes();

// Build the transaction
const tx = new TransactionBlock();
tx.moveCall({
  target: '0xYourPackage::your_module::process_categories',
  arguments: [tx.pure(serializedCategories, 'vector<u8>')],
});

// Execute the transaction
const client = new SuiClient({ url: getFullnodeUrl('testnet') });
const result = await client.signAndExecuteTransactionBlock({
  signer: yourWalletOrKeypair,
  transactionBlock: tx,
});

console.log('Transaction result:', result);

Mẫu này đảm bảo rằng các giá trị enum của bạn được chuyển dưới dạng mã hóa chính xác vector<Category>từ JavaScript sang Move. Chỉ cần đảm bảo mô-đun Move của bạn được xuất bản trên chuỗi và bạn tham chiếu targetđịa chỉ và tên mô-đun chính xác.

Để tham khảo về Move đối số và chuỗi hóa enum bằng cách sử dụng BCS, hãy xem: [https://docs.sui.io/build/programmable-transactions](https://docs.sui.io/build/programmable-transactions]

2
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.

1186Bài viết3756Câ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 Chín