Как принять объект Sui, отправленный на адрес другого объекта
Передача актива на адрес объекта-почтового ящика может завершиться раньше обработки поступления. Модулю нужен аргумент Receiving и изменяемый доступ к правильному родителю.
Сопоставьте ссылку на дочерний объект и родителя
Фрагмент относится к модулю, определяющему Mailbox. Передайте в конструктор транзакции ID, версию и digest входящего объекта как receiving-ссылку. Укажите ящик, адресу которого сейчас принадлежит объект.
public fun collect<T: key + store>(
mailbox: &mut Mailbox,
message: sui::transfer::Receiving<T>,
): T {
sui::transfer::public_receive(&mut mailbox.id, message)
}
Определите, кто вправе забрать актив
Успешный receive возвращает само значение Move. Его необходимо сохранить, использовать или передать дальше. Если ящик общий, публичный collect такого вида позволит любому с подходящими аргументами забирать активы. Перед открытием вывода добавьте проверку полномочий. Ссылка на объект A не подтверждает его принадлежность постороннему ящику B.