Как проследить объект монеты Sui при разделении и слиянии

Если индексатор считает ID монеты постоянным счётом, слияние выглядит потерей средств. Объект монеты содержит стоимость, а её перемещение может создать или уничтожить ID.

Определите сохранившиеся объекты

Пусть source содержит 100, а target — 20 минимальных единиц одного типа монеты. Отделение 30 оставляет 70 в source. После слияния новая сумма target равна 50. Временный payment_id по окончании join больше не относится к живой монете.

let payment = sui::coin::split(&mut source, 30, ctx);
let payment_id = object::id(&payment);
sui::coin::join(&mut target, payment);
assert!(sui::coin::value(&target) == 50, 0);

Сверьте суммы по владельцам и типам монет

Сумма двух итоговых остатков равна исходным 120. Учитывайте смену владельца отдельно от создания или удаления объекта. Если валюта SUI и один из объектов оплачивает газ, до сверки кошелька учтите соответствующие эффекты. В расчёте примера газ оплачен отдельно.

Источники