Bài viết
Chia sẻ kiến thức của bạn.
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
Câu trả lời
2Bạn đang gặp UnusedValueWithoutDrop
lỗ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ý returnCoinA
và returnCoinB
chí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ỏngreturnReceip
nế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 UnusedValueWithoutDrop
lỗi. Bạn cũng có thể kiểm tra cấu trúc của returnReceip
việc sử dụng devInspectTransactionBlock()
để quyết định xem nên thả hay giữ nó.
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
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.
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.
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động43
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác25
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?05