Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: improve slashing invariants and refactor user generation logic #1149

Merged
merged 3 commits into from
Feb 21, 2025

Conversation

wadealexc
Copy link
Collaborator

@wadealexc wadealexc commented Feb 20, 2025

Motivation:

Improve slashing invariants, fix existing DM/ALM invariants, and refactor user generation logic

Modifications:

  • Improve IntegrationDeployer._randUser generation logic so that additional helpers can be implemented to generate users with specific assets
  • Update some withdrawal invariants to distinguish between deposit and withdrawable shares. More work to be done here.
  • Implement several new tests in SlashingWithdrawals
  • Removes the vscode settings file since it was autoformatting tests. Spoke with Rajath about this - i'm fine to revisit this after slashing, but the current impact of this file is that it will create massive diffs across the most active part of the codebase while we're trying to get critical last-mile testing finished. We'll readd this after slashing 👍

Followup:

  • Additional cleanup for queue/complete withdrawal invariants and calling conventions
  • Additional tests needed in SlashingWithdrawals
  • Additional staker-level invariants needed when slashing an operator

@0xClandestine 0xClandestine self-requested a review February 21, 2025 14:22

print.user(name, assetType, userType, strategies, tokenBalances);
return (user, strategies, tokenBalances);
}

function _randUser(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: this and _newStaker(strategies) can generate assets for specified strategies vs just random

@@ -349,7 +355,7 @@ contract IntegrationCheckUtils is IntegrationBase {
if (operator != staker) {
assert_Snap_Unchanged_TokenBalances(operator, "operator should not have any change in underlying token balances");
}
assert_Snap_Added_OperatorShares(operator, withdrawal.strategies, withdrawal.scaledShares, "operator should have received shares");
assert_Snap_Added_OperatorShares(operator, strategies, shares, "operator should have received shares");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe in followup PR, but the check_Withdrawal_AsShares_* functions could probably include this call
uint[] memory expectedShares = _calculateExpectedShares(withdrawals[i]);
and not have to pass in shares as input. Since we are already passing in the withdrawal

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep, good callout. there's a decent bit of cleanup to be done in these assertions

* also fix a bunch of compiler errors
@wadealexc wadealexc merged commit 02b13f0 into test/slashing-integration-testing Feb 21, 2025
10 checks passed
@wadealexc wadealexc deleted the alex/alm-dm-invariants branch February 21, 2025 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants