Skip to content

Commit

Permalink
fix: statemind - Insufficient conditions when checking event for a sl…
Browse files Browse the repository at this point in the history
…ash in FullRestakeResetHook
  • Loading branch information
1kresh committed Jan 6, 2025
1 parent 26da5c1 commit 00e60be
Show file tree
Hide file tree
Showing 6 changed files with 184 additions and 15 deletions.
8 changes: 3 additions & 5 deletions src/contracts/fullRestakeDelegator/FullRestakeResetHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,15 @@ contract FullRestakeResetHook is IFullRestakeResetHook {
_slashings[vault][subnetwork][operator].setup(SLASH_COUNT);
}

if (IFullRestakeDelegator(msg.sender).operatorNetworkLimit(subnetwork, operator) == 0) {
return;
}

_slashings[vault][subnetwork][operator].push(bytes32(uint256(Time.timestamp())));

if (
_slashings[vault][subnetwork][operator].count() == SLASH_COUNT
&& Time.timestamp() - uint256(_slashings[vault][subnetwork][operator].last(SLASH_COUNT - 1)) <= PERIOD
) {
IFullRestakeDelegator(msg.sender).setOperatorNetworkLimit(subnetwork, operator, 0);
if (IFullRestakeDelegator(msg.sender).operatorNetworkLimit(subnetwork, operator) != 0) {
IFullRestakeDelegator(msg.sender).setOperatorNetworkLimit(subnetwork, operator, 0);
}
_slashings[vault][subnetwork][operator].clear();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,15 @@ contract NetworkRestakeResetHook is INetworkRestakeResetHook {
_slashings[vault][subnetwork][operator].setup(SLASH_COUNT);
}

if (INetworkRestakeDelegator(msg.sender).operatorNetworkShares(subnetwork, operator) == 0) {
return;
}

_slashings[vault][subnetwork][operator].push(bytes32(uint256(Time.timestamp())));

if (
_slashings[vault][subnetwork][operator].count() == SLASH_COUNT
&& Time.timestamp() - uint256(_slashings[vault][subnetwork][operator].last(SLASH_COUNT - 1)) <= PERIOD
) {
INetworkRestakeDelegator(msg.sender).setOperatorNetworkShares(subnetwork, operator, 0);
if (INetworkRestakeDelegator(msg.sender).operatorNetworkShares(subnetwork, operator) != 0) {
INetworkRestakeDelegator(msg.sender).setOperatorNetworkShares(subnetwork, operator, 0);
}
_slashings[vault][subnetwork][operator].clear();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,15 @@ contract OperatorSpecificResetHook is IOperatorSpecificResetHook {
_slashings[vault][subnetwork].setup(SLASH_COUNT);
}

if (IOperatorSpecificDelegator(msg.sender).networkLimit(subnetwork) == 0) {
return;
}

_slashings[vault][subnetwork].push(bytes32(uint256(Time.timestamp())));

if (
_slashings[vault][subnetwork].count() == SLASH_COUNT
&& Time.timestamp() - uint256(_slashings[vault][subnetwork].last(SLASH_COUNT - 1)) <= PERIOD
) {
IOperatorSpecificDelegator(msg.sender).setNetworkLimit(subnetwork, 0);
if (IOperatorSpecificDelegator(msg.sender).networkLimit(subnetwork) != 0) {
IOperatorSpecificDelegator(msg.sender).setNetworkLimit(subnetwork, 0);
}
_slashings[vault][subnetwork].clear();
}
}
Expand Down
59 changes: 59 additions & 0 deletions test/fullRestakeDelegator/FullRestakeResetHook.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,65 @@ contract FullRestakeResetHookTest is POCBaseTest {
blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setOperatorNetworkLimit(delegator2, alice, network, alice, 0);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), 0);

_setOperatorNetworkLimit(delegator2, alice, network, alice, operatorNetworkLimit1);

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 1;
vm.warp(blockTimestamp);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 7 days;
vm.warp(blockTimestamp);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 5 days;
vm.warp(blockTimestamp);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setOperatorNetworkLimit(delegator2, alice, network, alice, 0);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

_setOperatorNetworkLimit(delegator2, alice, network, alice, operatorNetworkLimit1);

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator2.operatorNetworkLimit(network.subnetwork(0), alice), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher2, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator2.networkLimit(network.subnetwork(0)), type(uint256).max);
Expand Down
65 changes: 65 additions & 0 deletions test/networkRestakeDelegator/NetworkRestakeResetHook.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,71 @@ contract NetworkRestakeResetHookTest is POCBaseTest {
blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setOperatorNetworkShares(delegator1, alice, network, alice, 0);
_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), 0);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), 0);

_setOperatorNetworkShares(delegator1, alice, network, alice, operatorNetworkShares1);

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 1;
vm.warp(blockTimestamp);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 7 days;
vm.warp(blockTimestamp);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 5 days;
vm.warp(blockTimestamp);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setOperatorNetworkShares(delegator1, alice, network, alice, 0);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

_setOperatorNetworkShares(delegator1, alice, network, alice, operatorNetworkShares1);

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
assertEq(delegator1.totalOperatorNetworkShares(network.subnetwork(0)), operatorNetworkShares1);
assertEq(delegator1.operatorNetworkShares(network.subnetwork(0), alice), operatorNetworkShares1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher1, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator1.networkLimit(network.subnetwork(0)), type(uint256).max);
Expand Down
51 changes: 51 additions & 0 deletions test/operatorSpecificDelegator/OperatorSpecificResetHook.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,57 @@ contract OperatorSpecificResetHookTest is POCBaseTest {
blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setNetworkLimitOperator(delegator0, alice, network, 0);
_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), 0);

_setNetworkLimitOperator(delegator0, alice, network, operatorNetworkLimit1);

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 1;
vm.warp(blockTimestamp);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 7 days;
vm.warp(blockTimestamp);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 5 days;
vm.warp(blockTimestamp);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_setNetworkLimitOperator(delegator0, alice, network, 0);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

_setNetworkLimitOperator(delegator0, alice, network, operatorNetworkLimit1);

assertEq(delegator0.networkLimit(network.subnetwork(0)), operatorNetworkLimit1);

blockTimestamp = blockTimestamp + 3 days;
vm.warp(blockTimestamp);

_slash(slasher0, alice, network, alice, slashAmount1, uint48(blockTimestamp - 1), "");

assertEq(delegator0.networkLimit(network.subnetwork(0)), 0);
Expand Down

0 comments on commit 00e60be

Please sign in to comment.