Допис
Діліться своїми знаннями.
+15
Як обмеження здібностей взаємодіють з динамічними полями в гетерогенних колекціях?
Я створюю ринок, який повинен обробляти кілька типів активів з різними вимогами до здібностей, і я зіткнувся з деякими фундаментальними запитаннями щодо системи типів Move. Я хочу зберігати різні типи активів в одній колекції, але вони мають різні здібності:
- Звичайні NFT:
key + store
(можна передавати) - Токени Soulbound:
key
тільки (не передаються) - Користувальницькі активи з обмеженнями передачі
public struct Marketplace has key {
id: UID,
listings: Bag, // Want to store different asset types here
}
// This works for transferable assets
public fun list_transferable<T: key + store>(
marketplace: &mut Marketplace,
asset: T,
price: u64
) { /* ... */ }
// But how to handle soulbound assets?
public fun list_soulbound<T: key>( // No store ability
marketplace: &mut Marketplace,
asset_ref: &T, // Can only take reference
price: u64
) { /* How do I store metadata about this? */ }
Ключові питання:
- Вимоги до здібностей:
dynamic_field::add<K, V>()
При використанніV
завжди потрібно підstore
час компіляції? Чи можуть типи обгортки обійти це? - Гетерогенне зберігання: Чи може одна сумка зберігати об'єкти з різними наборами здіб
key + store + copy
ностей (vskey + store
) та обробляти їх по-різному під час виконання? - Безпека типу: Оскільки динамічні поля виконують стирання типу, як я можу підтримувати безпеку типу під час отримання значень? Який шаблон для зберігання метаданих типу?
- Шаблон свідків: Як працюють обмеження здібностей з фантомними типами? Чи можу я зберігати
Asset<Type1>
іAsset<Type2>
в тій самій колекції та витягувати інформацію про тип пізніше?
Побудова системи, де NFT, токени, пов'язані з душею, та обмежені активи потребують функціональності ринку, але з різною семантикою передачі.
Я спробував типи обгортки, кілька колекцій на набір можливостей, окреме зберігання метаданих типу. Кожен з них має компроміси між безпекою типу, витратами на газ та складністю.
- Sui
- Architecture
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

- Owen... SUI+137
1
- 0xduckmove... SUI+55
2
- MoonBags... SUI+50
3
- ... SUIdudley_smith+31
- ... SUI
- ... SUIderiss+15
- ... SUIPluto Dev👽+10
- ... SUIDominikus +10
- ... SUIandreweth.+10
- ... SUIfarshad+10