Skip to content

Commit dea7cb1

Browse files
committed
test: fix invariant vault is solvent
1 parent c224748 commit dea7cb1

2 files changed

Lines changed: 12 additions & 13 deletions

File tree

src/safe-modules/SimpleETHContributionVault.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ contract SimpleETHContributionVault {
8080
bytes[] calldata withdrawal_credentials,
8181
bytes[] calldata signatures,
8282
bytes32[] calldata deposit_data_roots
83-
) external payable onlySafe {
83+
) external onlySafe {
8484
uint256 size = pubkeys.length;
8585

8686
if (address(this).balance < size * ETH_STAKE) {

src/test/safe/invariant/SECVInvariant.t.sol

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
pragma solidity ^0.8.19;
33

44
import {Test} from "forge-std/Test.sol";
5+
import "forge-std/console.sol";
56
import {StdInvariant} from "forge-std/StdInvariant.sol";
67
import {SimpleETHContributionVault} from "src/safe-modules/SimpleETHContributionVault.sol";
78
import {CommonBase} from "forge-std/Base.sol";
@@ -12,9 +13,9 @@ import {getETHValidatorData} from "../SimpleETHContributionVault.t.sol";
1213
contract MockDepositContract {
1314
uint256 public ghost_depositSum;
1415

15-
event Deposit(bytes[] pubkeys, bytes[] withdrawal_credentials, bytes[] signatures, bytes32[] deposit_data_roots);
16+
receive() external payable {}
1617

17-
function deposit(bytes[] calldata, bytes[] calldata, bytes[] calldata, bytes32[] calldata) external payable {
18+
function deposit(bytes calldata, bytes calldata, bytes calldata, bytes32) external payable {
1819
ghost_depositSum += msg.value;
1920
}
2021
}
@@ -28,9 +29,9 @@ contract SECVMock is SimpleETHContributionVault {
2829
bytes[] calldata withdrawal_credentials,
2930
bytes[] calldata signatures,
3031
bytes32[] calldata deposit_data_roots
31-
) external payable {
32+
) external {
3233
for (uint256 i = 0; i < 1;) {
33-
depositContract.deposit{value: msg.value}(
34+
depositContract.deposit{value: address(this).balance}(
3435
pubkeys[i], withdrawal_credentials[i], signatures[i], deposit_data_roots[i]
3536
);
3637
unchecked {
@@ -70,18 +71,16 @@ contract SECVBoundedHandler is CommonBase, StdCheats, StdUtils {
7071
ghost_rageQuitSum += amount;
7172
}
7273

73-
function depositValidator(uint256 amount) external payable {
74-
amount = bound(amount, 0, address(contributionVault).balance);
74+
function depositValidator() external payable {
7575
(
7676
bytes[] memory pubkeys,
7777
bytes[] memory withdrawal_credentials,
7878
bytes[] memory signatures,
7979
bytes32[] memory deposit_data_roots
8080
) = getETHValidatorData();
8181

82-
contributionVault.depositValidatorMock{value: amount}(
83-
pubkeys, withdrawal_credentials, signatures, deposit_data_roots
84-
);
82+
// use entire vault balance
83+
contributionVault.depositValidatorMock(pubkeys, withdrawal_credentials, signatures, deposit_data_roots);
8584
}
8685
}
8786

@@ -110,16 +109,16 @@ contract SECVInvariant is Test {
110109
function invariant_balanceEqual() public {
111110
assertEq(
112111
handler.ETH_SUPPLY(),
113-
address(handler).balance + contributionVault.userBalances(address(handler)) + address(mockDepositContract).balance
112+
address(handler).balance + address(contributionVault).balance + address(mockDepositContract).balance
114113
);
115114
}
116115

117116
/// @notice This invariant checks that the vault is
118-
/// always solvent when a user ragequits.
117+
/// always solvent
119118
function invariant_vaultIsSolvent() public {
120119
assertEq(
121120
address(contributionVault).balance,
122-
handler.ghost_depositSum() + mockDepositContract.ghost_depositSum() - handler.ghost_rageQuitSum()
121+
handler.ghost_depositSum() - mockDepositContract.ghost_depositSum() - handler.ghost_rageQuitSum()
123122
);
124123
}
125124
}

0 commit comments

Comments
 (0)