Пост
Поделитесь своими знаниями.
✏️ Предметы родителей и детей в 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
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
- How to access and manage nested structs and dynamic fields in Move?56
- Как преобразовать закрытый ключ в новый формат с помощью интерфейса командной строки43
- 👀 SEAL - Я думаю, что конфиденциальность данных Web3 скоро изменится4
- Sui memes DEX options and chart44
- How to update coin logo on Sui smart contract?32