Допис
Діліться своїми знаннями.
Як об'єднати два об'єкти монети в Move?
- Я намагаюся зрозуміти цей аспект мережі Sui, тому що я або будую, налагоджую або розгортаю щось, що стосується цієї області. Я хочу детальне пояснення того, як працює цей механізм або функція, разом із відповідним використанням CLI, структурою переміщення коду або архітектурними концепціями. Моя мета — отримати достатню ясність, щоб застосувати ці знання в реальному проекті — будь то спеціальний смарт-контракт, система NFT, інтеграція гаманця чи інструмент DeFi. Мережа Sui має унікальні особливості порівняно з мережами EVM, тому мене особливо цікавить, що її відрізняє та як це впливає на найкращі практики розробки. Це допомогло б мати зразок коду, приклади командного рядка або типові помилки, на які слід стежити, осо��ливо під час використання Sui CLI, SDK або розгортання в localnet/testnet. Зрештою, я хочу уникнути поширених помилок, дотримуватися найкращих принципів безпеки та гарантувати, що функціональність, над якою я працюю, поводиться так, як очікувалося в реалістичних умовах. *
- Sui
- Architecture
- SDKs and Developer Tools
- NFT Ecosystem
Відповіді
13Об'єднання двох об'єктів монет у моделі програмування Sui Move є важливим, оскільки Sui використовує об'єктну архітектуру, де кожен токен є окремим об'єктом зі своїм ідентифікатором. У цій системі володіння трьома монетами вартістю по 1 SUI означає тримати три різні об'єкти, а не один баланс з 3 SUI. Щоб взаємодіяти з протоколами або виконувати передачі, часто потрібно об'єднати їх в один об'єкт.
Стандартна бібліотека Sui надає
Ось базова реалізація в Move:
використовувати sui: :coin:: {Сам, Монета};
У командному рядку можна об'єднати монети за допомогою Sui CLI з:
власний клієнт злиття монет
<primary_object_id>--первинна монета
<secondary_object_id>--монета для об'єднання
--газ-бюджет 10000000
Це збереже комбінований баланс у первинній монеті. Вторинна монета споживається і більше не може використовуватися.
У SDK Sui (наприклад, з TypeScript) ту саму операцію можна виконати програмно:
чекайте самогубства.MergeCoin ({ підписант: моя Адреса, Основна монета: coin1_id, CoinToMerge: coin2_id, Газовий бюджет: 10000000, });
З точки зору зберігання, менша кількість монетних об'єктів зменшує складність та витрати на газ. Об'єднання монет - це хороша практика перед відправкою, стейкінгом або взаємодією з контрактами DeFi. Однак деякі помилки можуть виникнути. Сюди входить використання неправильного ідентифікатора об'єкта, недостатня кількість газу або неволодіння обома монетами.
Щоб запобігти помилкам і дотримуватися найкращих практик безпеки, уникайте повторного використання монети після її об'єднання, забезпечте послідовність типів та завжди перевіряйте право власності. Об'єктна модель Суй робить поведінку монет більш явною та простежуваною, ніж моделі на основі облікових записів.
На практиці гаманці зазвичай автоматично об'єднують невеликі монети, щоб спростити користувальницький досвід. Протоколи DeFi використовують це для консолідації винагород або ефективного управління об'єднаними коштами.
Якщо ви створюєте щось, що передбачає обробку багатьох об'єктів монет, це допомагає написати утилітні функції для злиття перед подачею транзакцій або стейкінгом. Цей шаблон може запобігти фрагментованим балансам та зменшити збої транзакцій у ланцюжку.
Щоб об'єднати два об'єкти монети в Move on the Sui Network, ви можете використовувати Coin
модуль для перенесення балансу однієї монети в іншу. Монетами Sui керує Coin
модуль, а об'єднання зазвичай передбачає передачу всіх активів з одного об'єкта монети на інший, а потім видалення вихідного об'єкта.
Ключові поняття:
Coin::merge
*Об'єднання монет: Ви можете перевести весь баланс з однієї монети на іншу за допомогою функції.
*Приклад переміщення коду:
module MergeCoins {
use sui::coin::Coin;
public fun merge_coins(
coin1: &mut Coin<u64>,
coin2: &mut Coin<u64>
) {
Coin::merge(coin1, coin2); // Merges the balance of coin2 into coin1
}
}
*CLI: Використовуйте sui client
для взаємодії з контрактом після розгортання, наприклад:
sui client call --function merge_coins --package <package-id> --module <module-name> --args <coin1-id> <coin2-id>
Найкращі практики:
- Переконайтеся, що монети одного типу (наприклад, обидві
Coin<u64>
). - Правильно обробляйте та перевіряйте право власності на монети перед злиттям.
Об'єднання двох об'єктів монет у Sui (Переміщення)
У Sui монети представлені як об'єкти Move. Об'єднання двох монетних об'єктів передбачає передачу їх вартості в єдиний об'єкт монети. Сувора модель власності Move означає, що ви не можете безпосередньо поєднувати монети; натомість ви перемістили б вартість однієї монети в іншу, ефективно «об'єднуючи» їх.
Ключові поняття:
*Перемістити мову: об'єкти монет незмінні після створення. Ви не можете об'єднати їх безпосередньо, але ви можете перенести їх вартість в одну монету. *Sui Network: Sui використовує модель ресурсів мови Move для забезпечення права власності та контролю над ресурсами (монетами).
Кроки для об'єднання монет:
1.Перенесіть вартість однієї монети іншою. 2.Спаліть другу монету(необов'язково, якщо ви хочете її «видалити»).
Зразок коду переміщення:
public fun merge_coins(coin1: &mut Coin, coin2: &mut Coin) {
// Transfer value from coin2 to coin1
Coin::deposit(&mut coin1, Coin::withdraw(&mut coin2));
// Optionally, burn coin2
Coin::burn(&mut coin2);
}
Приклад CLI:
Об'єднання монет не є прямою операцією CLI, але може бути досягнуто викликом функції в контракті:
sui client publish --gas-budget 10000 --module <module-path>
Поширені помилки:
*Проблеми власності: Переконайтеся, що у вас є правильні змінні посилання (&mut
) на об'єкти монет.
*Недійсні типи монет: Переконайтеся, що монети, які ви намагаєтеся об'єднати, мають однаковий тип.
Найкращі практики:
*Уникайте подвійних витрат: Завжди переконайтеся, що монети належним чином передані перед спалюванням. *Тест на Localnet/Testnet: Перевірте логіку перед розгортанням, щоб уникнути помилок у реальних транзакціях.
Щоб об'єднати два Coin
об'єкти в Sui Move, скористай coin::join
теся функцією з фреймворку Sui, яка об'єднує баланс двох монет одного типу в одну. По-перше, переконайтеся, що обидві монети є змінними та належать підписанту транзакції, оскільки модель власності Sui вимагає явного дозволу на зміну об'єктів. Функція споживає вхідні монети і створює нову об'єднану монету, слідуючи системі лінійного типу Sui, де об'єкти не можуть бути дубльовані або неявно скопійовані. Ця операція відрізняється від ланцюгів EVM, де залишки токенів зберігаються в контрактах, а не як окремі об'єкти.
Щоб об'єднати два об'єкти монет у русі в мережі Sui, ви використовуєте функцію coin::merge
з 0x2::coin
модуля. Ця утиліта дозволяє об'єднати значення одного об'єкта монети в інший такого ж типу, знищуючи джерело і зберігаючи ціль. Це важливо при роботі з фрагментованими залишками від кількох транзакцій, особливо для DApps, протоколів DeFi та ринків.
У вашому користувацькому модулі Move вам потрібно включити:
use sui::coin;
Приклад коду (у русі):
public entry fun merge_coins<CoinType>(
target: &mut coin::Coin<CoinType>,
source: coin::Coin<CoinType>
) {
coin::merge(target, source);
}
Ця функція приймає змінне посилання на цільову монету та значення вихідної монети. Функція додає значення вихідної монети в ціль і знищує джерело в процесі.
Найкращі практики:
- Переконайтеся, що обидві монети єодного типу(наприклад, обидві є SUI або обидві є USDC).
- Уникайте передачі одного і того ж об'єкта, що й обидва аргументи - це призведе до паніки.
- Використовуйте,
coin::value(&coin)
якщо ви хочете перевірити залишки перед об'єднанням. - Уникайте мутації значень монет у спільних об'єктах, якщо це не необхідно, щоб зменшити конфлікти транзакцій.
Використання Sui CLI:
Якщо ви працюєте з CLI, скористайтеся sui client
командою для об'єднання:
sui client merge-coin \
--primary-coin <coin_object_id_to_keep> \
--coin-to-merge <coin_object_id_to_destroy> \
--gas-budget 20000000
Це об'єднує другу монету з першою. Друга монета буде витрачена.
У пакеті SDK TypeScript:
import { TransactionBlock } from "@mysten/sui.js";
const tx = new TransactionBlock();
tx.mergeCoins(
tx.object(primaryCoinId),
[tx.object(secondaryCoinId)]
);
Поширені помилки:
TypeMismatch
виникає, якщо типи монет не збігаються.Object not mutable
якщо ви намагаєтеся злитися в незмінну або запозичену монету.Object not found
при посиланні на видалені або зібрані сміття об'єкти в Testnet після видалення.
Об'єднання об'єктів монет має вирішальне значення для тримання балансів у стилі UTXO під контролем у Sui. Це також допомагає зменшити споживання газу при виконанні декількох транзакцій. Ви можете прочитати більше про управління монетами в документації Sui Move.
Об'єднання об'єктів монет у Sui Move
У об'єктній моделі Суй монети є першокласними об'єктами, які повинні бути явно об'єднані за допомогою Coin::join
функції зі стандартної бібліотеки (0x2::coin
). На відміну від ланцюгів EVM, де залишки токенів зберігаються у відображеннях, Sui представляє кожен баланс монети як окремий об'єкт.
Основна реалізація
use sui::coin::{Self, Coin};
use sui::transfer;
public entry fun merge_coins(
mut primary_coin: Coin,
coin_to_merge: Coin,
ctx: &mut TxContext
) {
// Validate ownership (both coins must belong to sender)
assert!(object::is_owner(&primary_coin, tx_context::sender(ctx)), 0x1);
// Join the coins (adds value of coin_to_merge to primary_coin)
Coin::join(&mut primary_coin, coin_to_merge);
// Transfer the merged coin back to sender
transfer::transfer(primary_coin, tx_context::sender(ctx));
}
Ключові технічні деталі
1.Вимоги до власності на об'єкт:
- Обидві монети повинні належати відправнику транзакції
- Перевірте
object::is_owner()
перед об'єднанням - Ніколи не об'єднуйте спільні об'єкти (може спричинити помилку виконання)
2.Оптимізація газу:
- Об'єднання значно дешевше, ніж розщеплення (1 злиття проти декількох сплітів)
- Уникайте зайвих злиттів: гаманці Sui автоматично консолідують монети
- Ідеальний шаблон: Об'єднайте перед великими передачами, розділіть лише при необхідності
3.Приклад використання CLI:
# First, get coin IDs
sui client objects --address $MY_ADDRESS
# Merge two coins (primary first, then the one to merge)
sui client call \
--package 0x2 \
--module coin \
--function join \
--args "$PRIMARY_COIN_ID" "$COIN_TO_MERGE_ID" \
--gas-budget 10000
Міркування щодо SUI проти EVM
-Відсутність відстеження балансу: Кожна монета є окремим об'єктом (EVM використовує єдине сховище балансу)
-Лінійні типи: Після об'єднання coin_to_merge
споживається (не можна використовувати знову)
-Немає ризиків повторного в'їзду: Об'єкти монет є лінійними типами (автоматично застосовуються за допомогою Move)
-Вплив на газ: Об'єднання зменшує кількість об'єктів, знижуючи майбутні витрати на газ
Поширені помилки та рішення
| Помилка | Причина | Виправлення |
| --------------| -----|
| InvalidArgument
| Спроба об'єднати спільні об'єкти | Переконайтеся, що обидві монети є об'єктами власності |
| ObjectNotFound
| Використання недійсних ідентифікаторів монет | Перевірте, що об'єкти існують за допомогою sui client objects
|
| TypeMismatch
| Спроба об'єднати різні типи монет | Переконайтеся, що обидві монети мають однаковий тип (наприклад, 0x2: :sui: :SUI) |
| LinearObjectsInUse
| Використання монети після об'єднання | Пам'ять coin_to_merge
споживається під час приєднання |
Шаблон найкращої практики для проектів DeFi/NFT
// Always validate before merging
public entry fun safe_merge(
mut target: Coin,
source: Coin,
ctx: &mut TxContext
) acquires /* any resources */ {
let sender = tx_context::sender(ctx);
assert!(object::is_owner(&target, sender), E_NOT_OWNER);
assert!(object::is_owner(&source, sender), E_NOT_OWNER);
assert!(Coin::type_url(&target) == Coin::type_url(&source), E_MISMATCHED_TYPES);
Coin::join(&mut target, source);
transfer::transfer(target, sender);
}
Пам'ятайте: в об'єктній моделі Sui об'єднання монет зменшує кількість об'єктів, якими володіє ваша адреса, що безпосередньо впливає на майбутні витрати на газ (менше об'єктів = нижча плата за зберігання). На відміну від EVM, де консолідація балансу відбувається автоматично, Sui вимагає явних операцій об'єднання як частини логіки вашої програми.
У Sui монети - це окремі об'єкти, а не баланси на основі рахунків, як у Ethereum. Коли ви отримуєте кілька об'єктів монет (наприклад, Coin
Чому об'єднання монет важливо
Зменшує кількість об'єктів монет, що допомагає мінімізувати розмір транзакції та використання газу.
Деякі DApps та смарт-контракти очікують єдиного об'єкта монети в якості входу.
Гаманці зазвичай вважають за краще керувати меншою кількістю монетних об'єктів для ефективності.
Як працює злиття монет у русі
Sui надає
використовувати sui: :coin:: {Сам, Монета};
coin_primary - це змінне посилання на монету, яка отримає кошти.
coin_second — це монета, яка об'єднується і буде знищена після злиття.
Ви повинні володіти обома об'єктами монет, оскільки Суй здійснює суворе право власності на об'єкт.
Використання Sui CLI для об'єднання монет
Ви також можете об'єднати монети за допомогою CLI:
власний клієнт злиття монет
<primary_coin_object_id>--первинна монета
<secondary_coin_object_id>--монета для об'єднання
--газовий бюджет 10000
Ця команда об'єднує значення secondary_coin_object_id у primary_coin_object_id.
Міркування розвитку
Завжди переконайтеся, що обидва об'єкти монети мають однаковий тип (наприклад, обидві монети
Неперевірка права власності або невідповідності типів призведе до помилок.
Злиття незворотне; об'єднана монета знищується.
Якщо ви працюєте в смарт-контрактах, перевірте типи монет за допомогою дженериків та type_of.
Кращі практики
Регулярно об'єднуйте менші монети, щоб зменшити здуття стану та оптимізувати зберігання.
Під час переказів попередньо об'єднайте, щоб надіслати єдиний об'єкт монети.
Перевірте за допомогою sui test у localnet та використовуйте sui: :coin: :value для підтвердження підсумків до та після об'єднання.
Розуміючи, як функціонують об'єкти монет у Sui та правильно об'єднуючи їх, ви можете написати чистіший код, знизити витрати на газ та підвищити надійність смарт-контракту.
Використовуйте coin::join
в Move для об'єднання двох монет одного типу:
####Функція переміщення
use sui::coin;
// Merge `coin2` into `coin1` (destroys coin2)
public entry fun merge_coins<T>(
coin1: &mut coin::Coin<T>,
coin2: coin::Coin<T>,
) {
coin::join(coin1, coin2);
}
####Приклад CLI
sui client call \
--function merge_coins \
--module your_module \
--package 0xYOUR_PACKAGE \
--args 0xCOIN1_ID 0xCOIN2_ID \
--gas-budget 10000000
###Ключові примітки
T
Тільки один тип: Монети повинні бути ідентичного типу (). 2.Газоефективність: Об'єднання зменшує кількість об'єктів на ланцюзі. 3.Безпека: підписи не потрібні (чиста передача цінностей).
Використовуйте sui::coin::join
для об'єднання двох монет одного типу в Move:
use sui::coin
Модуль імпорту монет—. 2.Calljoin
— знищує одну монету, додає її цінність до іншої.
###Приклад:
let coin1 = coin::withdraw(&mut treasury, 100);
let merged = coin::join(coin1, &mut coin2); // coin2 now has +100
Ключові примітки: ✔ Зливатися можуть лише монети одного типу. ✔ Вимагає змінного посилання на цільову монету.
Альтернатива CLI:
sui client merge-coin --primary-coin 0x123 --coin-to-merge 0x456
У Sui об'єднання двох об'єктів монети передбачає об'єднання балансу однієї монети в іншу за допомогою семантики Move transfer: :merge, але конкретно за допомогою функції sui: :coin: :merge. Монети в Sui - це просто об'єкти типу Coin
Як це працює:
-
Функція Sui Move: Використовуйте функцію sui: :coin: :merge
(coin1: & mut Coin , coin2: Coin ) для об'єднання двох монет. -
Поведінка: Це переносить весь баланс coin2 в coin1 і знищує coin2.
-
Власність: Обидві монети повинні належати одній адресу/об'єкті, який виконує злиття.
Зразок коду переміщення
використовувати sui: :coin:: {Сам, Монета}; використовувати sui: :tx_context:: {Сам, txContext};
Приклад Sui CLI
Якщо ви робите це за допомогою CLI або SDK (наприклад, TypeScript):
<PACKAGE_ID>власний виклик клієнта --package
<MODULE_NAME>--модуль
--функція злиття_мої_монет
<PRIMARY_COIN_ID><SECONDARY_COIN_ID>--аргс
--газовий бюджет 50000000
Ключові примітки:
Переконайтеся, що CoinType правильний і послідовний для обох монет.
Вторинна монета (coin2) споживається та видаляється після злиття.
Завжди імітуй��е транзакцію за допомогою суі-клієнта сухого запуску, щоб виявити збої перед відправкою.
Якщо ви використовуєте динамічні монети (наприклад, винагороди чи комісії), їх об'єднання може зменшити безлад об'єктів та заощадити газ у подальших операціях.
Помилки, на які слід звернути увагу:
Об'єкт не знайдено: вказує на неправильний або відсутній ідентифікатор об'єкта.
Невідповідність типу: Якщо типи монет відрізняються.
Недійсний власник: якщо монета не належить відправнику.
Освоюючи coin: :merge, ви підтримуєте більш чисте управління об'єктами та оптимізуєте розмір транзакцій для операцій гаманця та DeFi на Sui.
Щоб об'єднати два об'єкти монети в Sui за допомогою Move, ви використову merge
єте функцію з 0x2::coin
модуля. Це дозволяє об'єднати вартість двох монет одного типу в один об'єкт і знищити інший. Ця функція корисна, коли користувачі мають багато дрібних монетних об'єктів (їх часто називають «пилом») і хочуть об'єднати їх у меншу кількість об'єктів, щоб заощадити газ та спростити відстеження.
У Move синтаксис виглядає так:
use 0x2::coin;
public entry fun merge_coins(coin1: &mut Coin<T>, coin2: Coin<T>) {
coin::merge(coin1, coin2);
}
Тут зберігається coin1
злитий баланс, при coin2
цьому витрачається і руйнується в процесі. Ви повинні передати одну монету як змінну довідку, а іншу як власну вартість.
Якщо ви використовуєте Sui CLI або SDK, об'єднання відбувається в таких транзакціях:
sui client merge-coin --primary-coin <COIN1_ID> --coin-to-merge <COIN2_ID> --gas-budget 1000000
Або якщо ви створюєте транзакцію програмно (наприклад, за допомогою TypeScript SDK):
tx.mergeCoins(primaryCoin, [coinToMerge]);
Ключовою деталлю Sui є те, що кожна монета є фактичним об'єктом з унікальним ідентифікатором, на відміну від ланцюгів EVM, де залишки зберігаються у вигляді цифр у відображеннях. Отже, маючи справу з монетами на Sui, ви працюєте з фізичними об'єктами, а не просто цифрами. Ось чому ви повинні об'єднати або розділити їх безпосередньо замість оновлення змінної балансу.
Поширені помилки включають спробу об'єднати монети різних типів (наприклад, SUI та USDC), які не вдасться, або передачу однієї монети двічі, що призведе до паніки. Ви також повинні бути обережними, щоб не вважати, що об'єднані монети змінюють ідентифікатор об'єкта — вони не змінюють це. Основна монета зберігає свій початковий ідентифікатор.
Ви можете прочитати більше про об'єднання монет у документах Sui: https://docs.sui.io/concepts/cryptoeconomics#coin-objects
У Sui монети є об'єктами типу Coin
###1. Основний механізм
Моду coin
ль Sui надає власні функції для об'єднання монет одного типу. На відміну від ERC-20 EVM (який використовує оновлення балансу), Sui фізично об'єднує окремі об'єкти монет.
####Ключові переваги -Атомний: Операція об'єднання - це все або нічого -Газоефективний: Немає записів проміжного сховища -Компоновання: Працює з типами монет на замовлення
###2. Перемістити реалізацію ####Основне злиття
module my_module::coin_merger {
use sui::coin;
use sui::tx_context;
// Merge two SUI coins
public entry fun merge_sui(
coin1: coin::Coin<SUI>,
coin2: coin::Coin<SUI>,
ctx: &mut tx_context::TxContext
) {
let merged_coin = coin::join(&mut coin1, coin2);
transfer::public_transfer(merged_coin, tx_context::sender(ctx));
}
}
####Загальна версія (будь-який тип монети)
public entry fun merge_coins<T>(
coin1: &mut coin::Coin<T>,
coin2: coin::Coin<T>
) {
coin::join(coin1, coin2);
}
###3. Використання CLI ####Ручне злиття
# 1. Find coins to merge
sui client coins --coin-type 0x2::sui::SUI
# 2. Execute merge
sui client merge-coin \
--primary-coin 0x123... \
--coin-to-merge 0x456... \
--gas-budget 10000000
####Програмне об'єднання (TypeScript)
const tx = new TransactionBlock();
tx.mergeCoins(
tx.object(PRIMARY_COIN_ID),
[tx.object(SECONDARY_COIN_ID)]
);
await client.signAndExecuteTransactionBlock({
transactionBlock: tx,
signer: wallet
});
###4. Архітектурні міркування ####Оптимізація газу
// Batch merging (for wallets/exchanges)
public entry fun batch_merge(
coins: vector<Coin<SUI>>,
ctx: &mut TxContext
) {
let merged = coin::zero(ctx);
while (!vector::is_empty(&coins)) {
coin::join(&mut merged, vector::pop_back(&mut coins));
}
transfer::public_transfer(merged, sender(ctx));
}
####Патерни захисту
| Шаблон | Реалізація | Мета |
| -------------------------| ---------|
|Перевірка власності| | Запобі assert!(coin::owner(coin) == sender, EOWNER)
гання несанкціонованим злиттям |
|Захист нульової монети| | Уникайте марних assert!(coin::value(coin) > 0, EZERO)
операцій |
###5. Обробка помилки
####Поширені помилки
| Код помилки | Причина | Рішення |
| --------------------| ----------|
| ECoinTypeMismatch
| Об'єднання різних типів монет | Перевірити coin::coin_type()
|
| ECoinBalanceExceeded
| Результат перевищує u64::MAX
| Розділити на менші об'єднання |
EImmutable
| &mut
| Спроба об'єднати незмінні монети | Використовувати посилання |
####Перемістити тестовий кейс
#[test]
fun test_merge_failure() {
let (coin1, coin2) = test_coins();
assert!(coin::value(&coin1) + coin::value(&coin2) > MAX, 0);
let merged = coin::join(&mut coin1, coin2); // Should abort
}
###6. Приклади реального життя ####Депозит у пулі DeFi
module defi::pool {
public entry fun deposit(
user_coin: coin::Coin<USDC>,
pool: &mut Pool,
ctx: &mut TxContext
) {
let merged = coin::join(&mut pool.vault, user_coin);
pool.vault = merged; // Update storage
}
}
####НФТ маркетплейс
module market {
public entry fun consolidate_fees(
fees: vector<Coin<SUI>>,
ctx: &mut TxContext
) {
let total = coin::zero(ctx);
while (!vector::is_empty(&fees)) {
coin::join(&mut total, vector::pop_back(&mut fees));
}
transfer::transfer(total, treasury);
}
}
###7. Орієнтовні показники продуктивності | Експлуатація | Вартість газу (SUI) | Примітки | | --------------------------| -------| | Об'єднати 2 монети | 1,500 | Базова вартість | | Пакетне об'єднання (10 монет) | 3800 | на 60% дешевше, ніж послідовне | | Не вдалося об'єднати | 400 | Невідповідність типу перервати |
###Найкращі практики 1.Перевірка перед об'єднанням
fun safe_merge(
coin1: &mut Coin<SUI>,
coin2: Coin<SUI>
) {
assert!(coin::is_immutable(coin1) == false, EIMMUTABLE);
assert!(coin::coin_type(coin1) == coin::coin_type(coin2), ETYPE);
coin::join(coin1, coin2);
}
2.Інтеграція гаманця
- Періодично зливайте пилові монети
- Результати об'єднання кешу для UX
3.Стратегія тестування
sui move test --gas-stats # Profile merge costs
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
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