Skip to content

🔨 contracts: support hyperlane on redeployer - #860

Merged
cruzdanilo merged 15 commits into
mainfrom
hyperlane
Jun 26, 2026
Merged

🔨 contracts: support hyperlane on redeployer#860
cruzdanilo merged 15 commits into
mainfrom
hyperlane

Conversation

@itofarina

@itofarina itofarina commented Mar 3, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features
    • Added HypEXA deployment tooling for router setup, timelock-based bridge-role proposals, and pausable aggregation modules with rotation and mailbox default refresh.
    • Enhanced EXA redeployment/migration flow to update proxy admin/implementation via an additional migrator step.
  • Tests
    • Added fork-based HypEXA integration tests covering multi-hop routing, negative authorization paths, timelock scheduling, and pausing/pauser behavior.
    • Updated gas snapshot baselines and strengthened Redeployer migration assertions.
  • Chores
    • Expanded deployment account mappings, Solidity remappings, dependency pins, and spelling/lint configuration; added a changeset note.

Open with Devin

@changeset-bot

changeset-bot Bot commented Mar 3, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: fe87fd2

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 0 packages

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Mar 3, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds Hyperlane/mailbox infrastructure via deploy accounts, remappings, and dependency updates. Introduces HypEXA script contract with router deployment via CREATE3/proxy, aggregation hook/ISM composition, timelock-based BRIDGE_ROLE scheduling, and pausable component rotation. Updates Redeployer to deploy EXA implementation, perform two-phase initialization, and migrate proxy admin to ProxyAdmin via ProxyAdminMigrator. Adds comprehensive forked HypEXA tests covering multi-hop round-trips, authorization, pausing, and rotation flows. Refreshes gas snapshots and adds new Redeployer tests validating proxy admin migration and ERC20 preservation.

Changes

HypEXA and Redeployer integration

Layer / File(s) Summary
Chain/account and build wiring
contracts/deploy.json, contracts/package.json, contracts/remappings.txt, package.json, cspell.json, .changeset/beige-sails-worry.md
Adds deploy account mappings for exactly, pauser, and Hyperlane factories (hyperlaneMailbox, hyperlaneAggregationHookFactory, hyperlaneAggregationIsmFactory) across chains 10/137/8453. Pins @exactly/protocol to commit 5833408 and adds @hyperlane-xyz/core@^11.0.0. Adds Solidity remappings for both dependencies. Updates pnpm to use onlyBuiltDependencies for @exactly/protocol. Extends cspell words with hyperlane, interchain, XERC.
HypEXA script contract for router management
contracts/script/HypEXA.s.sol
New HypEXA BaseScript with deployRouter (CREATE3-deployed proxy-backed HypXERC20 with 3-of-3 aggregation hook/ISM from exactly/pauser/mailbox-default components, remote enrollment, ownership transfer), proposeBridgeRole (timelock operation scheduling), rotateRouterPausable (pauser component replacement), refreshDefaults (mailbox default hook/ISM refresh), aggregation deployment helpers, pausable hook/ISM factories, and ownership validation with custom errors.
Redeployer EXA initialization and proxy admin migration
contracts/script/Redeployer.s.sol
Ensures EXA implementation is CREATE3-deployed and cached via new deployEXAImpl() helper. Updates deployEXA to perform two sequential proxy upgrade-and-calls (EXA.initialize() then EXA.initialize2(TimelockController)), then delegates into new ProxyAdminMigrator.migrateAndUpgrade() to directly write ERC1967 admin and implementation storage slots, changing proxy control from prior ProxyAdmin to protocol("ProxyAdmin").
Forked HypEXA integration tests
contracts/test/HypEXA.t.sol
New HypEXATest across Polygon/Base/Optimism forks: setup configures Redeployer, deploys HypEXA routers per fork with remote-domain enrollment, and grants BRIDGE_ROLE to routers. Multi-hop round-trip tests (Optimism→Base→Optimism, Optimism→Polygon→Base→Optimism) exercise transferRemote burn and handle credit/mint, asserting EXA supply decreases at source and restores after final hop. Authorization tests revoke BRIDGE_ROLE and assert transferRemote/handle reversions. proposeBridgeRole tests validate RouterNotDeployed reversion, timelock operation ID pending status, and AlreadyGranted reversion. Router composition test validates aggregation hook/ISM factory resolution and module composition. Pausing tests verify transferRemote reversion with paused hooks and mailbox.process reversion with paused ISMs using vm.mockCall for execution. Pauser integration test asserts both hook and ISM pause. refreshDefaults test mocks mailbox defaults and verifies aggregation update. Pauser rotation tests restore transferRemote and mailbox.process flows after rotating implementations, verifying identity changes. Internal _upgradeEXA helper upgrades EXA proxy via ERC1967 admin slot lookup.
Redeployer test updates and gas snapshots
contracts/test/Redeployer.t.sol, contracts/.gas-snapshot
Adds four new Base-fork Redeployer tests: migratesProxyAdmin_onBase verifies ERC1967 admin slot contains v4 ProxyAdmin with TimelockController owner; revokesOldProxyAdmin_onBase confirms v5 ProxyAdmin can no longer upgrade; allowsProxyAdminV4Upgrade_onBase validates timelock governance for proxy upgrades; preservesErc20_onBase asserts ERC20 state preservation during migration. Updates gas values for ExaPlugin/ExaAccountFactory fork test cases, adds full HypEXATest gas snapshot entries (14 test cases covering router/ISM/pausing/bridge-role/timelock/round-trip scenarios), and refreshes RedeployerTest snapshots across deploy/prepare/factory/proxy paths and Polygon flows. Changes test_deployEXA_deploysAtSameAddress_onBase assertion from minted supply verification to zero totalSupply().

