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)

Как вызвать функцию process_categories из приложения node js с помощью SUI TS SDK, в частности отправить категории в качестве аргумента?

  • Sui
1
4
Поделиться
Комментарии
.

Ответы

4
Owen.
Owen4662
Jul 30 2025, 17:07

process_categories``categories``[0, 1]Чтобы вызвать Aфункцию из приложения Node.js с помощью Sui TypeScript SDK, передайте Bаргумент в виде массива чисел, соответствующих вариантам перечисления (например, for,). Функция Move 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 и ссылка на пакет указана правильно.

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

Чтобы вызвать process_categoriesфункцию из приложения Node.js с помощью Sui TypeScript SDK, вам нужно сделать следующее:

1.Установите пакет SDK

Сначала убедитесь, что в вашем проекте установлен Sui SDK:

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значений, поэтому его нужно передать в качестве аргумента. Поскольку вы передаете такие значения перечисления 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. process_categories*Вызов функции Move: вы говорите Суи позвонить, указав вектор категорий. *Подписание транзакции: пользователь RawSignerподписывает транзакцию, затем вы выполняете ее в сети.

Ключевые примечания:

*Адрес пакета: замените его 0xYourPackageAddress::YourModule::process_categoriesфактическим адресом модуля Move. *Подтверждение транзакции: это должно отправить транзакцию, и вы получите ответ в консоли. В случае возникновения проблемы в ответе обычно будет указано, что пошло не так.

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

Чтобы позвонить process_categoriesиз Node.js с помощью Sui TS SDK, вам необходимо: 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 Enum: соответствует перечислению Move (,,).
  2. bcs.vector()Сериализовать вектор: используйте в качестве аргумента. 3.Функция перемещения вызовов: укажите пакет, модуль и функцию.

###Примечания:

  • Замените на 0xPACKAGE_ID``module_nameсвои фактические значения.
  • Убедитесь, что кошелек (wallet) и клиент (client) инициализированы.
5
Комментарии
.
shamueely.
Jul 26 2025, 18:12

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

@mysten/sui.jsВот как это можно сделать из Node.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);

Этот шаблон обеспечивает передачу значений перечисления в правильной кодировке vector<Category>из JavaScript в Move. Просто убедитесь, что ваш модуль Move опубликован в блокчейне и что вы указали правильный targetадрес и имя модуля.

Сведения об аргументах Move и сериализации перечислений с использованием BCS см. в следующих разделах: https://docs.sui.io/build/programmable-transactions

2
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.

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

1186Посты3756Ответы
Sui.X.Peera.

Заработай свою долю из 1000 Sui

Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.

Кампания вознагражденийСентябрь