Sui.

Beitrag

Teile dein Wissen.

0xduckmove.
Jul 14, 2025
Experten Q&A

was erfolgreich über devInspectTransactionBlock () ausgeführt wird

Hallo zusammen, ich verwende das Type Script SDK und erhalte nach einem tx.MoveCall (flash_swap auf MMT LP) den Fehler „unusedValueWithoutDrop“. Ich gehe davon aus, dass ich die zurückgegebenen Coins nach dem Tausch fallen lassen oder zurücküberweisen muss. Kann mir jemand sagen, wie ich die zurückgegebenen Objekte (derzeit NestedResult) nach meinem MoveCall effizient fallen/übertragen kann? Freue mich über jede Hilfe, danke!

Hier ist der Code, der erfolgreich über devInspectTransactionBlock () ausgeführt wird

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
Teilen
Kommentare
.

Antworten

2
24p30p.
Jul 14 2025, 17:47

Sie erhalten den UnusedValueWithoutDropFehler, weiljedes Objekt, das von einem Move-Aufruf zurückgegeben wird, entweder übertragen, verwendet, zerstört oder explizit gelöscht werden muss— andernfalls gibt Sui diesen Fehler aus, um eine sichere und deterministische Objektbehandlung zu gewährleisten.

In Ihrem Fall behandeln Sie sie returnCoinA``returnCoinBkorrekt, indem Sie sie zurück an den Absender übertragen. Aber du machst nichts damitreturnReceip, weshalb der Fehler ausgelöst wird.

Um dies zu beheben, sollten Sie es explizitlöschen, returnReceipfalls es nicht benötigt wird, oder esübertragen, wenn es Daten enthält, die der Benutzer behalten sollte. So können Sie je nach Fall damit umgehen:


Option 1: Lass das Objekt fallen, wenn du es nicht benötigen

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

Option 2: Übertrage es an den Absender, wenn es nützliche Informationen enthält

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

✅ Endgültiger fester Code:

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],
});

Dadurch wird der UnusedValueWithoutDropFehler behoben. Sie können auch die Struktur der returnReceipVerwendung überprüfendevInspectTransactionBlock(), um zu entscheiden, ob Sie sie löschen oder behalten möchten.

🔗 Lesen Sie mehr über den Umgang mit Objekten in Sui Move

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

Du musst etwas damit machenreturnReceipt. Ich weiß nicht, was diese Objekte sind, aber Sie können sie wahrscheinlich einfach zu TransferObjects hinzufügen, wenn nicht erwartet wird, dass sie an einen anderen Aufruf übergeben werden

0
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.

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

420Beiträge611Antworten
Sui.X.Peera.

Verdiene deinen Anteil an 1000 Sui

Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.

BelohnungskampagneJuli