diff --git a/docs/middlewareV2/AVSRegistrar.md b/docs/middlewareV2/AVSRegistrar.md index efd6489c..cac782d0 100644 --- a/docs/middlewareV2/AVSRegistrar.md +++ b/docs/middlewareV2/AVSRegistrar.md @@ -418,4 +418,4 @@ function initialize(address admin, string memory metadataURI) public initializer *Initialization Process*: 1. Updates AVS metadata URI in the AllocationManager 2. Sets itself as the AVS registrar -3. Initiates admin transfer via PermissionController \ No newline at end of file +3. Initiates admin transfer via PermissionController diff --git a/docs/middlewareV2/README.md b/docs/middlewareV2/README.md index f307f83e..f2045d06 100644 --- a/docs/middlewareV2/README.md +++ b/docs/middlewareV2/README.md @@ -6,7 +6,7 @@ The middlewareV2 architecture simplifies AVS development by: 1. Utilizing core protocol contracts for operator key storage (`KeyRegistrar`) and task verification (`BN254CertificateVerifier` and `ECDSACertificateVerifier`) 2. Utilizing core contracts for OperatorSet (ie. quorum) membership and strategy composition in the `AllocationManager` -3. Utilizing the EigenLabs-run offchain services to update stakes instead of [`avs-sync](https://github.com/Layr-Labs/avs-sync) +3. Utilizing the EigenLabs-run offchain services to update stakes instead of [`avs-sync`](https://github.com/Layr-Labs/avs-sync) --- @@ -189,4 +189,4 @@ The [`AllocationManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob See the [`AVSRegistrar`](./AVSRegistrar.md#system-diagrams) for how an AVS is initialized to the core protocol. #### Certificate Verifier -The [`CertificateVerifier`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/main/docs/multichain/destination/CertificateVerifier.md) is responsible for verifying certificates from an offchain task, on-chain. The stakes in the certificate verifier are defined by the AVS-deployed `OperatorTableCalculator` and transported via an off-chain process run by Eigen labs. The `CertificateVerifier` contracts support two signature schemes: ECDSA for individual signatures and BN254 for aggregated signatures. See [multichain docs](core-multichain-docs) for more information. \ No newline at end of file +The [`CertificateVerifier`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/main/docs/multichain/destination/CertificateVerifier.md) is responsible for verifying certificates from an offchain task, on-chain. The stakes in the certificate verifier are defined by the AVS-deployed `OperatorTableCalculator` and transported via an off-chain process run by Eigen labs. The `CertificateVerifier` contracts support two signature schemes: ECDSA for individual signatures and BN254 for aggregated signatures. See [multichain docs](core-multichain-docs) for more information. diff --git a/lib/eigenlayer-contracts b/lib/eigenlayer-contracts index 42dffef7..0e069e98 160000 --- a/lib/eigenlayer-contracts +++ b/lib/eigenlayer-contracts @@ -1 +1 @@ -Subproject commit 42dffef73036855757b85414d837a2b88e40db1a +Subproject commit 0e069e9857c8f0ad6892a2107f12672da8734924 diff --git a/src/middlewareV2/tableCalculator/BN254TableCalculatorBase.sol b/src/middlewareV2/tableCalculator/BN254TableCalculatorBase.sol index a33cb5f2..fecb8136 100644 --- a/src/middlewareV2/tableCalculator/BN254TableCalculatorBase.sol +++ b/src/middlewareV2/tableCalculator/BN254TableCalculatorBase.sol @@ -44,27 +44,27 @@ abstract contract BN254TableCalculatorBase is IBN254TableCalculator { } /// @inheritdoc IOperatorTableCalculator - function getOperatorWeights( + function getOperatorSetWeights( OperatorSet calldata operatorSet ) external view virtual returns (address[] memory operators, uint256[][] memory weights) { return _getOperatorWeights(operatorSet); } /// @inheritdoc IOperatorTableCalculator - function getOperatorWeight( + function getOperatorWeights( OperatorSet calldata operatorSet, address operator - ) external view virtual returns (uint256 weight) { + ) external view virtual returns (uint256[] memory) { (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); // Find the index of the operator in the operators array for (uint256 i = 0; i < operators.length; i++) { if (operators[i] == operator) { - return weights[i][0]; + return weights[i]; } } - return 0; + return new uint256[](0); } /// @inheritdoc IBN254TableCalculator diff --git a/src/middlewareV2/tableCalculator/ECDSATableCalculatorBase.sol b/src/middlewareV2/tableCalculator/ECDSATableCalculatorBase.sol index 73fc1f9c..42241559 100644 --- a/src/middlewareV2/tableCalculator/ECDSATableCalculatorBase.sol +++ b/src/middlewareV2/tableCalculator/ECDSATableCalculatorBase.sol @@ -42,27 +42,27 @@ abstract contract ECDSATableCalculatorBase is IECDSATableCalculator { } /// @inheritdoc IOperatorTableCalculator - function getOperatorWeights( + function getOperatorSetWeights( OperatorSet calldata operatorSet ) external view virtual returns (address[] memory operators, uint256[][] memory weights) { return _getOperatorWeights(operatorSet); } /// @inheritdoc IOperatorTableCalculator - function getOperatorWeight( + function getOperatorWeights( OperatorSet calldata operatorSet, address operator - ) external view virtual returns (uint256 weight) { + ) external view virtual returns (uint256[] memory) { (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); // Find the index of the operator in the operators array for (uint256 i = 0; i < operators.length; i++) { if (operators[i] == operator) { - return weights[i][0]; + return weights[i]; } } - return 0; + return new uint256[](0); } /** diff --git a/test/integration/IntegrationDeployer.t.sol b/test/integration/IntegrationDeployer.t.sol index b42a86e8..b54e9e4e 100644 --- a/test/integration/IntegrationDeployer.t.sol +++ b/test/integration/IntegrationDeployer.t.sol @@ -24,8 +24,6 @@ import "eigenlayer-contracts/src/contracts/pods/EigenPodManager.sol"; import "eigenlayer-contracts/src/contracts/pods/EigenPod.sol"; import "eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol"; import "eigenlayer-contracts/src/contracts/permissions/PermissionController.sol"; -import "eigenlayer-contracts/src/contracts/core/SlashEscrowFactory.sol"; -import "eigenlayer-contracts/src/contracts/core/SlashEscrow.sol"; import "eigenlayer-contracts/src/test/mocks/ETHDepositMock.sol"; // Middleware contracts @@ -64,7 +62,6 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { ETHPOSDepositMock ethPOSDeposit; AllocationManager public allocationManager; PermissionController permissionController; - SlashEscrowFactory slashEscrowFactory; // Base strategy implementation in case we want to create more strategies later StrategyBase baseStrategyImplementation; @@ -191,12 +188,6 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { ) ); - slashEscrowFactory = SlashEscrowFactory( - address( - new TransparentUpgradeableProxy(address(emptyContract), address(proxyAdmin), "") - ) - ); - // Deploy EigenPod Contracts pod = new EigenPod(ethPOSDeposit, eigenPodManager, "v0.0.1"); @@ -215,7 +206,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { "v0.0.1" ); StrategyManager strategyManagerImplementation = - new StrategyManager(delegationManager, slashEscrowFactory, pauserRegistry, "v0.0.1"); + new StrategyManager(allocationManager, delegationManager, pauserRegistry, "v0.0.1"); EigenPodManager eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, eigenPodBeacon, delegationManager, pauserRegistry, "v0.0.1" ); @@ -240,6 +231,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { AllocationManager allocationManagerImplementation = new AllocationManager( delegationManager, + IStrategy(address(0)), // TODO: update this to the eigenStrategy, pauserRegistry, permissionController, uint32(7 days), // DEALLOCATION_DELAY @@ -247,14 +239,6 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { "v0.0.1" // Added config parameter ); - // Deploy SlashEscrow implementation - SlashEscrow slashEscrowImpl = new SlashEscrow(); - - // Deploy SlashEscrowFactory implementation - SlashEscrowFactory slashEscrowFactoryImplementation = new SlashEscrowFactory( - allocationManager, strategyManager, pauserRegistry, slashEscrowImpl, "v0.0.1" - ); - // Third, upgrade the proxy contracts to point to the implementations uint256 minWithdrawalDelayBlocks = 7 days / 12 seconds; IStrategy[] memory initializeStrategiesToSetDelayBlocks = new IStrategy[](0); @@ -327,18 +311,6 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { ) ); - // SlashEscrowFactory - proxyAdmin.upgradeAndCall( - ITransparentUpgradeableProxy(payable(address(slashEscrowFactory))), - address(slashEscrowFactoryImplementation), - abi.encodeWithSelector( - SlashEscrowFactory.initialize.selector, - eigenLayerReputedMultisig, // initialOwner - 0, // initialPausedStatus - 7 days / 12 // initialGlobalDelayBlocks (7 days worth of blocks) - ) - ); - // Deploy and whitelist strategies baseStrategyImplementation = new StrategyBase(strategyManager, pauserRegistry, "v0.0.1"); for (uint256 i = 0; i < MAX_STRATEGY_COUNT; i++) { diff --git a/test/mocks/KeyRegistrarMock.sol b/test/mocks/KeyRegistrarMock.sol index ad4f0a5b..a4b7c1c8 100644 --- a/test/mocks/KeyRegistrarMock.sol +++ b/test/mocks/KeyRegistrarMock.sol @@ -127,6 +127,23 @@ contract KeyRegistrarMock is IKeyRegistrar { return abi.encode(g1Point, g2Point); } + function getOperatorFromSigningKey( + OperatorSet memory, + /** + * operatorSet + */ + bytes calldata + ) + /** + * keyData + */ + external + pure + returns (address, bool) + { + return (address(0), false); + } + receive() external payable {} fallback() external payable {} } diff --git a/test/unit/middlewareV2/BN254TableCalculatorBaseUnit.t.sol b/test/unit/middlewareV2/BN254TableCalculatorBaseUnit.t.sol index 7e5cc229..273587f5 100644 --- a/test/unit/middlewareV2/BN254TableCalculatorBaseUnit.t.sol +++ b/test/unit/middlewareV2/BN254TableCalculatorBaseUnit.t.sol @@ -479,10 +479,10 @@ contract BN254TableCalculatorBaseUnitTests_calculateOperatorTableBytes is } /** - * @title BN254TableCalculatorBaseUnitTests_getOperatorWeights - * @notice Unit tests for BN254TableCalculatorBase.getOperatorWeights + * @title BN254TableCalculatorBaseUnitTests_getOperatorSetWeights + * @notice Unit tests for BN254TableCalculatorBase.getOperatorSetWeights */ -contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is +contract BN254TableCalculatorBaseUnitTests_getOperatorSetWeights is BN254TableCalculatorBaseUnitTests { function test_returnsImplementationResult() public { @@ -498,7 +498,7 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(defaultOperatorSet); + calculator.getOperatorSetWeights(defaultOperatorSet); assertEq(operators.length, expectedOperators.length, "Operators length mismatch"); assertEq(weights.length, expectedWeights.length, "Weights length mismatch"); @@ -525,7 +525,7 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(defaultOperatorSet); + calculator.getOperatorSetWeights(defaultOperatorSet); assertEq(operators.length, numOperators, "Operators length mismatch"); assertEq(weights.length, numOperators, "Weights length mismatch"); @@ -533,10 +533,10 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is } /** - * @title BN254TableCalculatorBaseUnitTests_getOperatorWeight - * @notice Unit tests for BN254TableCalculatorBase.getOperatorWeight + * @title BN254TableCalculatorBaseUnitTests_getOperatorWeights + * @notice Unit tests for BN254TableCalculatorBase.getOperatorWeights */ -contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is +contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is BN254TableCalculatorBaseUnitTests { function test_operatorExists() public { @@ -553,21 +553,17 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 100, - "Operator1 weight mismatch" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator2), - 200, - "Operator2 weight mismatch" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator3), - 300, - "Operator3 weight mismatch" - ); + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 1, "Operator1 should have 1 weight type"); + assertEq(op1Weights[0], 100, "Operator1 weight mismatch"); + + uint256[] memory op2Weights = calculator.getOperatorWeights(defaultOperatorSet, operator2); + assertEq(op2Weights.length, 1, "Operator2 should have 1 weight type"); + assertEq(op2Weights[0], 200, "Operator2 weight mismatch"); + + uint256[] memory op3Weights = calculator.getOperatorWeights(defaultOperatorSet, operator3); + assertEq(op3Weights.length, 1, "Operator3 should have 1 weight type"); + assertEq(op3Weights[0], 300, "Operator3 weight mismatch"); } function test_operatorDoesNotExist() public { @@ -582,16 +578,12 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator3), - 0, - "Non-existent operator should return 0" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, address(0xdead)), - 0, - "Random address should return 0" - ); + uint256[] memory op3Weights = calculator.getOperatorWeights(defaultOperatorSet, operator3); + assertEq(op3Weights.length, 0, "Non-existent operator should return empty array"); + + uint256[] memory deadWeights = + calculator.getOperatorWeights(defaultOperatorSet, address(0xdead)); + assertEq(deadWeights.length, 0, "Random address should return empty array"); } function test_emptyOperatorSet() public { @@ -601,14 +593,11 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 0, - "Should return 0 for empty set" - ); + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 0, "Should return empty array for empty set"); } - function testFuzz_getOperatorWeight(address operator, uint256 weight) public { + function testFuzz_getOperatorWeights(address operator, uint256 weight) public { weight = bound(weight, 0, 1e18); // Set single operator @@ -619,17 +608,15 @@ contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator), weight, "Weight mismatch" - ); + uint256[] memory opWeights = calculator.getOperatorWeights(defaultOperatorSet, operator); + assertEq(opWeights.length, 1, "Should have 1 weight type"); + assertEq(opWeights[0], weight, "Weight mismatch"); - // Different operator should return 0 + // Different operator should return empty array address differentOperator = address(uint160(uint256(uint160(operator)) + 1)); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, differentOperator), - 0, - "Different operator should return 0" - ); + uint256[] memory diffWeights = + calculator.getOperatorWeights(defaultOperatorSet, differentOperator); + assertEq(diffWeights.length, 0, "Different operator should return empty array"); } } diff --git a/test/unit/middlewareV2/ECDSATableCalculatorBaseUnit.t.sol b/test/unit/middlewareV2/ECDSATableCalculatorBaseUnit.t.sol index 1ba1a533..b6387947 100644 --- a/test/unit/middlewareV2/ECDSATableCalculatorBaseUnit.t.sol +++ b/test/unit/middlewareV2/ECDSATableCalculatorBaseUnit.t.sol @@ -576,10 +576,10 @@ contract ECDSATableCalculatorBaseUnitTests_calculateOperatorTableBytes is } /** - * @title ECDSATableCalculatorBaseUnitTests_getOperatorWeights - * @notice Unit tests for ECDSATableCalculatorBase.getOperatorWeights + * @title ECDSATableCalculatorBaseUnitTests_getOperatorSetWeights + * @notice Unit tests for ECDSATableCalculatorBase.getOperatorSetWeights */ -contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is +contract ECDSATableCalculatorBaseUnitTests_getOperatorSetWeights is ECDSATableCalculatorBaseUnitTests { function test_returnsImplementationResult() public { @@ -595,7 +595,7 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(defaultOperatorSet); + calculator.getOperatorSetWeights(defaultOperatorSet); assertEq(operators.length, expectedOperators.length, "Operators length mismatch"); assertEq(weights.length, expectedWeights.length, "Weights length mismatch"); @@ -614,7 +614,7 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(defaultOperatorSet); + calculator.getOperatorSetWeights(defaultOperatorSet); assertEq(operators.length, 0, "Should return empty operators array"); assertEq(weights.length, 0, "Should return empty weights array"); @@ -633,7 +633,7 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is ); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(alternativeOperatorSet); + calculator.getOperatorSetWeights(alternativeOperatorSet); assertEq(operators.length, 1, "Operators length mismatch"); assertEq(operators[0], operator3, "Operator address mismatch"); @@ -657,7 +657,7 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); (address[] memory operators, uint256[][] memory weights) = - calculator.getOperatorWeights(defaultOperatorSet); + calculator.getOperatorSetWeights(defaultOperatorSet); assertEq(operators.length, numOperators, "Operators length mismatch"); assertEq(weights.length, numOperators, "Weights length mismatch"); @@ -670,10 +670,10 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is } /** - * @title ECDSATableCalculatorBaseUnitTests_getOperatorWeight - * @notice Unit tests for ECDSATableCalculatorBase.getOperatorWeight + * @title ECDSATableCalculatorBaseUnitTests_getOperatorWeights + * @notice Unit tests for ECDSATableCalculatorBase.getOperatorWeights */ -contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is +contract ECDSATableCalculatorBaseUnitTests_getOperatorWeights is ECDSATableCalculatorBaseUnitTests { function test_operatorExists() public { @@ -690,21 +690,17 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 100, - "Operator1 weight mismatch" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator2), - 200, - "Operator2 weight mismatch" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator3), - 300, - "Operator3 weight mismatch" - ); + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 1, "Operator1 should have 1 weight type"); + assertEq(op1Weights[0], 100, "Operator1 weight mismatch"); + + uint256[] memory op2Weights = calculator.getOperatorWeights(defaultOperatorSet, operator2); + assertEq(op2Weights.length, 1, "Operator2 should have 1 weight type"); + assertEq(op2Weights[0], 200, "Operator2 weight mismatch"); + + uint256[] memory op3Weights = calculator.getOperatorWeights(defaultOperatorSet, operator3); + assertEq(op3Weights.length, 1, "Operator3 should have 1 weight type"); + assertEq(op3Weights[0], 300, "Operator3 weight mismatch"); } function test_operatorDoesNotExist() public { @@ -719,16 +715,12 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator3), - 0, - "Non-existent operator should return 0" - ); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, address(0xdead)), - 0, - "Random address should return 0" - ); + uint256[] memory op3Weights = calculator.getOperatorWeights(defaultOperatorSet, operator3); + assertEq(op3Weights.length, 0, "Non-existent operator should return empty array"); + + uint256[] memory deadWeights = + calculator.getOperatorWeights(defaultOperatorSet, address(0xdead)); + assertEq(deadWeights.length, 0, "Random address should return empty array"); } function test_emptyOperatorSet() public { @@ -738,11 +730,8 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 0, - "Should return 0 for empty set" - ); + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 0, "Should return empty array for empty set"); } function test_zeroWeight() public { @@ -755,11 +744,9 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 0, - "Should return 0 for zero weight" - ); + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 1, "Should have 1 weight type"); + assertEq(op1Weights[0], 0, "Should return 0 for zero weight"); } function test_multipleWeightTypes() public { @@ -776,15 +763,15 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - // getOperatorWeight returns first weight type - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator1), - 100, - "Should return first weight type" - ); + // getOperatorWeights returns all weight types + uint256[] memory op1Weights = calculator.getOperatorWeights(defaultOperatorSet, operator1); + assertEq(op1Weights.length, 3, "Should have 3 weight types"); + assertEq(op1Weights[0], 100, "First weight type mismatch"); + assertEq(op1Weights[1], 200, "Second weight type mismatch"); + assertEq(op1Weights[2], 300, "Third weight type mismatch"); } - function testFuzz_getOperatorWeight( + function testFuzz_getOperatorWeights( Randomness r, address operator, uint256 weight @@ -799,17 +786,15 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operator), weight, "Weight mismatch" - ); + uint256[] memory opWeights = calculator.getOperatorWeights(defaultOperatorSet, operator); + assertEq(opWeights.length, 1, "Should have 1 weight type"); + assertEq(opWeights[0], weight, "Weight mismatch"); - // Different operator should return 0 + // Different operator should return empty array address differentOperator = address(uint160(uint256(uint160(operator)) + 1)); - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, differentOperator), - 0, - "Different operator should return 0" - ); + uint256[] memory diffWeights = + calculator.getOperatorWeights(defaultOperatorSet, differentOperator); + assertEq(diffWeights.length, 0, "Different operator should return empty array"); } function testFuzz_multipleOperators(Randomness r, uint8 numOperators) public rand(r) { @@ -829,14 +814,13 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is // Verify each operator's weight for (uint256 i = 0; i < numOperators; i++) { - assertEq( - calculator.getOperatorWeight(defaultOperatorSet, operators[i]), - expectedWeights[i], - "Weight mismatch" - ); + uint256[] memory opWeights = + calculator.getOperatorWeights(defaultOperatorSet, operators[i]); + assertEq(opWeights.length, 1, "Should have 1 weight type"); + assertEq(opWeights[0], expectedWeights[i], "Weight mismatch"); } - // Non-existent operator should return 0 + // Non-existent operator should return empty array address nonExistent = address(uint160(r.Uint256())); bool exists = false; for (uint256 i = 0; i < numOperators; i++) { @@ -846,10 +830,10 @@ contract ECDSATableCalculatorBaseUnitTests_getOperatorWeight is } } if (!exists) { + uint256[] memory nonExistentWeights = + calculator.getOperatorWeights(defaultOperatorSet, nonExistent); assertEq( - calculator.getOperatorWeight(defaultOperatorSet, nonExistent), - 0, - "Non-existent operator should return 0" + nonExistentWeights.length, 0, "Non-existent operator should return empty array" ); } } diff --git a/test/utils/CoreDeployLib.sol b/test/utils/CoreDeployLib.sol index 94329afc..ddd67dec 100644 --- a/test/utils/CoreDeployLib.sol +++ b/test/utils/CoreDeployLib.sol @@ -43,10 +43,6 @@ import {IRewardsCoordinatorTypes} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; import {UpgradeableProxyLib} from "../unit/UpgradeableProxyLib.sol"; -import {SlashEscrowFactory} from "eigenlayer-contracts/src/contracts/core/SlashEscrowFactory.sol"; -import {SlashEscrow} from "eigenlayer-contracts/src/contracts/core/SlashEscrow.sol"; -import {ISlashEscrowFactory} from - "eigenlayer-contracts/src/contracts/interfaces/ISlashEscrowFactory.sol"; library CoreDeployLib { using stdJson for string; @@ -133,7 +129,6 @@ library CoreDeployLib { address strategyBeacon; address rewardsCoordinator; address permissionController; - address slashEscrowFactory; } function deployContracts( @@ -163,7 +158,6 @@ library CoreDeployLib { proxies.strategyFactory = UpgradeableProxyLib.setUpEmptyProxy(proxyAdmin); proxies.rewardsCoordinator = UpgradeableProxyLib.setUpEmptyProxy(proxyAdmin); proxies.permissionController = UpgradeableProxyLib.setUpEmptyProxy(proxyAdmin); - proxies.slashEscrowFactory = UpgradeableProxyLib.setUpEmptyProxy(proxyAdmin); return proxies; } @@ -174,24 +168,10 @@ library CoreDeployLib { // Deploy core implementations address permissionControllerImpl = address(new PermissionController("1.0.0")); - // Deploy SlashEscrow implementation - SlashEscrow slashEscrowImpl = new SlashEscrow(); - - // Deploy SlashEscrowFactory implementation - address slashEscrowFactoryImpl = address( - new SlashEscrowFactory( - IAllocationManager(deployments.allocationManager), - IStrategyManager(deployments.strategyManager), - IPauserRegistry(deployments.pauserRegistry), - slashEscrowImpl, - "1.0.0" - ) - ); - address strategyManagerImpl = address( new StrategyManager( + IAllocationManager(deployments.allocationManager), IDelegationManager(deployments.delegationManager), - ISlashEscrowFactory(deployments.slashEscrowFactory), IPauserRegistry(deployments.pauserRegistry), "1.0.0" ) @@ -200,6 +180,7 @@ library CoreDeployLib { address allocationManagerImpl = address( new AllocationManager( IDelegationManager(deployments.delegationManager), + IStrategy(address(0)), // TODO: update this to the eigenStrategy, IPauserRegistry(deployments.pauserRegistry), IPermissionController(deployments.permissionController), config.allocationManager.deallocationDelay, @@ -262,19 +243,6 @@ library CoreDeployLib { (config.avsDirectory.initialOwner, config.avsDirectory.initPausedStatus) ); UpgradeableProxyLib.upgradeAndCall(deployments.avsDirectory, avsDirectoryImpl, upgradeCall); - - // Upgrade and initialize SlashEscrowFactory - upgradeCall = abi.encodeCall( - SlashEscrowFactory.initialize, - ( - config.avsDirectory.initialOwner, // Using same owner as other contracts - 0, // initialPausedStatus - 7 days / 12 // initialGlobalDelayBlocks (7 days worth of blocks) - ) - ); - UpgradeableProxyLib.upgradeAndCall( - deployments.slashEscrowFactory, slashEscrowFactoryImpl, upgradeCall - ); } function deployAndConfigurePods( diff --git a/test/utils/MockAVSDeployer.sol b/test/utils/MockAVSDeployer.sol index ad1547c6..d770bf9a 100644 --- a/test/utils/MockAVSDeployer.sol +++ b/test/utils/MockAVSDeployer.sol @@ -275,6 +275,7 @@ contract MockAVSDeployer is Test { allocationManagerImplementation = new AllocationManager( delegationMock, + IStrategy(address(0)), // TODO: update this to the eigenStrategy pauserRegistry, permissionControllerMock, uint32(7 days), // DEALLOCATION_DELAY