Skip to content

feat(evm): add revm support on explore surfaces#870

Open
hassnian wants to merge 12 commits into
mainfrom
feat/explore-revm-chain-support
Open

feat(evm): add revm support on explore surfaces#870
hassnian wants to merge 12 commits into
mainfrom
feat/explore-revm-chain-support

Conversation

@hassnian
Copy link
Copy Markdown
Contributor

@hassnian hassnian commented Mar 26, 2026

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:

  • AssetHubChain = native Substrate / NFT pallet surface
  • EvmChain = contract / EVM-compatible surface
  • shared reads still map explicitly through chainConfig via indexerChain, substrateSourceChain, vm, and permissions.interact

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.

CleanShot 2026-03-31 at 14 16 05@2x CleanShot 2026-03-31 at 14 15 03@2x CleanShot 2026-03-31 at 14 15 48@2x

Summary by CodeRabbit

  • New Features

    • Added support for EVM chains (Polkadot, Kusama, Polkadot-testnet) alongside Substrate chains.
  • Improvements

    • Enhanced address formatting and validation to properly handle both Substrate and EVM chain addresses.
  • Refactor

    • Reorganized internal chain type system and removed deprecated utility functions.

@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
koda Ready Ready Preview, Comment Apr 30, 2026 4:38am

@railway-app
Copy link
Copy Markdown

railway-app Bot commented Mar 26, 2026

🚅 Deployed to the app-pr-870 environment in chaotic-art-preview

Service Status Web Updated (UTC)
app 😴 Sleeping (View Logs) Web May 7, 2026 at 1:06 pm

@hassnian hassnian changed the title feat(evm): init revm support on explore surfaces feat(evm):add revm support on explore surfaces Mar 26, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 26, 2026

Important

Review skipped

Too many files!

This PR contains 164 files, which is 14 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 72959280-c7d8-4a35-9ada-7d6e5b36e322

📥 Commits

Reviewing files that changed from the base of the PR and between c16bc4f and 2ec562b.

