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

feat: CCIP and Open USDT warp route #5508

Open
wants to merge 42 commits into
base: main
Choose a base branch
from
Open

feat: CCIP and Open USDT warp route #5508

wants to merge 42 commits into from

Conversation

nambrot
Copy link
Contributor

@nambrot nambrot commented Feb 18, 2025

Description

For this push to support CCIP on the warp route, we had to manage a separate feature branch to ensure that main only has audited smart contract changes. Given that we have received Chainlight's audit, we can now merge these changes back into main

  • Use merge instead of squash merging

yorhodes and others added 24 commits February 11, 2025 17:04
### Description

Enables hooks to compose with the default hook without an explicit
address pointer

### Backward compatibility

Yes

### Testing

Unit Tests
### Description

Authorized message ID hook quoted after sending unnecessarily.
Introduces shared refund logic for this, protocol fee hook, and others
in future.

### Drive-By Changes

Bumps forge-std libs and fixes false positive expect reverts.

### Backward compatibility

Yes

### Testing

Unit Tests

---------

Co-authored-by: Raid Ateir <[email protected]>
### Description

Implements hook and ISM that routes to different submodules on whether
the warped amount exceeds a configurable threshold.

Adjusts `TokenRouter.quoteGasPayment` implementation to quote for max
amount. This ensures clients of warp routes with `AmountRoutingHook`
will provide sufficient quotes for all transfers. Overpayment will be
refunded as per
#5399.

### Backward compatibility

Yes

### Testing

Unit Tests
### Description

Implements CCIP hook and ISM that offloads message verification to the
CCIP message bridge

### Related issues

Fixes #2852

### Backward compatibility

Yes

### Testing

Unit Tests/Fork Tests

---------

Co-authored-by: Raid Ateir <[email protected]>
### Description

Enable out of order message execution to prevent DoS. 

Set gas limit to benchmark from `forge test --isolate`.

Use 0 instead of msg.value in CCIP ISM.

### Backward compatibility

Yes

### Testing

Unit/Fork Tests
### Description

Replace use of `address.transfer` (fixed gaslimit) with
`address.sendValue` for refund recipients that may be contracts.

### Backward compatibility

Yes

### Testing

Unit Tests
### Description

Allow `HypXERC20` and `HypXERC20Lockbox` to be derived in the warp
reader, similar to
#5478, just for
CLI

### Backward compatibility

Yes

### Testing

Manual/Unit Tests
### Description

When using `WarpDeployConfig` we often assume certain defaults, however
when we compare against `warp read` config, it includes all the
"expanded" config. This PR adds "config expansion", so that checking
actually can be done. As part of that, it removes the practice of `warp
read` after deploy in the warp check e2e tests so that the actual
comparison against the intended deploy config can happen (instead of the
inferred config from warp read).

This is related to
#5358 and in
fact lifts some of the convenience function into `configUtils.ts` fyi
@mshojaei-txfusion

### Drive-by changes

The warp-check e2e test setup changes as mentioned

### Backward compatibility

Yes

### Testing

Local e2e tests and manual
### Description

This PR changes the canonical definition of using the default ism/hooks
from `undefined` to `zeroAddress`. This ultimately makes cli checking
work. Builds on top of
#5483 and should
be based against it once CI tests are passing

### Backward compatibility

