Move.

Пост

Поделитесь своими знаниями.

kryptoschain.
Apr 10, 2025
Экспертные Вопросы и Ответы

Как передать объект, принадлежащий другому объекту?

У меня возникла проблема с передачей объекта A, который принадлежит объекту B, а объект B принадлежит мне. Я получаю сообщение об ошибке, указывающее, что транзакция не была подписана правильным отправителем. Кто-нибудь знает, как решить эту проблему и правильно получить объект A?

  • Move CLI
  • Move
0
2
Поделиться
Комментарии
.

Ответы

2
deriss.
Apr 11 2025, 03:36

Похоже, вам нужно использовать процесс «Transfer To Object» (TTO). Обязательно проверьте возможности задействованных объектов. Тип родительского объекта (obj_b) должен позволять принимать объекты, поскольку для этого требуется изменяемый доступ к своему UID. Кроме того, убедитесь, что если дочерний объект (obj_a) не имеет такой storeвозможности, его необходимо настроить так, чтобы его можно было принимать. Более подробную информацию можно найти в этой таблице: https://docs.sui.io/concepts/transfers/transfer-to-object#custom-receiving-rules

0
Комментарии
.
24p30p.
Jul 9 2025, 07:13

Если при попытке передать объект 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

0
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148Посты240Ответы
Sui.X.Peera.

Заработай свою долю из 1000 Sui

Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.

Кампания вознагражденийИюль
Посты с вознаграждением