Как проверить владельца объекта Aptos, помещённого внутрь другого объекта

Поиск только по непосредственному владельцу может пропустить предмет, принадлежащий контейнеру кошелька. Сначала определите, нужен прямой владелец или вся цепочка владения.

Используйте проверку цепочки владения

В тесте поместите предмет в контейнер, принадлежащий wallet. Первый запрос должен вернуть адрес контейнера. Второй проверяет владение предметом через цепочку владельцев. При отдельных внешних чтениях сохраните версию реестра.

let direct = aptos_framework::object::owner(item);
let controlled = aptos_framework::object::owns(item, wallet);
assert!(direct == container_address && controlled, 0);

Различите владение и разрешение на передачу

При передаче контейнера от Алисы Бобу косвенный владелец предмета меняется, хотя прямым владельцем остаётся контейнер. Пересчитайте потомков при индексации передачи. У объектов могут действовать ограничения на передачу и глубину обхода. Успешная проверка владения не гарантирует успешной передачи.

Источники