Move.

Допис

Діліться своїми знаннями.

kryptoschain.
Apr 10, 2025
Питання та відповіді експертів

Як передати об'єкт, що належить іншому об'єкту?

Я стикаюся з проблемою з передачею об'єкта А, який належить об'єкту B, а об'єкт B належить мені. Я отримую помилку, що повідомляє, що транзакція не була підписана правильним відправником. Хтось знає, як це вирішити і правильно отримати об'єкт А?

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

Відповіді

2
deriss.
Apr 11 2025, 03:36

Схоже, вам потрібно використовувати процес «Передати об'єкту» (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 безпосередньо не належить вашій адресі. Щоб виправити це, переконайтеся, що ви включили об'єкт B як змінний вхід у ваш виклик Move або блок транзакції, щоб запуск Sui знав, що дія дозволена.

Ось базовий приклад того, як це може виглядати в блоці транзакцій за допомогою SDK Sui:

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.

Кампанія винагородЛипень