From 7dbe4534af11e1dbef1e6610849d6cb75fb71038 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Wed, 8 Jan 2025 17:27:57 +0500 Subject: [PATCH] fix: refund unused tokens on revert --- contracts/nft/contracts/zetachain/UniversalNFTCore.sol | 6 ++++++ contracts/token/contracts/zetachain/UniversalTokenCore.sol | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/contracts/nft/contracts/zetachain/UniversalNFTCore.sol b/contracts/nft/contracts/zetachain/UniversalNFTCore.sol index 7c81233..bce14ca 100644 --- a/contracts/nft/contracts/zetachain/UniversalNFTCore.sol +++ b/contracts/nft/contracts/zetachain/UniversalNFTCore.sol @@ -264,6 +264,12 @@ abstract contract UniversalNFTCore is _safeMint(sender, tokenId); _setTokenURI(tokenId, uri); emit TokenTransferReverted(sender, tokenId, uri); + + if (context.amount > 0 && context.asset != address(0)) { + if (!IZRC20(context.asset).transfer(sender, context.amount)) { + revert TransferFailed(); + } + } } /** diff --git a/contracts/token/contracts/zetachain/UniversalTokenCore.sol b/contracts/token/contracts/zetachain/UniversalTokenCore.sol index c49ee3b..373dae6 100644 --- a/contracts/token/contracts/zetachain/UniversalTokenCore.sol +++ b/contracts/token/contracts/zetachain/UniversalTokenCore.sol @@ -249,5 +249,11 @@ abstract contract UniversalTokenCore is ); _mint(sender, amount); emit TokenTransferReverted(sender, amount); + + if (context.amount > 0 && context.asset != address(0)) { + if (!IZRC20(context.asset).transfer(sender, context.amount)) { + revert TransferFailed(); + } + } } }