Skip to content

Commit f3efb28

Browse files
Merge pull request #47 from ssvlabs/fix/event-order-slashing
Change Event Order in Slashing
2 parents dddaa6f + 7fb4417 commit f3efb28

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

src/core/modules/StrategyManager.sol

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,6 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
556556
revert BAppNotOptedIn();
557557
}
558558

559-
//if (obligationPercentage > MAX_PERCENTAGE) revert ICore.InvalidPercentage();
560559
ValidationLib.validatePercentage(obligationPercentage);
561560

562561
if (
@@ -774,7 +773,7 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
774773
address receiver;
775774
bool exit;
776775
bool success;
777-
776+
uint32 obligationPercentage;
778777
if (_isBApp(bApp)) {
779778
(success, receiver, exit) = IBasedApp(bApp).slash(
780779
strategyId,
@@ -785,9 +784,11 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
785784
);
786785
if (!success) revert IStrategyManager.BAppSlashingFailed();
787786

788-
if (exit) _exitStrategy(s, strategyId, bApp, token);
789-
else
790-
_adjustObligation(
787+
if (exit) {
788+
_exitStrategy(s, strategyId, bApp, token);
789+
obligationPercentage = 0;
790+
} else
791+
obligationPercentage = _adjustObligation(
791792
s,
792793
strategyId,
793794
bApp,
@@ -818,6 +819,13 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
818819
percentage,
819820
receiver
820821
);
822+
823+
emit IStrategyManager.ObligationUpdated(
824+
strategyId,
825+
bApp,
826+
token,
827+
obligationPercentage
828+
);
821829
}
822830

823831
function _exitStrategy(
@@ -827,8 +835,6 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
827835
address token
828836
) private {
829837
s.obligations[strategyId][bApp][token].percentage = 0;
830-
831-
emit IStrategyManager.ObligationUpdated(strategyId, bApp, token, 0);
832838
}
833839

834840
function _adjustObligation(
@@ -838,7 +844,7 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
838844
address token,
839845
uint256 amount,
840846
ICore.Shares storage strategyTokenShares
841-
) internal {
847+
) internal returns (uint32 obligationPercentage) {
842848
ICore.Obligation storage obligation = s.obligations[strategyId][bApp][
843849
token
844850
];
@@ -849,19 +855,14 @@ contract StrategyManager is ReentrancyGuardTransient, IStrategyManager {
849855
uint256 postSlashObligatedBalance = currentObligatedBalance - amount;
850856
if (postSlashStrategyBalance == 0) {
851857
obligation.percentage = 0;
852-
emit IStrategyManager.ObligationUpdated(strategyId, bApp, token, 0);
858+
return 0;
853859
} else {
854860
uint32 postSlashObligationPercentage = uint32(
855861
(postSlashObligatedBalance / postSlashStrategyBalance) *
856862
MAX_PERCENTAGE
857863
);
858864
obligation.percentage = postSlashObligationPercentage;
859-
emit IStrategyManager.ObligationUpdated(
860-
strategyId,
861-
bApp,
862-
token,
863-
postSlashObligationPercentage
864-
);
865+
return postSlashObligationPercentage;
865866
}
866867
}
867868

0 commit comments

Comments
 (0)