Sui.

Пост

Поделитесь своими знаниями.

0xduckmove.
Jul 08, 2025
Обсуждение

Есть ли способ объединить монеты и разделить их в одной транзакции с помощью sui sdk?

Мы можем использовать намерение CoinWithBalance. Намерение CoinWithBalance обрабатывает все операции, включая разделение и объединение монет. Это означает, что вам не всегда нужно вручную сопоставлять идентификатор объекта, объединять его, а затем разделять объект — CoinWithBalance позаботится обо всем автоматически.

import { coinWithBalance } from "@mysten/sui/transactions";

 const coin = coinWithBalance({
      balance: 1000000000,
      type: "0x9f992cc2430a1f442ca7a5ca7638169f5d5c00e0ebc3977a65e9ac6e497fe5ef::wal::WAL",
    });



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

Ответы

2
MoonBags.
Jul 21 2025, 08:21

намерение использовать CoinWithBalance Намерение CoinWithBalance обрабатывает все операции, включая разделение и объединение монет. Это означает, что вам не всегда нужно вручную сопоставлять идентификатор объекта, объединять его, а затем разделять объект — CoinWithBalance позаботится обо всем автоматически.

1
Лучший ответ
Комментарии
.
24p30p.
24p30p2046
Jul 9 2025, 05:39

Да, вы можетеобъединять и разделять монеты в одной транзакциис помощью Sui SDK, создав файл, объединяющий оба действия TransactionBlockперед отправкой. Это удобно, если вы хотите консолидировать свои токены, а затем извлечь определенную сумму за одну атомарную операцию. Sui позволяет объединить несколько действий в одном блоке транзакций, и при правильном управлении ссылками все работает без сбоев.

@mysten/sui.jsВот примерTypeScriptс использованием SDK:

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

// Assume you already have your SuiClient and signer configured
const client = new SuiClient({ url: 'https://fullnode.mainnet.sui.io' });
const txb = new TransactionBlock();

// Your coin object IDs
const coin1 = '0xabc...';
const coin2 = '0xdef...';

// Step 1: Merge two coins
const merged = txb.mergeCoins(
  txb.object(coin1), // target coin
  [txb.object(coin2)] // coins to merge into target
);

// Step 2: Split the merged coin into a specific amount
const [splitCoin] = txb.splitCoins(merged, [txb.pure(1000000)]); // amount in MIST (1 SUI = 1e9 MIST)

// (Optional) You can now use `splitCoin` for a transfer or any other action

// Send the transaction
const result = await client.signAndExecuteTransactionBlock({
  transactionBlock: txb,
  signer: yourSigner,
  options: { showEffects: true },
});
console.log('Tx result:', result);

В этом коде:

  • mergeCoinsобъединяется coin2в coin1объединенную монету и возвращает ссылку на нее.
  • splitCoinsиспользует эту объединенную монету для извлечения ровно 1 000 000 MIST (т.е. 0,001 SUI).
  • Затем вы можете использовать результат сплита (напримерsplitCoin) для перевода или финансирования другой операции.

Этот метод эффективен, поскольку управление монетами происходит за одну транзакцию, что снижает потребление газа и упрощает логику.

Чтобы узнать больше и увидеть дополнительные примеры, ознакомьтесь с документацией Sui SDK: https://docs.sui.io/build/sdk.

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

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

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

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

613Посты1608Ответы
Sui.X.Peera.

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

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

Кампания вознагражденийИюль