Skip to content

Commit

Permalink
feat: tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vgorkavenko committed Nov 2, 2023
1 parent 4cf442e commit fc5187a
Show file tree
Hide file tree
Showing 5 changed files with 767 additions and 18 deletions.
40 changes: 25 additions & 15 deletions src/CSAccounting.sol
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ contract CSAccountingBase {
address to,
uint256 amount
);
event ELRewardsStealingReported(
event ELRewardsStealingPenaltyInitiated(
uint256 indexed nodeOperatorId,
uint256 proposedBlockNumber,
uint256 stolenAmount
Expand All @@ -57,6 +57,10 @@ contract CSAccountingBase {
uint256 indexed nodeOperatorId,
uint256 ETHAmount
);
event BlockedBondReleased(
uint256 indexed nodeOperatorId,
uint256 ETHAmount
);
event BondPenalized(
uint256 indexed nodeOperatorId,
uint256 penaltyETH,
Expand Down Expand Up @@ -94,8 +98,8 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
address public FEE_DISTRIBUTOR;
uint256 public totalBondShares;

mapping(uint256 => uint256) private _bondShares;
mapping(uint256 => BlockedBondEther) private _blockedBondEther;
mapping(uint256 => uint256) internal _bondShares;
mapping(uint256 => BlockedBondEther) internal _blockedBondEther;

error NotOwnerToClaim(address msgSender, address owner);

Expand Down Expand Up @@ -212,6 +216,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
uint256 nodeOperatorId
) public view returns (uint256) {
(uint256 current, uint256 required) = _bondETHSummary(nodeOperatorId);
required += getBlockedBondETH(nodeOperatorId);
return current > required ? current - required : 0;
}

Expand Down Expand Up @@ -266,7 +271,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
uint256 nodeOperatorId
) public view returns (uint256) {
if (
_blockedBondEther[nodeOperatorId].retentionUntil > block.timestamp
_blockedBondEther[nodeOperatorId].retentionUntil >= block.timestamp
) {
return _blockedBondEther[nodeOperatorId].ETHAmount;
}
Expand Down Expand Up @@ -517,7 +522,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
nodeOperatorId,
cumulativeFeeShares
);
if (claimableShares == 0 || getBlockedBondETH(nodeOperatorId) > 0) {
if (claimableShares == 0) {
emit StETHRewardsClaimed(nodeOperatorId, rewardAddress, 0);
return;
}
Expand Down Expand Up @@ -555,7 +560,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
nodeOperatorId,
cumulativeFeeShares
);
if (claimableShares == 0 || getBlockedBondETH(nodeOperatorId) > 0) {
if (claimableShares == 0) {
emit WstETHRewardsClaimed(nodeOperatorId, rewardAddress, 0);
return;
}
Expand Down Expand Up @@ -595,7 +600,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
nodeOperatorId,
cumulativeFeeShares
);
if (claimableShares == 0 || getBlockedBondETH(nodeOperatorId) > 0) {
if (claimableShares == 0) {
emit ETHRewardsRequested(nodeOperatorId, rewardAddress, 0);
return requestIds;
}
Expand Down Expand Up @@ -628,7 +633,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
onlyExistingNodeOperator(nodeOperatorId)
{
require(stolenAmount > 0, "stolen amount should be greater than zero");
emit ELRewardsStealingReported(
emit ELRewardsStealingPenaltyInitiated(
nodeOperatorId,
proposedBlockNumber,
stolenAmount
Expand All @@ -652,7 +657,8 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
onlyRole(EL_REWARDS_STEALING_PENALTY_ROLE)
onlyExistingNodeOperator(nodeOperatorId)
{
_releaseBlockedBondETH(nodeOperatorId, amount);
emit BlockedBondReleased(nodeOperatorId, amount);
_reduceBlockedBondETH(nodeOperatorId, amount);
}

/// @notice Compensates blocked bond ETH for the given node operator.
Expand All @@ -662,18 +668,19 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
) external payable onlyExistingNodeOperator(nodeOperatorId) {
require(msg.value > 0, "value should be greater than zero");
payable(LIDO_LOCATOR.elRewardsVault()).transfer(msg.value);
_releaseBlockedBondETH(nodeOperatorId, msg.value);
emit BlockedBondCompensated(nodeOperatorId, msg.value);
_reduceBlockedBondETH(nodeOperatorId, msg.value);
}

function _releaseBlockedBondETH(
function _reduceBlockedBondETH(
uint256 nodeOperatorId,
uint256 amount
) internal {
uint256 blocked = getBlockedBondETH(nodeOperatorId);
require(blocked > 0, "no blocked bond to release");
require(
_blockedBondEther[nodeOperatorId].ETHAmount >= amount,
"blocked bond is less than amount to compensate"
"blocked bond is less than amount to release"
);
_changeBlockedBondState(
nodeOperatorId,
Expand Down Expand Up @@ -705,11 +712,13 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
continue;
}
uint256 blockedAmount = getBlockedBondETH(nodeOperatorId);
uint256 uncovered;
if (blockedAmount > 0) {
uncovered = penalize(nodeOperatorId, blockedAmount);
}
_changeBlockedBondState({
nodeOperatorId: nodeOperatorId,
ETHAmount: blockedAmount > 0
? penalize(nodeOperatorId, blockedAmount)
: 0,
ETHAmount: uncovered,
retentionUntil: data.retentionUntil
});
}
Expand Down Expand Up @@ -816,6 +825,7 @@ contract CSAccounting is CSAccountingBase, AccessControlEnumerable {
(uint256 current, uint256 required) = _bondSharesSummary(
nodeOperatorId
);
required += _sharesByEth(getBlockedBondETH(nodeOperatorId));
claimableShares = current > required ? current - required : 0;
}

Expand Down
Loading

0 comments on commit fc5187a

Please sign in to comment.