diff --git a/packages/protocol/test-sol/TestWithUtils08.sol b/packages/protocol/test-sol/TestWithUtils08.sol index d409a983906..4b093abd0e7 100644 --- a/packages/protocol/test-sol/TestWithUtils08.sol +++ b/packages/protocol/test-sol/TestWithUtils08.sol @@ -5,6 +5,8 @@ import { TestConstants } from "@test-sol/constants.sol"; import { PrecompileHandler } from "@test-sol/utils/PrecompileHandler.sol"; import { IEpochManagerEnablerMock } from "@test-sol/unit/common/interfaces/IEpochManagerEnablerMock.sol"; import { EpochManagerEnablerMock } from "@test-sol/mocks/EpochManagerEnablerMock.sol"; +import { MockCeloUnreleasedTreasury } from "@celo-contracts-8/common/test/MockCeloUnreleasedTreasury.sol"; +import "@celo-contracts-8/common/test/MockCeloToken.sol"; import "@celo-contracts/common/interfaces/IRegistry.sol"; import { IAccounts } from "@celo-contracts/common/interfaces/IAccounts.sol"; @@ -18,6 +20,8 @@ contract TestWithUtils08 is ForgeTest, TestConstants, IsL2Check, PrecompilesOver PrecompileHandler ph; EpochManager_WithMocks public epochManager; EpochManagerEnablerMock epochManagerEnabler; + MockCeloUnreleasedTreasury celoUnreleasedTreasury; + MockCeloToken08 celoToken; IAccounts accountsContract; IEpochManagerEnablerMock epochManagerEnablerMockInterface; @@ -33,9 +37,11 @@ contract TestWithUtils08 is ForgeTest, TestConstants, IsL2Check, PrecompilesOver ph = new PrecompileHandler(); ph.setEpochSize(L1_BLOCK_IN_EPOCH); setupRegistry(); + setupCeloToken(); setupAccounts(); setupEpochManagerEnabler(); setupEpochManager(); + setupCeloUnreleasedTreasury(); } function setupRegistry() public { @@ -64,6 +70,23 @@ contract TestWithUtils08 is ForgeTest, TestConstants, IsL2Check, PrecompilesOver registry.setAddressFor(EpochManagerEnablerContract, address(epochManagerEnabler)); } + function setupCeloToken() public { + celoToken = new MockCeloToken08(); + registry.setAddressFor(CeloTokenContract, address(celoToken)); + celoToken.setTotalSupply(CELO_SUPPLY_CAP); + } + + function setupCeloUnreleasedTreasury() public { + celoUnreleasedTreasury = new MockCeloUnreleasedTreasury(); + celoUnreleasedTreasury.setRegistry(REGISTRY_ADDRESS); + registry.setAddressFor(CeloUnreleasedTreasuryContract, address(celoUnreleasedTreasury)); + } + + function setCeloUnreleasedTreasuryBalance() public { + celoToken.setBalanceOf(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); + vm.deal(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); + } + function timeTravel(uint256 timeDelta) public { vm.warp(block.timestamp + timeDelta); } @@ -150,6 +173,7 @@ contract TestWithUtils08 is ForgeTest, TestConstants, IsL2Check, PrecompilesOver epochManagerEnabler.captureEpochAndValidators(); whenL2(); + setCeloUnreleasedTreasuryBalance(); epochManagerEnabler.initEpochManager(); } @@ -160,6 +184,7 @@ contract TestWithUtils08 is ForgeTest, TestConstants, IsL2Check, PrecompilesOver epochManagerEnablerMockInterface.captureEpochAndValidators(); whenL2(); + setCeloUnreleasedTreasuryBalance(); } function whenL2WithoutEpochCapture() internal { _registerAndElectValidatorsForL2(); 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 d1074a63657..1940cb23641 100644 --- a/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/devchain/e2e/common/EpochManager.t.sol @@ -49,7 +49,7 @@ contract E2E_EpochManager is ECDSAHelper08, Devchain { epochDuration = epochManagerContract.epochDuration(); - vm.deal(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); // 80% of the total supply to the treasury - whis will be yet distributed + vm.deal(address(celoUnreleasedTreasuryContract), L2_INITIAL_STASH_BALANCE); // 80% of the total supply to the treasury - whis will be yet distributed } function activateValidators() public { diff --git a/packages/protocol/test-sol/devchain/e2e/utils.sol b/packages/protocol/test-sol/devchain/e2e/utils.sol index e02c515d608..2a461840259 100644 --- a/packages/protocol/test-sol/devchain/e2e/utils.sol +++ b/packages/protocol/test-sol/devchain/e2e/utils.sol @@ -21,7 +21,7 @@ contract Devchain is TestWithUtils08 { ISortedOracles sortedOracles; FeeCurrencyDirectory feeCurrencyDirectory; IEpochManager epochManagerContract; - ICeloUnreleasedTreasury celoUnreleasedTreasury; + ICeloUnreleasedTreasury celoUnreleasedTreasuryContract; IValidators validators; IAccounts accounts; IScoreManager scoreManager; @@ -36,7 +36,7 @@ contract Devchain is TestWithUtils08 { ); // FeeCurrencyDirectory is not in UsingRegistry.sol epochManagerContract = getEpochManager(); - celoUnreleasedTreasury = getCeloUnreleasedTreasury(); + celoUnreleasedTreasuryContract = getCeloUnreleasedTreasury(); validators = getValidators(); accounts = getAccounts(); scoreManager = IScoreManager(address(getScoreReader())); diff --git a/packages/protocol/test-sol/devchain/migration/Migration.t.sol b/packages/protocol/test-sol/devchain/migration/Migration.t.sol index 70294397cc3..91fd7ff2601 100644 --- a/packages/protocol/test-sol/devchain/migration/Migration.t.sol +++ b/packages/protocol/test-sol/devchain/migration/Migration.t.sol @@ -142,13 +142,13 @@ contract RegistryIntegrationTest is IntegrationTest, MigrationsConstants { } contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { - ICeloToken celoToken; + ICeloToken celoTokenContract; IValidators validatorsContract; IEpochManager epochManagerContract; IEpochManagerEnabler epochManagerEnablerContract; IScoreManager scoreManager; IElection election; - ICeloUnreleasedTreasury celoUnreleasedTreasury; + ICeloUnreleasedTreasury celoUnreleasedTreasuryContract; address reserveAddress; address unreleasedTreasury; @@ -178,14 +178,14 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { groupList = validatorsContract.getRegisteredValidatorGroups(); // mint to the reserve - celoToken = ICeloToken(registry.getAddressForStringOrDie("GoldToken")); + celoTokenContract = ICeloToken(registry.getAddressForStringOrDie("GoldToken")); vm.deal(address(0), CELO_SUPPLY_CAP); vm.prank(address(0)); - celoToken.mint(reserveAddress, RESERVE_BALANCE); + celoTokenContract.mint(reserveAddress, RESERVE_BALANCE); vm.prank(address(0)); - celoToken.mint(randomAddress, L1_MINTED_CELO_SUPPLY - RESERVE_BALANCE); // mint outstanding l1 supply before L2. + celoTokenContract.mint(randomAddress, L1_MINTED_CELO_SUPPLY - RESERVE_BALANCE); // mint outstanding l1 supply before L2. epochManagerContract = IEpochManager(registry.getAddressForStringOrDie("EpochManager")); epochManagerEnablerContract = IEpochManagerEnabler( @@ -216,7 +216,7 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { function test_Reverts_WhenEndOfEpochHasNotBeenReached() public { // fund treasury vm.prank(address(0)); - celoToken.mint(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); + celoTokenContract.mint(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); vm.deal(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); uint256 l1EpochNumber = IPrecompiles(address(validatorsContract)).getEpochNumber(); @@ -273,7 +273,7 @@ contract EpochManagerIntegrationTest is IntegrationTest, MigrationsConstants { vm.deal(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); vm.prank(address(0)); - celoToken.mint(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); + celoTokenContract.mint(unreleasedTreasury, L2_INITIAL_STASH_BALANCE); whenL2(); _setValidatorL2Score(); diff --git a/packages/protocol/test-sol/unit/common/EpochManager.t.sol b/packages/protocol/test-sol/unit/common/EpochManager.t.sol index a684542f601..a8946ad9e0b 100644 --- a/packages/protocol/test-sol/unit/common/EpochManager.t.sol +++ b/packages/protocol/test-sol/unit/common/EpochManager.t.sol @@ -36,8 +36,6 @@ contract EpochManagerTest is TestWithUtils08 { uint256 epochDuration = DAY; address[] firstElected; - MockCeloToken08 celoToken; - MockCeloUnreleasedTreasury celoUnreleasedTreasury; ScoreManager scoreManager; uint256 celoAmountForRate = 1e24; @@ -77,8 +75,6 @@ contract EpochManagerTest is TestWithUtils08 { epochRewards = new EpochRewardsMock08(); validators = IMockValidators(actor("validators05")); stableToken = new MockStableToken08(); - celoToken = new MockCeloToken08(); - celoUnreleasedTreasury = new MockCeloUnreleasedTreasury(); election = new MockElection(); validator1 = actor("validator"); @@ -107,15 +103,9 @@ contract EpochManagerTest is TestWithUtils08 { registry.setAddressFor(ValidatorsContract, address(validators)); registry.setAddressFor(ScoreManagerContract, address(scoreManager)); registry.setAddressFor(StableTokenContract, address(stableToken)); - registry.setAddressFor(CeloUnreleasedTreasuryContract, address(celoUnreleasedTreasury)); - registry.setAddressFor(CeloTokenContract, address(celoToken)); registry.setAddressFor(ReserveContract, reserveAddress); registry.setAddressFor(ElectionContract, address(election)); - celoToken.setTotalSupply(CELO_SUPPLY_CAP); - vm.deal(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); - celoToken.setBalanceOf(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); - celoUnreleasedTreasury.setRegistry(REGISTRY_ADDRESS); sortedOracles.setMedianRate(address(stableToken), stableAmountForRate); @@ -227,6 +217,7 @@ contract EpochManagerTest_initializeSystem is EpochManagerTest { super.setUp(); _registerAndElectValidatorsForL2(); epochManagerEnabler.captureEpochAndValidators(); + setCeloUnreleasedTreasuryBalance(); lastKnownEpochNumber = epochManagerEnabler.lastKnownEpochNumber(); lastKnownFirstBlockOfEpoch = epochManagerEnabler.lastKnownFirstBlockOfEpoch(); diff --git a/packages/protocol/test-sol/unit/common/EpochManagerEnabler.t.sol b/packages/protocol/test-sol/unit/common/EpochManagerEnabler.t.sol index a351692ada3..30df64068c4 100644 --- a/packages/protocol/test-sol/unit/common/EpochManagerEnabler.t.sol +++ b/packages/protocol/test-sol/unit/common/EpochManagerEnabler.t.sol @@ -4,8 +4,6 @@ pragma solidity >=0.8.0 <0.8.20; import { ICeloUnreleasedTreasury } from "@celo-contracts/common/interfaces/ICeloUnreleasedTreasury.sol"; import { CeloUnreleasedTreasury } from "@celo-contracts-8/common/CeloUnreleasedTreasury.sol"; -import "@celo-contracts-8/common/test/MockCeloToken.sol"; -import { MockCeloUnreleasedTreasury } from "@celo-contracts-8/common/test/MockCeloUnreleasedTreasury.sol"; import { EpochRewardsMock08 } from "@celo-contracts-8/governance/test/EpochRewardsMock.sol"; import { TestWithUtils08 } from "@test-sol/TestWithUtils08.sol"; @@ -17,8 +15,6 @@ import "@test-sol/utils/WhenL2-08.sol"; contract EpochManagerEnablerTest is TestWithUtils08 { EpochManagerEnablerMock epochManagerEnablerContract; EpochManager_WithMocks public epochManagerContract; - MockCeloUnreleasedTreasury celoUnreleasedTreasury; - MockCeloToken08 celoToken; address nonOwner; @@ -30,18 +26,10 @@ contract EpochManagerEnablerTest is TestWithUtils08 { super.setUp(); epochManagerEnablerContract = new EpochManagerEnablerMock(); - celoToken = new MockCeloToken08(); - - celoUnreleasedTreasury = new MockCeloUnreleasedTreasury(); nonOwner = actor("nonOwner"); registry.setAddressFor(EpochManagerEnablerContract, address(epochManagerEnablerContract)); - registry.setAddressFor(CeloTokenContract, address(celoToken)); - registry.setAddressFor(CeloUnreleasedTreasuryContract, address(celoUnreleasedTreasury)); - - celoToken.setTotalSupply(CELO_SUPPLY_CAP); - celoToken.setBalanceOf(address(celoUnreleasedTreasury), L2_INITIAL_STASH_BALANCE); epochManagerEnablerContract.initialize(REGISTRY_ADDRESS); } diff --git a/packages/protocol/test-sol/unit/common/ScoreManager.t.sol b/packages/protocol/test-sol/unit/common/ScoreManager.t.sol index eccba616e3b..98d6ddac653 100644 --- a/packages/protocol/test-sol/unit/common/ScoreManager.t.sol +++ b/packages/protocol/test-sol/unit/common/ScoreManager.t.sol @@ -1,21 +1,23 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.7 <0.8.20; -import "celo-foundry-8/Test.sol"; -import { TestConstants } from "@test-sol/constants.sol"; +import { TestWithUtils08 } from "@test-sol/TestWithUtils08.sol"; +import { WhenL2, WhenL2NoInitialization } from "@test-sol/utils/WhenL2-08.sol"; import "@celo-contracts/common/interfaces/IRegistry.sol"; import "@celo-contracts/common/interfaces/IScoreManagerGovernance.sol"; import "@celo-contracts/common/interfaces/IScoreManager.sol"; import { ScoreManager } from "@celo-contracts-8/common/ScoreManager.sol"; +import { MockCeloUnreleasedTreasury } from "@celo-contracts-8/common/test/MockCeloUnreleasedTreasury.sol"; +import "@celo-contracts-8/common/test/MockCeloToken.sol"; // merging interfaces here because in 0.5 it can't be done // TODO remove this from here after moving everything to 0.8 interface IScoreManagerTemp is IScoreManagerGovernance, IScoreManager {} -contract ScoreManagerTest is Test, TestConstants { - IRegistry registry; +contract ScoreManagerTest is TestWithUtils08 { IScoreManagerTemp public scoreManager; + address owner; address nonOwner; address scoreManagerSetter; @@ -26,25 +28,25 @@ contract ScoreManagerTest is Test, TestConstants { uint256 constant ZERO_SCORE = 1e24 + 1; - function setUp() public virtual { + function setUp() public virtual override { + super.setUp(); + owner = address(this); nonOwner = actor("nonOwner"); scoreManagerSetter = actor("scoreManager"); - deployCodeTo("Registry.sol", abi.encode(false), REGISTRY_ADDRESS); - ScoreManager scoreManagerImpl = new ScoreManager(true); scoreManager = IScoreManagerTemp(address(scoreManagerImpl)); - registry = IRegistry(REGISTRY_ADDRESS); - registry.setAddressFor("ScoreManager", address(scoreManager)); scoreManagerImpl.initialize(); } +} - function _whenL2() public { - deployCodeTo("Registry.sol", abi.encode(false), PROXY_ADMIN_ADDRESS); +contract ScoreManagerTest_L2 is ScoreManagerTest, WhenL2 { + function setUp() public virtual override(ScoreManagerTest, WhenL2) { + super.setUp(); } } @@ -88,6 +90,11 @@ contract ScoreManagerTest_setGroupScore is ScoreManagerTest { assertEq(scoreManager.getGroupScore(owner), 42); } } +contract ScoreManagerTest_setGroupScore_L2 is ScoreManagerTest_L2, ScoreManagerTest_setGroupScore { + function setUp() public override(ScoreManagerTest, ScoreManagerTest_L2) { + super.setUp(); + } +} contract ScoreManagerTest_setValidatorScore is ScoreManagerTest { function test_setValidatorScore() public { @@ -129,6 +136,14 @@ contract ScoreManagerTest_setValidatorScore is ScoreManagerTest { assertEq(scoreManager.getValidatorScore(owner), 42); } } +contract ScoreManagerTest_setValidatorScore_L2 is + ScoreManagerTest_L2, + ScoreManagerTest_setValidatorScore +{ + function setUp() public override(ScoreManagerTest, ScoreManagerTest_L2) { + super.setUp(); + } +} contract ScoreManagerTest_setScoreManagerSetter is ScoreManagerTest { function test_onlyOwnwerCanSetScoreManager() public { @@ -148,3 +163,11 @@ contract ScoreManagerTest_setScoreManagerSetter is ScoreManagerTest { scoreManager.setScoreManagerSetter(nonOwner); } } +contract ScoreManagerTest_setScoreManagerSetter_L2 is + ScoreManagerTest_L2, + ScoreManagerTest_setScoreManagerSetter +{ + function setUp() public override(ScoreManagerTest, ScoreManagerTest_L2) { + super.setUp(); + } +}