Skip to content

Commit 74ab41d

Browse files
committed
fix(audit): assert redistribution recipient != burn address (#1466)
**Motivation:** It was previously possible to set the redistribution recipient for a redistributing operator set to the burn address, meaning it's effectively a non-redistributing operator set. **Modifications:** - Ensure`redistributionRecipient != DEFAULT_BURN_ADDRESS`. **Result:** L-02 resolved.
1 parent 491a8e1 commit 74ab41d

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

src/contracts/core/AllocationManager.sol

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,10 @@ contract AllocationManager is
275275
require(params.length == redistributionRecipients.length, InputArrayLengthMismatch());
276276
require(_avsRegisteredMetadata[avs], NonexistentAVSMetadata());
277277
for (uint256 i = 0; i < params.length; i++) {
278-
require(redistributionRecipients[i] != address(0), InputAddressZero());
279-
_createOperatorSet(avs, params[i], redistributionRecipients[i]);
278+
address recipient = redistributionRecipients[i];
279+
require(recipient != address(0), InputAddressZero());
280+
require(recipient != DEFAULT_BURN_ADDRESS, InvalidRedistributionRecipient());
281+
_createOperatorSet(avs, params[i], recipient);
280282
}
281283
}
282284

src/contracts/interfaces/IAllocationManager.sol

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ interface IAllocationManagerErrors {
1919
error InvalidAVSRegistrar();
2020
/// @dev Thrown when an invalid strategy is provided.
2121
error InvalidStrategy();
22+
/// @dev Thrown when an invalid redistribution recipient is provided.
23+
error InvalidRedistributionRecipient();
2224

2325
/// Caller
2426

src/test/unit/AllocationManagerUnit.t.sol

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag
1313
/// Constants
1414
/// -----------------------------------------------------------------------
1515

16+
address internal constant DEFAULT_BURN_ADDRESS = 0x00000000000000000000000000000000000E16E4;
17+
1618
/// NOTE: Raising these values directly increases cpu time for tests.
1719
uint internal constant FUZZ_MAX_ALLOCATIONS = 8;
1820
uint internal constant FUZZ_MAX_STRATS = 8;
@@ -3745,8 +3747,6 @@ contract AllocationManagerUnitTests_removeStrategiesFromOperatorSet is Allocatio
37453747
contract AllocationManagerUnitTests_createOperatorSets is AllocationManagerUnitTests {
37463748
using ArrayLib for *;
37473749

3748-
address internal constant DEFAULT_BURN_ADDRESS = 0x00000000000000000000000000000000000E16E4;
3749-
37503750
function testRevert_createOperatorSets_InvalidOperatorSet() public {
37513751
cheats.prank(defaultAVS);
37523752
cheats.expectRevert(InvalidOperatorSet.selector);
@@ -3838,6 +3838,21 @@ contract AllocationManagerUnitTests_createRedistributingOperatorSets is Allocati
38383838
);
38393839
}
38403840

3841+
function testRevert_createRedistributingOperatorSets_InvalidRedistributionRecipient(Randomness r) public rand(r) {
3842+
address avs = r.Address();
3843+
address[] memory redistributionRecipients = new address[](1);
3844+
redistributionRecipients[0] = DEFAULT_BURN_ADDRESS;
3845+
3846+
cheats.prank(avs);
3847+
allocationManager.updateAVSMetadataURI(avs, "https://example.com");
3848+
3849+
cheats.prank(avs);
3850+
cheats.expectRevert(InvalidRedistributionRecipient.selector);
3851+
allocationManager.createRedistributingOperatorSets(
3852+
avs, CreateSetParams(defaultOperatorSet.id, defaultStrategies).toArray(), redistributionRecipients
3853+
);
3854+
}
3855+
38413856
function testFuzz_createRedistributingOperatorSets_Correctness(Randomness r) public rand(r) {
38423857
address avs = r.Address();
38433858
uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS);

0 commit comments

Comments
 (0)