Как принять объект 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.

Источники