Publication
Partagez vos connaissances.
Comment transférer un objet appartenant à un autre objet ?
Je rencontre un problème lors du transfert d'un objet A, qui appartient à l'objet B, et l'objet B m'appartient. Je reçois un message d'erreur indiquant que la transaction n'a pas été signée par le bon expéditeur. Est-ce que quelqu'un sait comment résoudre ce problème et recevoir correctement l'objet A ?
- Move CLI
- Move
Réponses
2Il semblerait que vous deviez utiliser le processus « Transférer vers un objet » (TTO). Assurez-vous de vérifier les capacités des objets impliqués. Le type d'objet parent (obj_b) doit autoriser la réception d'objets car il nécessite un accès modifiable à son UID. Assurez-vous également que si l'objet enfant (obj_a) n'a pas cette store
capacité, il doit être configuré pour être recevable. Plus de détails peuvent être trouvés dans ce tableau : https://docs.sui.io/concepts/transfers/transfer-to-object#custom-receiving-rules
Si un message d'erreur indique que la transaction n'a pas été signée par le bon expéditeur lorsque vous tentez de transférer l'objet A, qui appartient à l'objet B et que l'objet B appartient à votre compte, cela est dû au mode de propriété dans Sui. Lorsqu'un objet appartient à un autre objet, comme dans votre cas, vous ne pouvez pas le transférer directement depuis votre compte. Vous devez plutôt inclure l'objet B (son parent) dans la transaction et l'utiliser pour autoriser des actions sur l'objet A. Il ne suffit pas de signer la transaction avec votre compte, car l'objet A n'appartient pas directement à votre adresse. Pour résoudre ce problème, assurez-vous d'inclure l'objet B en tant qu'entrée mutable dans votre appel Move ou votre bloc de transaction, afin que le moteur d'exécution Sui sache que l'action est autorisée.
Voici un exemple simple de ce à quoi cela peut ressembler dans un bloc de transactions à l'aide du 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 });
Assurez-vous simplement que votre fonction Move définit correctement à la fois l'objet B et l'objet A comme entrées, et que l'objet B est autorisé à fonctionner sur A. Vous pouvez en savoir plus sur la propriété et les autorisations des objets Sui dans la documentation officielle ici : https://docs.sui.io/understand/ownership
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Gagne ta part de 1000 Sui
Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.