Skip to content

chore: merge main into injective#857

Draft
hyper-gonk[bot] wants to merge 181 commits into
injectivefrom
main-to-injective
Draft

chore: merge main into injective#857
hyper-gonk[bot] wants to merge 181 commits into
injectivefrom
main-to-injective

Conversation

@hyper-gonk
Copy link
Copy Markdown
Contributor

@hyper-gonk hyper-gonk Bot commented Dec 15, 2025

⚠️ This PR has merge conflicts that need to be resolved manually.

This PR was automatically created to merge changes from main into injective.

ltyu and others added 30 commits May 30, 2025 16:45
This PR bump registry to v16. The goal is to enable REZ (uniswap) but
also update import to use BaseRegistry
This PR bumps registry to 16.1
uppercase `warpRouteIds` and `whiteList` ids to fix discrepancy

---------

Co-authored-by: Le Yu <6251863+ltyu@users.noreply.github.com>
This PR features an initial setup for Multi-Collateral tokens for
transfers
fixes
[ENG-1683](https://linear.app/hyperlane-xyz/issue/ENG-1683/warp-ui-should-handle-multiple-available-routes-for-a)

- Filter out tokens with the same collateral address in origin and
destination and only show one of them
- A map containing the collateral address of origin and destination with
an array of the same tokens is added, but not used yet
- When submitting, it will check for the same logic and then return the
highest balance token represented by the state `routeOverrideToken`
- Transfers will be done with this state otherwise uses the one in the
form
- Tests for `isValidMultiCollateralToken`

You can test this by using `Arbitrum` <> `Optimism` with `USDC`
and easy way to test this is by navigating to the development server and
using the temporal warp route, ex:

http://localhost:3000/?origin=arbitrum&destination=optimism&token=0x296B0c551c65CB83452f10EA3922824E7b9b3F4C
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Chores**
  - Updated the "@hyperlane-xyz/registry" dependency to version 17.4.0.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR Bumps registry to 17.6.0
Bump registry to 17.7.0
- This PR change the warp ui from using `PartialRegistry` to
`GithubRegistry`
- Now will fetch warp routes and chain metadata if `config.registryUrl`
is defined
- Fix token image size scaling

This means that if an update is done to main, then it will also reflect
for the warp UI

closes
[ENG-1740](https://linear.app/hyperlane-xyz/issue/ENG-1740/use-githubregistry-in-warp-ui)
related [registry
PR](hyperlane-xyz/hyperlane-registry#903)



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Style**
- Improved layout and responsiveness of token icons by updating image
sizing to use CSS classes instead of fixed attributes.

- **Chores**
- Enhanced debug log messages for chain metadata loading for greater
clarity.
- Updated registry implementation to use a GitHub-backed registry with
configurable parameters, affecting how data is sourced and initialized.
- Improved error handling and fallback logic when loading warp route
configurations, with clearer debug messages.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…637)

Now instead of only relying on published warp routes, it will first
attempt to fetch warp routes from the registry for the warp route white
list test
This PR adds limit to certain multi-collateral routes 

fixes
[ENG-1699](https://linear.app/hyperlane-xyz/issue/ENG-1699/limit-transfer-size-of-a-route-on-the-ui)

- Sets limit to multi-collateral tokens that matches symbol, origin and
destination with the array `multiCollateralTokenLimits`
- Create tests for this
- Form validation now includes a message if this limit is exceeded
- Pressing Max button will instead now set the given limits if it exists
and exceeds the account current balance
- Move mocks creation functions to its own file

You can currently test this by sending USDC from Arbitrum <> Optimism,
the max transfer amount is 1 USDC as a test, will remove before merging

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced multi-collateral transfer limits for certain tokens (e.g.,
USDC) on supported chains, preventing transfers that exceed these
limits.
- **Bug Fixes**
- Improved validation to block transfers exceeding multi-collateral
limits directly in the transfer form.
- **Refactor**
- Updated internal logic to consistently enforce multi-collateral limits
when calculating maximum transferable amounts.
- Enhanced token validation to support multiple token standards for
collateralized tokens.
- **Tests**
  - Added comprehensive tests for multi-collateral limit utilities.
- Centralized and reused token mock utilities in test files for
consistency.
- **Chores**
- Added new test utilities for creating mock tokens and token
connections.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Registry to v18 and other hyperlane packages to v14
Remove disabled chains from being selectable when `shouldDisableChains`
flag is on

- Now disabled chain will not show as default even when set in url
params
- Disabled chains will not show up for unsupported route tokens
This enables users to connect Starknet wallets and parse Hyperlane
message IDs

Important: Merging available after adding at lease one starknet chain to
registry!

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Added support for Starknet wallets and protocols, enabling users to
interact with Starknet alongside existing wallet options.
- Introduced dynamic support for multiple Starknet chains and wallet
connectors (Braavos and Argent X).
- Enabled batch sending of multiple transactions for Starknet transfers,
improving transfer efficiency.

- **Enhancements**
- Upgraded key dependencies to their latest versions for improved
stability and compatibility.
- Added a new wallet protocol to the configuration to expand supported
networks.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: -f <kunalarora1729@gmail.com>
Co-authored-by: Xaroz <jasonguo2013jg@gmail.com>
Co-authored-by: Troy Kessler <43882936+troykessler@users.noreply.github.com>
Co-authored-by: Jason Guo <33064781+Xaroz@users.noreply.github.com>
- Add keplr, metamask snap and OKX wallet  connectors to starknet
- Include `https://snaps.consensys.io` to script src 
- Add `WalletConnectionWarning`
Now shows Ready Wallet (formerly Argent) properly with the patch update
for starknekit
<img width="445" height="492" alt="image"
src="https://github.com/user-attachments/assets/def840ec-4062-48f9-ac48-25d1a2b327fe"
/>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
  * Updated dependency versions for Hyperlane packages.
* Integrated a patched version of "starknetkit" for improved stability.
* **New Features**
* Added a new icon for the Ready Wallet (formerly Argent) to enhance
wallet identification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Now at review step user will be shown a received amount if the tokens
have scaling

fixes
[ENG-1946](https://linear.app/hyperlane-xyz/issue/ENG-1946/include-scaled-token-amount-to-warp-ui)

<img width="585" height="648" alt="Screenshot 2025-07-16 at 1 17 56 PM"
src="https://github.com/user-attachments/assets/c4e1ae3c-a625-4ea5-8950-b25990c6b71b"
/>
<img width="583" height="760" alt="Screenshot 2025-07-16 at 1 17 39 PM"
src="https://github.com/user-attachments/assets/f730bf87-00e9-4818-85c1-fea2aa0eeb8d"
/>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added a display of the received token amount adjusted for differing
token scales during transfer review, providing clearer information when
origin and destination token scales differ.

* **Style**
* Improved alignment of transaction detail labels for better
readability.

* **Chores**
  * Updated several dependencies to their latest versions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bump registry to 19.4.0
- Update sdk, utils and widgets to 16.0.0
- Update registry to 20.0.0

WIth the new update limits checks are included for
`EvmHypCollateralFiat` tokens
- Wrap `listRegistryContent` in a try catch for `GithubRegistry`
- When `listRegistryContent` fails, it will use `PartialRegistry`
instead
- Now if warp routes are empty it will use published routes
fixes
[ENG-1965](https://linear.app/hyperlane-xyz/issue/ENG-1965/add-token-to-wallet-button)

Implement feature to request to add a token/asset to an user wallet.
Currently only works for EVM
- New button under chains to add token
- Wallet must be connected or be a supported protocol (currently only
EVM) for the button to show

<img width="552" height="351" alt="image"
src="https://github.com/user-attachments/assets/01941829-52c7-4adf-a79d-b277be8ba4a4"
/>



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

* **New Features**
* Added support for users to add tokens directly from the chain
selection interface when supported by the protocol and account
readiness.
* Introduced a new "Add token" button in the chain selection UI for
eligible tokens.
* Users can now add assets to their wallet for supported protocols
(Ethereum) via an integrated workflow.

* **Chores**
* Updated several dependencies to newer versions for improved stability
and compatibility.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Remove tokens that have no connections from the warp core config tokens,
with these chains with no connection will not be shown from
`assembleChainMetadata`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Improved token list by removing tokens without any connections,
ensuring only connected tokens are displayed.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR addresses an issue where users are automatically prompted to
switch to the Base Mainnet when connecting with their wallet on the
Hyperlane Warp bridge UI.

## 📋 Context

When attempting to connect a wallet, users were forced to switch to the
Base network regardless of the chain selected, or the previous chain
selected in their wallet.

This is due to the fact that the code of the Hyperlane UI fetches the
list of available warp routes, and pass the first origin chain of the
first warp route as initial chain to rainbow kit configuration in the
wallet connector.

Although Metamask performs the chain switch in the background in the
wallet, this still causes confusion for users expecting to use the
origin chain from the selected dropdown. For instance when using the
Universal Profile browser extension, the user gets automatically
prompted to switch network, which leads to confusion.

<img width="3012" height="1646" alt="image"
src="https://github.com/user-attachments/assets/b5f95982-8df3-4df1-ad51-620f847ef692"
/>



https://github.com/user-attachments/assets/114d703d-1cd3-4316-bab8-b51027970a0a



## ✅ Fix

Removed the logic that enforced a network switch to Base on wallet
connection. The code now does not provide an initial chain to switch to
when connecting. The last network selected in the wallet is now used.
Wallets now connect without triggering an automatic network change



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Removed logic related to deriving and passing an initial chain based
on Ethereum protocol tokens in wallet context setup. No visible changes
to the user experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bump `@types/nodes` because of upcoming Vercel node v18 deprecation
hyper-gonk Bot and others added 30 commits April 13, 2026 19:55
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `31.0.1`
- `@hyperlane-xyz/utils`: `31.0.1`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `31.0.1`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

---
🤖 This PR was automatically generated by the [update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml)

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
## Summary

- Remove the `touched` guard from `ConnectAwareSubmitButton` error
display
- Form-level validation errors (e.g. "Insufficient ETH for interchain
gas") were silently swallowed because the `touched` object didn't
contain matching field keys
- Since Formik is configured with `validateOnChange={false}` and
`validateOnBlur={false}`, validation only runs on submit — the `touched`
guard was redundant and just hiding legitimate errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `31.2.0`
- `@hyperlane-xyz/utils`: `31.2.0`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `31.2.0`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

---

## Fix: Scale/decimals display bugs for mixed-decimal warp routes

Uses the new SDK scale helpers (`messageAmountFromLocal`,
`localAmountFromMessage`, `scalesEqual`) from
hyperlane-xyz/hyperlane-monorepo#8594 to fix incorrect amount display
for warp routes with different scales/decimals (e.g., BSC USDT 18-dec
with scale-down).

### Bugs fixed

| Bug | Description | Fix |
|-----|-------------|-----|
| Wrong dest amount in review | `convertToScaledAmount` +
`fromWei(originDecimals)` produced wrong values | Replaced with
`messageAmountFromLocal` → `localAmountFromMessage` →
`fromWei(destDecimals)` |
| `===` on scale objects | Always false for `{numerator, denominator}`
objects, skipping scale computation | Use `scalesEqual()` from SDK |
| One-sided scale ignored | Only showed scaled amount when both tokens
had scale | Show when either side has scale |
| API amounts formatted wrong | Message-space amounts formatted with
local decimals (e.g., `1e-16` for BSC USDT) | Use
`localAmountFromMessage` to convert message → local before formatting |
| Modal dest amount | Always repeated origin amount for dest side |
Shows computed dest amount when scales differ |
| Sidebar dest amount | Always repeated origin amount for dest side |
Shows computed dest amount when scales differ |

### Files changed
- **`scaleUtils.ts`** (new) — `computeDestAmount()` utility using SDK
helpers
- **`scaleUtils.test.ts`** (new) — 9 tests covering all scale
configurations
- **`TransferTokenForm.tsx`** — Replaced `convertToScaledAmount` with
`computeDestAmount`, fixed dest symbol
- **`TransfersDetailsModal.tsx`** — Dest side shows `destAmount ||
amount`
- **`SideBarMenu.tsx`** — Computes `destAmount`, fixed API transfer
amount formatting
- **`useMergedTransferHistory.ts`** — Fixed API transfer amount
formatting with `localAmountFromMessage`

### Related
- SDK changes: hyperlane-xyz/hyperlane-monorepo#8594

---
🤖 Dependency update was automatically generated by the
[update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml). Scale fixes
generated with [Claude Code](https://claude.com/claude-code).

---------

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
Co-authored-by: Xaroz <jasonguo2013jg@gmail.com>
## Summary
- Renames `src/middleware.ts` → `src/proxy.ts` and `middleware()` →
`proxy()` per Next.js 16's deprecated "middleware" file convention
- No logic changes — same geolocation-based sanctions blocking

## Test plan
- [ ] Verify no "middleware is deprecated" warning on `pnpm dev`
- [ ] Verify geo-blocking still works on Vercel preview

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Pure rename/entrypoint change with no logic changes; main risk is
misconfiguration causing the handler not to run if Next.js expects a
different export/file name.
> 
> **Overview**
> Renames the Next.js edge entrypoint by moving `src/middleware.ts` to
`src/proxy.ts` and changing the exported handler from `middleware()` to
`proxy()` to align with the updated Next.js 16 convention.
> 
> No behavioral changes were made to the geolocation-based redirects;
only the exported function name/entrypoint is updated.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
e492f42. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `31.2.1`
- `@hyperlane-xyz/utils`: `31.2.1`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `31.2.1`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

### Manual fixes for SDK 31.2.1 breaking changes

SDK 31.2.1 changed `scale` from `number` to `ScaleInput` (number or
`{numerator, denominator}`).

- **`warpCoreConfig.ts`**: Added type assertion on `combinedTokens` to
work around Zod's `z.infer` widening `{numerator: bigint}` to
`{numerator: string | bigint}` when spreading token arrays
- **`scaleUtils.test.ts`**: Added tests for bigint `{numerator,
denominator}` scale values and numeric scale in `formatMessageAmount`
(14 tests total)

---
🤖 This PR was automatically generated by the [update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml), with manual
fixes applied.

---------

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
Co-authored-by: pbio <10051819+paulbalaji@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixed the cycling through different wallets and only open TronLink
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `32.0.0`
- `@hyperlane-xyz/utils`: `32.0.0`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `32.0.0`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

---
🤖 This PR was automatically generated by the [update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml)

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
Updates `CLAUDE_OPUS_MODEL` from `claude-opus-4-6` to `claude-opus-4-7`.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Workflow-only configuration change that just switches model
identifiers; minimal impact beyond AI review behavior/outputs.
> 
> **Overview**
> Updates the GitHub Actions workflow
`.github/workflows/claude-code-review.yml` to use newer Claude model
versions by bumping `CLAUDE_OPUS_MODEL` to `claude-opus-4-7` and
`CLAUDE_SONNET_MODEL` to `claude-sonnet-4-6`.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
cc04120. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## Summary

Pins `@ledgerhq/errors` to `6.31.0` via `pnpm.overrides` to avoid an ESM
resolution bug introduced in `6.32.0`.

## The bug

When the monorepo-linked dev flow pulls in `@ledgerhq/errors@6.32.0`,
Next.js (on the server) throws at runtime:

```
Failed to load external module @solana/wallet-adapter-wallets-...:
Error [ERR_MODULE_NOT_FOUND]: Cannot find module
'.../@ledgerhq/errors/lib-es/helpers' imported from
'.../@ledgerhq/errors/lib-es/index.js'
```

The broken import is in `lib-es/index.js`:

```js
import { ... } from "./helpers";   // no .js extension
```

## Root cause

The extensionless import exists in **both 6.31.0 and 6.32.0** — the
string is identical. What changed is how Node resolves it:

- **6.31.0**: no `exports` field → Node uses legacy `main`/`module`
resolution, which tolerates extensionless relative specifiers.
- **6.32.0**: LedgerHQ PR #15316 added an `exports` map (to expose an
`@ledgerhq/source` condition for IDEs). Once `exports` is present, Node
switches to strict conditional-exports resolution, which requires
explicit file extensions under ESM → `ERR_MODULE_NOT_FOUND`.

The upstream fix would require switching the `@ledgerhq/*` TS build to
`moduleResolution: "NodeNext"` so `.js` extensions are emitted. Not on
LedgerHQ's radar yet.

## Why this only surfaced with `link:monorepo`

Published `@hyperlane-xyz/*` packages resolve `@ledgerhq/errors` to
`6.31.0` through their dep graph. The monorepo tarballs resolve to
`6.32.0`. Same project, different dep tree → different version →
different resolution path.

## Why pin to 6.31.0 instead of patching

`6.32.0` only adds five new error classes: `InvalidTransactionError`
(for `coin-tron` expired-tx handling) and four `Concordium*` errors.
None of them are referenced anywhere in this project's dep graph —
verified across `@ledgerhq/hw-transport`, `@ledgerhq/devices`,
`@ledgerhq/hw-transport-webhid`, `@solana/wallet-adapter-ledger`,
`@tronweb3/tronwallet-adapter-ledger`, and `@ledgerhq/hw-app-*`. The
only consumers are `@ledgerhq/coin-evm|tron|concordium` and Ledger Live
apps — none of which we depend on. The pin is safe until upstream fixes
the build.

## Alternatives considered

- **Patch `lib-es/index.js`** to append `.js` — works, but
version-specific and brittle.
- **`transpilePackages: ['@ledgerhq/errors']`** in `next.config.js` —
forces Next to bundle it (bundler resolver tolerates extensionless
imports). Heavier-handed and depends on Next internals.

One-line override is the simplest fix with the smallest blast radius.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…1063)

## Summary

Clicking WalletConnect in the EVM wallet list crashed before the QR
modal could render. Nothing in the UI surfaced — just an unhandled
rejection in the console:

```
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'values')
  at new BaseChunkLogger (...)
  at new ChunkLoggerController (...)
  at Core (...)
  at Client.init (...)
  at UniversalProvider.initialize (...)
```

## Root cause

`next.config.js` aliases `pino` to `src/utils/pino-noop.js` under
Turbopack. That shim was added when we migrated to Turbopack to avoid
pino's transport/worker resolution blowing up during SSR — but the alias
applied to every bundling context, including the browser.

`@walletconnect/logger` does `import { levels } from 'pino'` and, inside
its `BaseChunkLogger` constructor, reads `levels.values[this.level]`.
Our shim didn't export `levels`, so the named import was `undefined` and
the first access to `.values` threw. That constructor runs synchronously
during `UniversalProvider.init()`, which runs when the user picks
WalletConnect, which is why the QR modal never appeared.

## Fix

Scope the pino alias by resolution condition:

- **browser** → `pino/browser.js` (pino's own browser build, which
exports `levels` with the expected `{ values, labels }` shape).
- **default (SSR/Node)** → the existing `pino-noop.js` shim, so the
original transport resolution issue stays fixed.

No application code needed to be touched. The WalletConnect logger gets
the real `levels` export in the browser, the server still avoids pino's
transport code path, and we don't carry a forked `levels` table in our
shim that would need to stay in sync with pino's.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `33.0.0`
- `@hyperlane-xyz/utils`: `33.0.0`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `33.0.0`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

---
🤖 This PR was automatically generated by the [update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml)

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
## Automated Dependency Update

This PR updates the Hyperlane dependencies to their latest versions.

**Updated versions:**
- `@hyperlane-xyz/sdk`: `33.0.2`
- `@hyperlane-xyz/utils`: `33.0.2`
- `@hyperlane-xyz/registry`: `24.3.0`
- `@hyperlane-xyz/widgets`: `33.0.2`

**Changes include:**
- Updated `package.json` with latest Hyperlane package versions
- Updated `pnpm-lock.yaml` via `pnpm install`

---
🤖 This PR was automatically generated by the [update-hyperlane-deps
workflow](.github/workflows/update-hyperlane-deps.yml)

Co-authored-by: hyper-gonk[bot] <246310972+hyper-gonk[bot]@users.noreply.github.com>
## Summary

Several e2e tests hardcoded main-branch values (app name, default
tokens, tip-card copy, specific chain names, aleo route IDs) and failed
when run against production branches like `nexus`. This PR refactors
them to derive values from app constants/config so they work across
branches.

## Changes

- **`tests/page-load/transfer-form-visible.spec.ts`** — uses `APP_NAME`
for page title; derives default origin/destination token buttons from
`config.defaultOriginToken`/`defaultDestinationToken`
- **`tests/page-load/tip-card.spec.ts`** — skips when
`!config.showTipBox`; asserts only the `.tip-card` container + `Hide
tip` button (heading copy is customized per branch)
- **`tests/embed/routes-param.spec.ts`** — new `resolveTestRoutes()`
helper picks `warpRouteWhitelist[0]`/`[1]` on prod branches, falls back
to `USDC/aleo`/`ETH/aleo` on main, skips on empty whitelist
- **`tests/chain-selection/filter-by-type.spec.ts`** — derives mainnet
chain from `config.defaultOriginToken`; scopes assertions to
`.token-picker-chain-row` (avoids matching token rows); verifies filter
behavior via row count rather than specific chain names
- **`tests/helpers/constants.ts`** (new) — shared test helpers importing
from `src/consts`

## Verification

Ran all 9 previously-failing chromium tests on both `main` and `nexus`:
- main: 9 passed (24.4s)
- nexus: 9 passed (24.4s)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
fix: include EvmM0Portal to dedupe tokens
fix: M0Portal token dedup and route resolution
## Summary

Rebased `#1061` onto current `main`, on top of
[#1064](#1064),
and repurposed it away from the closed `#1030` stack.

This PR now does 2 things on current Warp UI:

1. adds a wallet-connected Playwright E2E harness behind `?_e2e=1`
2. adds narrow regression tests for route/history and router-address
correctness

No production URL behavior changes. All mock-wallet wiring stays behind
the explicit runtime E2E gate.

## What Changed

### E2E wallet harness

- adds deterministic mock wallet wiring for:
  - EVM
  - Solana
  - Cosmos
  - Starknet
  - Tron
  - Radix
- initializes `window.__WARP_E2E__` from the app so tests can:
  - wait for runtime readiness
  - inspect runtime token snapshots
  - capture tx payloads from mocked wallets/providers
- adds Playwright coverage under `tests/e2e-wallet/` for:
  - smoke gating
- EVM autoconnect / balance / approval / tx payload / same-symbol /
destination-router / invalid-submit
  - Solana autoconnect / balance / same-symbol / destination-router
  - Cosmos autoconnect / same-symbol
  - Starknet autoconnect
  - Tron autoconnect
  - Radix autoconnect

### Wallet-side E2E mocks

- adds app-local E2E mocks and auto-connect helpers under
`src/features/wallet/_e2e/`
- wallet contexts switch to deterministic mock-only connectors/adapters
when `?_e2e=1` is present
- current `main` wallet/provider structure is preserved; this PR only
adds the E2E gate path

### Regression tests

-
[useMergedTransferHistory.test.ts](https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/blob/pbio/warp-runtime-correctness-tests/src/features/messages/useMergedTransferHistory.test.ts)
- same-symbol transfer history resolves the concrete route token rather
than the wrong duplicate
-
[routerAddresses.test.ts](https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/blob/pbio/warp-runtime-correctness-tests/src/features/routerAddresses.test.ts)
  - router-address normalization stays protocol-aware
- mock wallet unit coverage for:
  - Cosmos
  - Starknet
  - Tron

### CI

- adds a PR smoke workflow for the wallet harness
- adds a fuller wallet E2E workflow
- updates the main CI wiring to include the new test entrypoints

## Coverage Matrix

Kind of coverage per VM, deliberately distinguishing adapter smoke from
UI autoconnect from transfer-path so the matrix does not overstate
confidence.

| Protocol | Mock adapter | Adapter smoke test | UI autoconnect
(Playwright) | Same-symbol dedup | Dest router correctness | Balance
(mocked RPC) | Tx payload capture | Invalid submit blocked |
|----------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| EVM      | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Solana   | ✅ | — | ✅ | ✅ | ✅ | ✅ | ⏳¹ | ⏳ |
| Cosmos   | ✅ | ✅ | ✅ | ✅ | ⏳ | ⏳ | ⏳² | ⏳ |
| Starknet | ✅ | ✅ | ✅ | ⏳ | ⏳ | ⏳ | ⏳³ | ⏳ |
| Tron     | ✅ | ✅ | ✅ | ⏳ | ⏳ | ⏳ | ⏳³ | ⏳ |
| Radix    | ⚠️⁴ | ⏳ | ✅ | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ |
| Aleo     | — | — | — | — | — | — | — | — |

Legend:
- ✅ covered
- ⚠️ partial
- ⏳ deferred
- — not scoped

Column meanings:
- Mock adapter: test-only wallet/connector/client exists and is gated
into the wallet context
- Adapter smoke test: unit test proves deterministic address + basic
contract
- UI autoconnect: browser test proves the mock auto-connects end-to-end
- Same-symbol / Dest router / Balance / Tx payload / Invalid submit:
real flow assertions from the original ask

Footnotes:
1. Solana tx payload capture is still deferred. The current harness
covers route identity and balance display, but review/send payload
capture would need a larger Solana fee/validation mock surface.
2. Cosmos tx payload capture is wired at the mock signer but the browser
flow does not reach it yet; that would need deeper cosmos
validation/network mocking.
3. Starknet/Tron payload capture would need fuller provider stubs.
Current coverage is connector-level plus UI autoconnect.
4. Radix has no adapter class in the same sense; current coverage is
state-seeder plus UI smoke.

## Why

Warp UI still needs browser-level confidence on wallet-connected flows,
duplicate-token selection, and route identity. The current unit coverage
is not enough for that.

This PR keeps that work compatible with current `main` instead of the
now-closed `#1030` stack, and reuses the resilience improvements already
merged in
[#1064](#1064).

## Validation

```bash
pnpm test src/features/messages/useMergedTransferHistory.test.ts \
          src/features/routerAddresses.test.ts \
          src/features/wallet/_e2e/MockCosmosWallet.test.ts \
          src/features/wallet/_e2e/MockStarknetConnector.test.ts \
          src/features/wallet/_e2e/MockTronAdapter.test.ts --run
pnpm typecheck
pnpm build
pnpm exec playwright test tests/e2e-wallet --project=chromium
```

Latest result on this rebased branch:
- unit tests: pass
- `pnpm typecheck`: pass
- `pnpm build`: pass
- wallet Playwright suite: `21 passed`

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Medium risk: adds new CI workflows and modifies wallet provider
initialization paths (though mock wiring is gated to localhost +
`?_e2e=1`), so failures would primarily impact test/CI stability rather
than production behavior.
> 
> **Overview**
> Adds a **wallet-connected Playwright E2E harness** behind `?_e2e=1`
(localhost-only) by introducing deterministic mock wallets/connectors
for EVM, Solana, Cosmos, Starknet, Tron, and Radix, plus a
`window.__WARP_E2E__` global for runtime readiness, token snapshots, and
tx capture.
> 
> Updates wallet contexts to switch to mock-only adapters/connectors in
E2E mode, tweaks Playwright/Next dev behavior to reduce flakes (disable
Next dev indicators and adjust dev/prod server selection/timeouts), and
adds extensive `tests/e2e-wallet/*` coverage with helper RPC mocks.
> 
> Adds targeted **unit regressions** for same-symbol route/history and
protocol-aware router-address normalization (exports
`getRouterAddressesByChain` for testing), updates deps/scripts, and
wires new CI jobs: a PR-gating `e2e-smoke` plus a main/merge-group
`e2e-wallet-full` cross-browser matrix with Slack failure notification.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
265900a. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Jason Guo <33064781+Xaroz@users.noreply.github.com>
## Summary
- reorganize `tests/e2e-wallet/` by feature instead of by VM
- keep the actual test coverage/content unchanged
- update the wallet smoke script to the new paths

## Why
Follow-up to #1061. Xaroz asked for the wallet e2e suite to be grouped
by feature so it is easier to see what behavior is being tested, instead
of scattering that coverage across protocol folders.

This is intentionally folder-only/test-discovery-only cleanup. No wallet
harness logic changed.

## Layout
- `tests/e2e-wallet/autoconnect/*`
- `tests/e2e-wallet/balance-display/*`
- `tests/e2e-wallet/destination-router/*`
- `tests/e2e-wallet/same-symbol-dedup/*`
- `tests/e2e-wallet/approval/*`
- `tests/e2e-wallet/invalid-route/*`
- `tests/e2e-wallet/tx-payload/*`
- `tests/e2e-wallet/smoke/*`

## Validation
- `pnpm typecheck`
- `pnpm build`
- `CI=1 pnpm exec playwright test tests/e2e-wallet --project=chromium`
  - `21 passed`

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: updates Playwright test entrypoints/import paths to match a
folder reorganization, with no production code or wallet logic changes.
> 
> **Overview**
> Updates the `test:e2e:wallet:smoke` Playwright script to point at the
new feature-grouped wallet E2E spec locations.
> 
> Moves the wallet smoke gate spec under `tests/e2e-wallet/smoke/` and
fixes its helper imports to the new relative paths.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
1f7a9de. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…p-webkit

test: fix firefox e2e race, drop webkit from matrix
## Summary

Fix flaky Firefox e2e: [run
24893767726](https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/actions/runs/24893767726/job/72892996462).

The test `Base and Arbitrum destinations resolve distinct non-empty
remote-token addresses` runs two full capture flows in sequence — each
calls `waitForWarpRuntime` (20s budget) + token-picker modal waits (30s
budget each) + review-panel wait (30s). Under Firefox on CI the whole
sequence regularly blows the default 30s test timeout, producing
cascading "modal not hidden / not visible / waitForWarpRuntime timeout"
errors across the initial run and both retries.

Bump the per-test timeout to 180s to match the existing pattern used in
`approval/evm.spec.ts` and `tx-payload/evm.spec.ts`, which also chain
multi-step picker flows.

## Test plan
- [ ] e2e-wallet (firefox) CI job passes on this branch
- [ ] No regression in chromium e2e-wallet

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Summary

Same root cause + fix as
[hyperlane-explorer#323](hyperlane-xyz/hyperlane-explorer#323),
applied to the display side of the warp-ui.

`formatMessageAmount` fell back to per-route `wireDecimals =
max(decimals)` when a token had no `scale` field. On-chain routers
(`TokenRouter` for EVM, `HyperlaneToken` for SVM) default to identity
scale when unset, so the wire amount is always in the token's
native-decimal space — no implicit max-decimals normalization to invert.

### The bug this fixes

USDT route: BSC has `decimals: 18, scale: {1, 1e12}` (compresses to
6-dec wire). The Eclipse and Solana entries have **no `scale`** in the
registry, so `Math.max(decimals) = 18` was used to interpret a 6-dec
wire amount → `fromWei(1_000_000, 18)` ≈ 0 → sidebar showed **"USDT 0"**
for SVM → Tron transfers (and would for any other route where the origin
chain isn't the max-decimal chain).

Tron → SVM works because Tron has `scale: {1, 1}` set, hitting the
scaled branch.

The on-chain transfer itself is correct in both directions — only the
display was off, masked by localStorage cache between page changes.

### What changes

- `src/features/transfer/scaleUtils.ts` — `formatMessageAmount` now uses
`token.decimals` directly. Drops the `routerAddressesByChainMap` and
`chainName` params.
- `src/features/messages/useMergedTransferHistory.ts` —
`messageToTransferContext` no longer takes `routerAddressesByChainMap`.
- `src/features/wallet/SideBarMenu.tsx` — call sites updated; the
`routerAddressesByChainMap` prop drilled into `TransferSummary` is
removed (the sub-component no longer needs it).
- `src/features/transfer/TransferTokenForm.tsx` — recipient validation
switches from `obj?.[addr]` to `set.has(addr)`.
- `src/features/store.ts`:
- `RouterAddressInfo` interface deleted (was just `{ wireDecimals:
number }`).
- `routerAddressesByChainMap` collapses to `Record<ChainName,
Set<string>>` — remaining consumers only need membership checks
(recipient validation) and key iteration (warp-route filter for message
history).
- `getRouterAddressesByChain` drops the `wireDecimalsMap` param and
returns the new shape.
- `src/features/warpCore/warpCoreConfig.ts` — `buildWireDecimalsMap` and
`WireDecimalsMap` deleted; `assembleWarpCoreConfig` no longer returns a
wireDecimalsMap.
- Tests updated.

### Why `wireDecimals` doesn't reflect on-chain reality (verified)

- **EVM `TokenRouter`** applies `messageAmount = localAmount *
scaleNumerator / scaleDenominator`, with the constructor enforcing
`scale > 0` — defaulting to `{1, 1}` (identity) when unset.
- **SVM `HyperlaneToken`** stores `decimals` and `remote_decimals` and
applies `convert_decimals(amount, decimals, remote_decimals)` — identity
when both are equal (the SVM equivalent of `scale: {1, 1}`).

There is no implicit "normalize to max(decimals) of route" anywhere in
the contracts. `wireDecimals = Math.max(decimals)` was a heuristic that
only ever produced the right number when the origin chain happened to be
the max-decimal chain in the route. The SDK's transfer-side helper
(`messageAmountFromLocal`) already defaults `scale: undefined → {1, 1}`,
so this PR aligns the display path with the transfer path.

## Test plan

- [x] `pnpm run typecheck` — clean
- [x] `pnpm run lint` — 3 pre-existing warnings in untouched files, 0
errors
- [x] `pnpm run format`
- [x] `pnpm exec vitest run src/features/transfer/scaleUtils.test.ts
src/features/messages/useMergedTransferHistory.test.ts
src/features/routerAddresses.test.ts` — 15/15 pass
- [ ] Smoke-test in dev: SVM → Tron USDT message in the sidebar
TransactionHistory should show the correct amount (after a fresh page
load that bypasses localStorage cache)
- [ ] Recipient validation still rejects warp-route addresses
(TransferTokenForm)
- [ ] Message history filtering still picks up local transfers
(SideBarMenu warpRouteAddresses)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Summary

- Adds attestation fetching from the Nexus UI for warp routes with a
`PredicateRouterWrapper` configured
- Server-side proxy (`/api/predicate/attestation`) keeps
`PREDICATE_API_KEY` off the client and prevents SSRF via HTTPS
enforcement and domain allowlist
- Attestation is fetched before fee estimation and transfer execution;
errors surface as user-facing toasts rather than silent fallbacks
- Transfer status tracks a `FetchingAttestation` stage so users see
progress

## How it works

1. On fee estimation and transfer, `fetchPredicateAttestation` calls
`warpCore.isPredicateSupported(token, destination)` to detect predicate
routes on-chain (traverses the hook tree for a `PredicateRouterWrapper`)
2. If required, a temp transaction is built to obtain calldata, which is
posted to the Predicate API via the Next.js proxy to get an attestation
3. The attestation is passed to `getTransferRemoteTxs` /
`estimateTransferRemoteFees`, which routes through
`transferRemoteWithAttestation` on the wrapper

## Configuration

```
PREDICATE_API_KEY=your_predicate_api_key_here       # server-side only
PREDICATE_API_URL=https://api.predicate.io/v2/attestation  # optional override
```

## Notes

- Draft: depends on the SDK predicate implementation being merged
(`warpCore.isPredicateSupported` is guarded with a typeof check for
older SDKs)
- Non-predicate routes are unaffected — `isPredicateSupported` returns
`false` and the existing flow runs unchanged

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: pbio <10051819+paulbalaji@users.noreply.github.com>
Fixes the main input field to not change the values on scrolling anymore
(often happened to me when scrolling down) and disallowing negative
values
…1086)

## Summary

Mirrors the existing `chainMetadata` flow for chain contract addresses,
with two related upsides:

1. **Single source of truth** — `chainAddresses` is loaded once at warp
context init and exposed via the Zustand store. Consumers read it
synchronously instead of awaiting `registry.getAddresses()`.
2. **Filesystem override pattern** — adds
`src/consts/chainAddresses.yaml` and `chainAddresses.ts` parallel to
`chains.yaml` / `chains.ts`. Useful for local dev / forks that want to
extend the registry without patching the store.

While restructuring, also lazy-loads the published `chainAddresses` and
`chainMetadata` constants from `@hyperlane-xyz/registry` so they're shed
from the initial bundle.

## Changes

### Address resolution mirrors metadata
- `src/features/chains/addresses.ts` — new helper
`assembleChainAddresses(chainsInTokens, registry)`. Spreads
`{...chainAddressesYaml, ...chainAddressesTS}`, validates with
`ChainAddressesSchema`, fetches from registry (or falls back to the
published constant), filters to chains referenced by warp routes, and
merges filesystem on top of registry per key.
- `src/features/store.ts` — adds `chainAddresses:
ChainMap<ChainAddresses>` to `WarpContext` / `AppState`, populated
alongside `chainMetadata` via `Promise.all` in `initWarpContext`.
- `src/consts/chainAddresses.yaml` + `src/consts/chainAddresses.ts` —
empty templates (commented examples).

### Existing consumers migrated to the store
- `src/features/balances/evm.ts` — `fetchChainBalances` and
`getBatchAddress` now accept `ChainMap<ChainAddresses>` as a parameter.
- `src/features/balances/hooks.ts` — reads `chainAddresses` from the
store and passes to `fetchChainBalances`.

### Bundle: lazy-load the published registry constants
- The published `chainAddresses` (~420 KB raw / ~80 KB gz) and
`chainMetadata` (~384 KB raw / ~80 KB gz) constants from
`@hyperlane-xyz/registry` are no longer statically imported. They're
resolved via dynamic `import('@hyperlane-xyz/registry')` only on:
- registry fetch failure in `assembleChainMetadata` /
`assembleChainAddresses`
- `listRegistryContent` failure in `initWarpContext` (PartialRegistry
fallback path)
- the no-`NEXT_PUBLIC_REGISTRY_URL` branch in `assembleChainMetadata`
(rare path used when no custom registry is configured)
- Webpack/Turbopack emits one shared async chunk for the registry
package; both lazy imports dedupe.

## Side effects worth flagging

- **Cold-start regression for deployments without
`NEXT_PUBLIC_REGISTRY_URL`**: bounded by one chunk fetch on first load
(~100–300ms), then cached. Production deployments that set the env var
only hit the lazy paths on registry-failure (already an error path).
- API of `assembleChainMetadata` / `getBatchAddress` /
`fetchChainBalances` changed (additive param). Internal only.

## Verification

- `pnpm format`, `pnpm lint`, `pnpm typecheck` clean.
- `pnpm test` — 22 files, 231 tests pass.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Implements the relay api and calls it only if the message originates
from a cctp v2 route. The new env variable NEXT_PUBLIC_RELAY_API_URL has
been already added to vercel
## Summary

- Integrate offchain fee quoting service from
hyperlane-xyz/hyperlane-monorepo#8404
- Add Next.js API route proxy (`/api/quote`) to keep
`FEE_QUOTING_API_KEY` server-side
- Add `useQuotedCalls` hook for offchain fee quoting via `QuotedCalls`
contract
- Thread `QuotedCallsParams` from fee display through to
`warpCore.getTransferRemoteTxs({ quotedCalls })`
- Falls back to existing onchain fee estimation when not configured or
for non-EVM chains

## Test plan

- [ ] Set `NEXT_PUBLIC_FEE_QUOTING_URL` and `FEE_QUOTING_API_KEY`,
verify offchain quotes fetched
- [ ] Verify QuotedCalls.execute() tx sent instead of direct
transferRemote
- [ ] Without env vars: verify existing onchain flow unchanged
- [ ] Non-EVM chains fall back to onchain quoting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Xaroz <jasonguo2013jg@gmail.com>
Reenable phantom and backpack adapter in solana context so there is a
suggestion to download those adapters when they are not installed
## Summary

Fixes route availability labeling in the token picker.

When selecting an origin token, the picker now treats a token as
available if it can route to any listed destination, because origin
selection can auto-switch the destination. Destination selection remains
strict against the current origin.

## Root Cause

The picker reused strict current-pair route checking for both selection
modes. That made routable tokens like Fluent BLEND/USDnr appear as
"Route unavailable" when the current default destination was Base USDC,
even though selecting those origin tokens can move the user onto a valid
route.

## Validation

- `pnpm vitest src/features/tokens/utils.test.ts --run`
- `pnpm typecheck`
- `pnpm lint` (passes with existing no-console warnings outside this
change)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes the token picker's route-availability computation and React
effect dependencies, which can affect which tokens appear
selectable/disabled and how lists are sorted; main risk is UI logic
regressions or stale route state.
> 
> **Overview**
> Fixes token picker route availability so **origin selection** marks a
token routable if it can reach *any* listed destination (since the
destination may auto-switch), while **destination selection** remains
strict to the current origin.
> 
> This introduces `checkTokenPickerHasRoute`, `checkTokenPairHasRoute`,
and `getDefaultTokens` in `utils.ts`, updates `TokenList` to maintain
separate strict-vs-picker route maps (with a masked dependency to avoid
unnecessary recomputation in origin mode), and adjusts the
route-unavailable tooltip copy/layout. Adds targeted unit tests covering
the new routability semantics and default-token gating.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
c01e2a8. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/ci.yml
#	.prettierignore
#	next-env.d.ts
#	next.config.js
#	package.json
#	pnpm-lock.yaml
#	public/android-chrome-192x192.png
#	public/android-chrome-512x512.png
#	public/apple-touch-icon.png
#	public/favicon-16x16.png
#	public/favicon-32x32.png
#	public/favicon.png
#	public/logo.png
#	public/mstile-150x150.png
#	src/components/buttons/ConnectAwareSubmitButton.tsx
#	src/components/icons/TokenIcon.tsx
#	src/components/layout/AppLayout.tsx
#	src/components/nav/Footer.tsx
#	src/components/nav/Header.tsx
#	src/components/tip/TipCard.tsx
#	src/consts/app.ts
#	src/consts/chains.ts
#	src/consts/config.ts
#	src/consts/links.ts
#	src/consts/warpRouteWhitelist.test.ts
#	src/consts/warpRouteWhitelist.ts
#	src/features/analytics/types.ts
#	src/features/analytics/useWalletConnectionTracking.tsx
#	src/features/analytics/utils.ts
#	src/features/chains/ChainSelectField.tsx
#	src/features/chains/metadata.ts
#	src/features/chains/utils.ts
#	src/features/limits/utils.test.ts
#	src/features/limits/utils.ts
#	src/features/store.ts
#	src/features/tokens/TokenListModal.tsx
#	src/features/tokens/TokenSelectField.tsx
#	src/features/tokens/hooks.ts
#	src/features/tokens/types.ts
#	src/features/tokens/useTokenPrice.tsx
#	src/features/tokens/utils.test.ts
#	src/features/tokens/utils.ts
#	src/features/transfer/FeeSectionButton.tsx
#	src/features/transfer/TransferFeeModal.tsx
#	src/features/transfer/TransferTokenForm.tsx
#	src/features/transfer/fees.test.ts
#	src/features/transfer/fees.ts
#	src/features/transfer/maxAmount.ts
#	src/features/transfer/useFeeQuotes.ts
#	src/features/transfer/useTokenTransfer.ts
#	src/features/transfer/utils.ts
#	src/features/wallet/WalletConnectionWarning.tsx
#	src/features/wallet/context/EvmWalletContext.tsx
#	src/features/wallet/context/RadixWalletContext.tsx
#	src/features/wallet/context/StarknetWalletContext.tsx
#	src/features/warpCore/warpCoreConfig.ts
#	src/images/logos/app-logo.svg
#	src/images/logos/app-name.svg
#	src/pages/_app.tsx
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.