Skip to content

Comments

fix: assert defaultOperatorSplitBips does not exceed 100%#1731

Merged
0xClandestine merged 1 commit intomainfrom
fix/rewards
Feb 23, 2026
Merged

fix: assert defaultOperatorSplitBips does not exceed 100%#1731
0xClandestine merged 1 commit intomainfrom
fix/rewards

Conversation

@0xClandestine
Copy link
Member

Motivation:

The setter _setDefaultOperatorSplit was missing a check asserting input does not exceed max.

Modifications:

Added one line check to the function.

Result:

The value defaultOperatorSplitBips cannot exceed 100%.

@claude
Copy link

claude bot commented Feb 23, 2026

Claude encountered an error after 1m 29s —— View job


Code Review Complete ✅

Todo List:

  • Read changed files to understand modifications
  • Review contract changes in RewardsCoordinator.sol
  • Review test changes in RewardsCoordinatorUnit.t.sol
  • Check for similar issues in related functions
  • Provide inline comments on any issues found
  • Post final review summary

Summary

This is a solid fix that addresses a missing validation in _setDefaultOperatorSplit(). The implementation is correct and follows established patterns in the codebase.

Review Findings

✅ Correctness

  • The validation require(split <= ONE_HUNDRED_IN_BIPS, SplitExceedsMax()) correctly prevents values exceeding 10,000 basis points (100%)
  • Consistent with the existing _setOperatorSplit() function (line 481) which has the same check
  • The error type SplitExceedsMax matches the interface documentation and is used consistently

✅ Security

  • No security concerns introduced
  • The fix actually improves security by preventing invalid state
  • The check is placed before state modification, following checks-effects-interactions pattern

✅ Test Coverage

  • The modified test testFuzz_setDefaultOperatorSplit now properly bounds inputs to valid values
  • New test testFuzz_setDefaultOperatorSplit_Revert_WhenSplitGreaterThan100 comprehensively covers the invalid range
  • Test improvements align with the contract change

✅ Integration

  • The initialize() function calls _setDefaultOperatorSplit() (line 76), so initialization will now also be protected
  • All public setters (setOperatorAVSSplit, setOperatorPISplit, setOperatorSetSplit) already route through _setOperatorSplit() which has this validation
  • This fix achieves consistency across all split setters

Recommendation

Approve and merge. The PR correctly addresses the missing validation with appropriate test coverage and no regressions.

@0xClandestine 0xClandestine merged commit ffe0129 into main Feb 23, 2026
29 of 30 checks passed
@0xClandestine 0xClandestine deleted the fix/rewards branch February 23, 2026 16:27
Copy link

@certora-run certora-run bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verification Results

  • Group ID: e2b9e5d2-336b-4275-ae36-699d04f5ae91
  • Commit: 8ed5b4a
Job Result VERIFIED Link
strategies/StrategyBase.conf 2 Link
pods/EigenPodManagerRules.conf 9 Link
permissions/Pausable.conf 2 Link
multichain/OperatorTableUpdater.conf 11 Link
multichain/KeyRegistrar.conf 13 Link
multichain/ECDSACertificateVerifier.conf 7 Link
multichain/CrossChainRegistry.conf 21 Link
multichain/BN254CertificateVerifier.conf 6 Link
core/StrategyManager.conf 6 Link
core/DelegationManagerValidState.conf 11 Link
core/DelegationManager.conf 9 Link
core/AllocationManagerValidState.conf (Rule(s): sumOfPendingDiffCurrentMagnitudeRespectsWAD) 2 Link
core/AllocationManagerValidState.conf (Rule(s): SetInRegisteredIFFStatusIsTrue) 2 Link
core/AllocationManagerValidState.conf (Rule(s): registeredSetsInvariant) 2 Link
core/AllocationManagerValidState.conf (Rule(s): operatorSetsInvariant) 2 Link
core/AllocationManagerValidState.conf (Rule(s): noZeroKeyInDealocationQ) 2 Link
core/AllocationManagerValidState.conf (Rule(s): noPositivePendingDiffInDeallocationQ) 2 Link
core/AllocationManagerValidState.conf (Rule(s): negativePendingDiffAtMostCurrentMagnitude) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeMonotonicallyDecreasing) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeLeqWAD) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeHistoryPastLengthNullified) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeHistoryKeysMonotonicInc) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeHistoryKeysLessThanCurrentBlock) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeGEencumberedMagnitude) 2 Link
core/AllocationManagerValidState.conf (Rule(s): maxMagnitudeGECurrentMagnitude) 2 Link
core/AllocationManagerValidState.conf (Rule(s): EndGreaterThenBegin) 2 Link
core/AllocationManagerValidState.conf (Rule(s): encumberedMagnitudeLeqWAD) 2 Link
core/AllocationManagerValidState.conf (Rule(s): encumberedMagnitudeEqSumOfCurrentMagnitudesAndPositivePending) 2 Link
core/AllocationManagerValidState.conf (Rule(s): effectBlockZeroHasNoPendingDiff) 2 Link
core/AllocationManagerValidState.conf (Rule(s): deallocationQueueEffectBlocLessThanCurrBlockNumberPlushDelayPlusOne) 2 Link
core/AllocationManagerValidState.conf (Rule(s): deallocationQueueEffectBlockAscendingOrder) 2 Link
core/AllocationManagerValidState.conf (Rule(s): deallocationQueueDataUniqueness) 2 Link
core/AllocationManagerValidState.conf (Rule(s): deallocationQueueDataOutOfBoundsAreNullified) 2 Link
core/AllocationManagerValidState.conf (Rule(s): currentMagnitudeLeqWAD) 2 Link
core/AllocationManagerValidState.conf (Rule(s): allocatedSetsInvariant) 2 Link
core/AllocationManagerSanity.conf 2 Link
core/AllocationManagerOverslashing.conf 4 Link
core/AllocationManager.conf 4 Link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants