Skip to content

feat: deprecate legacy admin flows; migrate 5 contracts to RoleRegistry#390

Open
pankajjagtapp wants to merge 14 commits intopankaj/feat/security-upgradesfrom
pankaj/deprecate-legacy-admin-flows
Open

feat: deprecate legacy admin flows; migrate 5 contracts to RoleRegistry#390
pankajjagtapp wants to merge 14 commits intopankaj/feat/security-upgradesfrom
pankaj/deprecate-legacy-admin-flows

Conversation

@pankajjagtapp
Copy link
Copy Markdown
Contributor

@pankajjagtapp pankajjagtapp commented Apr 30, 2026

Summary

Migrates EtherFiOracle, NodeOperatorManager, BucketRateLimiter, AuctionManager, and EtherFiRestaker from local mapping(address => bool) public admins access control to the protocol-wide RoleRegistry. Each contract:

  • Adds IRoleRegistry public immutable roleRegistry (constructor-set, no storage slot).
  • Declares a contract-specific <NAME>_ADMIN_ROLE constant.
  • Renames adminsDEPRECATED_admins (and pausersDEPRECATED_pausers where applicable) — preserves existing storage slots.
  • Replaces onlyAdmin modifier body with roleRegistry.hasRole(...) revert IncorrectRole();.
  • Routes pauseContract / unPauseContract through PROTOCOL_PAUSER / PROTOCOL_UNPAUSER.
  • Removes the legacy updateAdmin (and updatePauser) setters.

EtherFiRestaker additionally:

  • 4 function-granular roles (ADMIN, REQUEST_WITHDRAWALS, CLAIM_WITHDRAWALS, DEPOSIT_INTO_STRATEGY).
  • IEtherFiRateLimiter public immutable rateLimiter plus 3 rate-limit bucket IDs (STETH_REQUEST_WITHDRAWAL_LIMIT_ID, QUEUE_WITHDRAWALS_LIMIT_ID, DEPOSIT_INTO_STRATEGY_LIMIT_ID). Rate-limited functions call rateLimiter.consume(...) after the role gate.

Tests

  • Per-contract migration unit tests (5 new files, 41 tests): role-revert, role-success, pause/unpause role gating, deprecated-storage readability, removed-selector checks.
  • Storage-integrity fork test (test/fork-tests/RoleMigrationStorageIntegrity.t.sol): forks mainnet, snapshots first 400 storage slots of each proxy pre-upgrade, upgrades in place, asserts byte-identical storage post-upgrade. Covers 4 mainnet-deployed proxies (BucketRateLimiter has no standalone mainnet proxy and is unit-tested instead).
  • Existing per-contract test files migrated to use roleRegistry.grantRole instead of removed updateAdmin calls; IncorrectRole.selector replaces legacy revert strings.

Out of scope (follow-on work)

  • Deployment scripts, Gnosis Safe transaction generation, timelock scheduling — handled separately.
  • Rate-limiter bucket configuration for EtherFiRestaker (capacity / refill rate must be set by operations team via OPERATING_TIMELOCK post-upgrade).
  • Initial role grants to OPERATING_TIMELOCK (0xcD42...d7a) — operator concern.

Test plan

  • CI green on `forge build --optimize --optimizer-runs 1500`
  • CI green on `forge test --no-match-path "test/fork-tests/**"`
  • CI green on `forge test --match-contract RoleMigrationStorageIntegrityTest --fork-url $MAINNET_RPC_URL`
  • Reviewer confirms storage slot preservation by spot-checking `forge inspect storage-layout` for each of the 5 contracts
  • Reviewer confirms each `onlyOwner` → `onlyAdmin` change in `BucketRateLimiter` is intentional (behavioral change: owner no longer authorized; must hold the role)

🤖 Generated with Claude Code


Note

High Risk
High risk because it changes authorization for multiple core protocol contracts (admin and pause/unpause paths) and introduces rate-limiter enforcement on EtherFiRestaker withdrawal/strategy operations, which could block operations if roles or buckets are misconfigured during/after upgrade.

