Skip to content

Commit

Permalink
feat: prevent duplicate collateral tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
gitcoindev committed Feb 24, 2024
1 parent 38c3656 commit 02e700b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
28 changes: 25 additions & 3 deletions packages/contracts/src/dollar/libraries/LibUbiquityPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,24 @@ library LibUbiquityPool {
return poolStorage.collateralAddresses;
}

/**
* @notice Check if collateral token with given address already exists
* @param collateralAddress The collateral token address to check
*/
function collateralExists(
address collateralAddress
) internal view returns (bool) {
UbiquityPoolStorage storage poolStorage = ubiquityPoolStorage();
address[] memory collateralAddresses = poolStorage.collateralAddresses;

for (uint256 i = 0; i < collateralAddresses.length; i++) {
if (collateralAddresses[i] == collateralAddress) {
return true;
}
}
return false;
}

/**
* @notice Returns collateral information
* @param collateralAddress Address of the collateral token
Expand Down Expand Up @@ -533,10 +551,9 @@ library LibUbiquityPool {
// roundId
int256 answer, // startedAt
,
uint256 updatedAt,
uint256 updatedAt, // answeredInRound

) = // answeredInRound
priceFeed.latestRoundData();
) = priceFeed.latestRoundData();

// fetch number of decimals in chainlink feed
uint256 priceFeedDecimals = priceFeed.decimals();
Expand Down Expand Up @@ -631,6 +648,11 @@ library LibUbiquityPool {
address chainLinkPriceFeedAddress,
uint256 poolCeiling
) internal {
require(
!collateralExists(collateralAddress),
"Collateral already added"
);

UbiquityPoolStorage storage poolStorage = ubiquityPoolStorage();

uint256 collateralIndex = poolStorage.collateralAddresses.length;
Expand Down
13 changes: 13 additions & 0 deletions packages/contracts/test/diamond/facets/UbiquityPoolFacet.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,19 @@ contract UbiquityPoolFacetTest is DiamondTestSetup {
assertEq(info.redemptionFee, 20000);
}

function testAddCollateralToken_ShouldRevertIfCollateralAlreadyExists()
public
{
uint256 poolCeiling = 50_000e18;
vm.startPrank(admin);
vm.expectRevert("Collateral already added");
ubiquityPoolFacet.addCollateralToken(
address(collateralToken),
address(collateralTokenPriceFeed),
poolCeiling
);
}

function testRemoveAmoMinter_ShouldRemoveAmoMinter() public {
vm.startPrank(admin);

Expand Down

0 comments on commit 02e700b

Please sign in to comment.