Sequence Diagram

sequenceDiagram
    autonumber
    participant User as "User/Script"
    participant Redeployer as "Redeployer"
    participant HypEXA as "HypEXA"
    participant ProxyAdmin as "ProxyAdmin"
    participant ProxyAdminMigrator as "ProxyAdminMigrator"
    participant EXA as "EXA Token"
    participant Timelock as "TimelockController"
    participant Router as "HypXERC20 Router"
    participant Mailbox as "Hyperlane Mailbox"

    User->>Redeployer: deployEXA(proxy)
    Redeployer->>Redeployer: deployEXAImpl() if needed
    Redeployer->>ProxyAdmin: upgradeAndCall(impl, initialize)
    ProxyAdmin->>EXA: initialize()
    Redeployer->>ProxyAdmin: upgradeAndCall(impl, initialize2(timelock))
    ProxyAdmin->>EXA: initialize2(timelock)
    Redeployer->>ProxyAdmin: upgradeAndCall(delegate to ProxyAdminMigrator)
    ProxyAdmin->>ProxyAdminMigrator: migrate(proxyAdmin, exa)
    ProxyAdminMigrator->>ProxyAdminMigrator: write ERC1967 slots
    
    User->>HypEXA: deployRouter(token, remoteDomains)
    HypEXA->>Router: CREATE3 deploy + aggregation setup
    Router-->>HypEXA: router deployed
    
    User->>HypEXA: proposeBridgeRole(token, salt)
    HypEXA->>Timelock: schedule(grantRole(BRIDGE_ROLE, router))
    Timelock-->>HypEXA: operation pending
    
    User->>Router: transferRemote(amount, domain, payload)
    Router->>Mailbox: sendMessage(payload)
    Mailbox->>Router: process/handle → mint if BRIDGE_ROLE granted
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • exactly/exa#807: Prior Redeployer implementation and deployEXA flow changes that this PR builds upon with new initialization steps and EXA implementation caching.

Suggested reviewers

  • cruzdanilo
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'contracts: support hyperlane on redeployer' directly and accurately reflects the main objective of the pull request—adding Hyperlane support to the redeployer contracts—as evidenced by the new HypEXA.s.sol script, HypEXATest integration tests, updated Redeployer.s.sol, and configuration changes enabling Hyperlane functionality.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch hyperlane
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch hyperlane

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the project's interoperability by integrating Hyperlane, a cross-chain communication protocol. The changes enable the EXA token to be bridged and managed across different blockchain domains, expanding its utility and reach. This involved updating core dependencies, modifying deployment processes to include Hyperlane-specific components, and adding comprehensive tests to ensure the robustness of the new cross-chain capabilities.

