diff --git a/src/GEMxToken.sol b/src/GEMxToken.sol index 12b2dd3..250d3d9 100644 --- a/src/GEMxToken.sol +++ b/src/GEMxToken.sol @@ -96,6 +96,10 @@ contract GEMxToken is return address(oracle); } + function setOracleAddress(address newAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { + oracle = AggregatorV3Interface(newAddress); + } + function getEsuPerToken() external view returns (uint256, uint256) { return (esuPerTokenValue, esuPerTokenPrecision); } diff --git a/test/mocks/MockV3Aggregator.sol b/test/mocks/MockV3Aggregator.sol index 6a1c337..4f1feb0 100644 --- a/test/mocks/MockV3Aggregator.sol +++ b/test/mocks/MockV3Aggregator.sol @@ -1,5 +1,4 @@ // SPDX-License-Identifier: UNLICENSED - pragma solidity 0.8.20; import {AggregatorV3Interface} from "@chainlink/contracts/v0.8/shared/interfaces/AggregatorV3Interface.sol"; diff --git a/test/unit/GEMxTokenTest.t.sol b/test/unit/GEMxTokenTest.t.sol index 0d89e9c..4e740a3 100644 --- a/test/unit/GEMxTokenTest.t.sol +++ b/test/unit/GEMxTokenTest.t.sol @@ -59,6 +59,26 @@ contract GEMxTokenTest is Test { assertEq(esuPrecision, 100, "Initial EsuPerToken is 0.01"); } + /*##################################################################################*/ + /*################################# Oracle Update ##################################*/ + /*##################################################################################*/ + + function testOnlyAdminCanUpdateOracle() public { + address currentOracleAddress = token.getOracleAddress(); + MockV3Aggregator newOracle = new MockV3Aggregator(1000); + + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, user, token.DEFAULT_ADMIN_ROLE()) + ); + vm.prank(user); + token.setOracleAddress(address(newOracle)); + assertEq(token.getOracleAddress(), currentOracleAddress); + + vm.prank(admin); + token.setOracleAddress(address(newOracle)); + assertEq(token.getOracleAddress(), address(newOracle)); + } + /*##################################################################################*/ /*###################################### ESU #######################################*/ /*##################################################################################*/ @@ -132,7 +152,6 @@ contract GEMxTokenTest is Test { token.setEsuPerToken(9, 10000); (esu, esuPrecision) = token.getEsuPerToken(); - assertEq(esu, 9); assertEq(esuPrecision, 10000); }