📒 Files selected for processing (164)
  • app/components/AddressChecker.vue
  • app/components/BurnModal.vue
  • app/components/DestroyCollectionModal.vue
  • app/components/Navbar.vue
  • app/components/OgImage/Frame.vue
  • app/components/TransferModal.vue
  • app/components/airdrop/AirdropNft.vue
  • app/components/airdrop/utils.ts
  • app/components/collection/CollectionHeader.vue
  • app/components/common/ChainSwitcher.vue
  • app/components/common/ParaportButton.client.vue
  • app/components/common/RpcProviderSwitcher.vue
  • app/components/common/SearchBar.vue
  • app/components/common/button/FollowButton.client.vue
  • app/components/common/card/CollectionCard.client.vue
  • app/components/common/card/TokenBasicCard.vue
  • app/components/common/card/TokenCard.client.vue
  • app/components/common/format/Money.vue
  • app/components/common/successfulModal/SuccessfulModalBody.vue
  • app/components/common/successfulModal/TransactionSection.vue
  • app/components/create/NftMintForm.vue
  • app/components/create/modal/SuccessCollection.vue
  • app/components/create/modal/SuccessNft.vue
  • app/components/drop/DropCard.vue
  • app/components/drop/DropCollectedBy.vue
  • app/components/drop/DropItemsGrid.vue
  • app/components/drop/GenerativeDrop.vue
  • app/components/drop/ProfileCuratedDrops.vue
  • app/components/drop/modal/shared/SuccessfulDrop.vue
  • app/components/drop/types.ts
  • app/components/explore/CollectionsGrid.vue
  • app/components/explore/NftsGrid.vue
  • app/components/gallery/GalleryAdditionalContent.client.vue
  • app/components/gallery/GalleryDetails.vue
  • app/components/gallery/GalleryItemActions.vue
  • app/components/gallery/TokenActivity.vue
  • app/components/gallery/TokenTrades.client.vue
  • app/components/landing/drop/LandingHorizontalDropCard.vue
  • app/components/landing/drop/LandingSubDropCard.vue
  • app/components/landing/topCollections/LandingTopCollections.vue
  • app/components/landing/topCollections/TopCollectionsCard.vue
  • app/components/landing/topCollections/utils/useTopCollections.ts
  • app/components/listingCart/ListingCartModal.client.vue
  • app/components/listingCart/SuccessfulListing.vue
  • app/components/massmint/MassMint.vue
  • app/components/mintCard/CardPage.client.vue
  • app/components/mintCard/constants.ts
  • app/components/mintCard/modal/MintCardSuccessModal.vue
  • app/components/profile/ProfileDetail.vue
  • app/components/profile/follow/UserRow.vue
  • app/components/profile/tabs/ProfileCollectionsList.vue
  • app/components/profile/tabs/ProfileNftsList.vue
  • app/components/profile/tabs/profileActivity/ProfileActivity.vue
  • app/components/profile/tabs/profileActivity/ProfileActivityTable.vue
  • app/components/settings/SettingsPage.vue
  • app/components/shoppingCart/ConfirmPurchaseModal.client.vue
  • app/components/shoppingCart/EmptyShoppingCart.vue
  • app/components/shoppingCart/SuccessfulBuy.vue
  • app/components/studio/StudioCollectionTraits.vue
  • app/components/studio/StudioCollectionTraitsEditSidebar.vue
  • app/components/swap/CreateCollectionSwapButton.vue
  • app/components/swap/GridList.vue
  • app/components/swap/SwapLanding.vue
  • app/components/swap/collection/SwapGridList.vue
  • app/components/swap/review.vue
  • app/components/trade/ActivityTable/RowItem.vue
  • app/components/trade/TradeActivityTable.client.vue
  • app/components/trade/makeOffer/CreateCollectionOfferButton.vue
  • app/components/trade/makeOffer/MakeOfferModal.vue
  • app/components/trade/overviewModal/TokenSearchInput.vue
  • app/components/trade/overviewModal/TradeOverviewModal.vue
  • app/components/trade/overviewModal/utils.ts
  • app/components/trade/types.ts
  • app/components/transfer/SuccessfulTransfer.vue
  • app/components/transfer/Transfer.client.vue
  • app/components/wallet/asset/AssetBalances.client.vue
  • app/components/wallet/asset/WalletAssetFooter.vue
  • app/components/wallet/connect/stage/account/WalletAccountListItem.vue
  • app/composables/create/useCollectionEditForm.ts
  • app/composables/create/useCollectionForm.ts
  • app/composables/create/useNftForm.ts
  • app/composables/drop/massmint/useDropMassmint.ts
  • app/composables/drop/useDropMint.ts
  • app/composables/massmint/useMassMint.ts
  • app/composables/massmint/useMassMintForm.ts
  • app/composables/onchain/useBalancePallets.ts
  • app/composables/onchain/useNextItemId.ts
  • app/composables/onchain/useNftPallets.ts
  • app/composables/onchain/utils.ts
  • app/composables/useAmount.ts
  • app/composables/useAtomicSwapAction.ts
  • app/composables/useBalances.ts
  • app/composables/useBlockTime.ts
  • app/composables/useCart.ts
  • app/composables/useCartActions.ts
  • app/composables/useChain.ts
  • app/composables/useCollectionAttributes.ts
  • app/composables/useCurrentBlock.ts
  • app/composables/useDeposit.ts
  • app/composables/useDropMinimumFunds.ts
  • app/composables/useFeatureFlags.ts
  • app/composables/useIcon.ts
  • app/composables/useInfiniteCollections.ts
  • app/composables/useInfiniteNfts.ts
  • app/composables/useInfiniteQuery.ts
  • app/composables/useOda.ts
  • app/composables/useOdaCollection.ts
  • app/composables/useOwnedCollections.ts
  • app/composables/usePrefix.ts
  • app/composables/useQueryBalance.ts
  • app/composables/useRelayBlock.ts
  • app/composables/useSubscriptionGraphql.ts
  • app/composables/useToken.ts
  • app/composables/useTrades.ts
  • app/composables/useTransactionModal.ts
  • app/composables/useVerifyAccount.ts
  • app/composables/useVm.ts
  • app/error.vue
  • app/layouts/studio-collection.vue
  • app/middleware/swap.ts
  • app/pages/[chain]/airdrop/index.vue
  • app/pages/[chain]/airdrop/select.vue
  • app/pages/[chain]/artists/index.vue
  • app/pages/[chain]/collection/[collection_id].vue
  • app/pages/[chain]/drops/[slug].vue
  • app/pages/[chain]/drops/index.vue
  • app/pages/[chain]/explore/collectibles.vue
  • app/pages/[chain]/explore/nfts.vue
  • app/pages/[chain]/gallery/[token].vue
  • app/pages/[chain]/studio/[collection_id]/[tab].vue
  • app/pages/[chain]/studio/[collection_id]/massmint.vue
  • app/pages/[chain]/studio/[collection_id]/nftmint.client.vue
  • app/pages/[chain]/studio/index.vue
  • app/pages/[chain]/swap/[id]/index.vue
  • app/pages/[chain]/swap/[id]/offer.vue
  • app/pages/[chain]/swap/[id]/review.vue
  • app/pages/[chain]/swap/collection/[id]/index.vue
  • app/pages/[chain]/swap/index.vue
  • app/pages/[chain]/transfer/index.vue
  • app/pages/[chain]/u/[id].vue
  • app/plugins/apollo.client.ts
  • app/plugins/rpcAutoSwitch.client.ts
  • app/plugins/sdk.client.ts
  • app/services/dyndata.ts
  • app/services/oda.ts
  • app/stores/account.ts
  • app/stores/atomicSwaps.ts
  • app/stores/rpcProvider.ts
  • app/types/chain.ts
  • app/types/genart.ts
  • app/utils/account.ts
  • app/utils/api/substrate.nft-pallets.ts
  • app/utils/api/substrate.ts
  • app/utils/chain.ts
  • app/utils/constants.ts
  • app/utils/format/address.ts
  • app/utils/format/balance.ts
  • app/utils/mappers.ts
  • app/utils/network.ts
  • app/utils/nft.ts
  • app/utils/prefix.ts
  • app/utils/swap.ts
  • app/utils/viem.ts
  • server/utils/sitemap/graphql.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This 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 chainSpec to support EVM chains with a VM discriminator field, and updates composables and utilities to accept and use the new Chain type throughout.

