Sui.

Bài viết

Chia sẻ kiến thức của bạn.

0xduckmove.
Jul 14, 2025
Hỏi đáp Chuyên Gia

chạy thành công thông qua DevInspectTransactionBlock ()

Xin chào tất cả, tôi đang sử dụng Type Script SDK và nhận được lỗi “UnusedValueWithoutDrop” sau TX.MoveCall (flash_swap trên MMT LP). Tôi cho rằng tôi phải thả hoặc chuyển lại các đồng tiền được trả lại sau khi hoán đổi. Ai đó có thể cho tôi biết, làm thế nào để thảo/chuyển hiệu quả các đối tượng trả về (hiện tại là NestedResult) sau MoveCall của tôi không? Đánh giá cao bất kỳ sự giúp đỡ nào, cảm ơn!

Đây là mã, chạy thành công thông qua 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
Chia sẻ
Bình luận
.

Câu trả lời

2
24p30p.
Jul 14 2025, 17:47

Bạn đang gặp UnusedValueWithoutDroplỗi vìmọi đối tượng trả về từ lệnh gọi Move phải được chuyển, sử dụng, phá hủy hoặc bỏ rõ ràng- nếu không, Sui sẽ đưa ra lỗi đó để đảm bảo xử lý đối tượng an toàn và xác định.

Trong trường hợp của bạn, bạn đang xử lý returnCoinAreturnCoinBchính xác bằng cách chuyển chúng trở lại người gửi. Nhưng bạn không làm bất cứ điều gì với nóreturnReceip, đó là lý do tại sao lỗi được kích hoạt.

Để khắc phục điều này, bạn nên rõ rệtgỏngreturnReceipnếu không cần thiết, hoặcchuyển nhậnnó nếu nó chứa dữ liệu mà người dùng nên giữ. Dưới đây là cách bạn có thể xử lý tùy thuộc vào trường hợp:


Tùy chọn 1: Thả đối tượng nếu bạn không cần nó

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

Tùy chọn 2: Chuyển nó cho người gửi nếu nó chứa thông tin hữu ích

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

✅ Mã cố định cuối cùng:

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

Điều này sẽ giải quyết UnusedValueWithoutDroplỗi. Bạn cũng có thể kiểm tra cấu trúc của returnReceipviệc sử dụng devInspectTransactionBlock()để quyết định xem nên thả hay giữ nó.

🔗 Đọc thêm về xử lý đối tượng trong Sui Move

0
Bình luận
.
harry phan.
Jul 15 2025, 04:42

Bạn cần phải làm một cái gì đó vớireturnReceipt. Tôi không biết những đối tượng này là gì, nhưng bạn có thể chỉ cần thêm chúng vào TransferObjects nếu chúng không được mong đợi sẽ được chuyển sang một cuộc gọi khác

0
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.

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

420Bài viết611Câu trả lời
Sui.X.Peera.

Kiếm phần của bạn từ 1000 Sui

Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

Chiến dịch phần thưởngTháng Bảy