Sui.

Пост

Поделитесь своими знаниями.

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

✏️ Предметы родителей и детей в Sui Move

В Sui Move объекты могут владеть другими объектами так же, как и учетные записи, владеющие объектами. Это открывает перед разработчиками новые шаблоны проектирования (и несколько ошибок). В этом руководстве я разобью концепции родительских и дочерних объектов в Sui Move на четыре части: 1.Знакомство с понятиями родителей и детей в Sui Move 2.Механика контроля доступа к объектам и приёма 3.Межмодульное управление детьми с помощью public_receive 4.Логика, связывающая душу, и схема получения возврата

В конце концов вы поймете, как объединять объекты, извлекать дочерние объекты с помощью transfer: :receive, управлять дочерними объектами в разных модулях с помощью public_receive и даже создавать объекты, привязанные к душе, которые возвращаются владельцу бумерангом.

Знакомство с понятиями «родитель — ребенок» в Sui Move

###Что такое родительские и дочерние объекты?

В Sui каждый объект имеет уникальный идентификатор и владельца. Обычновладельцем является адрес(например, учетная запись пользователя), но владельцем может быть и другой объект.

Если объект A владеет объектом B, мы называем A родителем, а B — дочерним объектом. Ребенку принадлежит объект, а не адрес.

Передача данных объектам: на самом деле в Sui нет разницы между адресом и идентификатором объекта — оба идентификатора представляют собой 32-байтовые идентификаторы. Это значит, что объект можно перенести на идентификатор другого объекта точно так же, как и на адрес пользователя. При этом вы фактически вставляете объект в родительский объект. Среда выполнения Sui задает в поле владельца ребенка идентификатор родителя (а не адрес)

Так почему же это круто?

Потому что ребенок сохраняет свой уникальный идентификатор и существует в хранилище независимо, но теперь он привязан к родителю. Это все равно, что подарить другу уникальный коллекционный предмет, который можно хранить в шкафчике: этот предмет сохраняет свой идентификатор, и его можно отслеживать, но теперь владелец шкафчика вашего друга указан в списке его владельца.

Важно различать уникальные, вложенные и дочерние предметы:**

-Уникальный объект (принадлежащий адресу) :Обычный объект, владельцем которого является адрес (например, учетная запись пользователя). Так обстоит дело по умолчанию — например, NFT, монеты и т. д., которые находятся прямо в кошельке пользователя. Каждый из них имеет уникальный идентификатор и занимает первое место в хранилище. -Вложенный (обернутый) объект: Объект, который хранится в данных другого объекта (например, в виде поля в структуре). В данном случае внутренний объект «упакован», анеявляется отдельным объектом верхнего уровня. Он не отображается в глобальном хранилище по идентификатору, поскольку он является частью байтового содержимого родительского объекта. В языке Sui, если вы поместите объект в виде поля в другое поле без специальной обработки, оно будет обернуто. -**Дочерний объект (принадлежащий объекту) :**Объект, который принадлежит другому объекту но не помещен непосредственно в его поля. Дочерний объект остается в хранилище отдельным объектом верхнего уровня (со своим идентификатором и данными), а идентификатор родителя записывается как владелец в метаданных ребенка. Это означает, что вы можете запросить ребенка или получить к нему доступ по его идентификатору (при наличии соответствующих разрешений). Оно физически не встроено в содержимое родителя, а лишь логически находится в его собственности. Проведя аналогию, вы словно отдали другу свой коллекционный предмет на руки — всё равно что его можно промаркировать и отследить, просто спрятать в шкафчике.

Преимущество изготовления детского предмета (переводом) вместо упаковки заключается в том, что удостоверение личности ребенка остается доступным извне. Например, обозреватели или кошельки могут перечислять дочерний объект по идентификатору, в то время как упакованный объект невидим за пределами родительского объекта.

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

Право собственности и доступ: если объект принадлежит другому объекту, доступ к объекту или его использование, как правило, имеет только владелец родителя. Это форма динамической авторизации. Например, если Алиса владеет родительским объектом P, а P владеет дочерним объектом C, то только Алиса (или транзакции, которые подписывает Алиса) может манипулировать C. Sui применяет этот метод таким образом, чтобы владеть родителем — все равно что владеть ключами от всех его дочерних объектов 🔑.

Возможно, вы знаете:

Функция передачи объектов в Sui, по сути, дает нам право собственности на объекты в виде дерева. У одного родителя может быть много детей (и эти дети могут иметь своих детей, образуя иерархию). Для этого идентификаторы объектов обрабатываются как адреса для передачи. У нас есть:

-объекты, принадлежащие адресу(обычные уникальные объекты), -Объекты, принадлежащие объектам(дочерние объекты, все еще находящиеся на верхнем уровне, но привязанные к родительскому объекту), -Обернутые объекты(вложенные в данные другого объекта, а не верхнего уровня).

В следующих статьях мы рассмотрим, как на самом деле извлекать дочерние объекты или взаимодействовать с ними (поскольку к ним нельзя получить прямой доступ, как к объектам, принадлежащим адресам) и как применять к ним правила.

  • Sui
  • Move
3
Поделиться
Комментарии
.
Мы используем файлы cookie, чтобы гарантировать вам лучший опыт на нашем сайте.
Подробнее