Sui.

Допис

Діліться своїми знаннями.

article banner.
harry phan.
Apr 12, 2025
Стаття

✏️ Об'єкти батьків-дитини в Sui Move

У Sui Move об'єкти можуть володіти іншими об'єктами так само, як облікові записи власними об'єктами. Це відкриває нові шаблони дизайну (і кілька недоліків) для розробників. У цьому посібнику я розб'ю концепції батьків-дочірніх об'єктів у Sui Move на чотири частини: 1.Вступ до концепцій батьків-дитини в Sui Move 2.Механіка контролю доступу та прийому об'єктів 3.Міжмодульне управління дітьми за допомогою public_receive 4.Логіка прив'язки душі та шаблон квитанції повернення

До кінця ви зрозумієте, як вставляти об'єкти, отримувати дочірні об'єкти за допомогою transfer: :receiver, керувати дочірніми модулями за допомогою public_receiver і навіть створювати об'єкти, пов'язані з душею, які бумерангом повертаються власнику.

Вступ до концепцій батьків-дитини в Sui Move

###Що таке батьківські та дитячі об'єкти?

У Sui кожен об'єкт має унікальний ідентифікатор та * власника*. Зазвичайвласником є адреса(як обліковий запис користувача), але власником також може бути інший об'єкт.

Якщо об'єкт A володіє об'єктом B, ми називаємо A батьком, а B - дочірнім. Дитина належить об'єкту, а не адресній.

Передача на об'єкти: Sui насправді не розрізняє адресу та ідентифікатор об'єкта під капотом - обидва є лише 32-байтовими ідентифікаторами. Це означає, що ви можете перенести об'єкт на ідентифікатор іншого об'єкта так само, як ви передаєте на адресу користувача. Коли ви робите це, ви фактично вкладаєте об'єкт всередині батьківського об'єкта. Час виконання Sui встановлює поле власника дитини на ідентифікатор батька (замість адреси)

То чому це круто?

Тому що дитина зберігає свій власний унікальний ідентифікатор і існує незалежно в сховищі, але тепер він прив'язаний до батька. Це все одно, що дати своєму другові унікальний предмет колекціонування, який він може тримати в шафці - предмет колекціонування зберігає свій ідентифікатор і його можна відстежувати, але шафка вашого друга тепер вказана як його власник.

Важливо розрізнятиУнікальні та вкладені та дочірні об'єкти:

-Унікальний об'єкт (власник адреси) :Звичайний об'єкт, що належить адресі (наприклад, обліковий запис користувача). Це випадок за замовчуванням — подумайте про NFT, монети тощо, які живуть безпосередньо в гаманці користувача. Кожен з них має унікальний ідентифікатор і є верхнім рівнем зберігання. -Вкладений (обгорнутий) об'єкт: Об'єкт, який зберігаєтьсявсередині даних іншого об'єкта (наприклад, як поле в структурі). У цьому випадку внутрішній об'єкт є загорнутом, анеокремою сутністю верхнього рівня. Він не відображається за своїм ідентифікатором у глобальному сховищі, оскільки він є частиною байтового вмісту батьківського файлу. У Суї, якщо ви поставите об'єкт як поле в інший без спеціального поводження, він стає загорнутим. -**Дочірній об'єкт (об'єкт-власник) :*Об'єкт, який належить іншому об'єкту але не загорнутий безпосередньо в його поля. Дочірня особа залишається окремим об'єктом верхнього рівня у сховищі (з власним ідентифікатором та даними), а ідентифікатор батька записується як власник у метаданих дитини. Це означає, що ви можете запитувати або отримати доступ до дитини за її ідентифікатором (з правильними дозволами). Він фізично не вбудований у вміст батьків, просто логічно належить. Використовуючи нашу аналогію, це ніби ви дали своєму другові свій колекційний предмет для зберігання - він все ще окремо позначений та відстежується, просто зберігається у їхній шафці.

Перевага створення дитячого об'єкта (через передачу) замість його обгортання полягає в тому, що посвідчення особи дитини залишається доступним зовні. Наприклад, дослідники або гаманці можуть перелічити дочірній об'єкт за ідентифікатором, тоді як обгорнутий об'єкт невидимий поза батьківським об'єктом.

Дочірні об'єкти також підтримують стабільні ідентифікатори, навіть коли вони переміщуються між власниками або вкладаються в різних батьків. Це чудово підходить для таких речей, як мережевий інвентар або шаблони «гаманець всередині гаманця», де ви хочете, щоб об'єкт контейнера містив багато предметів, на які інші все ще можуть посилатися окремо

Власність та доступ: Якщо об'єкт належить іншому об'єкту, лише власник батька зазвичай може отримати доступ до дочірнього об'єкта або використовувати його. Це форма динамічної авторизації. Наприклад, якщо Аліса володіє батьківським об'єктом P, а P володіє дочірнім об'єктом C, то лише Аліса (або транзакції, які підписує Аліса) може маніпулювати C. Суй здійснює це так, щоб володіння батьком було схоже на утримання ключів для всіх його дочірніх 🔑.

Може бути, ви знаєте:

Функція передачі на об'єкт Суй, по суті, дає нам деревоподібне володіння об'єктом. Батьки можуть мати багато дітей (і ці діти можуть мати своїх дітей, формуючи ієрархію). Це робиться шляхом обробки ідентифікаторів об'єктів, як адрес для передачі. У нас є:

-Адресні об'єкти(звичайні унікальні об'єкти), -Об'єкти, що належать об'єктам(дочірні об'єкти, все ще верхнього рівня, але прив'язані до батьківського), -Обгорнуті об'єкти(вкладені в дані іншого об'єкта, а не верхнього рівня).

У наступних статтях ми побачимо, як насправді отримати дочірні об'єкти або взаємодіяти з ними (оскільки вони не є безпосередньо доступними, як адресні) та як застосовувати правила навколо них.

  • Sui
  • Move
3
Поділитися
Коментарі
.
Ми використовуємо файли cookie, щоб гарантувати вам найкращий досвід на нашому сайті.
Детальніше