Changes

Cohort / File(s) Summary
Type System Refactoring
app/types/chain.ts, app/utils/chain.ts
Removed legacy Chains constant and mapping tables; introduced unified Chain type (SubstrateChain | EvmChain), ChainVm discriminator ('SUB' | 'EVM'), and expanded chainSpec to include all EVM chains with vm field. Added isEvmChain() type guard and chainToPrecisionMap.
Composable Updates
app/composables/useAmount.ts, app/composables/useChain.ts, app/composables/useVm.ts
Removed useVm() composable and its helpers; updated useAmount to accept Chain instead of Prefix for roundBy parameter; enhanced useChain() to compute and return new vm property from chainSpec.
Utility Function Updates
app/utils/account.ts, app/utils/format/balance.ts
Updated function signatures to accept Chain instead of Prefix/SupportedChain; added EVM chain detection in address formatting; refactored precision lookup to use chainToPrecisionMap.
Removed Utility Modules
app/utils/mappers.ts, app/utils/network.ts
Deleted prefix-to-chain bidirectional mapping functions and VM type-checking functions; functionality superseded by chain-based approach and isEvmChain() type guard.
Component and Store Updates
app/pages/[chain]/collection/[collection_id].vue, app/stores/account.ts
Updated chain validation to use isSupportedChain() instead of chainSpec lookup; consolidated vm source to single useChain() call instead of separate useVm().

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 Hops through types with glee,
Prefix maps now set us free!
Chain and VM, unified at last,
Old useVm ways are now past.

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title mentions 'add revm support' but the changes show a comprehensive refactoring of chain type system from Prefix to Chain, removal of useVm composable, and restructuring of chain utilities - not specifically adding revm support. Consider revising the title to reflect the actual scope: a refactoring of the chain type system and architecture to support both Substrate and EVM chains more explicitly.
Docstring Coverage ⚠️ Warning Docstring coverage is 9.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/explore-revm-chain-support

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

