Sui.

Publication

Partagez vos connaissances.

0xduckmove.
Jul 14, 2025
Questions et Réponses avec des Experts

qui s'exécute avec succès via DevInspectTransactionBlock ()

Bonjour à tous, j'utilise le SDK Type Script et je reçois l'erreur « UnusedValueWithoutDrop » après un tx.MoveCall (flash_swap sur MMT LP). Je suppose que je dois déposer ou transférer les pièces retournées après l'échange. Quelqu'un peut-il me dire comment déposer/transférer efficacement les objets renvoyés (actuellement NestedResult) après mon MoveCall ? J'apprécie toute aide, merci !

Voici le code, qui s'exécute avec succès via DevInspectTransactionBlock ()

let [returnCoinA, returnCoinB, returnReceip] = tx.moveCall({
            target: targetFunctionLP2,
            typeArguments: [suiTokenType, usdcTokenType],
            arguments: [
                tx.object(poolAddressLP2),
                tx.pure.bool(false),
                tx.pure.bool(true),
                tx.pure.u64(amountOutUSDNormalized),
                tx.pure.u128(limit_sqrt_priceB),
                tx.object(clockObjectAddressLP2),
                tx.object(versionAddressLP2),
            ],
        });
tx.transferObjects([returnCoinA, returnCoinB], tx.pure.address(sender))

  • Sui
2
2
Partager
Commentaires
.

Réponses

2
24p30p.
Jul 14 2025, 17:47

Vous obtenez l'UnusedValueWithoutDroperreur carchaque objet renvoyé par un appel Move doit être transféré, utilisé, détruit ou explicitement supprimé. Sinon, Sui renvoie cette erreur pour garantir une gestion sûre et déterministe des objets.

Dans votre cas, vous returnCoinAles gérez returnCoinBcorrectement en les renvoyant à l'expéditeur. Mais vous ne faites rien avecreturnReceip, c'est pourquoi l'erreur est déclenchée.

Pour résoudre ce problème, vous devez explicitementsupprimerreturnReceips'il n'est pas nécessaire, ou letransférers'il contient des données que l'utilisateur doit conserver. Voici comment vous pouvez le gérer selon les cas :


Option 1 : Déposez l'objet si vous n'en avez pas besoin

tx.moveCall({
  target: '0x2::object::drop',
  arguments: [returnReceip],
});

Option 2 : transférez-le à l'expéditeur s'il contient des informations utiles

tx.transferObjects([returnReceip], tx.pure.address(sender));

✅ Code fixe final :

let [returnCoinA, returnCoinB, returnReceip] = tx.moveCall({
    target: targetFunctionLP2,
    typeArguments: [suiTokenType, usdcTokenType],
    arguments: [
        tx.object(poolAddressLP2),
        tx.pure.bool(false),
        tx.pure.bool(true),
        tx.pure.u64(amountOutUSDNormalized),
        tx.pure.u128(limit_sqrt_priceB),
        tx.object(clockObjectAddressLP2),
        tx.object(versionAddressLP2),
    ],
});

tx.transferObjects([returnCoinA, returnCoinB], tx.pure.address(sender));
tx.moveCall({
  target: '0x2::object::drop',
  arguments: [returnReceip],
});

Cela résoudra l'UnusedValueWithoutDroperreur. Vous pouvez également inspecter la structure de returnReceipl'utilisation devInspectTransactionBlock()pour décider de la supprimer ou de la conserver.

🔗 En savoir plus sur la gestion des objets dans Sui Move

0
Commentaires
.
harry phan.
Jul 15 2025, 04:42

Tu dois faire quelque chose avecreturnReceipt. Je ne sais pas quels sont ces objets, mais vous pouvez probablement simplement les ajouter à TransferObjects s'ils ne sont pas censés être transmis dans un autre appel

0
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

420Publications611Réponses
Sui.X.Peera.

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.

Campagne de RécompensesJuillet