Skip to content

Commit

Permalink
Reorder functions to appease the linter
Browse files Browse the repository at this point in the history
  • Loading branch information
m-chrzan committed Sep 19, 2024
1 parent 6c965c7 commit 77544d7
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 79 deletions.
108 changes: 54 additions & 54 deletions packages/protocol/contracts-0.8/common/EpochManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,60 @@ contract EpochManager is
epochProcessing.status = EpochProcessStatus.NotStarted;
}

/**
* @notice Sends the allocated epoch payment to a validator, their group, and
* delegation beneficiary.
* @param validator Account of the validator.
*/
function sendValidatorPayment(address validator) external {
IAccounts accounts = IAccounts(getAccounts());
address signer = accounts.getValidatorSigner(validator);

FixidityLib.Fraction memory totalPayment = FixidityLib.newFixed(
validatorPendingPayments[signer]
);
validatorPendingPayments[signer] = 0;

IValidators validators = getValidators();
address group = validators.getValidatorsGroup(validator);
(, uint256 commissionUnwrapped, , , , , ) = validators.getValidatorGroup(group);

uint256 groupPayment = totalPayment.multiply(FixidityLib.wrap(commissionUnwrapped)).fromFixed();
FixidityLib.Fraction memory remainingPayment = FixidityLib.newFixed(
totalPayment.fromFixed() - groupPayment
);
(address beneficiary, uint256 delegatedFraction) = getAccounts().getPaymentDelegation(
validator
);
uint256 delegatedPayment = remainingPayment
.multiply(FixidityLib.wrap(delegatedFraction))
.fromFixed();
uint256 validatorPayment = remainingPayment.fromFixed() - delegatedPayment;

IStableToken stableToken = IStableToken(getStableToken());

if (validatorPayment > 0) {
require(stableToken.transfer(validator, validatorPayment), "transfer failed to validator");
}

if (groupPayment > 0) {
require(stableToken.transfer(group, groupPayment), "transfer failed to validator group");
}

if (delegatedPayment > 0) {
require(stableToken.transfer(beneficiary, delegatedPayment), "transfer failed to delegatee");
}

emit ValidatorEpochPaymentDistributed(
validator,
validatorPayment,
group,
groupPayment,
beneficiary,
delegatedPayment
);
}

/// returns the current epoch Info
function getCurrentEpoch() external view returns (uint256, uint256, uint256, uint256) {
Epoch storage _epoch = epochs[currentEpochNumber];
Expand Down Expand Up @@ -357,58 +411,4 @@ contract EpochManager is
CELOequivalent
);
}

/**
* @notice Sends the allocated epoch payment to a validator, their group, and
* delegation beneficiary.
* @param validator Account of the validator.
*/
function sendValidatorPayment(address validator) external {
IAccounts accounts = IAccounts(getAccounts());
address signer = accounts.getValidatorSigner(validator);

FixidityLib.Fraction memory totalPayment = FixidityLib.newFixed(
validatorPendingPayments[signer]
);
validatorPendingPayments[signer] = 0;

IValidators validators = getValidators();
address group = validators.getValidatorsGroup(validator);
(, uint256 commissionUnwrapped, , , , , ) = validators.getValidatorGroup(group);

uint256 groupPayment = totalPayment.multiply(FixidityLib.wrap(commissionUnwrapped)).fromFixed();
FixidityLib.Fraction memory remainingPayment = FixidityLib.newFixed(
totalPayment.fromFixed() - groupPayment
);
(address beneficiary, uint256 delegatedFraction) = getAccounts().getPaymentDelegation(
validator
);
uint256 delegatedPayment = remainingPayment
.multiply(FixidityLib.wrap(delegatedFraction))
.fromFixed();
uint256 validatorPayment = remainingPayment.fromFixed() - delegatedPayment;

IStableToken stableToken = IStableToken(getStableToken());

if (validatorPayment > 0) {
require(stableToken.transfer(validator, validatorPayment), "transfer failed to validator");
}

if (groupPayment > 0) {
require(stableToken.transfer(group, groupPayment), "transfer failed to validator group");
}

if (delegatedPayment > 0) {
require(stableToken.transfer(beneficiary, delegatedPayment), "transfer failed to delegatee");
}

emit ValidatorEpochPaymentDistributed(
validator,
validatorPayment,
group,
groupPayment,
beneficiary,
delegatedPayment
);
}
}
24 changes: 12 additions & 12 deletions packages/protocol/contracts-0.8/common/mocks/MockAccounts.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,28 @@ contract MockAccounts {
mapping(address => PaymentDelegation) delegations;
mapping(address => address) accountToSigner;

function setPaymentDelegationFor(
address validator,
address beneficiary,
uint256 fraction
) public {
delegations[validator] = PaymentDelegation(beneficiary, FixidityLib.wrap(fraction));
function setValidatorSigner(address account, address signer) external {
accountToSigner[account] = signer;
}

function deletePaymentDelegationFor(address validator) public {
delete delegations[validator];
function getValidatorSigner(address account) external returns (address) {
return accountToSigner[account];
}

function getPaymentDelegation(address account) external view returns (address, uint256) {
PaymentDelegation storage delegation = delegations[account];
return (delegation.beneficiary, delegation.fraction.unwrap());
}

function setValidatorSigner(address account, address signer) external {
accountToSigner[account] = signer;
function setPaymentDelegationFor(
address validator,
address beneficiary,
uint256 fraction
) public {
delegations[validator] = PaymentDelegation(beneficiary, FixidityLib.wrap(fraction));
}

function getValidatorSigner(address account) external returns (address) {
return accountToSigner[account];
function deletePaymentDelegationFor(address validator) public {
delete delegations[validator];
}
}
22 changes: 11 additions & 11 deletions packages/protocol/contracts-0.8/governance/Validators.sol
Original file line number Diff line number Diff line change
Expand Up @@ -1498,6 +1498,17 @@ contract Validators is
return true;
}

function _sendValidatorPaymentIfNecessary(address validator) private {
getEpochManager().sendValidatorPayment(validator);
}

function _sendValidatorPaymentsIfNecessary(ValidatorGroup storage group) private {
address[] memory members = group.members.getKeys();
for (uint256 i = 0; i < members.length; i++) {
_sendValidatorPaymentIfNecessary(members[i]);
}
}

/**
* @notice Returns the epoch number.
* @return Current epoch number.
Expand All @@ -1509,15 +1520,4 @@ contract Validators is
return getEpochNumber();
}
}

function _sendValidatorPaymentIfNecessary(address validator) private {
getEpochManager().sendValidatorPayment(validator);
}

function _sendValidatorPaymentsIfNecessary(ValidatorGroup storage group) private {
address[] memory members = group.members.getKeys();
for (uint256 i = 0; i < members.length; i++) {
_sendValidatorPaymentIfNecessary(members[i]);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ interface IEpochManager {
address[] calldata lessers,
address[] calldata greaters
) external;
function sendValidatorPayment(address) external;
function getCurrentEpoch() external view returns (uint256, uint256, uint256, uint256);
function getCurrentEpochNumber() external view returns (uint256);
function getElected() external view returns (address[] memory);
Expand All @@ -22,6 +23,4 @@ interface IEpochManager {
external
view
returns (uint256, uint256, uint256, uint256, uint256);

function sendValidatorPayment(address) external;
}

0 comments on commit 77544d7

Please sign in to comment.