❤️ Share

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

@hassnian hassnian changed the title feat(evm):add revm support on explore surfaces feat(evm): add revm support on explore surfaces Mar 26, 2026
@hassnian hassnian marked this pull request as draft March 26, 2026 12:07
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Mar 26, 2026

Deploying app with  Cloudflare Pages  Cloudflare Pages

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

View logs

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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 ~/types so 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 ~/types and ~/utils/chain here 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

📥 Commits

Reviewing files that changed from the base of the PR and between c16bc4f and d66aa76.

📒 Files selected for processing (11)
  • app/composables/useAmount.ts
  • app/composables/useChain.ts
  • app/composables/useVm.ts
  • app/pages/[chain]/collection/[collection_id].vue
  • app/stores/account.ts
  • app/types/chain.ts
  • app/utils/account.ts
  • app/utils/chain.ts
  • app/utils/format/balance.ts
  • app/utils/mappers.ts
  • app/utils/network.ts
💤 Files with no reviewable changes (3)
  • app/utils/network.ts
  • app/composables/useVm.ts
  • app/utils/mappers.ts

Comment thread app/utils/account.ts Outdated
Comment thread app/utils/chain.ts Outdated
Comment thread app/utils/format/balance.ts
@railway-app railway-app Bot temporarily deployed to chaotic-art-preview / app-pr-870 March 30, 2026 09:29 Destroyed
@hassnian hassnian marked this pull request as ready for review March 30, 2026 09:44
@hassnian hassnian requested a review from vikiival March 31, 2026 06:00
@hassnian
Copy link
Copy Markdown
Contributor Author

hassnian commented Mar 31, 2026

CleanShot 2026-03-31 at 11 29 52@2x

@vikiival can you trigger copilot

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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 central chainConfig registry to drive routing, permissions, and source-chain/indexer mappings.
  • Updates Apollo GraphQL routing to resolve the correct GraphQL endpoint via chainConfig (through indexerChain) 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 chain with isAssetHubChain(), which rejects the new EVM explore surfaces (polkadot, kusama, polkadot-testnet). Given that NftsGrid now accepts an ODA/EVM-aware chain prop, consider updating validation (and the chain param typing) to allow EVM chains too (e.g. isChain(chain) && isOdaChain(chain)), so /polkadot/explore/nfts routes aren’t blocked by definePageMeta.validate.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread app/composables/useChain.ts Outdated
Comment thread app/utils/constants.ts
Comment thread app/pages/[chain]/explore/collectibles.vue
@hassnian
Copy link
Copy Markdown
Contributor Author

hassnian commented Apr 6, 2026

@vikiival can you have a look at the pr, for the time being only paseo indexer (hosted by me) has collectionType filter see for more context pls check pr description

check:

  • /ahpas/explore/collectibles or /nfts
  • /polkadot-testnet/explore/collectibles or /nfts

and collection page and gallery item page

let me know if you want any changes

@vikiival vikiival requested a review from Copilot April 7, 2026 06:03
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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.

Comment thread app/components/landing/topCollections/utils/useTopCollections.ts
Comment thread app/components/landing/topCollections/LandingTopCollections.vue
Comment thread app/pages/[chain]/explore/nfts.vue
Comment thread app/pages/[chain]/explore/collectibles.vue
Comment thread app/composables/useCurrentBlock.ts
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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.

Comment thread app/components/explore/NftsGrid.vue
Comment thread app/components/explore/CollectionsGrid.vue
Comment thread app/composables/useCart.ts
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.

Remove old Prefix types

2 participants