@@ -333,6 +333,22 @@ interface IRewardsCoordinatorEvents is IRewardsCoordinatorTypes {
333333 OperatorDirectedRewardsSubmission operatorDirectedRewardsSubmission
334334 );
335335
336+ /**
337+ * @notice Emitted when an AVS creates a valid `OperatorSetRewardsSubmission` for an operator set.
338+ * @param caller The address calling `createOperatorSetRewardsSubmission`.
339+ * @param rewardsSubmissionHash Keccak256 hash of (`avs`, `submissionNonce` and `rewardsSubmission`).
340+ * @param operatorSet The operatorSet on behalf of which the rewards are being submitted.
341+ * @param submissionNonce Current nonce of the avs. Used to generate a unique submission hash.
342+ * @param rewardsSubmission The Rewards Submission. Contains the token, start timestamp, duration, strategies and multipliers.
343+ */
344+ event OperatorSetRewardsSubmissionCreated (
345+ address indexed caller ,
346+ bytes32 indexed rewardsSubmissionHash ,
347+ OperatorSet operatorSet ,
348+ uint256 submissionNonce ,
349+ RewardsSubmission rewardsSubmission
350+ );
351+
336352 /// @notice rewardsUpdater is responsible for submitting DistributionRoots, only owner can set rewardsUpdater
337353 event RewardsUpdaterSet (address indexed oldRewardsUpdater , address indexed newRewardsUpdater );
338354
@@ -515,6 +531,24 @@ interface IRewardsCoordinator is IRewardsCoordinatorErrors, IRewardsCoordinatorE
515531 OperatorDirectedRewardsSubmission[] calldata operatorDirectedRewardsSubmissions
516532 ) external ;
517533
534+ /**
535+ * @notice Creates a new rewards submission for an operator set, to be split amongst the operators and
536+ * set of stakers delegated to operators. The operators have to allocate slashable stake to the operator set to be rewarded.
537+ * @param operatorSet The operator set for which the rewards are being submitted
538+ * @param rewardsSubmissions The rewards submissions being created
539+ * @dev Expected to be called by the AVS that created the operator set
540+ * @dev The duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`
541+ * @dev The duration of the `rewardsSubmission` cannot be 0 and must be a multiple of `CALCULATION_INTERVAL_SECONDS`
542+ * @dev The tokens are sent to the `RewardsCoordinator` contract
543+ * @dev The `RewardsCoordinator` contract needs a token approval of sum of all `strategies` in the `rewardsSubmissions`, before calling this function
544+ * @dev Strategies must be in ascending order of addresses to check for duplicates
545+ * @dev This function will revert if the `rewardsSubmissions` is malformed.
546+ */
547+ function createOperatorSetRewardsSubmission (
548+ OperatorSet calldata operatorSet ,
549+ RewardsSubmission[] calldata rewardsSubmissions
550+ ) external ;
551+
518552 /**
519553 * @notice Claim rewards against a given root (read from _distributionRoots[claim.rootIndex]).
520554 * Earnings are cumulative so earners don't have to claim against all distribution roots they have earnings for,
0 commit comments