Skip to content

Comments

Merging Master into Priority Queue#361

Closed
pankajjagtapp wants to merge 32 commits intopankaj/feat/priority-withdrawal-queuefrom
master
Closed

Merging Master into Priority Queue#361
pankajjagtapp wants to merge 32 commits intopankaj/feat/priority-withdrawal-queuefrom
master

Conversation

@pankajjagtapp
Copy link
Contributor

@pankajjagtapp pankajjagtapp commented Feb 18, 2026

Note

Medium Risk
Touches upgrade/ops scripts and deployment metadata (addresses, Safe tx payloads) plus test/fork logic; while mostly non-production code, mistakes could mislead upgrade execution or hide failing coverage/tests.

Overview
Improves CI coverage reporting by making forge coverage output capture/parsing more robust, uploading it as an artifact, and updating/creating a single PR comment via a hidden marker with better error handling/logging.

Adds/updates operational and upgrade tooling: new stETH management scripts (request/claim/unstake flows on fork), expanded Utils helpers (immutable/access-control snapshot checks and Gnosis Safe JSON generation), and updated upgrade/deployment scripts and logs (including switching WithdrawRequestNFT constructor treasury to a new buyback safe and recording new impl addresses/tx JSONs).

Stabilizes mainnet-fork tests by allowing FORK_RPC_URL overrides, skipping EIP-4788-dependent tests when beacon roots aren’t available, adjusting assertions to account for existing mainnet state (pending redemptions), and adding fork-state fixes (oracle report sync, redemption low-watermark tweaks, EigenPod withdrawable balance setup, role/prank fixes).

Written by Cursor Bugbot for commit 9ff8d08. This will update automatically on new commits. Configure here.

pankajjagtapp and others added 30 commits November 13, 2025 16:12
…therFiNode, EtherFiRedemptionManager, EtherFiRestaker, EtherFiRewardsRouter, EtherFiViewer, Liquifier, and WithdrawRequestNFT
…eliable comment detection in coverage reports
…validation logic in WithdrawRequestNFT tests
…-management-scripts

stETH management scripts - claimWithdrawals, QueueWithdrawals
…eployed-contracts-json

Add deployed contracts json for Reaudited Contracts
…t scripts for improved type safety and clarity
…tions and total pooled ether after withdrawals
… instructions, project layout, architecture, key addresses, access control roles, test setup patterns, and EigenLayer integration
… capturing full output and refining error messages
…HandledReportRefSlot with oracle's lastPublishedReportRefSlot in integration tests
pankajjagtapp and others added 2 commits February 16, 2026 14:12
@pankajjagtapp pankajjagtapp self-assigned this Feb 18, 2026
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9ff8d088ce

ℹ️ 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".

Comment on lines +255 to +257
function getWithdrawRequestNFTImmutableSelectors() internal pure returns (bytes4[] memory selectors) {
selectors = new bytes4[](1);
selectors[0] = bytes4(keccak256("treasury()"));

Choose a reason for hiding this comment

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

P1 Badge Exclude changed immutable from preservation check

This upgrade flow will self-fail because verifyImmutablePreservation() asserts WithdrawRequestNFT.treasury() is unchanged, but the same commit explicitly changes that immutable by deploying WithdrawRequestNFT with WITHDRAW_REQUEST_NFT_BUYBACK_SAFE instead of TREASURY (see deploy-reaudit-fixes.s.sol). On a fork where the proxy still points to the old implementation, this selector comparison always differs after upgradeTo, so the script reverts before completing verification.

Useful? React with 👍 / 👎.

Copy link

@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 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

function getWithdrawRequestNFTImmutableSelectors() internal pure returns (bytes4[] memory selectors) {
selectors = new bytes4[](1);
selectors[0] = bytes4(keccak256("treasury()"));
}
Copy link

Choose a reason for hiding this comment

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

Immutable verification will revert on intentional treasury change

Medium Severity

getWithdrawRequestNFTImmutableSelectors() includes the treasury() selector, but this upgrade intentionally changes WithdrawRequestNFT's treasury immutable from TREASURY to WITHDRAW_REQUEST_NFT_BUYBACK_SAFE. The verifyImmutablePreservation() step will revert when it detects this expected change, blocking all subsequent verification steps (access control checks, fork tests) in the run() function.

Additional Locations (1)

Fix in Cursor Fix in Web

}
require(codeSize > 0, string.concat(functionName, ": contract has no code"));
console2.log(string.concat("[FUNC OK] ", functionName, ": selector exists"));
}
Copy link

Choose a reason for hiding this comment

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

Function claims to verify selector but only checks code size

Low Severity

verifyFunctionExists performs a staticcall with the selector but discards the success result. It only checks extcodesize > 0, which passes for any contract regardless of whether it implements the given selector. The function name and [FUNC OK] log message are misleading — it provides a false sense of verification. It's also unused anywhere in the codebase.

Fix in Cursor Fix in Web

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.

1 participant