Sui CLT з передачами, керованими списком дозволів + пауза. Власники переміщують бали лише між попередньо затвердженими вами адресами.
Бали лояльності та кредити в програмі працюють найкраще, коли залишаються в екосистемі, яку ви контролюєте. Цей набір упорядків розгортає жетон Sui Closed-Loop, де розгортальник веде список дозволів затверджених адрес одержувачів (торговці, партнери, гаманці операторів). Жетони, створені для користувачів, можуть надходити лише в цей список дозволів — немає маршруту утечі через довільні гаманці, немає обміну на загальну Coin, немає листинга DEX за замовчуванням.
Жетон Closed-Loop `sui::token` Sui — єдиний основний примітив Move, який контролює передачі на рівні системи типів — власники отримують `Token<T>` (немає здатності `store`, немає `public_transfer`), і кожна передача створює ActionRequest, який має бути затверджений відносно розгорнутого TokenPolicy. Правило списку дозволів — це конфігурація `VecSet<address>`, яку розгортальник керує через дві функції адміністратора, контролювані TokenPolicyCap (add_to_allowlist, remove_from_allowlist). Пауза охоплює випадок, коли сам замкнений цикл потребує аварійної зупинки.
Так — видаліть політику замкненого циклу з пакету та ввімкніть non-transferable. Це реєструє порожній TokenPolicy: кожен ActionRequest передачі перериває в confirm_request. Набір non-transferable + Identity-SBT на Sui охоплює цей випадок.
Розгорнутий модуль Move розкриває `add_to_allowlist(policy, cap, addr, ctx)` і `remove_from_allowlist`. Викличте їх зі сторінки управління або з будь-якого гаманця, який тримає TokenPolicyCap — того ж гаманця, який розгорнув жетон за замовчуванням.
Виклик `token::transfer` повертає ActionRequest; `verify_allowlist_transfer` стверджує, що одержувач у списку, інакше операція перериває. Жетони ніколи не залишають адресу відправника — немає невдалого та застійного залишку для очищення.