Highlights

  • Hyperlane Integration: Integrated Hyperlane for cross-chain functionality, enabling the EXA token to be transferred and managed across multiple blockchain networks.
  • Deployment and Configuration Updates: Introduced new deployment scripts and configuration settings to facilitate the deployment and setup of Hyperlane routers and an Hyperlane-compatible EXA token.
  • New Cross-Chain Test Suite: Added a dedicated test suite to verify the end-to-end functionality of cross-chain EXA token transfers via Hyperlane, including round-trip scenarios and access control.
  • Dependency Management: Updated project dependencies to include the Hyperlane core library and adjusted existing dependency configurations for compatibility.
Changelog
  • contracts/.gas-snapshot
    • Updated gas consumption benchmarks for various ExaPluginTest and RedeployerTest functions.
  • contracts/deploy.json
    • Added Hyperlane mailbox addresses for Optimism (10), Polygon (137), and Base (8453) domains.
  • contracts/package.json
    • Updated the @exactly/protocol dependency to a specific commit hash.
    • Added the @hyperlane-xyz/core dependency for Hyperlane integration.
  • contracts/remappings.txt
    • Added a remapping for @exactly/protocol to @openzeppelin/contracts.
    • Configured a remapping for @hyperlane-xyz to its node_modules path.
  • contracts/script/Redeployer.s.sol
    • Imported HypERC20Collateral and HypXERC20 from the Hyperlane core library.
    • Modified deployEXA to include an initialize2 call for the EXA token.
    • Added deployEXAImpl to deploy the latest EXA implementation.
    • Implemented upgradeEXA to upgrade an existing EXA proxy.
    • Introduced deployRouter to deploy a HypXERC20 router for cross-chain transfers.
    • Added setupRouter to configure the Hyperlane router with remote domains and grant necessary roles.
  • contracts/test/HypEXA.t.sol
    • Added a new test file for HypEXA to validate cross-chain functionality.
    • Included tests for test_roundTrip_opToBaseToOp and test_roundTrip_opToPolygonToBaseToOp to verify token bridging.
    • Added tests to ensure transferRemote and handle revert without the BRIDGE_ROLE.
  • contracts/test/Redeployer.t.sol
    • Adjusted the assertion for totalSupply in test_deployEXA_deploysAtSameAddress_onBase to expect zero initial supply.
  • cspell.json
    • Added 'hyperlane' and 'XERC' to the spellcheck dictionary.
  • package.json
    • Changed neverBuiltDependencies to onlyBuiltDependencies for @exactly/protocol.
Activity
  • No specific activity (comments, reviews, or progress updates) has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

