From c082e7cd74c0c4764c628320c81fc05ad7e7c851 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 3 Sep 2024 18:27:33 +0300 Subject: [PATCH] Return claimed assets for OsTokenVaultEscrow --- abi/IOsTokenVaultEscrow.json | 8 ++++++- contracts/interfaces/IOsTokenVaultEscrow.sol | 3 ++- contracts/tokens/OsTokenVaultEscrow.sol | 21 +++++++------------ contracts/vaults/modules/VaultState.sol | 8 +++---- .../EthOsTokenVaultEscrow.spec.ts.snap | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/abi/IOsTokenVaultEscrow.json b/abi/IOsTokenVaultEscrow.json index 5bebea5..38e3357 100644 --- a/abi/IOsTokenVaultEscrow.json +++ b/abi/IOsTokenVaultEscrow.json @@ -254,7 +254,13 @@ } ], "name": "claimExitedAssets", - "outputs": [], + "outputs": [ + { + "internalType": "uint256", + "name": "claimedAssets", + "type": "uint256" + } + ], "stateMutability": "nonpayable", "type": "function" }, diff --git a/contracts/interfaces/IOsTokenVaultEscrow.sol b/contracts/interfaces/IOsTokenVaultEscrow.sol index f5978d2..801a104 100644 --- a/contracts/interfaces/IOsTokenVaultEscrow.sol +++ b/contracts/interfaces/IOsTokenVaultEscrow.sol @@ -182,12 +182,13 @@ interface IOsTokenVaultEscrow is IMulticall { * @param vault The address of the vault * @param exitPositionTicket The exit position ticket * @param osTokenShares The amount of osToken shares to burn + * @return claimedAssets The amount of assets claimed */ function claimExitedAssets( address vault, uint256 exitPositionTicket, uint256 osTokenShares - ) external; + ) external returns (uint256 claimedAssets); /** * @notice Liquidates the osToken shares diff --git a/contracts/tokens/OsTokenVaultEscrow.sol b/contracts/tokens/OsTokenVaultEscrow.sol index 2a7ac5b..c9bab73 100644 --- a/contracts/tokens/OsTokenVaultEscrow.sol +++ b/contracts/tokens/OsTokenVaultEscrow.sol @@ -152,7 +152,7 @@ abstract contract OsTokenVaultEscrow is Ownable2Step, Multicall, IOsTokenVaultEs address vault, uint256 exitPositionTicket, uint256 osTokenShares - ) external override { + ) external override returns (uint256 claimedAssets) { // burn osToken shares _osTokenVaultController.burnShares(msg.sender, osTokenShares); @@ -167,33 +167,26 @@ abstract contract OsTokenVaultEscrow is Ownable2Step, Multicall, IOsTokenVaultEs } // calculate assets to withdraw - uint256 assetsToTransfer; if (position.osTokenShares != osTokenShares) { - assetsToTransfer = Math.mulDiv(position.exitedAssets, osTokenShares, position.osTokenShares); + claimedAssets = Math.mulDiv(position.exitedAssets, osTokenShares, position.osTokenShares); // update position osTokenShares - position.exitedAssets -= SafeCast.toUint96(assetsToTransfer); + position.exitedAssets -= SafeCast.toUint96(claimedAssets); position.osTokenShares -= SafeCast.toUint128(osTokenShares); _positions[vault][exitPositionTicket] = position; } else { - assetsToTransfer = position.exitedAssets; + claimedAssets = position.exitedAssets; // remove position as it is fully processed delete _positions[vault][exitPositionTicket]; } - if (assetsToTransfer == 0) revert Errors.ExitRequestNotProcessed(); + if (claimedAssets == 0) revert Errors.ExitRequestNotProcessed(); // transfer assets - _transferAssets(position.owner, assetsToTransfer); + _transferAssets(position.owner, claimedAssets); // emit event - emit ExitedAssetsClaimed( - msg.sender, - vault, - exitPositionTicket, - osTokenShares, - assetsToTransfer - ); + emit ExitedAssetsClaimed(msg.sender, vault, exitPositionTicket, osTokenShares, claimedAssets); } /// @inheritdoc IOsTokenVaultEscrow diff --git a/contracts/vaults/modules/VaultState.sol b/contracts/vaults/modules/VaultState.sol index 137160c..bc14eea 100644 --- a/contracts/vaults/modules/VaultState.sol +++ b/contracts/vaults/modules/VaultState.sol @@ -193,9 +193,9 @@ abstract contract VaultState is VaultImmutables, Initializable, VaultAdmin, Vaul } /** - * @dev Internal function that must be used to process exit queue + * @dev Internal function that must be used to process exit queue * @dev Make sure that sufficient time passed between exit queue updates (at least 1 day). - Currently it's restricted by the keeper's harvest interval + * Currently it's restricted by the keeper's harvest interval * @return burnedShares The total amount of burned shares */ function _updateExitQueue() internal virtual returns (uint256 burnedShares) { @@ -332,8 +332,8 @@ abstract contract VaultState is VaultImmutables, Initializable, VaultAdmin, Vaul ) internal virtual returns (int256, bool); /** - * @dev Internal function for retrieving the total assets stored in the Vault. - NB! Assets can be forcibly sent to the vault, the returned value must be used with caution + * @dev Internal function for retrieving the total assets stored in the Vault. + * NB! Assets can be forcibly sent to the vault, the returned value must be used with caution * @return The total amount of assets stored in the Vault */ function _vaultAssets() internal view virtual returns (uint256); diff --git a/test/__snapshots__/EthOsTokenVaultEscrow.spec.ts.snap b/test/__snapshots__/EthOsTokenVaultEscrow.spec.ts.snap index 78d114d..a7c15c0 100644 --- a/test/__snapshots__/EthOsTokenVaultEscrow.spec.ts.snap +++ b/test/__snapshots__/EthOsTokenVaultEscrow.spec.ts.snap @@ -3,14 +3,14 @@ exports[`EthOsTokenVaultEscrow claim exited assets succeeds succeeds for all osToken shares 1`] = ` Object { "calldataByteLength": 100, - "gasUsed": 77090, + "gasUsed": 77117, } `; exports[`EthOsTokenVaultEscrow claim exited assets succeeds succeeds for partial osToken shares 1`] = ` Object { "calldataByteLength": 100, - "gasUsed": 87499, + "gasUsed": 87526, } `;