feat(evm): add revm support on explore surfaces#870
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
🚅 Deployed to the app-pr-870 environment in chaotic-art-preview
|
|
Important Review skippedToo many files! This PR contains 164 files, which is 14 over the limit of 150. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (164)
You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis refactoring transitions the application from a prefix-based to a chain-based architecture. It unifies chain and VM type definitions, removes prefix-to-chain mapping utilities, expands Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Deploying app with
|
| Latest commit: |
2ec562b
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://d330f79b.app-bzd.pages.dev |
| Branch Preview URL: | https://feat-explore-revm-chain-supp.app-bzd.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (3)
app/composables/useAmount.ts (1)
1-1: Use the repo~/alias here.The new type import reintroduces
@/...in app code. Please switch this to~/typesso the refactor stays consistent with the repo import convention. As per coding guidelines, "Use~/alias for app imports".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/composables/useAmount.ts` at line 1, Update the type import at the top of useAmount.ts to use the repo alias ~/ instead of `@/` so the refactor stays consistent: change the import statement that references Chain from '@/types' to '~/types' (preserve the "import type" form and the symbol Chain).app/utils/format/balance.ts (1)
1-3: Use~/imports in app utilities.These new imports reintroduce
@/...paths in the app layer. Please keep them on~/...to match the repo rule. As per coding guidelines, "Use~/alias for app imports".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/utils/format/balance.ts` around lines 1 - 3, The import lines in balance.ts reintroduce '@/' app-layer paths; change the app imports to use the '~/` alias instead: replace import of the Chain type (import type { Chain } from '@/types') and the chainToPrecisionMap import (from '@/utils/chain') to use '~/types' and '~/utils/chain' respectively, while leaving third-party imports like { formatBalance } from 'dedot/utils' unchanged so the module resolution follows the repo rule.app/composables/useChain.ts (1)
1-2: Keep app imports on~/....These new imports switch the composable back to
@/.... Please use~/typesand~/utils/chainhere to match the repo convention. As per coding guidelines, "Use~/alias for app imports".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/composables/useChain.ts` around lines 1 - 2, The import paths in useChain.ts use the wrong alias; update the two imports that reference '@/types' and '@/utils/chain' to use the app alias '~/types' and '~/utils/chain' respectively so they follow the repo convention; locate the import statements at the top of the useChain composable and replace the '@/' prefixes with '~/'.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/utils/account.ts`:
- Around line 5-16: The rename broke existing callers that pass prefix instead
of chain; to fix, make formatAddress backward-compatible by accepting an
optional prefix param and using it when chain is undefined (e.g. change
signature to accept { address, chain?, prefix? } and inside do const
effectiveChain = chain ?? prefix), then use effectiveChain with isEvmChain/e
ncoder (encodeAddress(..., chainSpec[effectiveChain].ss58Format)); this
preserves existing call sites (those still passing prefix) while allowing the
new chain-based callers to work and avoids needing immediate updates to call
sites.
In `@app/utils/chain.ts`:
- Around line 13-69: The shared chainSpec now includes EVM chains which breaks
existing narrowing checks (e.g., `chain in chainSpec`) expecting
AssetHub/substrate-only values and makes route handling in
app/pages/[chain]/collection/[collection_id].vue unsound; split the
substrate-only allowlist from the broader metadata and update guards
accordingly: create a new substrate-only map (e.g., substrateChainSpec or
assetHubSpec) containing only AssetHubChain entries and keep the full chainSpec
for all chains, and replace uses that must restrict to AssetHubChain (such as
the runtime guard in collection page) to check against substrateChainSpec or use
a dedicated type/guard function (e.g., isSupportedChain using the SupportedChain
type from ~/plugins/sdk.client) so route params are narrowed correctly. Ensure
all references that relied on `chainSpec` for substrate-only checks are updated
to use the new substrate-only map or the new guard.
In `@app/utils/format/balance.ts`:
- Around line 33-37: The guard call is using a non-existent function
isEvmChainAccount; update the check in the roundBy string branch to use the
exported isEvmChain() guard instead (so the string `chain` is validated as an
EVM chain) and keep the existing logic that sets roundByChain and assigns round
from chainToPrecisionMap; import isEvmChain from app/utils/chain.ts if not
already imported and replace all uses of isEvmChainAccount with isEvmChain in
this module.
---
Nitpick comments:
In `@app/composables/useAmount.ts`:
- Line 1: Update the type import at the top of useAmount.ts to use the repo
alias ~/ instead of `@/` so the refactor stays consistent: change the import
statement that references Chain from '@/types' to '~/types' (preserve the
"import type" form and the symbol Chain).
In `@app/composables/useChain.ts`:
- Around line 1-2: The import paths in useChain.ts use the wrong alias; update
the two imports that reference '@/types' and '@/utils/chain' to use the app
alias '~/types' and '~/utils/chain' respectively so they follow the repo
convention; locate the import statements at the top of the useChain composable
and replace the '@/' prefixes with '~/'.
In `@app/utils/format/balance.ts`:
- Around line 1-3: The import lines in balance.ts reintroduce '@/' app-layer
paths; change the app imports to use the '~/` alias instead: replace import of
the Chain type (import type { Chain } from '@/types') and the
chainToPrecisionMap import (from '@/utils/chain') to use '~/types' and
'~/utils/chain' respectively, while leaving third-party imports like {
formatBalance } from 'dedot/utils' unchanged so the module resolution follows
the repo rule.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: ef149ba5-a583-4415-876d-13e6e4ced17e
📒 Files selected for processing (11)
app/composables/useAmount.tsapp/composables/useChain.tsapp/composables/useVm.tsapp/pages/[chain]/collection/[collection_id].vueapp/stores/account.tsapp/types/chain.tsapp/utils/account.tsapp/utils/chain.tsapp/utils/format/balance.tsapp/utils/mappers.tsapp/utils/network.ts
💤 Files with no reviewable changes (3)
- app/utils/network.ts
- app/composables/useVm.ts
- app/utils/mappers.ts
|
@vikiival can you trigger copilot |
There was a problem hiding this comment.
Pull request overview
Adds explicit EVM (revm/Revive) chain “surfaces” alongside existing Substrate/AssetHub surfaces, while keeping reads/writes mapped through a central chain configuration so routes, wallet behavior, and feature boundaries remain explicit.
Changes:
- Introduces a unified chain type system (
SubstrateChain/EvmChain/Chain) and a centralchainConfigregistry to drive routing, permissions, and source-chain/indexer mappings. - Updates Apollo GraphQL routing to resolve the correct GraphQL endpoint via
chainConfig(throughindexerChain) rather than treating all route slugs as GraphQL endpoints. - Refactors many components/composables from “prefix”-based chain handling to “chain”-based handling, and removes deprecated prefix/vm utility modules.
Reviewed changes
Copilot reviewed 162 out of 162 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| server/utils/sitemap/graphql.ts | Updates sitemap chain typing to new supported chain type. |
| app/utils/viem.ts | Adds typed EVM chain registry + explicit viem client selection. |
| app/utils/swap.ts | Forces AssetHub chain for swap creation where required. |
| app/utils/prefix.ts | Removes deprecated prefix utilities. |
| app/utils/network.ts | Removes deprecated vm/prefix helpers. |
| app/utils/mappers.ts | Removes deprecated prefix↔chain mappers. |
| app/utils/format/balance.ts | Switches rounding logic to new chain types. |
| app/utils/format/address.ts | Renames params from prefix→chain for Subscan URL helpers. |
| app/utils/constants.ts | Adds ahpas GraphQL URL. |
| app/utils/chain.ts | Introduces chainConfig, chain guards, endpoint mapping, permissions. |
| app/utils/api/substrate.ts | Uses chainConfig + new Substrate chain typing. |
| app/utils/api/substrate.nft-pallets.ts | Renames API params prefix→chain; uses new types. |
| app/utils/account.ts | Adds EVM-aware address formatting + ss58 conversion by chain. |
| app/types/genart.ts | Updates AssetHub chain type import location. |
| app/types/chain.ts | Replaces old Chains/Prefix system with Substrate/EVM chain unions. |
| app/stores/rpcProvider.ts | Switches store typing to Substrate chain keys. |
| app/stores/atomicSwaps.ts | Updates AssetHub chain type import location. |
| app/stores/account.ts | Consolidates chain/vm source via useChain(). |
| app/services/oda.ts | Expands ODA chain type to include EVM slugs. |
| app/services/dyndata.ts | Requires explicit AssetHub chain param for id generation. |
| app/plugins/sdk.client.ts | Renames supported chain type to SupportedPapiChain; removes unsupported fallback. |
| app/plugins/rpcAutoSwitch.client.ts | Restricts RPC auto-switch logic to Substrate chains. |
| app/plugins/apollo.client.ts | Routes GraphQL endpoint via getGraphqlEndpointChain() and validates endpoints. |
| app/pages/[chain]/u/[id].vue | Validates route via isAssetHubChain; updates ss58 helper name. |
| app/pages/[chain]/transfer/index.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/swap/index.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/swap/collection/[id]/index.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/swap/[id]/review.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/swap/[id]/offer.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/swap/[id]/index.vue | Adds route validation for AssetHub chains only. |
| app/pages/[chain]/studio/index.vue | Renames prop prefix→chain when passing to grid components. |
| app/pages/[chain]/studio/[collection_id]/nftmint.client.vue | Uses route param chain directly (typed) for mint form binding. |
| app/pages/[chain]/studio/[collection_id]/massmint.vue | Uses route param chain directly (typed) for massmint binding. |
| app/pages/[chain]/studio/[collection_id]/[tab].vue | Uses route param chain directly (typed) for studio preview. |
| app/pages/[chain]/gallery/[token].vue | Enables ODA+EVM chain reads, interaction gating, and route validation. |
| app/pages/[chain]/explore/nfts.vue | Renames prop prefix→chain passed to NftsGrid. |
| app/pages/[chain]/explore/collectibles.vue | Renames prop prefix→chain passed to CollectionsGrid. |
| app/pages/[chain]/drops/index.vue | Adds AssetHub-only route validation. |
| app/pages/[chain]/drops/[slug].vue | Adds AssetHub-only route validation; uses typed chain. |
| app/pages/[chain]/collection/[collection_id].vue | Enables ODA+EVM chain reads, interaction gating, endpoint mapping. |
| app/pages/[chain]/artists/index.vue | Adds AssetHub-only route validation. |
| app/pages/[chain]/airdrop/select.vue | Adds AssetHub-only route validation; updates ss58 helper usage. |
| app/pages/[chain]/airdrop/index.vue | Adds AssetHub-only route validation. |
| app/middleware/swap.ts | Updates AssetHub chain type import location. |
| app/layouts/studio-collection.vue | Uses route param chain for studio navigation paths. |
| app/error.vue | Removes dead commented prefix-based link code. |
| app/composables/useVm.ts | Removes deprecated VM composable. |
| app/composables/useVerifyAccount.ts | Reads vm from useChain() instead of removed useVm(). |
| app/composables/useTransactionModal.ts | Renames transaction result field prefix→chain in types. |
| app/composables/useTrades.ts | Requires explicit AssetHub chain param for GraphQL context endpoint. |
| app/composables/useToken.ts | Accepts ODA chain; resolves GraphQL endpoint + substrate source chain for on-chain reads. |
| app/composables/useSubscriptionGraphql.ts | Requires chain param and guards missing endpoint. |
| app/composables/useRelayBlock.ts | Uses AssetHub relay source chain mapping via assetHubChain. |
| app/composables/useQueryBalance.ts | Queries balances/deposits against substrate source chain for EVM surfaces. |
| app/composables/usePrefix.ts | Removes deprecated prefix composable. |
| app/composables/useOwnedCollections.ts | Uses resolved GraphQL endpoint chain (indexer chain) for queries. |
| app/composables/useOdaCollection.ts | Guards ODA calls behind isOdaChain(). |
| app/composables/useOda.ts | Updates AssetHub chain type import location. |
| app/composables/useInfiniteQuery.ts | Resolves GraphQL endpoint chain and handles “no endpoint” case. |
| app/composables/useInfiniteNfts.ts | Uses deny-list from new chain util; updates AssetHub chain type import. |
| app/composables/useInfiniteCollections.ts | Uses deny-list from new chain util; updates AssetHub chain type import. |
| app/composables/useIcon.ts | Switches icon selector input from prefix types to new Chain type. |
| app/composables/useFeatureFlags.ts | Removes old testnet flag logic. |
| app/composables/useDropMinimumFunds.ts | Resolves deposit source via substrate source chain. |
| app/composables/useDeposit.ts | Supports Chain union; returns zeros for non-substrate/non-assethub contexts. |
| app/composables/useCurrentBlock.ts | Subscribes using substrate source chain for EVM surfaces. |
| app/composables/useCollectionAttributes.ts | Uses resolved GraphQL endpoint chain for queries. |
| app/composables/useChain.ts | Centralizes chain-derived fields from chainConfig (+ permissions + assetHub mapping). |
| app/composables/useCartActions.ts | Uses passed chain instead of always using currentChain for swaps. |
| app/composables/useCart.ts | Derives decimals via chainConfig and uses chain from route/store. |
| app/composables/useBlockTime.ts | Simplifies block time to parachain constant. |
| app/composables/useBalances.ts | Adds EVM balance support via viem and chainConfig metadata. |
| app/composables/useAtomicSwapAction.ts | Updates AssetHub chain type import location. |
| app/composables/useAmount.ts | Updates rounding input typing from Prefix→Chain. |
| app/composables/onchain/utils.ts | Updates AssetHub chain type import location. |
| app/composables/onchain/useNftPallets.ts | Renames result fields prefix→chain; uses substrateChainConfig for ss58. |
| app/composables/onchain/useNextItemId.ts | Updates AssetHub chain type import location. |
| app/composables/onchain/useBalancePallets.ts | Renames result field prefix→chain. |
| app/composables/massmint/useMassMintForm.ts | Updates AssetHub chain type import location. |
| app/composables/massmint/useMassMint.ts | Switches decimals lookup to chainConfig; renames prefix→chain in result. |
| app/composables/drop/useDropMint.ts | Uses currentChain instead of removed prefix composable. |
| app/composables/drop/massmint/useDropMassmint.ts | Casts currentChain to AssetHub chain for next id calls. |
| app/composables/create/useNftForm.ts | Switches chain metadata lookup to chainConfig. |
| app/composables/create/useCollectionForm.ts | Switches chain metadata lookup to chainConfig. |
| app/composables/create/useCollectionEditForm.ts | Updates AssetHub chain type import location. |
| app/components/wallet/connect/stage/account/WalletAccountListItem.vue | Selects EVM balance chain by new EVM slugs; removes feature flag. |
| app/components/wallet/asset/WalletAssetFooter.vue | Hides Transfer/Swap actions based on canInteract(chain). |
| app/components/wallet/asset/AssetBalances.client.vue | Uses EVM slugs for PolkaVM balances; updates substrate typing. |
| app/components/TransferModal.vue | Uses getSs58AddressByChain; ensures transfer uses AssetHub chain. |
| app/components/transfer/Transfer.client.vue | Uses currentChain instead of removed prefix composable. |
| app/components/transfer/SuccessfulTransfer.vue | Uses result.chain for Subscan URL. |
| app/components/trade/types.ts | Updates AssetHub chain type import location. |
| app/components/trade/TradeActivityTable.client.vue | Passes explicit chain to trades query + subscriptions. |
| app/components/trade/overviewModal/utils.ts | Updates AssetHub chain type import location. |
| app/components/trade/overviewModal/TradeOverviewModal.vue | Uses AssetHub chain-typed currentChain for fetch/tx actions. |
| app/components/trade/overviewModal/TokenSearchInput.vue | Sets GraphQL context endpoint explicitly. |
| app/components/trade/makeOffer/MakeOfferModal.vue | Sets GraphQL context endpoint; uses chain-typed currentChain. |
| app/components/trade/makeOffer/CreateCollectionOfferButton.vue | Ensures highest-offer query is chain-scoped via GraphQL context. |
| app/components/trade/ActivityTable/RowItem.vue | Fetches ODA + on-chain metadata using AssetHub chain. |
| app/components/swap/SwapLanding.vue | Uses typed chain for swap creation + GraphQL context. |
| app/components/swap/review.vue | Uses typed chain when submitting swap transaction. |
| app/components/swap/GridList.vue | Renames prop prefix→chain passed to grid. |
| app/components/swap/CreateCollectionSwapButton.vue | Forces AssetHub chain for swap creation. |
| app/components/swap/collection/SwapGridList.vue | Uses typed chain for token cards. |
| app/components/studio/StudioCollectionTraitsEditSidebar.vue | Uses typed chain for on-chain metadata + attribute updates. |
| app/components/studio/StudioCollectionTraits.vue | Uses typed chain for bulk attribute updates. |
| app/components/shoppingCart/SuccessfulBuy.vue | Uses result.chain for share URLs and UI metadata. |
| app/components/shoppingCart/EmptyShoppingCart.vue | Uses currentChain instead of removed prefix composable. |
| app/components/shoppingCart/ConfirmPurchaseModal.client.vue | Updates AssetHub chain type import location. |
| app/components/settings/SettingsPage.vue | Restricts RPC settings to Substrate chains; uses chainConfig names. |
| app/components/profile/tabs/ProfileNftsList.vue | Renames grid prop prefix→chain; uses typed chain. |
| app/components/profile/tabs/ProfileCollectionsList.vue | Renames grid prop prefix→chain. |
| app/components/profile/tabs/profileActivity/ProfileActivityTable.vue | Uses currentChain instead of removed prefix composable. |
| app/components/profile/tabs/profileActivity/ProfileActivity.vue | Adds explicit GraphQL endpoint context. |
| app/components/profile/ProfileDetail.vue | Refactors tab labels via counts map; uses typed chain for swap creation. |
| app/components/profile/follow/UserRow.vue | Uses getSs58AddressByChain. |
| app/components/OgImage/Frame.vue | Accepts chain slug for network name resolution via chainConfig. |
| app/components/Navbar.vue | Uses currentChain instead of removed prefix composable for nav routes. |
| app/components/mintCard/modal/MintCardSuccessModal.vue | Renames prop prefix→chain. |
| app/components/mintCard/constants.ts | Renames CHAOTIC_CARD_PREFIX→CHAOTIC_CARD_CHAIN. |
| app/components/mintCard/CardPage.client.vue | Updates mint card flow to new chain/prefix helpers. |
| app/components/massmint/MassMint.vue | Updates AssetHub chain type import location. |
| app/components/listingCart/SuccessfulListing.vue | Uses result.chain for share URLs and UI metadata. |
| app/components/listingCart/ListingCartModal.client.vue | Uses typed chain for listing tx params; reduces repeated param builds. |
| app/components/landing/topCollections/utils/useTopCollections.ts | Adds explicit chain endpoint for top collections queries. |
| app/components/landing/topCollections/LandingTopCollections.vue | Passes chain to top collections queries; updates explore link. |
| app/components/landing/drop/LandingSubDropCard.vue | Switches token symbol lookup to chainConfig. |
| app/components/landing/drop/LandingHorizontalDropCard.vue | Switches token symbol lookup to chainConfig. |
| app/components/gallery/TokenTrades.client.vue | Passes explicit chain to trades query + subscriptions. |
| app/components/gallery/TokenActivity.vue | Switches token symbol lookup to chainConfig. |
| app/components/gallery/GalleryItemActions.vue | Updates AssetHub chain type import location. |
| app/components/gallery/GalleryDetails.vue | Accepts ODA chain; derives action chain via getAssetHubChain. |
| app/components/gallery/GalleryAdditionalContent.client.vue | Accepts ODA chain; derives AssetHub chain for on-chain reads; gates tabs. |
| app/components/explore/NftsGrid.vue | Accepts ODA chain; maps to AssetHub endpoint via getAssetHubChain. |
| app/components/explore/CollectionsGrid.vue | Renames prop prefix→chain; passes endpoint accordingly. |
| app/components/drop/types.ts | Tightens minted NFT chain to AssetHubChain. |
| app/components/drop/ProfileCuratedDrops.vue | Uses currentChain instead of removed prefix composable. |
| app/components/drop/modal/shared/SuccessfulDrop.vue | Uses result chain for share URLs and UI metadata. |
| app/components/drop/GenerativeDrop.vue | Uses typed chain for child props and routing. |
| app/components/drop/DropItemsGrid.vue | Passes typed chain to NftsGrid. |
| app/components/drop/DropCollectedBy.vue | Updates AssetHub chain type import location. |
| app/components/drop/DropCard.vue | Uses typed chain for routing + props. |
| app/components/DestroyCollectionModal.vue | Updates AssetHub chain type import location. |
| app/components/create/NftMintForm.vue | Updates AssetHub chain type import location. |
| app/components/create/modal/SuccessNft.vue | Updates share URLs and chain field to result.chain. |
| app/components/create/modal/SuccessCollection.vue | Updates share URLs and chain field to result.chain. |
| app/components/common/successfulModal/TransactionSection.vue | Makes chain required and uses it for Subscan links. |
| app/components/common/successfulModal/SuccessfulModalBody.vue | Makes chain required and updates type import. |
| app/components/common/SearchBar.vue | Uses resolved GraphQL endpoint chain; updates ss58 helper usage. |
| app/components/common/RpcProviderSwitcher.vue | Restricts provider switching to Substrate chains; uses chainConfig names. |
| app/components/common/ParaportButton.client.vue | Updates provider endpoints typing to Substrate chain keys. |
| app/components/common/format/Money.vue | Switches token symbol lookup to chainConfig. |
| app/components/common/ChainSwitcher.vue | Switches labels to chainConfig; updates v-model binding. |
| app/components/common/card/TokenCard.client.vue | Accepts ODA chain; maps to action chain and gates interactions by permissions. |
| app/components/common/card/TokenBasicCard.vue | Updates AssetHub chain type import location. |
| app/components/common/card/CollectionCard.client.vue | Renames prop prefix→chain; updates routing and ODA fetch chain. |
| app/components/common/button/FollowButton.client.vue | Updates ss58 helper to chain-aware variant. |
| app/components/collection/CollectionHeader.vue | Accepts ODA chain; derives AssetHub chain for on-chain fallback + Subscan. |
| app/components/BurnModal.vue | Uses typed chain for burn tx submission/fee estimation. |
| app/components/airdrop/utils.ts | Updates AssetHub chain type import location. |
| app/components/airdrop/AirdropNft.vue | Uses typed chain for airdrop submission and ss58 format from useChain(). |
| app/components/AddressChecker.vue | Updates chain typing + uses chain-aware address formatting helpers. |
Comments suppressed due to low confidence (1)
app/pages/[chain]/explore/nfts.vue:11
- This page still validates
chainwithisAssetHubChain(), which rejects the new EVM explore surfaces (polkadot,kusama,polkadot-testnet). Given thatNftsGridnow accepts an ODA/EVM-awarechainprop, consider updating validation (and thechainparam typing) to allow EVM chains too (e.g.isChain(chain) && isOdaChain(chain)), so/polkadot/explore/nftsroutes aren’t blocked bydefinePageMeta.validate.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@vikiival can you have a look at the pr, for the time being only paseo indexer (hosted by me) has check:
and collection page and gallery item page let me know if you want any changes |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 164 out of 164 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 164 out of 164 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Context
AssetHub and EVM/Revive chains are kept separate app surfaces, even when they map to the same underlying Hub chain.
ahp and polkadot may share infrastructure, but they are not the same client surface. In the app they differ in wallet/account model, address format, RPC/tooling, allowed actions, and URL semantics. Collapsing them into one Asset Hub slug would make the code more ambiguous, not simpler.
The model is:
This keeps routes, wallet behavior, and feature boundaries honest, while avoiding hidden “this is really Asset Hub but behaves like EVM” logic throughout the app.
Summary by CodeRabbit
New Features
Improvements
Refactor