Skip to content

Commit

Permalink
feat: support rewards coordinator (#164)
Browse files Browse the repository at this point in the history
* deps: update to v0.2.0-holesky-rewards

* feat: support rewards coordinator

* deps: use eigenlayer-middleware b8161..b0e9b

* docs: update deployments
  • Loading branch information
neutiyoo authored Aug 8, 2024
1 parent 8bab509 commit 1ba1391
Show file tree
Hide file tree
Showing 12 changed files with 2,740 additions and 85 deletions.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion contracts/lib/eigenlayer-middleware
Submodule eigenlayer-middleware updated 97 files
+0 −3 .gitmodules
+29 −3 LICENSE
+45 −3 README.md
+ audits/M2 Mainnet - Dedaub - Feb 2024.pdf
+2 −2 docs/README.md
+1 −1 docs/ServiceManagerBase.md
+1 −1 docs/experimental/AVS-Guide.md
+6 −0 foundry.toml
+0 −1 lib/ds-test
+1 −1 lib/eigenlayer-contracts
+1 −1 lib/forge-std
+0 −765 script/AVSContractsDeploy.s.sol
+0 −47 script/DeploySharedContracts.s.sol
+2 −2 script/ServiceManagerRouterDeploy.s.sol
+0 −28 script/configs/AVSContractsDeploy.json
+9 −5 src/BLSApkRegistry.sol
+1 −1 src/BLSApkRegistryStorage.sol
+117 −63 src/BLSSignatureChecker.sol
+175 −0 src/EjectionManager.sol
+6 −2 src/IndexRegistry.sol
+1 −1 src/IndexRegistryStorage.sol
+34 −1 src/OperatorStateRetriever.sol
+53 −10 src/RegistryCoordinator.sol
+8 −3 src/RegistryCoordinatorStorage.sol
+94 −29 src/ServiceManagerBase.sol
+53 −0 src/ServiceManagerBaseStorage.sol
+5 −5 src/ServiceManagerRouter.sol
+23 −11 src/StakeRegistry.sol
+1 −1 src/StakeRegistryStorage.sol
+1 −1 src/interfaces/IBLSApkRegistry.sol
+1 −1 src/interfaces/IBLSSignatureChecker.sol
+111 −0 src/interfaces/IECDSAStakeRegistryEventsAndErrors.sol
+55 −0 src/interfaces/IEjectionManager.sol
+2 −2 src/interfaces/IIndexRegistry.sol
+1 −1 src/interfaces/IRegistryCoordinator.sol
+15 −41 src/interfaces/IServiceManager.sol
+62 −0 src/interfaces/IServiceManagerUI.sol
+1 −1 src/interfaces/ISocketUpdater.sol
+2 −2 src/interfaces/IStakeRegistry.sol
+1 −1 src/libraries/BN254.sol
+3 −3 src/libraries/BitmapUtils.sol
+273 −0 src/unaudited/ECDSAServiceManagerBase.sol
+625 −0 src/unaudited/ECDSAStakeRegistry.sol
+58 −0 src/unaudited/ECDSAStakeRegistryStorage.sol
+5 −0 src/unaudited/README.md
+42 −0 src/unaudited/examples/ECDSAStakeRegistryEqualWeight.sol
+104 −0 src/unaudited/examples/ECDSAStakeRegistryPermissioned.sol
+1 −1 test/events/IBLSApkRegistryEvents.sol
+1 −1 test/events/IIndexRegistryEvents.sol
+69 −0 test/events/IServiceManagerBaseEvents.sol
+2 −2 test/events/IStakeRegistryEvents.sol
+2 −2 test/ffi/BLSPubKeyCompendiumFFI.t.sol
+1 −1 test/ffi/BLSSignatureCheckerFFI.t.sol
+2 −2 test/ffi/UpdateOperators.t.sol
+1 −1 test/ffi/util/G2Operations.sol
+1 −1 test/harnesses/BLSApkRegistryHarness.sol
+1 −1 test/harnesses/BitmapUtilsWrapper.sol
+1 −1 test/harnesses/RegistryCoordinatorHarness.t.sol
+1 −1 test/harnesses/StakeRegistryHarness.sol
+7 −2 test/integration/CoreRegistration.t.sol
+2 −2 test/integration/IntegrationBase.t.sol
+2 −2 test/integration/IntegrationChecks.t.sol
+2 −2 test/integration/IntegrationConfig.t.sol
+118 −62 test/integration/IntegrationDeployer.t.sol
+3 −3 test/integration/TimeMachine.t.sol
+6 −4 test/integration/User.t.sol
+2 −2 test/integration/mocks/BeaconChainOracleMock.t.sol
+2 −2 test/integration/tests/Full_Register_Deregister.t.sol
+2 −2 test/integration/tests/NonFull_Register_CoreBalanceChange_Update.t.sol
+2 −2 test/integration/tests/NonFull_Register_Deregister.t.sol
+2 −2 test/integration/utils/BitmapStrings.t.sol
+2 −2 test/integration/utils/Sort.t.sol
+1 −1 test/mocks/AVSDirectoryMock.sol
+5 −5 test/mocks/DelegationMock.sol
+1 −1 test/mocks/RegistryCoordinatorMock.sol
+72 −0 test/mocks/RewardsCoordinatorMock.sol
+10 −4 test/mocks/ServiceManagerMock.sol
+1 −1 test/mocks/StakeRegistryMock.sol
+369 −147 test/unit/BLSApkRegistryUnit.t.sol
+1 −1 test/unit/BLSSignatureCheckerUnit.t.sol
+2 −2 test/unit/BitmapUtils.t.sol
+106 −0 test/unit/ECDSAStakeRegistryEqualWeightUnit.t.sol
+134 −0 test/unit/ECDSAStakeRegistryPermissionedUnit.t.sol
+997 −0 test/unit/ECDSAStakeRegistryUnit.t.sol
+387 −0 test/unit/EjectionManagerUnit.t.sol
+268 −112 test/unit/OperatorStateRetrieverUnit.t.sol
+57 −1 test/unit/RegistryCoordinatorUnit.t.sol
+527 −0 test/unit/ServiceManagerBase.t.sol
+3 −2 test/unit/ServiceManagerRouter.t.sol
+821 −412 test/unit/StakeRegistryUnit.t.sol
+1 −1 test/unit/Utils.sol
+1 −1 test/utils/BLSMockAVSDeployer.sol
+123 −92 test/utils/MockAVSDeployer.sol
+1 −1 test/utils/Operators.sol
+1 −1 test/utils/Owners.sol
+1 −1 test/utils/ProofParsing.sol
+1 −1 test/utils/SignatureCompaction.sol
35 changes: 8 additions & 27 deletions contracts/script/MachServiceManagerDeployer.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import "eigenlayer-core/contracts/core/StrategyManager.sol";
import "eigenlayer-core/contracts/strategies/StrategyBaseTVLLimits.sol";
import {IAVSDirectory} from "eigenlayer-core/contracts/interfaces/IAVSDirectory.sol";
import {PauserRegistry} from "eigenlayer-core/contracts/permissions/PauserRegistry.sol";
import {IRewardsCoordinator} from "eigenlayer-core/contracts/interfaces/IRewardsCoordinator.sol";
import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol";
import {IStakeRegistry, IDelegationManager} from "eigenlayer-middleware/interfaces/IStakeRegistry.sol";
import {IIndexRegistry} from "eigenlayer-middleware/interfaces/IIndexRegistry.sol";
Expand Down Expand Up @@ -49,6 +50,7 @@ contract MachServiceManagerDeployer is Script {
AVSDirectory avsDirectory;
DelegationManager delegationManager;
StrategyManager strategyManager;
IRewardsCoordinator rewardsCoordinator;
address beaconETH;
address oETH;
address ETHx;
Expand Down Expand Up @@ -125,10 +127,15 @@ contract MachServiceManagerDeployer is Script {
address deployedAvsDirectory = abi.decode(deployedAvsDirectoryData, (address));
bytes memory deployedDelegationManagerData = vm.parseJson(deployedEigenLayerAddresses, ".delegationManager");
address deployedDelegationManager = abi.decode(deployedDelegationManagerData, (address));
bytes memory deployedRewardsCoordinatorData =
vm.parseJson(deployedEigenLayerAddresses, ".rewardsCoordinator");
address deployedRewardsCoordinator = abi.decode(deployedRewardsCoordinatorData, (address));

eigenLayerContracts.avsDirectory = AVSDirectory(deployedAvsDirectory);
eigenLayerContracts.strategyManager = StrategyManager(deployedStrategyManager);
eigenLayerContracts.delegationManager = DelegationManager(deployedDelegationManager);
eigenLayerContracts.rewardsCoordinator = IRewardsCoordinator(deployedRewardsCoordinator);

eigenLayerContracts.beaconETH =
abi.decode(vm.parseJson(deployedEigenLayerAddresses, ".beaconETH"), (address));
eigenLayerContracts.oETH = abi.decode(vm.parseJson(deployedEigenLayerAddresses, ".oETH"), (address));
Expand Down Expand Up @@ -344,6 +351,7 @@ contract MachServiceManagerDeployer is Script {
}
machServiceContract.machServiceManagerImplementation = new MachServiceManager(
IAVSDirectory(deploymentConfig.avsDirectory),
eigenLayerContracts.rewardsCoordinator,
machServiceContract.registryCoordinator,
machServiceContract.stakeRegistry
);
Expand All @@ -362,32 +370,5 @@ contract MachServiceManagerDeployer is Script {
)
);
vm.stopBroadcast();

string memory MACH = "MACHAVS_ADDRESSES_OUTPUT_PATH";
string memory defaultMachPath = "./script/output/machavs_deploy_output.json";
string memory deployedMachPath = vm.envOr(MACH, defaultMachPath);

string memory output = "machAVS deployment output";
vm.serializeAddress(output, "machServiceManager", address(machServiceContract.machServiceManager));
vm.serializeAddress(
output, "machServiceManagerImpl", address(machServiceContract.machServiceManagerImplementation)
);
vm.serializeAddress(output, "registryCoordinator", address(machServiceContract.registryCoordinator));
vm.serializeAddress(
output, "registryCoordinatorImpl", address(machServiceContract.registryCoordinatorImplementation)
);
vm.serializeAddress(output, "indexRegistry", address(machServiceContract.indexRegistry));
vm.serializeAddress(output, "indexRegistryImpl", address(machServiceContract.indexRegistryImplementation));
vm.serializeAddress(output, "stakeRegistry", address(machServiceContract.stakeRegistry));
vm.serializeAddress(output, "stakeRegistryImpl", address(machServiceContract.stakeRegistryImplementation));
vm.serializeAddress(output, "apkRegistry", address(machServiceContract.apkRegistry));
vm.serializeAddress(output, "apkRegistryImpl", address(machServiceContract.apkRegistryImplementation));
vm.serializeAddress(output, "pauserRegistry", address(pauserRegistry));
vm.serializeAddress(output, "machAVSProxyAdmin", address(machAVSProxyAdmin));
vm.serializeAddress(output, "emptyContract", address(emptyContract));
vm.serializeAddress(output, "operatorStateRetriever", address(machServiceContract.operatorStateRetriever));
string memory finalJson = vm.serializeString(output, "object", output);
vm.createDir("./script/output", true);
vm.writeJson(finalJson, deployedMachPath);
}
}
51 changes: 18 additions & 33 deletions contracts/script/MachServiceManagerDeployerHolesky.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import "eigenlayer-core/contracts/core/AVSDirectory.sol";
import "eigenlayer-core/contracts/core/DelegationManager.sol";
import "eigenlayer-core/contracts/core/StrategyManager.sol";
import "eigenlayer-core/contracts/strategies/StrategyBaseTVLLimits.sol";
import {IRewardsCoordinator} from "eigenlayer-core/contracts/interfaces/IRewardsCoordinator.sol";
import {IAVSDirectory} from "eigenlayer-core/contracts/interfaces/IAVSDirectory.sol";
import {PauserRegistry} from "eigenlayer-core/contracts/permissions/PauserRegistry.sol";
import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol";
Expand Down Expand Up @@ -49,6 +50,7 @@ contract MachServiceManagerDeployerHolesky is Script {
AVSDirectory avsDirectory;
DelegationManager delegationManager;
StrategyManager strategyManager;
IRewardsCoordinator rewardsCoordinator;
address beaconETH;
address stETH;
address rETH;
Expand Down Expand Up @@ -105,10 +107,14 @@ contract MachServiceManagerDeployerHolesky is Script {
address deployedAvsDirectory = abi.decode(deployedAvsDirectoryData, (address));
bytes memory deployedDelegationManagerData = vm.parseJson(deployedEigenLayerAddresses, ".delegationManager");
address deployedDelegationManager = abi.decode(deployedDelegationManagerData, (address));
bytes memory deployedRewardsCoordinatorData =
vm.parseJson(deployedEigenLayerAddresses, ".rewardsCoordinator");
address deployedRewardsCoordinator = abi.decode(deployedRewardsCoordinatorData, (address));

eigenLayerContracts.avsDirectory = AVSDirectory(deployedAvsDirectory);
eigenLayerContracts.strategyManager = StrategyManager(deployedStrategyManager);
eigenLayerContracts.delegationManager = DelegationManager(deployedDelegationManager);
eigenLayerContracts.rewardsCoordinator = IRewardsCoordinator(deployedRewardsCoordinator);
eigenLayerContracts.beaconETH =
abi.decode(vm.parseJson(deployedEigenLayerAddresses, ".beaconETH"), (address));
eigenLayerContracts.stETH = abi.decode(vm.parseJson(deployedEigenLayerAddresses, ".stETH"), (address));
Expand Down Expand Up @@ -277,51 +283,30 @@ contract MachServiceManagerDeployerHolesky is Script {
}
machServiceContract.machServiceManagerImplementation = new MachServiceManager(
IAVSDirectory(deploymentConfig.avsDirectory),
eigenLayerContracts.rewardsCoordinator,
machServiceContract.registryCoordinator,
machServiceContract.stakeRegistry
);

// Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them.
machAVSProxyAdmin.upgradeAndCall(
TransparentUpgradeableProxy(payable(address(machServiceContract.machServiceManager))),
address(machServiceContract.machServiceManagerImplementation),
abi.encodeWithSelector(
bytes memory initcode;
{
initcode = abi.encodeWithSelector(
MachServiceManager.initialize.selector,
IPauserRegistry(pauserRegistry),
0,
deploymentConfig.machAVSCommunityMultisig,
deploymentConfig.machAVSCommunityMultisig,
deploymentConfig.confirmer,
deploymentConfig.whitelister,
deploymentConfig.chainIds
)
);
}
// Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them.
machAVSProxyAdmin.upgradeAndCall(
TransparentUpgradeableProxy(payable(address(machServiceContract.machServiceManager))),
address(machServiceContract.machServiceManagerImplementation),
initcode
);
vm.stopBroadcast();

string memory MACH = "MACHAVS_ADDRESSES_OUTPUT_PATH";
string memory defaultMachPath = "./script/output/machavs_deploy_output.holesky.json";
string memory deployedMachPath = vm.envOr(MACH, defaultMachPath);

string memory output = "machAVS deployment output";
vm.serializeAddress(output, "machServiceManager", address(machServiceContract.machServiceManager));
vm.serializeAddress(
output, "machServiceManagerImpl", address(machServiceContract.machServiceManagerImplementation)
);
vm.serializeAddress(output, "registryCoordinator", address(machServiceContract.registryCoordinator));
vm.serializeAddress(
output, "registryCoordinatorImpl", address(machServiceContract.registryCoordinatorImplementation)
);
vm.serializeAddress(output, "indexRegistry", address(machServiceContract.indexRegistry));
vm.serializeAddress(output, "indexRegistryImpl", address(machServiceContract.indexRegistryImplementation));
vm.serializeAddress(output, "stakeRegistry", address(machServiceContract.stakeRegistry));
vm.serializeAddress(output, "stakeRegistryImpl", address(machServiceContract.stakeRegistryImplementation));
vm.serializeAddress(output, "apkRegistry", address(machServiceContract.apkRegistry));
vm.serializeAddress(output, "apkRegistryImpl", address(machServiceContract.apkRegistryImplementation));
vm.serializeAddress(output, "pauserRegistry", address(pauserRegistry));
vm.serializeAddress(output, "machAVSProxyAdmin", address(machAVSProxyAdmin));
vm.serializeAddress(output, "emptyContract", address(emptyContract));
vm.serializeAddress(output, "operatorStateRetriever", address(machServiceContract.operatorStateRetriever));
string memory finalJson = vm.serializeString(output, "object", output);
vm.createDir("./script/output", true);
vm.writeJson(finalJson, deployedMachPath);
}
}
7 changes: 6 additions & 1 deletion contracts/script/MachServiceManagerImplDeployer.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,22 @@ import {IStakeRegistry} from "eigenlayer-middleware/interfaces/IStakeRegistry.so
import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol";
import {IPauserRegistry} from "eigenlayer-core/contracts/interfaces/IPauserRegistry.sol";
import {IAVSDirectory} from "eigenlayer-core/contracts/interfaces/IAVSDirectory.sol";
import {IRewardsCoordinator} from "eigenlayer-core/contracts/interfaces/IRewardsCoordinator.sol";

contract MachServiceManagerImplDeployer is Script {
function run() external {
address avsDirectory = vm.envAddress("AVS_DIRECTORY");
address registryCoordinator = vm.envAddress("REGISTRY_COORDINATOR");
address stakeRegistry = vm.envAddress("STAKE_REGISTRY");
address rewardsCoordinator = vm.envAddress("REWARDS_COORDINATOR");

vm.startBroadcast();
// 1. deploy new implementation contract
new MachServiceManager(
IAVSDirectory(avsDirectory), IRegistryCoordinator(registryCoordinator), IStakeRegistry(stakeRegistry)
IAVSDirectory(avsDirectory),
IRewardsCoordinator(rewardsCoordinator),
IRegistryCoordinator(registryCoordinator),
IStakeRegistry(stakeRegistry)
);
vm.stopBroadcast();
}
Expand Down
1 change: 1 addition & 0 deletions contracts/script/input/parameters.holesky.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"strategyManager": "0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6",
"avsDirectory": "0x055733000064333CaDDbC92763c58BF0192fFeBf",
"delegationManager": "0xA44151489861Fe9e3055d95adC98FbD462B948e7",
"rewardsCoordinator": "0xAcc1fb458a1317E886dB376Fc8141540537E68fE",
"owner": "0x4700e6415660694E4A441F490F097471d4624C00",
"churner": "0x4700e6415660694E4A441F490F097471d4624C00",
"ejector": "0x4700e6415660694E4A441F490F097471d4624C00",
Expand Down
8 changes: 6 additions & 2 deletions contracts/src/core/MachOptimismZkServiceManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {IBLSApkRegistry} from "eigenlayer-middleware/interfaces/IRegistryCoordin
import {MachOptimismZkServiceManagerStorage} from "./MachOptimismZkServiceManagerStorage.sol";
import {IMachOptimism, CallbackAuthorization, IRiscZeroVerifier} from "../interfaces/IMachOptimism.sol";
import {IMachOptimismL2OutputOracle} from "../interfaces/IMachOptimismL2OutputOracle.sol";
import {IRewardsCoordinator} from "eigenlayer-core/contracts/interfaces/IRewardsCoordinator.sol";
import "../error/Errors.sol";

contract MachOptimismZkServiceManager is
Expand All @@ -35,12 +36,15 @@ contract MachOptimismZkServiceManager is
constructor(
uint256 rollupChainID_,
IAVSDirectory __avsDirectory,
IRewardsCoordinator __rewardsCoordinator,
IRegistryCoordinator __registryCoordinator,
IStakeRegistry __stakeRegistry
)
ServiceManagerBase(__avsDirectory, __registryCoordinator, __stakeRegistry)
ServiceManagerBase(__avsDirectory, __rewardsCoordinator, __registryCoordinator, __stakeRegistry)
MachOptimismZkServiceManagerStorage(block.chainid, rollupChainID_)
{}
{
_disableInitializers();
}

modifier onlyValidOperator() {
if (!_operators.contains(msg.sender)) {
Expand Down
17 changes: 10 additions & 7 deletions contracts/src/core/MachServiceManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ pragma solidity =0.8.12;

import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import {Pausable} from "eigenlayer-core/contracts/permissions/Pausable.sol";
import {IRewardsCoordinator} from "eigenlayer-core/contracts/interfaces/IRewardsCoordinator.sol";
import {IAVSDirectory} from "eigenlayer-core/contracts/interfaces/IAVSDirectory.sol";
import {ISignatureUtils} from "eigenlayer-core/contracts/interfaces/ISignatureUtils.sol";
import {IPauserRegistry} from "eigenlayer-core/contracts/interfaces/IPauserRegistry.sol";
import {IServiceManager} from "eigenlayer-middleware/interfaces/IServiceManager.sol";
import {IServiceManager, IServiceManagerUI} from "eigenlayer-middleware/interfaces/IServiceManager.sol";
import {IStakeRegistry} from "eigenlayer-middleware/interfaces/IStakeRegistry.sol";
import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol";
import {BLSSignatureChecker} from "eigenlayer-middleware/BLSSignatureChecker.sol";
Expand Down Expand Up @@ -90,11 +91,12 @@ contract MachServiceManager is

constructor(
IAVSDirectory __avsDirectory,
IRewardsCoordinator __rewardsCoordinator,
IRegistryCoordinator __registryCoordinator,
IStakeRegistry __stakeRegistry
)
BLSSignatureChecker(__registryCoordinator)
ServiceManagerBase(__avsDirectory, __registryCoordinator, __stakeRegistry)
ServiceManagerBase(__avsDirectory, __rewardsCoordinator, __registryCoordinator, __stakeRegistry)
{
_disableInitializers();
}
Expand All @@ -103,12 +105,13 @@ contract MachServiceManager is
IPauserRegistry pauserRegistry_,
uint256 initialPausedStatus_,
address initialOwner_,
address rewardsInitiator_,
address alertConfirmer_,
address whitelister_,
uint256[] calldata rollupChainIDs_
) public initializer {
_initializePauser(pauserRegistry_, initialPausedStatus_);
__ServiceManagerBase_init(initialOwner_);
__ServiceManagerBase_init(initialOwner_, rewardsInitiator_);
_setAlertConfirmer(alertConfirmer_);
_setWhitelister(whitelister_);

Expand Down Expand Up @@ -235,12 +238,12 @@ contract MachServiceManager is
//////////////////////////////////////////////////////////////////////////////

/**
* @inheritdoc IServiceManager
* @inheritdoc IServiceManagerUI
*/
function registerOperatorToAVS(
address operator,
ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature
) public override(ServiceManagerBase, IServiceManager) whenNotPaused onlyRegistryCoordinator {
) public override(ServiceManagerBase, IServiceManagerUI) whenNotPaused onlyRegistryCoordinator {
if (allowlistEnabled && !allowlist[operator]) {
revert NotAdded();
}
Expand All @@ -254,11 +257,11 @@ contract MachServiceManager is
}

/**
* @inheritdoc IServiceManager
* @inheritdoc IServiceManagerUI
*/
function deregisterOperatorFromAVS(address operator)
public
override(ServiceManagerBase, IServiceManager)
override(ServiceManagerBase, IServiceManagerUI)
whenNotPaused
onlyRegistryCoordinator
{
Expand Down
11 changes: 9 additions & 2 deletions contracts/test/AVSDeployer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {IIndexRegistry} from "eigenlayer-middleware/interfaces/IIndexRegistry.so
import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol";
import {IServiceManager} from "eigenlayer-middleware/interfaces/IServiceManager.sol";

import {RewardsCoordinatorMock} from "eigenlayer-middleware-test/mocks/RewardsCoordinatorMock.sol";
import {StrategyManagerMock} from "eigenlayer-contracts/src/test/mocks/StrategyManagerMock.sol";
import {EigenPodManagerMock} from "eigenlayer-contracts/src/test/mocks/EigenPodManagerMock.sol";
import {AVSDirectoryMock} from "eigenlayer-middleware-test/mocks/AVSDirectoryMock.sol";
Expand Down Expand Up @@ -66,6 +67,7 @@ contract AVSDeployer is Test {
IIndexRegistry public indexRegistry;
MachServiceManager public serviceManager;

RewardsCoordinatorMock public rewardsCoordinatorMock;
StrategyManagerMock public strategyManagerMock;
DelegationMock public delegationMock;
EigenPodManagerMock public eigenPodManagerMock;
Expand Down Expand Up @@ -137,6 +139,7 @@ contract AVSDeployer is Test {
pausers[0] = pauser;
pauserRegistry = new PauserRegistry(pausers, unpauser);

rewardsCoordinatorMock = new RewardsCoordinatorMock();
delegationMock = new DelegationMock();
avsDirectoryMock = new AVSDirectoryMock();
eigenPodManagerMock = new EigenPodManagerMock();
Expand Down Expand Up @@ -265,7 +268,9 @@ contract AVSDeployer is Test {

operatorStateRetriever = new OperatorStateRetriever();

serviceManagerImplementation = new MachServiceManager(avsDirectoryMock, registryCoordinator, stakeRegistry);
serviceManagerImplementation = new MachServiceManager(
avsDirectoryMock, IRewardsCoordinator(address(rewardsCoordinatorMock)), registryCoordinator, stakeRegistry
);

proxyAdmin.upgrade(
TransparentUpgradeableProxy(payable(address(serviceManager))), address(serviceManagerImplementation)
Expand All @@ -274,7 +279,9 @@ contract AVSDeployer is Test {
uint256[] memory ids = new uint256[](2);
ids[0] = 1;
ids[1] = 2;
serviceManager.initialize(pauserRegistry, 0, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, ids);
serviceManager.initialize(
pauserRegistry, 0, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, ids
);

cheats.stopPrank();
}
Expand Down
5 changes: 3 additions & 2 deletions contracts/test/MachServiceManager.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ contract MachServiceManagerTest is BLSAVSDeployer {
}

function test_Init_RevertIfImpleBeingInitialized() public {
MachServiceManager impl = new MachServiceManager(avsDirectoryMock, registryCoordinator, stakeRegistry);
MachServiceManager impl =
new MachServiceManager(avsDirectoryMock, rewardsCoordinatorMock, registryCoordinator, stakeRegistry);
uint256[] memory ids = new uint256[](0);
vm.expectRevert("Initializable: contract is already initialized");
impl.initialize(pauserRegistry, 0, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, ids);
impl.initialize(pauserRegistry, 0, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, proxyAdminOwner, ids);
}

function test_SetConfirmer() public {
Expand Down
Loading

0 comments on commit 1ba1391

Please sign in to comment.