diff --git a/packages/protocol/contracts-0.8/common/EpochManager.sol b/packages/protocol/contracts-0.8/common/EpochManager.sol index 609149a872..eb64bf1135 100644 --- a/packages/protocol/contracts-0.8/common/EpochManager.sol +++ b/packages/protocol/contracts-0.8/common/EpochManager.sol @@ -61,9 +61,6 @@ contract EpochManager is mapping(uint256 => Epoch) private epochs; mapping(address => uint256) public validatorPendingPayments; - address public carbonOffsettingPartner; - address public epochManagerEnabler; - /** * @notice Event emited when epochProcessing has begun. * @param epochNumber The epoch number that is being processed. @@ -77,7 +74,10 @@ contract EpochManager is event EpochProcessingEnded(uint256 indexed epochNumber); modifier onlyEpochManagerEnabler() { - require(msg.sender == epochManagerEnabler, "msg.sender is not Initializer"); + require( + msg.sender == registry.getAddressForOrDie(EPOCH_MANAGER_ENABLER_REGISTRY_ID), + "msg.sender is not Enabler" + ); _; } @@ -92,19 +92,10 @@ contract EpochManager is * @param registryAddress The address of the registry core smart contract. * @param newEpochDuration The duration of an epoch in seconds. */ - function initialize( - address registryAddress, - uint256 newEpochDuration, - address _carbonOffsettingPartner, - address _epochManagerEnabler - ) external initializer { - require(_carbonOffsettingPartner != address(0), "carbonOffsettingPartner address is required"); - require(_epochManagerEnabler != address(0), "EpochManagerEnabler address is required"); + function initialize(address registryAddress, uint256 newEpochDuration) external initializer { _transferOwnership(msg.sender); setRegistry(registryAddress); setEpochDuration(newEpochDuration); - carbonOffsettingPartner = _carbonOffsettingPartner; - epochManagerEnabler = _epochManagerEnabler; } // DESIGNDESICION(XXX): we assume that the first epoch on the L2 starts as soon as the system is initialized @@ -140,7 +131,6 @@ contract EpochManager is _currentEpoch.startTimestamp = block.timestamp; elected = firstElected; - epochManagerEnabler = address(0); } // TODO maybe "freezeEpochRewards" "prepareForNextEpoch" @@ -228,7 +218,7 @@ contract EpochManager is epochProcessing.totalRewardsCommunity ); getCeloUnreleasedTreasure().release( - carbonOffsettingPartner, + getEpochRewards().carbonOffsettingPartner(), epochProcessing.totalRewardsCarbonFund ); // run elections @@ -313,7 +303,7 @@ contract EpochManager is } function systemAlreadyInitialized() public view returns (bool) { - return initialized && epochManagerEnabler == address(0); + return initialized && elected.length > 0; } /** diff --git a/packages/protocol/contracts-0.8/common/UsingRegistry.sol b/packages/protocol/contracts-0.8/common/UsingRegistry.sol index 9b1d13dd3e..56ea92f121 100644 --- a/packages/protocol/contracts-0.8/common/UsingRegistry.sol +++ b/packages/protocol/contracts-0.8/common/UsingRegistry.sol @@ -54,6 +54,8 @@ contract UsingRegistry is Ownable { bytes32 constant LOCKED_CELO_REGISTRY_ID = keccak256(abi.encodePacked("LockedCelo")); bytes32 constant CELO_UNRELEASED_TREASURE_REGISTRY_ID = keccak256(abi.encodePacked("CeloUnreleasedTreasure")); + bytes32 constant EPOCH_MANAGER_ENABLER_REGISTRY_ID = + keccak256(abi.encodePacked("EpochManagerEnabler")); bytes32 constant EPOCH_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("EpochManager")); bytes32 constant SCORE_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("ScoreManager")); // solhint-enable state-visibility diff --git a/packages/protocol/contracts-0.8/common/interfaces/IEpochManagerInitializer.sol b/packages/protocol/contracts-0.8/common/interfaces/IEpochManagerInitializer.sol index 119e2f8616..ee41888918 100644 --- a/packages/protocol/contracts-0.8/common/interfaces/IEpochManagerInitializer.sol +++ b/packages/protocol/contracts-0.8/common/interfaces/IEpochManagerInitializer.sol @@ -2,10 +2,5 @@ pragma solidity >=0.5.13 <0.9.0; interface IEpochManagerInitializer { - function initialize( - address registryAddress, - uint256 newEpochDuration, - address _carbonOffsettingPartner, - address _epochManagerEnabler - ) external; + function initialize(address registryAddress, uint256 newEpochDuration) external; } diff --git a/packages/protocol/contracts-0.8/governance/Validators.sol b/packages/protocol/contracts-0.8/governance/Validators.sol index c29db767ad..a52cd5ca89 100644 --- a/packages/protocol/contracts-0.8/governance/Validators.sol +++ b/packages/protocol/contracts-0.8/governance/Validators.sol @@ -166,11 +166,6 @@ contract Validators is _; } - modifier onlyEpochManager() { - require(msg.sender == address(getEpochManager()), "Only epoch manager can call"); - _; - } - /** * @notice Sets initialized == true on implementation contracts * @param test Set to true to skip implementation initialization diff --git a/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol b/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol index 38967cf392..ce6125dcee 100644 --- a/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol +++ b/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol @@ -8,6 +8,7 @@ import "../../../contracts/governance/interfaces/IEpochRewards.sol"; */ contract EpochRewardsMock08 is IEpochRewards { uint256 private numValidatorsInCurrentSet; + address public carbonOffsettingPartner; function setNumberValidatorsInCurrentSet(uint256 value) external { numValidatorsInCurrentSet = value; diff --git a/packages/protocol/contracts/common/UsingRegistry.sol b/packages/protocol/contracts/common/UsingRegistry.sol index 08eb3f3650..0f8e11285c 100644 --- a/packages/protocol/contracts/common/UsingRegistry.sol +++ b/packages/protocol/contracts/common/UsingRegistry.sol @@ -54,8 +54,8 @@ contract UsingRegistry is Ownable { bytes32 constant CELO_UNRELEASED_TREASURE_REGISTRY_ID = keccak256(abi.encodePacked("CeloUnreleasedTreasure")); bytes32 constant EPOCH_REWARDS_REGISTRY_ID = keccak256(abi.encodePacked("EpochRewards")); - bytes32 constant EPOCH_MANAGER_INITIALIZER_REGISTRY_ID = - keccak256(abi.encodePacked("EpochManagerInitializer")); + bytes32 constant EPOCH_MANAGER_ENABLER_REGISTRY_ID = + keccak256(abi.encodePacked("EpochManagerEnabler")); bytes32 constant EPOCH_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("EpochManager")); // solhint-enable state-visibility diff --git a/packages/protocol/contracts/common/UsingRegistryV2.sol b/packages/protocol/contracts/common/UsingRegistryV2.sol index 3f812931c4..da33af2a03 100644 --- a/packages/protocol/contracts/common/UsingRegistryV2.sol +++ b/packages/protocol/contracts/common/UsingRegistryV2.sol @@ -67,8 +67,8 @@ contract UsingRegistryV2 { bytes32 internal constant CELO_TOKEN_REGISTRY_ID = keccak256(abi.encodePacked("CeloToken")); bytes32 internal constant LOCKED_CELO_REGISTRY_ID = keccak256(abi.encodePacked("LockedCelo")); bytes32 internal constant EPOCH_REWARDS_REGISTRY_ID = keccak256(abi.encodePacked("EpochRewards")); - bytes32 internal constant EPOCH_MANAGER_INITIALIZER_REGISTRY_ID = - keccak256(abi.encodePacked("EpochManagerInitializer")); + bytes32 internal constant EPOCH_MANAGER_ENABLER_REGISTRY_ID = + keccak256(abi.encodePacked("EpochManagerEnabler")); bytes32 internal constant EPOCH_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("EpochManager")); modifier onlyRegisteredContract(bytes32 identifierHash) { diff --git a/packages/protocol/contracts/common/interfaces/IEpochManager.sol b/packages/protocol/contracts/common/interfaces/IEpochManager.sol index c0f9736179..4d48466c7a 100644 --- a/packages/protocol/contracts/common/interfaces/IEpochManager.sol +++ b/packages/protocol/contracts/common/interfaces/IEpochManager.sol @@ -16,7 +16,6 @@ interface IEpochManager { function getCurrentEpoch() external view returns (uint256, uint256, uint256, uint256); function getCurrentEpochNumber() external view returns (uint256); function getElected() external view returns (address[] memory); - function epochManagerEnabler() external view returns (address); function epochDuration() external view returns (uint256); function firstKnownEpoch() external view returns (uint256); function getEpochProcessingState() diff --git a/packages/protocol/contracts/governance/EpochRewards.sol b/packages/protocol/contracts/governance/EpochRewards.sol index 774da4f90d..c55d3d7433 100644 --- a/packages/protocol/contracts/governance/EpochRewards.sol +++ b/packages/protocol/contracts/governance/EpochRewards.sol @@ -286,7 +286,7 @@ contract EpochRewards is * @param value The percentage of the total reward to be sent to the community funds. * @return True upon success. */ - function setCommunityRewardFraction(uint256 value) public onlyOwner onlyL1 returns (bool) { + function setCommunityRewardFraction(uint256 value) public onlyOwner returns (bool) { require( value != communityRewardFraction.unwrap() && value < FixidityLib.fixed1().unwrap(), "Value must be different from existing community reward fraction and less than 1" @@ -302,10 +302,7 @@ contract EpochRewards is * @param value The percentage of the total reward to be sent to the carbon offsetting partner. * @return True upon success. */ - function setCarbonOffsettingFund( - address partner, - uint256 value - ) public onlyOwner onlyL1 returns (bool) { + function setCarbonOffsettingFund(address partner, uint256 value) public onlyOwner returns (bool) { require( partner != carbonOffsettingPartner || value != carbonOffsettingFraction.unwrap(), "Partner and value must be different from existing carbon offsetting fund" @@ -322,7 +319,7 @@ contract EpochRewards is * @param value The percentage of floating Gold voting to target. * @return True upon success. */ - function setTargetVotingGoldFraction(uint256 value) public onlyOwner onlyL1 returns (bool) { + function setTargetVotingGoldFraction(uint256 value) public onlyOwner returns (bool) { require(value != targetVotingGoldFraction.unwrap(), "Target voting gold fraction unchanged"); require( value < FixidityLib.fixed1().unwrap(), @@ -338,7 +335,7 @@ contract EpochRewards is * @param value The value in Celo Dollars. * @return True upon success. */ - function setTargetValidatorEpochPayment(uint256 value) public onlyOwner onlyL1 returns (bool) { + function setTargetValidatorEpochPayment(uint256 value) public onlyOwner returns (bool) { require(value != targetValidatorEpochPayment, "Target validator epoch payment unchanged"); targetValidatorEpochPayment = value; emit TargetValidatorEpochPaymentSet(value); @@ -358,7 +355,7 @@ contract EpochRewards is uint256 max, uint256 underspendAdjustmentFactor, uint256 overspendAdjustmentFactor - ) public onlyOwner onlyL1 returns (bool) { + ) public onlyOwner returns (bool) { require( max != rewardsMultiplierParams.max.unwrap() || overspendAdjustmentFactor != rewardsMultiplierParams.adjustmentFactors.overspend.unwrap() || @@ -385,7 +382,7 @@ contract EpochRewards is function setTargetVotingYieldParameters( uint256 max, uint256 adjustmentFactor - ) public onlyOwner onlyL1 returns (bool) { + ) public onlyOwner returns (bool) { require( max != targetVotingYieldParams.max.unwrap() || adjustmentFactor != targetVotingYieldParams.adjustmentFactor.unwrap(), @@ -407,7 +404,7 @@ contract EpochRewards is * @param targetVotingYield The relative target block reward for voters. * @return True upon success. */ - function setTargetVotingYield(uint256 targetVotingYield) public onlyOwner onlyL1 returns (bool) { + function setTargetVotingYield(uint256 targetVotingYield) public onlyOwner returns (bool) { FixidityLib.Fraction memory target = FixidityLib.wrap(targetVotingYield); require( target.lte(targetVotingYieldParams.max), diff --git a/packages/protocol/contracts/governance/interfaces/IEpochRewards.sol b/packages/protocol/contracts/governance/interfaces/IEpochRewards.sol index 4cf586aa1d..1c32d66993 100644 --- a/packages/protocol/contracts/governance/interfaces/IEpochRewards.sol +++ b/packages/protocol/contracts/governance/interfaces/IEpochRewards.sol @@ -11,4 +11,5 @@ interface IEpochRewards { function getCarbonOffsettingFraction() external view returns (uint256); function getTargetVotingGoldFraction() external view returns (uint256); function getRewardsMultiplier() external view returns (uint256); + function carbonOffsettingPartner() external view returns (address); } diff --git a/packages/protocol/migrationsConfig.js b/packages/protocol/migrationsConfig.js index 6baf43424a..79045a72c5 100644 --- a/packages/protocol/migrationsConfig.js +++ b/packages/protocol/migrationsConfig.js @@ -79,7 +79,6 @@ const DefaultConfig = { }, epochManager: { newEpochDuration: 100, - carbonOffsettingPartner: '0x0000000000000000000000000000000000000000', }, exchange: { spread: 5 / 1000, diff --git a/packages/protocol/migrations_sol/Migration.s.sol b/packages/protocol/migrations_sol/Migration.s.sol index 33202c48a9..3b8d3474b7 100644 --- a/packages/protocol/migrations_sol/Migration.s.sol +++ b/packages/protocol/migrations_sol/Migration.s.sol @@ -960,10 +960,6 @@ contract Migration is Script, UsingRegistry, MigrationsConstants { } function migrateEpochManager(string memory json) public { - address carbonOffsettingPartner = abi.decode( - json.parseRaw(".epochManager.carbonOffsettingPartner"), - (address) - ); address newEpochDuration = abi.decode( json.parseRaw(".epochManager.newEpochDuration"), (address) @@ -974,9 +970,7 @@ contract Migration is Script, UsingRegistry, MigrationsConstants { abi.encodeWithSelector( IEpochManagerInitializer.initialize.selector, REGISTRY_ADDRESS, - newEpochDuration, - carbonOffsettingPartner, - registry.getAddressForString("EpochManagerEnabler") + newEpochDuration ) ); } diff --git a/packages/protocol/migrations_sol/MigrationL2.s.sol b/packages/protocol/migrations_sol/MigrationL2.s.sol index 6147a4c350..dc8a2086de 100644 --- a/packages/protocol/migrations_sol/MigrationL2.s.sol +++ b/packages/protocol/migrations_sol/MigrationL2.s.sol @@ -40,7 +40,9 @@ contract MigrationL2 is Script, MigrationsConstants, UsingRegistry { console.log("Initializing EpochManager system"); address[] memory firstElected = getValidators().getRegisteredValidators(); IEpochManager epochManager = getEpochManager(); - address epochManagerEnablerAddress = epochManager.epochManagerEnabler(); + address epochManagerEnablerAddress = registry.getAddressForOrDie( + EPOCH_MANAGER_ENABLER_REGISTRY_ID + ); IEpochManagerEnabler epochManagerEnabler = IEpochManagerEnabler(epochManagerEnablerAddress); epochManagerEnabler.initEpochManager(); diff --git a/packages/protocol/migrations_sol/migrationsConfig.json b/packages/protocol/migrations_sol/migrationsConfig.json index bd3e28e416..7edaee535b 100644 --- a/packages/protocol/migrations_sol/migrationsConfig.json +++ b/packages/protocol/migrations_sol/migrationsConfig.json @@ -132,8 +132,7 @@ "frozen": false }, "epochManager": { - "newEpochDuration": 86400, - "carbonOffsettingPartner": "0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972" + "newEpochDuration": 86400 }, "random": { "randomnessBlockRetentionWindow": "720", diff --git a/packages/protocol/migrations_ts/26_103_epoch_manager.ts b/packages/protocol/migrations_ts/26_103_epoch_manager.ts index 6769b4ac5e..4956ebcc13 100644 --- a/packages/protocol/migrations_ts/26_103_epoch_manager.ts +++ b/packages/protocol/migrations_ts/26_103_epoch_manager.ts @@ -1,21 +1,11 @@ import { SOLIDITY_08_PACKAGE } from '@celo/protocol/contractPackages' import { CeloContractName } from '@celo/protocol/lib/registry-utils' -import { deploymentForCoreContract, getProxiedContract } from '@celo/protocol/lib/web3-utils' +import { deploymentForCoreContract } from '@celo/protocol/lib/web3-utils' import { config } from '@celo/protocol/migrationsConfig' import { EpochManagerInstance } from 'types/08' const initializeArgs = async (): Promise => { - const epochManagerInitializer = await getProxiedContract( - CeloContractName.EpochManagerEnabler, - SOLIDITY_08_PACKAGE - ) - - return [ - config.registry.predeployedProxyAddress, - config.epochManager.newEpochDuration, - config.epochManager.carbonOffsettingPartner, - epochManagerInitializer.address, - ] + return [config.registry.predeployedProxyAddress, config.epochManager.newEpochDuration] } module.exports = deploymentForCoreContract( diff --git a/packages/protocol/releaseData/initializationData/release12.json b/packages/protocol/releaseData/initializationData/release12.json index 635895d47e..cafed28404 100644 --- a/packages/protocol/releaseData/initializationData/release12.json +++ b/packages/protocol/releaseData/initializationData/release12.json @@ -1,6 +1,6 @@ { "CeloUnreleasedTreasure": ["0x000000000000000000000000000000000000ce10"], - "EpochManager": ["0x000000000000000000000000000000000000ce10", 86400, "0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972", "0x0000000000000000000000000000000000000000"], + "EpochManager": ["0x000000000000000000000000000000000000ce10", 86400], "EpochManagerEnabler": ["0x000000000000000000000000000000000000ce10"], "ScoreManager": [], "FeeCurrencyDirectory": [] diff --git a/packages/protocol/test-sol/constants.sol b/packages/protocol/test-sol/constants.sol index 92f8422412..379660a798 100644 --- a/packages/protocol/test-sol/constants.sol +++ b/packages/protocol/test-sol/constants.sol @@ -25,6 +25,7 @@ contract TestConstants { string constant GovernanceContract = "Governance"; string constant EpochRewardsContract = "EpochRewards"; string constant EpochManagerContract = "EpochManager"; + string constant EpochManagerEnablerContract = "EpochManagerEnabler"; string constant ScoreManagerContract = "ScoreManager"; string constant ReserveContract = "Reserve"; string constant CeloUnreleasedTreasureContract = "CeloUnreleasedTreasure"; diff --git a/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol b/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol index 6f5b433830..1e096cbf00 100644 --- a/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol @@ -41,7 +41,7 @@ contract E2E_EpochManager is Test, Devchain, Utils08, ECDSAHelper08 { uint256 totalVotes = election.getTotalVotes(); epochManagerOwner = Ownable(address(epochManager)).owner(); - epochManagerEnabler = epochManager.epochManagerEnabler(); + epochManagerEnabler = registry.getAddressForOrDie(EPOCH_MANAGER_ENABLER_REGISTRY_ID); firstElected = getValidators().getRegisteredValidators(); epochDuration = epochManager.epochDuration(); @@ -98,7 +98,7 @@ contract E2E_EpochManager_InitializeSystem is E2E_EpochManager { } function test_shouldRevert_WhenCalledByNonEnabler() public { - vm.expectRevert("msg.sender is not Initializer"); + vm.expectRevert("msg.sender is not Enabler"); epochManager.initializeSystem(1, 1, firstElected); } diff --git a/packages/protocol/test-sol/devchain/migration/Migration.t.sol b/packages/protocol/test-sol/devchain/migration/Migration.t.sol index 8ff3ffc295..dfb87af199 100644 --- a/packages/protocol/test-sol/devchain/migration/Migration.t.sol +++ b/packages/protocol/test-sol/devchain/migration/Migration.t.sol @@ -190,30 +190,6 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { epochManagerEnabler = IEpochManagerEnabler( registry.getAddressForStringOrDie("EpochManagerEnabler") ); - scoreManager = IScoreManager(registry.getAddressForStringOrDie("ScoreManager")); - election = IElection(registry.getAddressForStringOrDie("Election")); - celoUnreleasedTreasure = ICeloUnreleasedTreasure( - registry.getAddressForStringOrDie("CeloUnreleasedTreasure") - ); - - address scoreManagerOwner = scoreManager.owner(); - vm.startPrank(scoreManagerOwner); - - scoreManager.setGroupScore(groupList[0], groupScore[0]); - scoreManager.setGroupScore(groupList[1], groupScore[1]); - scoreManager.setGroupScore(groupList[2], groupScore[2]); - - scoreManager.setValidatorScore(validatorsList[0], validatorScore[0]); - scoreManager.setValidatorScore(validatorsList[1], validatorScore[1]); - scoreManager.setValidatorScore(validatorsList[2], validatorScore[2]); - scoreManager.setValidatorScore(validatorsList[3], validatorScore[3]); - scoreManager.setValidatorScore(validatorsList[4], validatorScore[4]); - scoreManager.setValidatorScore(validatorsList[5], validatorScore[5]); - - vm.stopPrank(); - - activateValidators(); - vm.deal(address(celoUnreleasedTreasure), 100_000_000 ether); } function activateValidators() public { @@ -233,18 +209,6 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { } } - function test_IsSetupCorrect() public { - assertEq( - registry.getAddressForStringOrDie("EpochManagerEnabler"), - epochManager.epochManagerEnabler() - ); - assertEq( - registry.getAddressForStringOrDie("EpochManagerEnabler"), - address(epochManagerEnabler) - ); - assertEq(address(epochManagerEnabler), epochManager.epochManagerEnabler()); - } - function test_Reverts_whenSystemNotInitialized() public { vm.expectRevert("Epoch system not initialized"); epochManager.startNextEpochProcess(); @@ -267,7 +231,7 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { function test_Reverts_whenAlreadyInitialized() public { _MockL2Migration(validatorsList); - vm.prank(address(0)); + vm.prank(address(epochManagerEnabler)); vm.expectRevert("Epoch system already initialized"); epochManager.initializeSystem(100, block.number, firstElected); } diff --git a/packages/protocol/test-sol/unit/common/EpochManager.t.sol b/packages/protocol/test-sol/unit/common/EpochManager.t.sol index 9de1306051..11c4d533f6 100644 --- a/packages/protocol/test-sol/unit/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/unit/common/EpochManager.t.sol @@ -34,7 +34,6 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { address communityRewardFund; address reserveAddress; address scoreManagerAddress; - address nonOwner; uint256 firstEpochNumber = 100; uint256 firstEpochBlock = 100; @@ -70,7 +69,6 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { epochManagerEnabler = actor("epochManagerEnabler"); carbonOffsettingPartner = actor("carbonOffsettingPartner"); communityRewardFund = actor("communityRewardFund"); - nonOwner = actor("nonOwner"); deployCodeTo("MockRegistry.sol", abi.encode(false), REGISTRY_ADDRESS); deployCodeTo("ScoreManager.sol", abi.encode(false), scoreManagerAddress); @@ -79,6 +77,7 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { scoreManager = ScoreManager(scoreManagerAddress); registry.setAddressFor(EpochManagerContract, address(epochManager)); + registry.setAddressFor(EpochManagerEnablerContract, epochManagerEnabler); registry.setAddressFor(SortedOraclesContract, address(sortedOracles)); registry.setAddressFor(GovernanceContract, communityRewardFund); registry.setAddressFor(EpochRewardsContract, address(epochRewards)); @@ -100,12 +99,7 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { scoreManager.setValidatorScore(actor("validator1"), 1); - epochManager.initialize( - REGISTRY_ADDRESS, - epochDuration, - carbonOffsettingPartner, - epochManagerEnabler - ); + epochManager.initialize(REGISTRY_ADDRESS, 10); blockTravel(vm, firstEpochBlock); } @@ -123,14 +117,12 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { contract EpochManagerTest_initialize is EpochManagerTest { function test_initialize() public virtual { assertEq(address(epochManager.registry()), REGISTRY_ADDRESS); - assertEq(epochManager.epochDuration(), epochDuration); - assertEq(epochManager.carbonOffsettingPartner(), carbonOffsettingPartner); - assertEq(epochManager.epochManagerEnabler(), epochManagerEnabler); + assertEq(epochManager.epochDuration(), 10); } function test_Reverts_WhenAlreadyInitialized() public virtual { vm.expectRevert("contract already initialized"); - epochManager.initialize(REGISTRY_ADDRESS, 10, carbonOffsettingPartner, epochManagerEnabler); + epochManager.initialize(REGISTRY_ADDRESS, 10); } } @@ -144,7 +136,7 @@ contract EpochManagerTest_initializeSystem is EpochManagerTest { uint256 _startTimestamp, uint256 _currentRewardsBlock ) = epochManager.getCurrentEpoch(); - assertEq(epochManager.epochManagerEnabler(), address(0)); + assertGt(epochManager.getElected().length, 0); assertEq(epochManager.firstKnownEpoch(), firstEpochNumber); assertEq(_firstEpochBlock, firstEpochBlock); assertEq(_lastEpochBlock, 0); @@ -156,13 +148,13 @@ contract EpochManagerTest_initializeSystem is EpochManagerTest { function test_Reverts_processCannotBeStartedAgain() public virtual { vm.prank(epochManagerEnabler); epochManager.initializeSystem(firstEpochNumber, firstEpochBlock, firstElected); - vm.prank(address(0)); + vm.prank(epochManagerEnabler); vm.expectRevert("Epoch system already initialized"); epochManager.initializeSystem(firstEpochNumber, firstEpochBlock, firstElected); } function test_Reverts_WhenSystemInitializedByOtherContract() public virtual { - vm.expectRevert("msg.sender is not Initializer"); + vm.expectRevert("msg.sender is not Enabler"); epochManager.initializeSystem(firstEpochNumber, firstEpochBlock, firstElected); } } diff --git a/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol b/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol index 7c8a848f26..69acd19c38 100644 --- a/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol +++ b/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol @@ -193,10 +193,11 @@ contract EpochRewardsTest_setTargetVotingGoldFraction is EpochRewardsTest { epochRewards.setTargetVotingGoldFraction(targetVotingGoldFraction); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); - epochRewards.setTargetVotingGoldFraction(targetVotingGoldFraction); + vm.expectEmit(true, true, true, true); + emit TargetVotingGoldFractionSet(newFraction); + epochRewards.setTargetVotingGoldFraction(newFraction); } } @@ -238,10 +239,11 @@ contract EpochRewardsTest_setCommunityRewardFraction is EpochRewardsTest { epochRewards.setCommunityRewardFraction(communityRewardFraction); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); - epochRewards.setCommunityRewardFraction(communityRewardFraction); + vm.expectEmit(true, true, true, true); + emit CommunityRewardFractionSet(newFraction); + epochRewards.setCommunityRewardFraction(newFraction); } } @@ -274,10 +276,11 @@ contract EpochRewardsTest_setTargetValidatorEpochPayment is EpochRewardsTest { epochRewards.setTargetValidatorEpochPayment(targetValidatorEpochPayment); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); - epochRewards.setTargetValidatorEpochPayment(targetValidatorEpochPayment); + vm.expectEmit(true, true, true, true); + emit TargetValidatorEpochPaymentSet(newPayment); + epochRewards.setTargetValidatorEpochPayment(newPayment); } } @@ -332,12 +335,17 @@ contract EpochRewardsTest_setRewardsMultiplierParameters is EpochRewardsTest { ); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); + vm.expectEmit(true, true, true, true); + emit RewardsMultiplierParametersSet( + rewardsMultiplierMax, + newRewardsMultiplierAdjustmentsUnderspend, + rewardsMultiplierAdjustmentsOverspend + ); epochRewards.setRewardsMultiplierParameters( rewardsMultiplierMax, - rewardsMultiplierAdjustmentsUnderspend, + newRewardsMultiplierAdjustmentsUnderspend, rewardsMultiplierAdjustmentsOverspend ); } @@ -388,9 +396,13 @@ contract EpochRewardsTest_setTargetVotingYieldParameters is EpochRewardsTest { ); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); + vm.expectEmit(true, true, true, true); + emit TargetVotingYieldParametersSet( + newTargetVotingYieldParamsMax, + newTargetVotingYieldParamsAdjustmentFactor + ); epochRewards.setTargetVotingYieldParameters( newTargetVotingYieldParamsMax, newTargetVotingYieldParamsAdjustmentFactor @@ -420,9 +432,10 @@ contract EpochRewardsTest_setTargetVotingYield is EpochRewardsTest { epochRewards.setTargetVotingYield(newTargetVotingYieldParamsInitial); } - function test_Reverts_WhenCalledOnL2() public { + function test_Emits_WhenCalledOnL2() public { _whenL2(); - vm.expectRevert("This method is no longer supported in L2."); + vm.expectEmit(true, true, true, true); + emit TargetVotingYieldSet(newTargetVotingYieldParamsInitial); epochRewards.setTargetVotingYield(newTargetVotingYieldParamsInitial); } } @@ -446,7 +459,6 @@ contract EpochRewardsTest_getTargetVoterRewards is EpochRewardsTest { } contract EpochRewardsTest_getTargetTotalEpochPaymentsInGold is EpochRewardsTest { - // TODO(soloseng): add L2 test case that uses EpochManager function test_ShouldgetTargetTotalEpochPaymentsInGold_WhenExchangeRateIsSet() public { uint256 numberValidators = 100; epochRewards.setNumberValidatorsInCurrentSet(numberValidators); @@ -457,7 +469,6 @@ contract EpochRewardsTest_getTargetTotalEpochPaymentsInGold is EpochRewardsTest } contract EpochRewardsTest_getRewardsMultiplier is EpochRewardsTest { - // TODO(soloseng): add L2 test case using EpochManager uint256 constant timeDelta = YEAR * 10; uint256 expectedTargetTotalSupply; uint256 expectedTargetRemainingSupply; @@ -504,7 +515,6 @@ contract EpochRewardsTest_getRewardsMultiplier is EpochRewardsTest { } contract EpochRewardsTest_updateTargetVotingYield is EpochRewardsTest { - //TODO(soloseng): add L2 test case that uses epochManager uint256 constant totalSupply = 6000000 ether; uint256 constant reserveBalance = 1000000 ether; uint256 constant floatingSupply = totalSupply - reserveBalance; @@ -761,7 +771,7 @@ contract EpochRewardsTest_updateTargetVotingYield is EpochRewardsTest { epochRewards.updateTargetVotingYield(); } } -// TODO(soloseng): add L2 test case that uses the result from epochManager + contract EpochRewardsTest_WhenThereAreActiveVotesAStableTokenExchangeRateIsSetAndTheActualRemainingSupplyIs10pMoreThanTheTargetRemainingSupplyAfterRewards_calculateTargetEpochRewards is EpochRewardsTest {