Пост
Поделитесь своими знаниями.
Как передать объект, принадлежащий другому объекту?
У меня возникла проблема с передачей объекта A, который принадлежит объекту B, а объект B принадлежит мне. Я получаю сообщение об ошибке, указывающее, что транзакция не была подписана правильным отправителем. Кто-нибудь знает, как решить эту проблему и правильно получить объект A?
- Move CLI
- Move
Ответы
2Похоже, вам нужно использовать процесс «Transfer To Object» (TTO). Обязательно проверьте возможности задействованных объектов. Тип родительского объекта (obj_b) должен позволять принимать объекты, поскольку для этого требуется изменяемый доступ к своему UID. Кроме того, убедитесь, что если дочерний объект (obj_a) не имеет такой store
возможности, его необходимо настроить так, чтобы его можно было принимать. Более подробную информацию можно найти в этой таблице: https://docs.sui.io/concepts/transfers/transfer-to-object#custom-receiving-rules
Если при попытке передать объект A, принадлежащий объекту B, а объект B принадлежит вашей учетной записи, вы получаете сообщение об ошибке, указывающее, что транзакция не была подписана правильным отправителем, это связано с тем, что право собственности в Sui работает. Если объект принадлежит другому объекту, как в вашем случае, вы не можете напрямую перенести его из своей учетной записи. Вместо этого вам нужно включить объект B (его родительский объект) в транзакцию и использовать его для авторизации действий над объектом A. Недостаточно просто подписать транзакцию в своей учетной записи, так как объект A не принадлежит вашему адресу напрямую. Чтобы исправить это, обязательно включите объект B в качестве изменяемых входных данных в свой вызов или блок транзакций Move, чтобы среда выполнения Sui знала, что действие авторизовано.
Вот простой пример того, как это может выглядеть в блоке транзакций, использующем Sui SDK:
const tx = new TransactionBlock();
const parentObject = tx.object('0xB'); // object B
const childObject = tx.object('0xA'); // object A
// use parentObject to perform operations involving childObject
// for example, calling a Move function to transfer object A
tx.moveCall({
target: '0xYourPackage::your_module::transfer_child',
arguments: [parentObject, childObject, tx.pure(recipientAddress)]
});
await wallet.signAndExecuteTransactionBlock({ transactionBlock: tx });
Просто убедитесь, что функция Move правильно определяет как объект B, так и объект A в качестве входных данных и что объект B имеет разрешение на работу с объектом A. Подробнее о владении и разрешениях на объекты Sui можно прочитать в официальной документации здесь: https://docs.sui.io/understand/ownership
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.