Пост
Поделитесь своими знаниями.
Есть ли способ объединить монеты и разделить их в одной транзакции с помощью sui sdk?
Мы можем использовать намерение CoinWithBalance. Намерение CoinWithBalance обрабатывает все операции, включая разделение и объединение монет. Это означает, что вам не всегда нужно вручную сопоставлять идентификатор объекта, объединять его, а затем разделять объект — CoinWithBalance позаботится обо всем автоматически.
import { coinWithBalance } from "@mysten/sui/transactions";
const coin = coinWithBalance({
balance: 1000000000,
type: "0x9f992cc2430a1f442ca7a5ca7638169f5d5c00e0ebc3977a65e9ac6e497fe5ef::wal::WAL",
});
- Sui
Ответы
2намерение использовать CoinWithBalance Намерение CoinWithBalance обрабатывает все операции, включая разделение и объединение монет. Это означает, что вам не всегда нужно вручную сопоставлять идентификатор объекта, объединять его, а затем разделять объект — CoinWithBalance позаботится обо всем автоматически.
Да, вы можетеобъединять и разделять монеты в одной транзакциис помощью 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.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?53
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок43
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции25
- Как ограничения возможностей взаимодействуют с динамическими полями в гетерогенных коллекциях?05