gemini-code-assist[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@cruzdanilo cruzdanilo changed the title Hyperlane 🔨 contracts: support hyperlane on redeployer Mar 3, 2026
@sentry

sentry Bot commented Mar 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.56198% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 72.06%. Comparing base (1be046b) to head (e18185c).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
contracts/script/Redeployer.s.sol 82.35% 6 Missing ⚠️
contracts/script/HypEXA.s.sol 96.55% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #860      +/-   ##
==========================================
+ Coverage   71.64%   72.06%   +0.41%     
==========================================
  Files         247      248       +1     
  Lines        9596     9761     +165     
  Branches     3088     3133      +45     
==========================================
+ Hits         6875     7034     +159     
- Misses       2459     2465       +6     
  Partials      262      262              
Flag Coverage Δ
e2e 71.63% <75.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

♻️ Duplicate comments (3)
contracts/script/Redeployer.s.sol (3)

96-149: ⚠️ Potential issue | 🟠 Major

Run forge fmt on this file to unblock CI.

The pipeline is currently failing nx run @exactly/plugin:test:fmt due to formatting differences in this file.

As per coding guidelines **/*.sol: Follow Solhint rules strictly and use Forge fmt for code formatting.


113-121: ⚠️ Potential issue | 🟠 Major

Fail fast when EXA implementation is missing before upgradeEXA.

Line 120 upgrades to address(exa) without checking code presence, which defers failure to a less actionable downstream revert.

Proposed fix
 function upgradeEXA(address proxy) external {
   address admin = acct("admin");
+  if (address(exa).code.length == 0) revert EXAImplementationNotDeployed();
   ProxyAdmin p = ProxyAdmin(address(uint160(uint256(
       vm.load(proxy, bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1))
   ))));
   vm.broadcast(p.owner());
   p.upgradeAndCall(
     ITransparentUpgradeableProxy(proxy), address(exa), abi.encodeCall(EXA.initialize2, (admin))
   );
 }
@@
 error ProxyAdminNotDeployed();
 error TargetNonceTooLow();
+error EXAImplementationNotDeployed();

124-130: 🛠️ Refactor suggestion | 🟠 Major

Align CREATE3 salt derivation with token (or remove token from the API).

Line 129 hardcodes "HypEXA" even though the function accepts a token; that creates deterministic-slot collisions for multi-token use, and Line 145 resolves that same fixed slot.

Proposed refactor
 function deployRouter(address token) external returns (HypXERC20 router) {
@@
-        keccak256(abi.encode("HypEXA")),
+        keccak256(abi.encode("HypEXA", token)),
@@
 function setupRouter(address token, uint32 remoteDomain) external {
   address admin = acct("admin");
-  address router = CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("HypEXA")));
+  address router = CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("HypEXA", token)));

Also applies to: 145-145


ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between adceeef and 7727570.

📒 Files selected for processing (5)
  • .changeset/beige-sails-worry.md
  • contracts/.gas-snapshot
  • contracts/deploy.json
  • contracts/script/Redeployer.s.sol
  • contracts/test/HypEXA.t.sol

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

♻️ Duplicate comments (3)
contracts/script/Redeployer.s.sol (3)

121-127: 🛠️ Refactor suggestion | 🟠 Major

deployRouter ignores token in the deterministic salt, making reuse collision-prone.

The function accepts token but always uses the fixed "HypEXA" slot. Reusing it for another token collides on the same CREATE3 address.

Proposed refactor
-        keccak256(abi.encode("HypEXA")),
+        keccak256(abi.encode("HypEXA", token)),
@@
-    address router = CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("HypEXA")));
+    address router = CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("HypEXA", token)));

Also applies to: 142-142


140-146: ⚠️ Potential issue | 🟠 Major

setupRouter should fail fast if the deterministic router address is not deployed.

getDeployed can resolve an address before code exists. Without a code-length guard, role/config steps can silently target an undeployed address path.

Proposed fix
 function setupRouter(address token, uint32 remoteDomain) external {
   address admin = acct("admin");
   address router = CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("HypEXA")));
+  if (router.code.length == 0) revert RouterNotDeployed();
   vm.startBroadcast(admin);
   EXA(token).grantRole(keccak256("BRIDGE_ROLE"), router);
   HypXERC20(router).enrollRemoteRouter(remoteDomain, bytes32(uint256(uint160(router))));
   vm.stopBroadcast();
 }
@@
 error TargetNonceTooLow();
+error RouterNotDeployed();

113-119: ⚠️ Potential issue | 🟠 Major

upgradeEXA should guard against missing EXA implementation deployment.

The upgrade path uses address(exa) directly; adding an explicit code-length guard gives a clearer, earlier failure mode.

Proposed fix
 function upgradeEXA(address proxy) external {
   address admin = acct("admin");
+  if (address(exa).code.length == 0) revert EXAImplementationNotDeployed();
   ProxyAdmin p =
     ProxyAdmin(address(uint160(uint256(vm.load(proxy, bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1))))));
   vm.broadcast(p.owner());
   p.upgradeAndCall(ITransparentUpgradeableProxy(proxy), address(exa), abi.encodeCall(EXA.initialize2, (admin)));
 }
@@
 error TargetNonceTooLow();
+error EXAImplementationNotDeployed();

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7727570 and c7187e5.

📒 Files selected for processing (5)
  • .changeset/beige-sails-worry.md
  • contracts/.gas-snapshot
  • contracts/deploy.json
  • contracts/script/Redeployer.s.sol
  • contracts/test/HypEXA.t.sol

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@itofarina
itofarina marked this pull request as ready for review April 15, 2026 19:27
@itofarina
itofarina requested a review from cruzdanilo as a code owner April 15, 2026 19:27
devin-ai-integration[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

View 7 additional findings in Devin Review.

Open in Devin Review

Comment thread package.json Outdated
chatgpt-codex-connector[bot]

This comment was marked as resolved.

sentry[bot]

This comment was marked as resolved.

sentry[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
contracts/script/Redeployer.s.sol (1)

192-210: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fail fast before the 3-step deployEXA migration to avoid partial state.

Line 199 and Line 200 already mutate the proxy before Line 206 performs admin migration. If protocol("ProxyAdmin") (Line 209) or timelock config is invalid, the last tx reverts and leaves a partially-updated proxy (new impl/initialization, old admin).

Proposed hardening
 function deployEXA(address proxy) external {
   address admin = acct("admin");
+  address timelock = protocol("TimelockController");
+  address nextProxyAdmin = protocol("ProxyAdmin");
+  if (timelock.code.length == 0) revert InvalidAdmin(timelock);
+  if (nextProxyAdmin.code.length == 0) revert InvalidAdmin(nextProxyAdmin);
   vm.startBroadcast(admin);
   exa = EXA(CREATE3_FACTORY.getDeployed(admin, keccak256(abi.encode("EXA"))));
   if (address(exa).code.length == 0) {
     exa = EXA(CREATE3_FACTORY.deploy(keccak256(abi.encode("EXA")), vm.getCode("EXA.sol:EXA")));
   }
   proxyAdmin.upgradeAndCall(ITransparentUpgradeableProxy(proxy), address(exa), abi.encodeCall(EXA.initialize, ()));
   proxyAdmin.upgradeAndCall(
     ITransparentUpgradeableProxy(proxy),
     address(exa),
-    abi.encodeCall(EXA.initialize2, (protocol("TimelockController")))
+    abi.encodeCall(EXA.initialize2, (timelock))
   );

   proxyAdmin.upgradeAndCall(
     ITransparentUpgradeableProxy(proxy),
     address(new ProxyAdminMigrator()),
-    abi.encodeCall(ProxyAdminMigrator.migrate, (protocol("ProxyAdmin"), address(exa)))
+    abi.encodeCall(ProxyAdminMigrator.migrate, (nextProxyAdmin, address(exa)))
   );

   vm.stopBroadcast();
 }

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2fdffe6b-51aa-41ba-a48b-a2f338a37b19

📥 Commits

Reviewing files that changed from the base of the PR and between f9a920a and 43273db.

📒 Files selected for processing (3)
  • contracts/.gas-snapshot
  • contracts/script/Redeployer.s.sol
  • contracts/test/Redeployer.t.sol

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

Copy link
Copy Markdown

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: b35f8681a3

ℹ️ 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 thread contracts/script/HypEXA.s.sol Outdated
Comment thread contracts/script/HypEXA.s.sol
Comment thread contracts/script/HypEXA.s.sol
@patitonar
patitonar force-pushed the hyperlane branch 3 times, most recently from fa7112f to b58a398 Compare June 24, 2026 13:37

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

Copy link
Copy Markdown

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: b58a398dbd

ℹ️ 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 thread contracts/script/HypEXA.s.sol

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

Copy link
Copy Markdown

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: b55cb9c239

ℹ️ 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 thread contracts/script/HypEXA.s.sol
Comment thread contracts/script/HypEXA.s.sol
Comment thread contracts/script/Redeployer.s.sol
@cruzdanilo
cruzdanilo merged commit fe87fd2 into main Jun 26, 2026
7 of 10 checks passed
@cruzdanilo
cruzdanilo deleted the hyperlane branch June 26, 2026 15:00
@coderabbitai coderabbitai Bot mentioned this pull request Jul 9, 2026
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.

3 participants