Mostly yes (because I don't think this behavior has been leveraged)

### Testing

Unit tests/e2e tests/ manual tests
### Description

Minor fixes to make the infra warp checker work with the xerc20
derivation
### Description

Implement checking proxy and ownership of warp route collateral
contracts.

### Backward compatibility

Yes

### Testing

Unit tests
### Description

Fix persisting the collateral token when it is an xerc20 token
Copy link

changeset-bot bot commented Feb 18, 2025

🦋 Changeset detected

Latest commit: a18258a

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

This PR includes changesets to release 9 packages
Name Type
@hyperlane-xyz/core Minor
@hyperlane-xyz/cli Minor
@hyperlane-xyz/sdk Minor
@hyperlane-xyz/infra Minor
@hyperlane-xyz/utils Minor
@hyperlane-xyz/helloworld Minor
@hyperlane-xyz/widgets Minor
@hyperlane-xyz/ccip-server Minor
@hyperlane-xyz/github-proxy Minor

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

### Description

- Define `EvmHypVSXERC20Adapter` and `EvmHypVSXERC20LockboxAdapter`
adapters for token routers that use the custom xERC20
- Add a script to add bridges to warp route where the collateral token
is an xERC20VS
- Add a script to set limits for the xERC20VS token used by a warp route

### Testing

- Manually tested on an old staging route xERC20 deployed last week
- Tested setting limits on bridge

---------

Co-authored-by: pbio <[email protected]>
@nambrot nambrot changed the title Merge ccip-warp-route into main feat: Merge ccip-warp-route into main Feb 18, 2025
### Description

- fix duplicate import
Copy link

codecov bot commented Feb 18, 2025

Codecov Report

Attention: Patch coverage is 95.08197% with 3 lines in your changes missing coverage. Please review.

Project coverage is 78.45%. Comparing base (7c95140) to head (a18258a).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5508      +/-   ##
==========================================
+ Coverage   77.53%   78.45%   +0.92%     
==========================================
  Files         103      109       +6     
  Lines        2110     2163      +53     
  Branches      190      193       +3     
==========================================
+ Hits         1636     1697      +61     
+ Misses        453      445       -8     
  Partials       21       21              
Components Coverage Δ
core 87.80% <ø> (ø)
hooks 82.68% <97.22%> (+3.28%) ⬆️
isms 84.71% <83.33%> (+1.02%) ⬆️
token 91.66% <100.00%> (+0.39%) ⬆️
middlewares 79.80% <ø> (ø)
🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

nambrot and others added 2 commits February 19, 2025 16:36
### Description

- Support adding bridges and setting limits for additional limits

### Testing

Manual
@nambrot nambrot changed the title feat: Merge ccip-warp-route into main feat: DO NOT MERGE YET Merge ccip-warp-route into main Feb 20, 2025
Mo-Hussain and others added 9 commits February 20, 2025 19:33
### Description
- Generally handle Safe or Signer transactions properly
- Throw when safe tx service is not available
- Specifically fallback to Signer tx when the expected owner is a safe
in the config but the actual owner is the deployer (Signer), this
special case occurs post deployment before ownership transfers are
applied

### Testing

Manual
### Description

Right now we are checking ownables in the infra checker for the
collateral token (and its proxy admin). However, we want to be testing
the xerc20 owners.
### Description

Updates the infra monitor to monitor the limits and balances of extra
lockboxes

### Drive-by changes

### Related issues

### Backward compatibility

- YES

### Testing

- Manual

---------

Co-authored-by: Mo Hussan <[email protected]>
### Description

- update docker image
### Description

feat: xerc20 safe tx submission improvements
- use getSafeAndService infra util where possible instead of SDK
directly (to have retry logic)
- refactor sendTransaction logic to better leverage MultiSend
- add --chains filter


![image](https://github.com/user-attachments/assets/c3201fd5-b83c-420c-af51-6f3881ae68a4)


### Drive-by changes

<!--
Are there any minor or drive-by changes also included?
-->

### Related issues

<!--
- Fixes #[issue number here]
-->

### Backward compatibility

<!--
Are these changes backward compatible? Are there any infrastructure
implications, e.g. changes that would prohibit deploying older commits
using this infra tooling?

Yes/No
-->

### Testing

manual
### Description
This PR adds e2e tests to `warp check` to test each individual
MUTABLE_HOOK_TYPE to validate if `warp check` detects ownership diffs

### Drive-by changes
- export MUTABLE_HOOK_TYPE and randomHookConfig from sdk


### Backward compatibility
Yes
### Description
This PR adds e2e tests to `warp check` to test each individual
MUTABLE_ISM_TYPE to validate if `warp check` detects ownership diffs

### Drive-by changes
- export MUTABLE_ISM_TYPE and randomIsmConfig from sdk
- Update randomIsmConfig to generate the mutable Isms


### Backward compatibility
Yes
### Description

Removes a bridge when the buffer cap is set to 0
* feat: SuperUSDT config getter

* configure chains for staging

* use staging token addresses

* remove worldchain

* Add production config

* Change as per 76f8a5c

* Add Lisk/superseed owners

* Finalize initial config

* Adjust the hook/ism config

* Revert aggregation ISM

* Revert aggregation hook

* Update XERC20 addresses

* Add pausable to non CCIP chains

* Add extra lockboxes to config

* Use signer in add bridge script

* Add comment for lockbox erc20

* Don't show undefined

* Add staging extra lockboxes

* Finalize limits for SuperUSDT

* Update registry RC to CCIP registry branch

* Skip Open USDT warp ID temporarily

---------

Co-authored-by: pbio <[email protected]>
Co-authored-by: nambrot <[email protected]>
@yorhodes yorhodes changed the title feat: DO NOT MERGE YET Merge ccip-warp-route into main feat: CCIP and Open USDT warp route Mar 6, 2025
@@ -0,0 +1,88 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.0;

Check notice

Code scanning / Olympix Integrated Security

Using an unbounded pragma for Solidity version may be unsafe if future versions introduce breaking changes. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/unbounded-pragma

Using an unbounded pragma for Solidity version may be unsafe if future versions introduce breaking changes. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/unbounded-pragma
// ============ Constructor ============

constructor(
address _ccipRouter,

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

constructor(
address _ccipRouter,
uint64 _ccipDestination,

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
constructor(
address _ccipRouter,
uint64 _ccipDestination,
address _mailbox,

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
address _ccipRouter,
uint64 _ccipDestination,
address _mailbox,
uint32 _destination,

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
uint64 _ccipDestination,
address _mailbox,
uint32 _destination,
bytes32 _ism

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
@@ -0,0 +1,70 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.0;

Check notice

Code scanning / Olympix Integrated Security

Using an unbounded pragma for Solidity version may be unsafe if future versions introduce breaking changes. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/unbounded-pragma

Using an unbounded pragma for Solidity version may be unsafe if future versions introduce breaking changes. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/unbounded-pragma
* @title CCIPIsm
* @notice Uses CCIP hook to verify interchain messages.
*/
contract CCIPIsm is AbstractMessageIdAuthorizedIsm, CCIPReceiver {

Check failure

Code scanning / Olympix Integrated Security

Contracts that can receive ether but cannot send it may lock value permanently. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/locked-ether

Contracts that can receive ether but cannot send it may lock value permanently. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/locked-ether

// ============ Storage ============
constructor(
address _ccipRouter,

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
// ============ Storage ============
constructor(
address _ccipRouter,
uint64 _ccipOrigin

Check notice

Code scanning / Olympix Integrated Security

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor

Parameters passed to a constructor that are not validated for correct values may lead to contract creation in an undesired state. For more information, visit: http://detectors.olympixdevsectools.com/article/web3-vulnerability/no-parameter-validation-in-constructor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Review
Development

Successfully merging this pull request may close these issues.

6 participants