From 3f3ffea5923a275dc19e9a6d99aab7576e5381b2 Mon Sep 17 00:00:00 2001 From: Korrrba Date: Fri, 2 Feb 2024 15:54:31 +0100 Subject: [PATCH 1/3] fix: do not allow to mint dollar with zero collateral Resolves: https://github.com/sherlock-audit/2023-12-ubiquity-judging/issues/207 --- packages/contracts/src/dollar/libraries/LibUbiquityPool.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/contracts/src/dollar/libraries/LibUbiquityPool.sol b/packages/contracts/src/dollar/libraries/LibUbiquityPool.sol index 3ca5ea12a..a9642ea11 100644 --- a/packages/contracts/src/dollar/libraries/LibUbiquityPool.sol +++ b/packages/contracts/src/dollar/libraries/LibUbiquityPool.sol @@ -368,6 +368,7 @@ library LibUbiquityPool { // get amount of collateral for minting Dollars collateralNeeded = getDollarInCollateral(collateralIndex, dollarAmount); + require(collateralNeeded > 0, "Cannot mint with zero collateral"); // subtract the minting fee totalDollarMint = dollarAmount From 33d0fa1da1ec3924bf1e9d3876217f82663ff5d1 Mon Sep 17 00:00:00 2001 From: Korrrba Date: Fri, 2 Feb 2024 18:05:59 +0100 Subject: [PATCH 2/3] test: add testMintDollar_ShouldRevert_IfZeroCollateralAvailable --- .../diamond/facets/UbiquityPoolFacet.t.sol | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol b/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol index 18bd805c2..59341b068 100644 --- a/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol +++ b/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol @@ -329,6 +329,27 @@ contract UbiquityPoolFacetTest is DiamondTestSetup { ); } + function testMintDollar_ShouldRevert_IfZeroCollateralAvailable() public { + vm.prank(admin); + ubiquityPoolFacet.setPriceThresholds( + 1000000, // mint threshold + 1000000 // redeem threshold + ); + // reset collateral fees to 0 + vm.prank(admin); + ubiquityPoolFacet.setFees(0, 0, 0); + + // user sends 100 collateral tokens and gets 100 Dollars + vm.prank(user); + vm.expectRevert("Cannot mint with zero collateral"); + ubiquityPoolFacet.mintDollar( + 0, // collateral index + 0, // Dollar amount + 100e18, // min amount of Dollars to mint + 0 // max collateral to send + ); + } + function testMintDollar_ShouldRevert_OnDollarAmountSlippage() public { vm.prank(admin); ubiquityPoolFacet.setPriceThresholds( From 8efd07fd59b569564b93e5d9326a209f6b89d709 Mon Sep 17 00:00:00 2001 From: Korrrba Date: Fri, 2 Feb 2024 18:07:17 +0100 Subject: [PATCH 3/3] test: update comment in zero collateral mint test --- packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol b/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol index 59341b068..af455ffa4 100644 --- a/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol +++ b/packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol @@ -339,7 +339,7 @@ contract UbiquityPoolFacetTest is DiamondTestSetup { vm.prank(admin); ubiquityPoolFacet.setFees(0, 0, 0); - // user sends 100 collateral tokens and gets 100 Dollars + // user tries to mint with zero collateral vm.prank(user); vm.expectRevert("Cannot mint with zero collateral"); ubiquityPoolFacet.mintDollar(