Overview
Migrates privileged access control from per-contract admins/pausers mappings to RoleRegistry across AuctionManager, NodeOperatorManager, EtherFiOracle, and BucketRateLimiter, preserving storage by renaming old mappings to DEPRECATED_*, removing updateAdmin/updatePauser setters, and switching pauseContract/unPauseContract to protocol-wide PROTOCOL_PAUSER/PROTOCOL_UNPAUSER checks.

Updates EtherFiRestaker to use role-based, function-granular permissions plus an immutable rateLimiter; stEthRequestWithdrawal, queueWithdrawals, and depositIntoStrategy now consume rate-limit buckets (wei→gwei rounding-up) and admin/pausing gates are enforced via RoleRegistry roles instead of legacy mappings.

Scripts and tests are updated accordingly: deployment/verification scripts pass new constructor args and grant roles via RoleRegistry, new role-migration tests assert selector removals and deprecated-storage readability, and a mainnet fork test snapshots storage slots pre/post upgrade to validate no storage drift for upgraded proxies.

Reviewed by Cursor Bugbot for commit cdca554. Bugbot is set up for automated code reviews on this repo. Configure here.

pankajjagtapp and others added 10 commits April 30, 2026 13:11
…ckets

- Replace admins/pausers mappings with DEPRECATED_ prefixed storage slots
- Add 4 function-granular roles: ADMIN, REQUEST_WITHDRAWALS, CLAIM_WITHDRAWALS, DEPOSIT_INTO_STRATEGY
- Add rate-limiter consume() calls on stEthRequestWithdrawal, queueWithdrawals, depositIntoStrategy
- Expand constructor to accept roleRegistry and rateLimiter immutables
- Remove updateAdmin, updatePauser, _requireAdmin, _requirePauser, onlyPauser
- Add 12-test migration suite; fix all compile callers across test and script files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Verifies that upgrading EtherFiOracle, NodeOperatorManager, AuctionManager,
and EtherFiRestaker to their RoleRegistry-aware implementations leaves all
400 sequential storage slots byte-identical. Also asserts the new roleRegistry
and rateLimiter immutables read non-zero post-upgrade on a mainnet fork.

BucketRateLimiter is excluded: it has no standalone mainnet proxy (only
deployed fresh in unit tests via TestSetup).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pankajjagtapp pankajjagtapp changed the base branch from master to pankaj/feat/security-upgrades April 30, 2026 20:24
@chatgpt-codex-connector
Copy link
Copy Markdown

💡 Codex Review

if (msg.sender != address(withdrawRequestNFT) && msg.sender != priorityWithdrawalQueue) {
_requireNotPaused();
}

P1 Badge Enforce pause-until checks in LP withdraw path

withdraw no longer uses the whenNotPaused modifier and the manual gate only calls _requireNotPaused(), which ignores PausableUntil. As a result, calls from membershipManager/etherFiRedemptionManager can still execute during pauseContractUntil, so the emergency timed pause does not actually stop those withdrawal flows.


function claimWithdraw(uint256 tokenId) external nonReentrant {
return _claimWithdraw(tokenId, ownerOf(tokenId));
}

P1 Badge Restore pause enforcement for withdraw claim functions

claimWithdraw and batchClaimWithdraw dropped whenNotPaused and now run under only nonReentrant, which means claims continue to execute while the contract is paused (including timed pause via pauseContractUntil). This defeats the intended pause controls for withdrawal-claim operations.


