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 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
Câu trả lời
4process_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 A
dạng một mảng số tương ứng với các biến thể enum (ví dụ: B
for,). 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.
Để gọi process_categories
hà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 JsonRpcProvider
việ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 Category
cá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_categories
hà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``C
mộ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_categories
bằng vectơ của danh mục.
*** Ký giao dịch*: Ký RawSigner
giao 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_categories
bằ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.
Để gọi process_categories
từ Node.js bằng Sui TS SDK, bạn cần:
1.** Sê-ri hóa Category
vectơ 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:
A``B``C
Đăng ký số BCS: Khớp với enum Move (,,).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_ID
vàmodule_name
vớ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.
Để gọi process_categories
hà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 enum
với A
cá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 TransactionBlock
a 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]
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?65
- Cách tối đa hóa lợi nhuận nắm giữ SUI: Sui Staking vs Liquid Staking514
- 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ự động55
- Lỗi Sui Move - Không thể xử lý giao dịch Không tìm thấy đồng xu gas hợp lệ cho giao dịch417
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác49