Skip to content

Commit

Permalink
feat: handling overlapping commission delays
Browse files Browse the repository at this point in the history
  • Loading branch information
0xrajath committed Oct 26, 2024
1 parent 4d8b04b commit 50a0def
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 222 deletions.
26 changes: 20 additions & 6 deletions src/contracts/core/RewardsCoordinator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -300,16 +300,23 @@ contract RewardsCoordinator is

OperatorCommission storage operatorCommission = operatorAVSCommissionBips[operator][avs];

// If, the earlier 'new' commission is activated, we update the 'old' commission with the earlier 'new' commission.
// Else, the earlier 'old' commission remains the same. This is essentially resetting the activation delay window
// since the earlier commission setting didn't complete.
if (block.timestamp >= operatorCommission.activatedAt) {
operatorCommission.oldCommissionBips = operatorCommission.newCommissionBips;
}
operatorCommission.newCommissionBips = commission;
operatorCommission.activatedAt = activatedAt;

emit OperatorAVSCommissionBipsSet(
msg.sender,
operator,
avs,
activatedAt,
operatorCommission.commissionBips,
operatorCommission.oldCommissionBips,
commission
);
operatorCommission.commissionBips = commission;
operatorCommission.activatedAt = activatedAt;
}

/// @inheritdoc IRewardsCoordinator
Expand All @@ -327,15 +334,22 @@ contract RewardsCoordinator is

OperatorCommission storage operatorCommission = operatorPICommissionBips[operator];

// If, the earlier 'new' commission is activated, we update the 'old' commission with the earlier 'new' commission.
// Else, the earlier 'old' commission remains the same. This is essentially resetting the activation delay window
// since the earlier commission setting didn't complete.
if (block.timestamp >= operatorCommission.activatedAt) {
operatorCommission.oldCommissionBips = operatorCommission.newCommissionBips;
}
operatorCommission.newCommissionBips = commission;
operatorCommission.activatedAt = activatedAt;

emit OperatorPICommissionBipsSet(
msg.sender,
operator,
activatedAt,
operatorCommission.commissionBips,
operatorCommission.oldCommissionBips,
commission
);
operatorCommission.commissionBips = commission;
operatorCommission.activatedAt = activatedAt;
}

/// @inheritdoc IRewardsCoordinator
Expand Down
6 changes: 4 additions & 2 deletions src/contracts/interfaces/IRewardsCoordinator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,13 @@ interface IRewardsCoordinator {

/**
* @notice A commission struct for an Operator
* @param commissionBips The commission in basis points
* @param oldCommissionBips The old commission in basis points. This is the commission that is active if `block.timestamp < activatedAt`
* @param commissionBips The new commission in basis points. This is the commission that is active if `block.timestamp >= activatedAt`
* @param activatedAt The timestamp at which the commission will be activated
*/
struct OperatorCommission {
uint16 commissionBips;
uint16 oldCommissionBips;
uint16 newCommissionBips;
uint32 activatedAt;
}

Expand Down
214 changes: 0 additions & 214 deletions src/contracts/libraries/TimestampCheckpoints.sol

This file was deleted.

0 comments on commit 50a0def

Please sign in to comment.