From 324439bbd8213953e396b586684cbc0a6dec920a Mon Sep 17 00:00:00 2001 From: sm-stack Date: Sun, 21 Jul 2024 16:50:34 +0900 Subject: [PATCH 1/2] feat: update validator reward calculation --- .../contracts/contracts/L1/ValidatorManager.sol | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/contracts/contracts/L1/ValidatorManager.sol b/packages/contracts/contracts/L1/ValidatorManager.sol index 7e7a4a94b..ea78a253d 100644 --- a/packages/contracts/contracts/L1/ValidatorManager.sol +++ b/packages/contracts/contracts/L1/ValidatorManager.sol @@ -601,9 +601,9 @@ contract ValidatorManager is ISemver, IValidatorManager { * * @param validator Address of the validator. * - * @return The amount of base reward. + * @return The amount of base reward, excluding base reward for the validator. * @return The amount of boosted reward. - * @return The amount of validator reward. + * @return The amount of reward from commission and base reward for the validator. */ function _calculateReward(address validator) internal view returns (uint128, uint128, uint128) { uint128 commissionRate = _validatorInfo[validator].commissionRate; @@ -612,10 +612,6 @@ contract ValidatorManager is ISemver, IValidatorManager { uint128 validatorReward; unchecked { - validatorReward = (BASE_REWARD + boostedReward).mulDiv( - commissionRate, - COMMISSION_RATE_DENOM - ); baseReward = BASE_REWARD.mulDiv( COMMISSION_RATE_DENOM - commissionRate, COMMISSION_RATE_DENOM @@ -624,6 +620,15 @@ contract ValidatorManager is ISemver, IValidatorManager { COMMISSION_RATE_DENOM - commissionRate, COMMISSION_RATE_DENOM ); + + uint128 validatorKro = ASSET_MANAGER.totalValidatorKro(validator); + uint128 totalKro = ASSET_MANAGER.totalKroAssets(validator); + uint128 validatorBaseReward = baseReward.mulDiv(validatorKro, totalKro + validatorKro); + // Exclude the base reward for the validator from total base reward given to KRO delegators. + baseReward -= validatorBaseReward; + validatorReward = + (BASE_REWARD + boostedReward).mulDiv(commissionRate, COMMISSION_RATE_DENOM) + + validatorBaseReward; } return (baseReward, boostedReward, validatorReward); From 89fdaa1467d438a6c6b0a3b50dc0b923ab50a933 Mon Sep 17 00:00:00 2001 From: sm-stack Date: Mon, 22 Jul 2024 15:52:15 +0900 Subject: [PATCH 2/2] feat: apply PR reviews --- packages/contracts/contracts/L1/ValidatorManager.sol | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/contracts/contracts/L1/ValidatorManager.sol b/packages/contracts/contracts/L1/ValidatorManager.sol index ea78a253d..2c1b4fdae 100644 --- a/packages/contracts/contracts/L1/ValidatorManager.sol +++ b/packages/contracts/contracts/L1/ValidatorManager.sol @@ -612,6 +612,10 @@ contract ValidatorManager is ISemver, IValidatorManager { uint128 validatorReward; unchecked { + validatorReward = (BASE_REWARD + boostedReward).mulDiv( + commissionRate, + COMMISSION_RATE_DENOM + ); baseReward = BASE_REWARD.mulDiv( COMMISSION_RATE_DENOM - commissionRate, COMMISSION_RATE_DENOM @@ -626,9 +630,7 @@ contract ValidatorManager is ISemver, IValidatorManager { uint128 validatorBaseReward = baseReward.mulDiv(validatorKro, totalKro + validatorKro); // Exclude the base reward for the validator from total base reward given to KRO delegators. baseReward -= validatorBaseReward; - validatorReward = - (BASE_REWARD + boostedReward).mulDiv(commissionRate, COMMISSION_RATE_DENOM) + - validatorBaseReward; + validatorReward += validatorBaseReward; } return (baseReward, boostedReward, validatorReward);