Sui.

Допис

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

MoonBags.
Jul 25, 2025
Питання та відповіді експертів

Як я можу зателефонувати з програми node js за допомогою SUI TS SDK?

Ось фрагмент кодової бази Sui move

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
1
4
Поділитися
Коментарі
.

Відповіді

4
Owen.
Owen4662
Jul 30 2025, 17:07

process_categories``categoriesЩоб викликати [0, 1]функцію з програми Node.js за допомогою SDK Sui TypeScript, передайте Aаргумент у вигляді масиву чисел, що відповідають варіантам enum (наприклад, Bfor,). Функція «vector<Category>Переміщення» автоматично десеріалізує числові значення у правильні варіанти енуму. Використовуйте transactionоб'єкт у SDK для побудови виклику:

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

Переконайтеся, що у вашому модулі Move визначено enum, і що пакунок правильно посилається.

8
Коментарі
.
Paul.
Paul4340
Jul 31 2025, 15:05

Щоб викликати process_categoriesфункцію з вашої програми Node.js за допомогою SDK Sui TypeScript, ось що вам потрібно зробити:

1.Встановіть SDK Sui

По-перше, переконайтеся, що у вашому проекті встановлено SDK Sui:

npm install @mysten/sui.js

2.Налаштування з'єднання

Далі вам потрібно буде підключитися до мережі Sui. Це робиться з метою JsonRpcProviderотримання доступу до блокчейну.

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.Створіть вектор категорії

Функція, яку ви викликаєте, приймає вектор знач Categoryень, тому вам потрібно буде передати це як аргумент. Оскільки ви передаєте значення enum, як- Aо Bт, іC, вам потрібно підготувати масив категорій.

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

4.Створіть та надішліть транзакцію

Тепер ви створите транзакцію, яка викликає вашу process_categoriesфункцію, передаючи категорії як аргумент. Ви будете використовувати, TransactionBlockщоб налаштувати його.

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);

Що відбувається:

*Створення категорій: Ви створюєте вектор категорійA, Bі Cяк простий масив і перетворюєте їх у формат, який Sui розуміє. *Виклик функції переміщення: Ви кажете Sui телефонувати process_categoriesз вектором категорій. *Підписання транзакції: Підпи RawSignerсує транзакцію, потім ви виконуєте її в мережі.

Ключові примітки:

*Адреса пакету: Замініть 0xYourPackageAddress::YourModule::process_categoriesфактичною адресою вашого модуля Move. *Підтвердження транзакції: Це має надіслати транзакцію, і ви отримаєте відповідь на свою консоль. Якщо є проблема, відповідь зазвичай повідомить вам, що пішло не так.

6
Коментарі
.
Arnold.
Arnold3036
Jul 29 2025, 15:13

Щоб викликати process_categoriesз Node.js за допомогою SDK Sui TS, потрібно: 1.Серіалізуйте вектор Categoryенумза допомогою BCS. 2.Створіть та виконайте транзакцію.

####Приклад коду (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);

###Ключові кроки:

  1. A``B``CРеєстрація номера BCS: Узгоджуйте значення переміщення (,,).
  2. bcs.vector()Серіалізуйте вектор: Використовуйте для аргументу. 3.Функція переміщення виклику: Вкажіть пакет, модуль та функцію.

###Примітки:

  • Замініть 0xPACKAGE_IDі module_nameз вашими фактичними значеннями.
  • Переконайтеся, що гаманець (wallet) та клієнт (client) ініціалізовані.
5
Коментарі
.
shamueely.
Jul 26 2025, 18:12

Щоб викликати process_categoriesфункцію з програми Node.js за допомогою SDK Sui TypeScript і передати a vector<Category>як аргумент, вам потрібно буде серіалізувати значення enum у форматі, який Sui Move очікує під час виконання транзакції. У вашому випадку Categoryце переміщення enumз варіантами, A``BіC, які представлені у вигляді числовихдискримінаційних(0, 1, 2) у кодуванні BCS. vector<Category>Оскільки Move очікує avector<u8>, вам потрібно буде серіалізувати значення enum як a TransactionBlockі правильно передати їх у функцію за допомогою.

Ось як ви можете зробити це з Node.js за допомогою@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);

Цей шаблон гарантує, що ваші значення enum передаються як належним чином закодовані vector<Category>з JavaScript до Move. Просто переконайтеся, що ваш модуль Move опубліковано в ланцюжку і що ви вказуєте правильну targetадресу та назву модуля.

Для довідки про переміщення аргументів та серіалізацію enum за допомогою BCS див.: https://docs.sui.io/build/programmable-transactions

2
Коментарі
.

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

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