From 10ee4881ea402b0f80dcca6d6920ce9297ae7e0f Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:39:32 -0400 Subject: [PATCH 01/10] dynamically fetch epochManagerEnabler && carbonOffsettingPartner ++ to registry --- .../contracts-0.8/common/EpochManager.sol | 23 ++++++------------- .../contracts-0.8/common/UsingRegistry.sol | 2 ++ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/packages/protocol/contracts-0.8/common/EpochManager.sol b/packages/protocol/contracts-0.8/common/EpochManager.sol index 6301ac70b2..a3cb9b7d33 100644 --- a/packages/protocol/contracts-0.8/common/EpochManager.sol +++ b/packages/protocol/contracts-0.8/common/EpochManager.sol @@ -58,9 +58,6 @@ contract EpochManager is mapping(uint256 => Epoch) private epochs; mapping(address => uint256) public validatorPendingPayments; - address public carbonOffsettingPartner; - address public epochManagerInitializer; - /** * @notice Event emited when epochProcessing has begun. * @param epochNumber The epoch number that is being processed. @@ -74,7 +71,10 @@ contract EpochManager is event EpochProcessingEnded(uint256 indexed epochNumber); modifier onlyEpochManagerInitializer() { - require(msg.sender == epochManagerInitializer, "msg.sender is not Initializer"); + require( + msg.sender == registry.getAddressForOrDie(EPOCH_MANAGER_INITIALIZER_REGISTRY_ID), + "msg.sender is not Initializer" + ); _; } @@ -89,18 +89,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 _epochManagerInitializer - ) external initializer { - require(_epochManagerInitializer != address(0), "EpochManagerInitializer address is required"); + function initialize(address registryAddress, uint256 newEpochDuration) external initializer { _transferOwnership(msg.sender); setRegistry(registryAddress); setEpochDuration(newEpochDuration); - carbonOffsettingPartner = _carbonOffsettingPartner; - epochManagerInitializer = _epochManagerInitializer; } // DESIGNDESICION(XXX): we assume that the first epoch on the L2 starts as soon as the system is initialized @@ -127,7 +119,6 @@ contract EpochManager is _currentEpoch.startTimestamp = block.timestamp; elected = firstElected; - epochManagerInitializer = address(0); } // TODO maybe "freezeEpochRewards" "prepareForNextEpoch" @@ -208,7 +199,7 @@ contract EpochManager is epochProcessing.totalRewardsCommunity ); getCeloUnreleasedTreasure().release( - carbonOffsettingPartner, + getEpochRewards().carbonOffsettingPartner(), epochProcessing.totalRewardsCarbonFund ); // run elections @@ -285,7 +276,7 @@ contract EpochManager is } function systemAlreadyInitialized() public view returns (bool) { - return initialized && epochManagerInitializer == address(0); + return initialized; } function allocateValidatorsRewards() internal { diff --git a/packages/protocol/contracts-0.8/common/UsingRegistry.sol b/packages/protocol/contracts-0.8/common/UsingRegistry.sol index 5815b9807e..6c293bf03d 100644 --- a/packages/protocol/contracts-0.8/common/UsingRegistry.sol +++ b/packages/protocol/contracts-0.8/common/UsingRegistry.sol @@ -55,6 +55,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_INITIALIZER_REGISTRY_ID = + keccak256(abi.encodePacked("EpochManagerInitializer")); bytes32 constant EPOCH_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("EpochManager")); bytes32 constant SCORE_MANAGER_REGISTRY_ID = keccak256(abi.encodePacked("ScoreManager")); // solhint-enable state-visibility From de8a8bc8a6af69998873c6987cd4dc1063cb9b04 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:41:59 -0400 Subject: [PATCH 02/10] PR feedback --- packages/protocol/contracts-0.8/common/EpochManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts-0.8/common/EpochManager.sol b/packages/protocol/contracts-0.8/common/EpochManager.sol index a3cb9b7d33..6fcc517e56 100644 --- a/packages/protocol/contracts-0.8/common/EpochManager.sol +++ b/packages/protocol/contracts-0.8/common/EpochManager.sol @@ -276,7 +276,7 @@ contract EpochManager is } function systemAlreadyInitialized() public view returns (bool) { - return initialized; + return initialized && elected.length > 0; } function allocateValidatorsRewards() internal { From 90b15bd725bb8a31428ff8bb948f798aff5f0487 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:42:48 -0400 Subject: [PATCH 03/10] removed onlyL1 modifier in setter functions --- .../contracts/governance/EpochRewards.sol | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/protocol/contracts/governance/EpochRewards.sol b/packages/protocol/contracts/governance/EpochRewards.sol index e04ac3c68c..ac7b492e29 100644 --- a/packages/protocol/contracts/governance/EpochRewards.sol +++ b/packages/protocol/contracts/governance/EpochRewards.sol @@ -283,7 +283,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" @@ -299,10 +299,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" @@ -319,7 +316,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(), @@ -335,7 +332,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); @@ -355,7 +352,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() || @@ -382,7 +379,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(), @@ -404,7 +401,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), From 352f74e4e8b8ad07a23ee8c0ac58ce4609a568da Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 16 Sep 2024 20:04:01 -0400 Subject: [PATCH 04/10] updated unit test to reflect changes --- .../governance/test/EpochRewardsMock.sol | 1 + .../common/interfaces/IEpochManager.sol | 1 - .../governance/interfaces/IEpochRewards.sol | 1 + .../test-sol/unit/common/EpochManager.t.sol | 5 +-- .../governance/network/EpochRewards.t.sol | 45 ++++++++++++------- .../protocol/test-sol/utils/ECDSAHelper.sol | 2 +- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol b/packages/protocol/contracts-0.8/governance/test/EpochRewardsMock.sol index af929d275e..7dad7559a5 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/interfaces/IEpochManager.sol b/packages/protocol/contracts/common/interfaces/IEpochManager.sol index 964187f9f5..7f848f47a8 100644 --- a/packages/protocol/contracts/common/interfaces/IEpochManager.sol +++ b/packages/protocol/contracts/common/interfaces/IEpochManager.sol @@ -17,6 +17,5 @@ interface IEpochManager { function getCurrentEpoch() external view returns (uint256, uint256, uint256, uint256, uint256); function getCurrentEpochNumber() external view returns (uint256); function getElected() external view returns (address[] memory); - function epochManagerInitializer() external view returns (address); function epochDuration() external view returns (uint256); } 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/test-sol/unit/common/EpochManager.t.sol b/packages/protocol/test-sol/unit/common/EpochManager.t.sol index 62c8cf0cb0..764af3d427 100644 --- a/packages/protocol/test-sol/unit/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/unit/common/EpochManager.t.sol @@ -90,7 +90,7 @@ contract EpochManagerTest is Test, TestConstants, Utils08 { uint256 res = scoreManager.getValidatorScore(actor("validator1")); uint256 res2 = epochRewards.getCommunityRewardFraction(); - epochManager.initialize(REGISTRY_ADDRESS, 10, carbonOffsettingPartner, epochManagerInitializer); + epochManager.initialize(REGISTRY_ADDRESS, 10); blockTravel(vm, firstEpochBlock); } @@ -100,12 +100,11 @@ contract EpochManagerTest_initialize is EpochManagerTest { function test_initialize() public virtual { assertEq(address(epochManager.registry()), REGISTRY_ADDRESS); assertEq(epochManager.epochDuration(), 10); - assertEq(epochManager.carbonOffsettingPartner(), carbonOffsettingPartner); } function test_Reverts_WhenAlreadyInitialized() public virtual { vm.expectRevert("contract already initialized"); - epochManager.initialize(REGISTRY_ADDRESS, 10, carbonOffsettingPartner, epochManagerInitializer); + epochManager.initialize(REGISTRY_ADDRESS, 10); } } 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 64de3207df..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); } } diff --git a/packages/protocol/test-sol/utils/ECDSAHelper.sol b/packages/protocol/test-sol/utils/ECDSAHelper.sol index cd85d52ccc..aaa7c1119a 100644 --- a/packages/protocol/test-sol/utils/ECDSAHelper.sol +++ b/packages/protocol/test-sol/utils/ECDSAHelper.sol @@ -13,7 +13,7 @@ contract ECDSAHelper is Test { bytes32 _s ) public returns (bytes memory) { address SECP256K1Address = actor("SECP256K1Address"); - deployCodeTo("out/SECP256K1.sol/SECP256K1.0.5.17.json", SECP256K1Address); + deployCodeTo("SECP256K1.sol:SECP256K1", SECP256K1Address); sECP256K1 = ISECP256K1(SECP256K1Address); string memory header = "\x19Ethereum Signed Message:\n32"; From 10da453975aeaa43bb13227b77d06aad1179e6cb Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:31:22 -0400 Subject: [PATCH 05/10] fixing tests --- packages/protocol/test-sol/constants.sol | 1 + .../test-sol/devchain/e2e/common/EpochManager.t.sol | 2 +- .../test-sol/devchain/migration/Migration.t.sol | 12 ------------ .../protocol/test-sol/unit/common/EpochManager.t.sol | 7 ++++--- 4 files changed, 6 insertions(+), 16 deletions(-) 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 45ef087631..1e096cbf00 100644 --- a/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol @@ -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..9582ef2e49 100644 --- a/packages/protocol/test-sol/devchain/migration/Migration.t.sol +++ b/packages/protocol/test-sol/devchain/migration/Migration.t.sol @@ -233,18 +233,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(); diff --git a/packages/protocol/test-sol/unit/common/EpochManager.t.sol b/packages/protocol/test-sol/unit/common/EpochManager.t.sol index 3c006f286a..5145003cc6 100644 --- a/packages/protocol/test-sol/unit/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/unit/common/EpochManager.t.sol @@ -79,6 +79,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)); @@ -137,7 +138,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); @@ -149,13 +150,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); } } From 69c822845283699a91bed9dc98e99ee75feac7a7 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:55:04 -0400 Subject: [PATCH 06/10] fix test --- packages/protocol/test-sol/devchain/migration/Migration.t.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/protocol/test-sol/devchain/migration/Migration.t.sol b/packages/protocol/test-sol/devchain/migration/Migration.t.sol index 9582ef2e49..8e0a884ad8 100644 --- a/packages/protocol/test-sol/devchain/migration/Migration.t.sol +++ b/packages/protocol/test-sol/devchain/migration/Migration.t.sol @@ -213,7 +213,7 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { vm.stopPrank(); activateValidators(); - vm.deal(address(celoUnreleasedTreasure), 100_000_000 ether); + vm.deal(address(celoUnreleasedTreasure), L2_INITIAL_STASH_BALANCE); } function activateValidators() public { @@ -255,7 +255,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); } From 2c35ca689e0f49baa090e38ad685879d4102fce8 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:15:27 -0400 Subject: [PATCH 07/10] fixed migration data --- packages/protocol/migrationsConfig.js | 1 - packages/protocol/migrations_sol/migrationsConfig.json | 3 +-- .../protocol/releaseData/initializationData/release12.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) 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/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/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": [] From d993e1a61ac211c1c87810bec48d830d964d06fa Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:24:05 -0400 Subject: [PATCH 08/10] fixed migration script error --- packages/protocol/migrations_sol/Migration.s.sol | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/protocol/migrations_sol/Migration.s.sol b/packages/protocol/migrations_sol/Migration.s.sol index 93d1b8d568..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) From be3358d12b3169005f5f8885f5109b28caec4c5b Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:01:53 -0400 Subject: [PATCH 09/10] removed unused modifier --- packages/protocol/contracts-0.8/governance/Validators.sol | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/protocol/contracts-0.8/governance/Validators.sol b/packages/protocol/contracts-0.8/governance/Validators.sol index dbd60d6b26..f6cc16defa 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 From 6b85c47154dc9e99db281772a87ef774960926ba Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:15:28 -0400 Subject: [PATCH 10/10] removed duplicate or unused code --- .../devchain/migration/Migration.t.sol | 24 ------------------- .../test-sol/unit/common/EpochManager.t.sol | 2 -- .../governance/network/EpochRewards.t.sol | 5 +--- 3 files changed, 1 insertion(+), 30 deletions(-) diff --git a/packages/protocol/test-sol/devchain/migration/Migration.t.sol b/packages/protocol/test-sol/devchain/migration/Migration.t.sol index 8e0a884ad8..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), L2_INITIAL_STASH_BALANCE); } function activateValidators() public { diff --git a/packages/protocol/test-sol/unit/common/EpochManager.t.sol b/packages/protocol/test-sol/unit/common/EpochManager.t.sol index 5145003cc6..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); 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 55caca0a1c..69acd19c38 100644 --- a/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol +++ b/packages/protocol/test-sol/unit/governance/network/EpochRewards.t.sol @@ -459,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); @@ -470,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; @@ -517,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; @@ -774,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 {