function claimWithdraw(WithdrawRequest calldata request) external nonReentrant {

P1 Badge Re-add pause checks to priority withdrawal claim entrypoints

claimWithdraw and batchClaimWithdraw no longer include whenNotPaused, so finalized priority claims can still be processed during both normal pause and pauseContractUntil. That creates a pause bypass on core fund-movement entrypoints that should be haltable during incidents.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@github-actions
Copy link
Copy Markdown

📊 Forge Coverage Report

| File                                       | % Lines            | % Statements       | % Branches       | % Funcs          |
| src/AssetRecovery.sol                      | 100.00% (16/16)    | 96.77% (30/31)     | 85.71% (6/7)     | 100.00% (3/3)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/AuctionManager.sol                     | 74.19% (92/124)    | 74.77% (83/111)    | 60.38% (32/53)   | 70.37% (19/27)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/BNFT.sol                               | 53.85% (14/26)     | 56.25% (9/16)      | 20.00% (2/10)    | 45.45% (5/11)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/BucketRateLimiter.sol                  | 100.00% (47/47)    | 100.00% (49/49)    | 100.00% (9/9)    | 100.00% (15/15)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/CumulativeMerkleRewardsDistributor.sol | 91.25% (73/80)     | 84.62% (77/91)     | 47.37% (9/19)    | 93.75% (15/16)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/DepositAdapter.sol                     | 0.00% (0/57)       | 0.00% (0/65)       | 0.00% (0/11)     | 0.00% (0/9)      |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EETH.sol                               | 97.41% (113/116)   | 97.27% (107/110)   | 90.91% (30/33)   | 96.77% (30/31)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EarlyAdopterPool.sol                   | 0.00% (0/92)       | 0.00% (0/81)       | 0.00% (0/34)     | 0.00% (0/15)     |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiAdmin.sol                       | 95.07% (135/142)   | 92.98% (159/171)   | 76.36% (42/55)   | 95.24% (20/21)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiNode.sol                        | 85.29% (58/68)     | 75.64% (59/78)     | 22.22% (2/9)     | 100.00% (16/16)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiNodesManager.sol                | 98.43% (188/191)   | 96.38% (213/221)   | 89.47% (34/38)   | 100.00% (48/48)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiOracle.sol                      | 98.62% (143/145)   | 98.54% (135/137)   | 90.48% (57/63)   | 100.00% (30/30)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiRateLimiter.sol                 | 100.00% (64/64)    | 100.00% (69/69)    | 100.00% (16/16)  | 100.00% (20/20)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiRedemptionManager.sol           | 70.62% (113/160)   | 68.57% (120/175)   | 36.84% (21/57)   | 77.78% (28/36)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiRestaker.sol                    | 89.57% (146/163)   | 89.11% (180/202)   | 46.15% (12/26)   | 81.82% (27/33)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/EtherFiRewardsRouter.sol               | 100.00% (28/28)    | 100.00% (27/27)    | 83.33% (5/6)     | 100.00% (8/8)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/LiquidityPool.sol                      | 93.91% (216/230)   | 89.46% (280/313)   | 74.29% (52/70)   | 97.83% (45/46)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/Liquifier.sol                          | 85.62% (137/160)   | 76.80% (139/181)   | 51.06% (24/47)   | 75.68% (28/37)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/MembershipManager.sol                  | 0.00% (0/348)      | 0.00% (0/389)      | 0.00% (0/31)     | 0.00% (0/69)     |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/MembershipNFT.sol                      | 22.73% (40/176)    | 16.42% (33/201)    | 20.69% (6/29)    | 31.71% (13/41)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/NodeOperatorManager.sol                | 89.23% (58/65)     | 90.74% (49/54)     | 78.95% (15/19)   | 78.95% (15/19)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/PriorityWithdrawalQueue.sol            | 93.04% (214/230)   | 83.71% (257/307)   | 52.46% (32/61)   | 95.45% (42/44)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/ReentrancyGuardNamespaced.sol          | 100.00% (12/12)    | 100.00% (10/10)    | 100.00% (1/1)    | 100.00% (3/3)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/RestakingRewardsRouter.sol             | 100.00% (33/33)    | 100.00% (34/34)    | 100.00% (7/7)    | 100.00% (7/7)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/RoleRegistry.sol                       | 100.00% (24/24)    | 100.00% (18/18)    | 100.00% (2/2)    | 100.00% (11/11)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/StakingManager.sol                     | 87.63% (85/97)     | 77.10% (101/131)   | 20.83% (5/24)    | 81.25% (13/16)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/TNFT.sol                               | 58.33% (14/24)     | 60.00% (9/15)      | 25.00% (2/8)     | 50.00% (5/10)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/TVLOracle.sol                          | 100.00% (13/13)    | 100.00% (9/9)      | 75.00% (6/8)     | 100.00% (4/4)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/WeETH.sol                              | 92.00% (46/50)     | 89.36% (42/47)     | 86.67% (13/15)   | 85.71% (12/14)   |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/WithdrawRequestNFT.sol                 | 100.00% (146/146)  | 99.34% (150/151)   | 81.54% (53/65)   | 100.00% (31/31)  |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/utils/PausableUntil.sol                | 100.00% (22/22)    | 95.65% (22/23)     | 100.00% (3/3)    | 100.00% (6/6)    |
|--------------------------------------------+--------------------+--------------------+------------------+------------------|
| Total                                      | 72.72% (2290/3149) | 70.23% (2470/3517) | 59.57% (498/836) | 74.46% (519/697) |

---
Ran 5 tests for test/AddressProvider.t.sol:AddressProviderTest
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 48.28ms (8.18ms CPU time)
Ran 23 tests for test/AuctionManager.t.sol:AuctionManagerTest
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 61.88ms (38.16ms CPU time)
Ran 7 tests for test/AuctionManagerRoleMigration.t.sol:AuctionManagerRoleMigrationTest
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 35.62ms (8.72ms CPU time)
Ran 2 tests for test/BNFT.t.sol:BNFTTest
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 27.89ms (2.28ms CPU time)
Ran 8 tests for test/BucketRateLimiterRoleMigration.t.sol:BucketRateLimiterRoleMigrationTest
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 36.70ms (10.24ms CPU time)
Ran 58 tests for test/BucketRaterLimiter.t.sol:BucketRateLimiterTest
Suite result: ok. 58 passed; 0 failed; 0 skipped; finished in 35.24ms (32.94ms CPU time)
Ran 2 tests for test/fork-tests/pectra-fork-tests/Consolidation-through-EOA.sol:ConsolidationThroughEOATest
Suite result: FAILED. 1 passed; 1 failed; 0 skipped; finished in 570.58ms (318.56ms CPU time)
Ran 2 tests for test/ContractCodeChecker.t.sol:ContractCodeCheckerTest
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 56.24ms (19.59ms CPU time)
Ran 3 tests for test/behaviour-tests/pectra-fork-tests/Request-consolidation.t.sol:RequestConsolidationTest
Suite result: FAILED. 0 passed; 3 failed; 0 skipped; finished in 877.74ms (380.01ms CPU time)
Ran 27 tests for test/RestakingRewardsRouter.t.sol:RestakingRewardsRouterTest
Suite result: ok. 27 passed; 0 failed; 0 skipped; finished in 17.85ms (14.64ms CPU time)
Ran 1 test for test/fork-tests/RoleMigrationStorageIntegrity.t.sol:RoleMigrationStorageIntegrityTest
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.57ms (44.16µs CPU time)
Ran 9 tests for test/RoleRegistry.t.sol:RoleRegistryTest
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 4.45ms (3.45ms CPU time)
Ran 19 tests for test/CumulativeMerkleRewardsDistributor.t.sol:CumulativeMerkleRewardsDistributorTest
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 73.88ms (36.90ms CPU time)
Ran 4 tests for test/liquid-tests/LiquidReferEth.t.sol:LiquidReferEthTest
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.30s (1.13s CPU time)
Ran 21 tests for test/StakingManager.t.sol:StakingManagerTest
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 597.67ms (554.25ms CPU time)
Ran 2 tests for test/TNFT.t.sol:TnftTest
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.24ms (2.97ms CPU time)
Ran 6 tests for test/TVLOracle.t.sol:TVLOracleTest
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 32.85ms (7.30ms CPU time)
Ran 98 tests for test/EtherFiNodesManager.t.sol:EtherFiNodesManagerTest
Suite result: FAILED. 96 passed; 2 failed; 0 skipped; finished in 2.03s (1.25s CPU time)
Ran 8 tests for test/integration-tests/Deposit.t.sol:DepositIntegrationTest
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.36s (1.32s CPU time)
Ran 7 tests for test/EtherFiOperationParameters.t.sol:EtherFiOperationParametersTest
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 432.32ms (424.06ms CPU time)
Ran 6 tests for test/DepositAdapter.t.sol:DepositAdapterTest
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 184.86ms (136.53ms CPU time)
Ran 17 tests for test/EETH.t.sol:EETHTest
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 78.05ms (51.39ms CPU time)
Ran 58 tests for test/EtherFiOracle.t.sol:EtherFiOracleTest
Suite result: ok. 58 passed; 0 failed; 0 skipped; finished in 192.16ms (165.77ms CPU time)
Ran 1 test for test/behaviour-tests/pectra-fork-tests/EL-withdrawals.t.sol:ELExitsTest
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 101.71ms (56.43ms CPU time)
Ran 2 tests for test/behaviour-tests/ELExitsForkTestingDeployment.t.sol:ELExitsForkTestingDeploymentTest
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.68ms (130.00µs CPU time)
Ran 7 tests for test/EtherFiOracleRoleMigration.t.sol:EtherFiOracleRoleMigrationTest
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 33.14ms (8.34ms CPU time)
Ran 12 tests for test/EtherFiRestakerRoleMigration.t.sol:EtherFiRestakerRoleMigrationTest
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 39.93ms (14.48ms CPU time)
Ran 32 tests for test/EtherFiRewardsRouter.t.sol:EtherFiRewardsRouterTest
Suite result: ok. 32 passed; 0 failed; 0 skipped; finished in 13.32ms (11.25ms CPU time)
Ran 6 tests for test/EtherFiTimelock.t.sol:TimelockTest
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 419.86ms (492.87ms CPU time)
Ran 1 test for test/EtherFiViewer.t.sol:EtherFiViewerTest
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 73.78ms (43.03ms CPU time)
Ran 64 tests for test/EtherFiRateLimiter.t.sol:EtherFiRateLimiterTest
Suite result: ok. 64 passed; 0 failed; 0 skipped; finished in 1.01s (1.01s CPU time)
Ran 6 tests for test/liquid-tests/LiquidReferUsdPermit.t.sol:LiquidReferUsdPermitScrollTest
Suite result: FAILED. 0 passed; 6 failed; 0 skipped; finished in 2.63s (2.47s CPU time)
Ran 3 tests for test/integration-tests/Handle-Remainder-Shares.t.sol:HandleRemainderSharesIntegrationTest
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 897.86ms (852.78ms CPU time)
Ran 4 tests for test/liquid-tests/LiquidReferBtc.t.sol:LiquidReferBtcScrollTest
Suite result: FAILED. 0 passed; 4 failed; 0 skipped; finished in 1.87s (1.60s CPU time)
Ran 6 tests for test/liquid-tests/LiquidReferUsdPermit.t.sol:LiquidReferUsdPermitTest
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.32s (2.24s CPU time)
Ran 12 tests for test/liquid-tests/LiquidReferWhitelist.t.sol:LiquidReferWhitelistTest
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 55.33ms (16.00ms CPU time)
Ran 97 tests for test/LiquidityPool.t.sol:LiquidityPoolTest
Suite result: FAILED. 95 passed; 2 failed; 0 skipped; finished in 203.27ms (173.62ms CPU time)
Ran 4 tests for test/liquid-tests/LiquidReferBtc.t.sol:LiquidReferBtcTest
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.34s (1.31s CPU time)
Ran 4 tests for test/liquid-tests/LiquidReferEth.t.sol:LiquidReferETHScrollTest
Suite result: FAILED. 0 passed; 4 failed; 0 skipped; finished in 141.91ms (22.36ms CPU time)
Ran 52 tests for test/EtherFiRedemptionManager.t.sol:EtherFiRedemptionManagerTest
Suite result: ok. 52 passed; 0 failed; 0 skipped; finished in 5.17s (5.12s CPU time)
Ran 11 tests for test/integration-tests/Withdraw.t.sol:WithdrawIntegrationTest
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.86s (1.40s CPU time)
Ran 4 tests for test/fork-tests/UpgradeStorageIntegrity.t.sol:UpgradeStorageIntegrityTest
Suite result: FAILED. 3 passed; 1 failed; 0 skipped; finished in 9.39s (9.36s CPU time)
Ran 2 tests for test/integration-tests/Validator-Flows.t.sol:ValidatorFlowsIntegrationTest
Suite result: FAILED. 0 passed; 2 failed; 0 skipped; finished in 310.10ms (267.81ms CPU time)
Ran 17 tests for test/WeETH.t.sol:WeETHTest
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 64.37ms (31.39ms CPU time)
Ran 9 tests for test/WeETHWithdrawAdapter.t.sol:WeETHWithdrawAdapterTest
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 44.30ms (15.18ms CPU time)
Ran 27 tests for test/Liquifier.t.sol:LiquifierTest
Suite result: ok. 27 passed; 0 failed; 0 skipped; finished in 5.03s (5.02s CPU time)
Ran 4 tests for test/MembershipNFT.t.sol:MembershipNFTTest
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 28.00ms (5.40ms CPU time)
Ran 8 tests for test/NodeOperatorManager.t.sol:NodeOperatorManagerTest
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 34.79ms (11.54ms CPU time)
Ran 7 tests for test/NodeOperatorManagerRoleMigration.t.sol:NodeOperatorManagerRoleMigrationTest
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 31.17ms (8.31ms CPU time)
Ran 10 tests for test/PausableUntil.t.sol:PausableUntilIntegrationTest
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 4.22ms (2.34ms CPU time)
Ran 21 tests for test/PausableUntil.t.sol:PausableUntilTest
Suite result: ok. 21 passed; 0 failed; 0 skipped; finished in 183.48ms (182.83ms CPU time)
Ran 55 tests for test/WithdrawRequestNFT.t.sol:WithdrawRequestNFTTest
Suite result: FAILED. 53 passed; 2 failed; 0 skipped; finished in 2.73s (2.71s CPU time)
Ran 76 tests for test/PriorityWithdrawalQueue.t.sol:PriorityWithdrawalQueueTest
Suite result: FAILED. 74 passed; 2 failed; 0 skipped; finished in 901.88ms (627.85ms CPU time)
Ran 6 tests for test/ReentrancyGuard.t.sol:ReentrancyGuardTest
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 39.41ms (15.77ms CPU time)
Ran 13 tests for test/ReentrancyGuardStorage.t.sol:ReentrancyGuardStorageTest
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 211.67ms (188.42ms CPU time)
Ran 1 test for test/fork-tests/validator-key-gen.t.sol:ValidatorKeyGenTest
Suite result: FAILED. 0 passed; 1 failed; 0 skipped; finished in 78.07ms (0.00ns CPU time)
Ran 10 tests for test/EtherFiRestaker.t.sol:EtherFiRestakerTest
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 8.32s (15.35s CPU time)
Ran 40 tests for test/behaviour-tests/prelude.t.sol:PreludeTest
Suite result: ok. 40 passed; 0 failed; 0 skipped; finished in 5.11s (6.28s CPU time)
Ran 58 test suites in 17.20s (58.77s CPU time): 997 tests passed, 30 failed, 0 skipped (1027 total tests)

Generated by workflow run #698

…o gwei

- Adjusted the conversion logic to ensure any non-zero wei amount consumes at least 1 gwei from the bucket, preventing sub-gwei dust from bypassing the rate limiter.
Comment thread src/EtherFiRestaker.sol
… function

- Replaced direct calls to withdrawEther with a new internal function _withdrawEther to streamline the withdrawal process and enhance code maintainability.
Comment thread src/AuctionManager.sol Outdated
Comment thread src/BucketRateLimiter.sol
Comment thread test/EtherFiOracle.t.sol
@@ -794,19 +794,21 @@ contract EtherFiOracleTest is TestSetup {

function test_updateAdmin() public {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

can change test name

… use onlyAdmin modifier

- Changed the access control for token registration and capacity settings in BucketRateLimiter from onlyOwner to onlyAdmin.
- Simplified the initializeOnUpgrade function in AuctionManager by removing the etherFiAdminContractAddress parameter, aligning with the new role-based access control structure.
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit cdca554. Configure here.

Comment thread script/hoodi/StakingPart1_Setup.s.sol
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants