Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8bf1ef9
feat: integrate Ethereal (5064014) as second-class Relay chain
NeOMakinG Feb 18, 2026
b0f995b
chore: add bead context files (ss-dx5.12 + master ss-dx5)
NeOMakinG Feb 19, 2026
f6b01da
squash merge feat/integrate-celo-relay
gomesalexandre Feb 20, 2026
ad7c350
Merge remote-tracking branch 'origin/develop' into feat/integrate-eth…
gomesalexandre Feb 23, 2026
5777deb
feat: merge origin/develop + fix merge artifacts for ethereal integra…
gomesalexandre Feb 23, 2026
c26858e
fix: add precision to ethereal asset, restore supportsEthereal in wal…
gomesalexandre Feb 23, 2026
f355bda
fix: merge artifact fixes for ethereal branch
gomesalexandre Feb 23, 2026
54a63fb
fix: more merge artifact fixes + asset audit fixes
gomesalexandre Feb 23, 2026
10bf9b9
fix: coderabbit fixes - evmbase targetNetwork closing braces + zerion…
gomesalexandre Feb 23, 2026
6144a33
fix: add missing chains to SwapWidget VIEM_CHAINS_BY_ID map
gomesalexandre Feb 23, 2026
0c175b7
fix: relayTokenToAssetId missing closing braces for 9 chain cases
gomesalexandre Feb 23, 2026
afa2991
fix: flow evm debug_traceTransaction, icons, plume rpc, relay syntax
gomesalexandre Feb 23, 2026
62c60d5
fix: skip debug_traceTransaction for celo
gomesalexandre Feb 23, 2026
bc73b9c
fix: switch ethereal rpc to rpc.ethereal.trade
gomesalexandre Feb 23, 2026
a254c87
fix: add direct native erc20 receive fallback for celo tx parsing
gomesalexandre Feb 23, 2026
815632c
fix: lint
gomesalexandre Feb 23, 2026
c7e4f65
feat: merge origin/develop + regen ethereal chain assets
gomesalexandre Feb 25, 2026
f9beb59
fix: coderabbit fixes - ethereal wc wiring, celo erc20 guard, flowevm…
gomesalexandre Feb 25, 2026
847e06c
fix: restore upstream content lost during develop merge
gomesalexandre Feb 25, 2026
e7a7c9c
fix: remove spurious async from ethereal getAssets generator
gomesalexandre Feb 25, 2026
e22694f
chore: regenerate story/plume/celo asset data + add chain audit scree…
gomesalexandre Feb 25, 2026
d28ea3e
chore: fix blast screenshot (was showing no results from stale search…
gomesalexandre Feb 25, 2026
03f9d2c
chore: fix zksync era screenshot (was showing no results from stale s…
gomesalexandre Feb 25, 2026
cf4b31c
fix: reset SwapWidget.tsx to origin/develop (no diff should exist in …
gomesalexandre Feb 25, 2026
83d1ca7
fix: reset stale celo-relay merge artifacts, add ethereal to config/env
gomesalexandre Feb 25, 2026
ae82ef8
feat: add ethereal back to all reset utils and src files
gomesalexandre Feb 25, 2026
e1bf26c
feat: add ethereal to caip, types, hdwallet, chain-adapters, contracts
gomesalexandre Feb 25, 2026
ce93aba
fix: revert flow_evm rename in preferencesSlice and walletconnect config
gomesalexandre Feb 25, 2026
e3f1ad0
fix: actually enable ethereal in .env.development ffs
gomesalexandre Feb 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .beads/ss-dx5.12.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"id": "ss-dx5.12",
"title": "Integrate Ethereal (chainId: 5064014, USDe, App-specific L2)",
"description": "TVL: $65.3M | RPC: https://rpc.ethereal.trade | Explorer: https://explorer.ethereal.trade | Token Support: Limited | Pattern B (RPC-only) | Ethena ecosystem, USDe-native",
"notes": "\nLogo: https://assets.relay.link/icons/5064014/light.png (dark: dark.png)\nCoinGecko platform: ❌ NOT ON COINGECKO (native-only asset, no token list)\nCoinGecko native ID: N/A (USDe — use ethena-usde as CoinGecko coin ID)\nArch: App-specific L2 (Ethena ecosystem)\nNative token: USDe (stablecoin as gas — NOT ETH-native)\nSLIP44: 60 (Ethereum)\nETH-native: NO — USDe gas token\nViem: ❌ NOT IN VIEM — needs defineChain({ id: 5064014, ... })\nAcross: ❌ NOT SUPPORTED\nZerion ID: TBD (likely \"ethereal\" — verify when integrating)\n\n🔴 CRITICAL QUIRKS:\n- Not in viem: Must use defineChain() in RelaySwapper constant.ts\n- Not on CoinGecko: Only native asset, no ERC20 token list from CoinGecko\n- USDe is gas: Stablecoin-native chain (like Stable with gUSDT)\n- adapter.json: {\"eip155:5064014/slip44:60\":\"ethena-usde\"}\n- relatedAssetKey: null (NOT eip155:1/slip44:60)\n- Does NOT affect ethereum test array or market-service counts\n\n--- PHASE 1 LEARNED CHECKLIST (MANDATORY) ---\n[ ] adapter.json: Create packages/caip/src/adapters/coingecko/generated/eip155_5064014/adapter.json\n[ ] Wire adapter.json: Import+export from packages/caip/src/adapters/coingecko/generated/index.ts\n[ ] getCoingeckoSupportedChainIds: Add etherealChainId (feature-flagged) in src/lib/coingecko/utils.ts\n[ ] Zerion: Add to ZERION_CHAINS + ZERION_CHAINS_MAP in packages/types/src/zerion.ts\n[ ] Across: ❌ SKIP — not supported\n[ ] ETH test ordering: ❌ SKIP — not ETH-native\n[ ] Market-service counts: ❌ SKIP — not ETH-native\n\n--- RELAY ACTIVATION ---\n[ ] Add to chainIdToRelayChainId (use defineChain() since not in viem)\n[ ] Add native asset case in relayTokenToAssetId.ts\n--- ASSET DATA REGEN ---\n[ ] Create scripts/generateAssetData/ethereal/index.ts\n[ ] Add case to scripts/generateAssetData/coingecko.ts (will be native-only)\n[ ] Add import + getAssets call to generateAssetData.ts\n--- DRAFT PR ---\n[ ] Branch: feat/integrate-ethereal-relay (off develop)\n[ ] gh pr create --draft\n[ ] yarn lint --fix \u0026\u0026 yarn type-check must pass\n",
"status": "open",
"priority": 2,
"issue_type": "task",
"owner": "14963751+NeOMakinG@users.noreply.github.com",
"created_at": "2026-02-17T10:56:00Z",
"created_by": "NeOMakinG",
"updated_at": "2026-02-17T22:42:34Z",
"labels": [
"critical-quirk",
"evm",
"relay",
"tier-2"
],
"dependencies": [
{
"id": "ss-dx5",
"title": "Add support for missing Relay.link EVM chains",
"description": "Master epic tracking integration of ALL chains supported by Relay.link that ShapeShift web doesn't currently support. Enables cross-chain bridging capabilities via Relay infrastructure. See https://github.com/shapeshift/web/issues/11902 for full details. All new EVM chains will use Pattern B (RPC-only + getKnownTokens) since no ShapeShift unchained indexer infrastructure exists for these chains.",
"notes": "=== FROM ISSUE COMMENTS ===\n\nLOGO PATTERN: https://assets.relay.link/icons/{chainId}/light.png (dark: dark.png)\n\nARCHITECTURE GROUPS:\n- OP Stack (standard): Ink, Unichain, BOB, Mode, Hemi, World Chain, Soneium, Zircuit, Lisk, Cyber, Blast, Zora, Redstone, Shape, Superseed, Manta Pacific\n- zkEVM (special handling): Scroll, zkSync Era, Linea, Polygon zkEVM, Taiko, Abstract\n- Arbitrum Orbit: ApeChain, Xai, Sanko\n- Non-ETH gas (10 chains): Mantle(MNT), Metis(METIS), Cronos(CRO), Ronin(RON), Sonic(S), Flow(FLOW), Berachain(BERA), Plume(PLUME), Story(IP), Stable(gUSDT)\n\nCRITICAL CHAINS:\n1. Celo (42220): Native token is BOTH native AND ERC20. Relay uses wrapped CELO. Check relayTransactionMetadata.assetRequiringApproval\n2. Blast (81457): Rebasing ETH from L1 staking yield. USDB also rebases. Handle in balance displays.\n3. Ethereal (5064014): NOT in viem. Needs custom chain definition.\n4. zkSync Era (324) + Abstract (2741): Type 113 (EIP-712) transactions. Use viem zksync chainConfig.\n5. Linea (59144): Custom linea_estimateGas RPC method.\n6. Sei (1329): Parallelized EVM + CosmWasm interop. CoinGecko uses sei-v2 NOT sei.\n\nCOINGECKO GOTCHAS: sei-\u003esei-v2, plume-\u003eplume-network, zksync-\u003ezksync, metis-\u003emetis-andromeda, morph-\u003emorph-l2, gravity-\u003egravity-alpha, boba-\u003eboba, zora-\u003ezora-network, funkichain-\u003efunki, Superposition (capital S). BOB/Zero Network have null chain_identifier. 11 chains not on CoinGecko at all.\n\nPER-CHAIN CHECKLIST: [ ] chain-adapters [ ] caip [ ] asset-service [ ] feature-flag [ ] plugin [ ] env-config [ ] icon/logo\n\n=== RELAY SWAPPER INTEGRATION (per chain) ===\n\nFILE 1: packages/swapper/src/swappers/RelaySwapper/constant.ts\n - Add to chainIdToRelayChainId map: [newChainChainId]: \u003cviem_chain\u003e.id (or numeric chain ID)\n - Import the caip chainId (e.g., scrollChainId) from @shapeshiftoss/caip\n - Import viem chain from viem/chains (or use raw numeric ID if not in viem)\n - The reverse map relayChainIdToChainId auto-generates via invert()\n\nFILE 2: packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts\n - Add case CHAIN_REFERENCE.NewChainMainnet: with ASSET_REFERENCE.NewChain + ASSET_NAMESPACE.slip44\n\nNO CHANGES NEEDED (for EVM chains):\n - getRelayAssetAddress.ts (uses generic isNativeEvmAsset + DEFAULT_RELAY_EVM_TOKEN_ADDRESS)\n - getRelayDefaultUserAddress.ts (falls through to DEFAULT_RELAY_EVM_USER_ADDRESS default)\n\nUPSTREAM DEPS REQUIRED (in @shapeshiftoss packages):\n - @shapeshiftoss/caip: export newChainChainId, CHAIN_REFERENCE.NewChainMainnet, ASSET_REFERENCE.NewChain\n - @shapeshiftoss/types: KnownChainIds.NewChainMainnet\n - @shapeshiftoss/chain-adapters: NewChain chain adapter class\n - viem/chains: chain config (or custom if not in viem)\n\nRELAY API: https://api.relay.link (env: VITE_RELAY_API_URL) - no per-chain config needed\n\n=== ASSET DATA REGENERATION (per chain) ===\n\nAfter integrating each chain, run a partial assets data regen to populate the token list.\n\nFILE 1 (CREATE): scripts/generateAssetData/\u003cchainname\u003e/index.ts\n Pattern (identical for all EVM chains):\n import { \u003cchainname\u003eChainId } from '@shapeshiftoss/caip'\n import type { Asset } from '@shapeshiftoss/types'\n import { \u003cchainname\u003e, unfreeze } from '@shapeshiftoss/utils'\n import * as coingecko from '../coingecko'\n export const getAssets = async (): Promise\u003cAsset[]\u003e =\u003e {\n const assets = await coingecko.getAssets(\u003cchainname\u003eChainId)\n return [...assets, unfreeze(\u003cchainname\u003e)]\n }\n\nFILE 2 (MODIFY): scripts/generateAssetData/coingecko.ts\n - Import \u003cchainname\u003eChainId from @shapeshiftoss/caip\n - Import \u003cchainname\u003e native asset from @shapeshiftoss/utils\n - Add case in the switch: case \u003cchainname\u003eChainId: return { assetNamespace: ASSET_NAMESPACE.erc20, category: adapters.chainIdToCoingeckoAssetPlatform(chainId), explorer/explorerAddressLink/explorerTxLink from \u003cchainname\u003e utils }\n - NOTE: chains not on CoinGecko will only have the native asset (no ERC20 token list)\n\nFILE 3 (MODIFY): scripts/generateAssetData/generateAssetData.ts\n - Import: import * as \u003cchainname\u003e from './\u003cchainname\u003e'\n - Call: const \u003cchainname\u003eAssets = await \u003cchainname\u003e.getAssets()\n - Spread into unfilteredAssetData: ...\u003cchainname\u003eAssets\n\nCOMMAND: yarn generate:asset-data\n This regenerates: src/generated/asset-data.json + related-asset-index + manifest + compressed assets\n\n=== DRAFT PR CREATION (final step per chain) ===\n\nAfter all code changes are complete for a chain, open a draft PR using the repo template.\n\nBRANCH NAMING: feat/integrate-\u003cchainname\u003e-relay (e.g. feat/integrate-scroll-relay)\n\nCOMMAND:\n gh pr create --draft --title 'feat: integrate \u003cChainName\u003e (chainId: \u003cid\u003e) via Relay' --body \"$(cat \u003c\u003c'PREOF'\n ## Description\n\n Add \u003cChainName\u003e (chainId: \u003cid\u003e) as a second-class EVM chain in ShapeShift Web with Relay bridge support.\n\n **Changes:**\n - Plugin registration in src/plugins/\u003cchainname\u003e/\n - Feature flag `\u003cChainName\u003e` in preferencesSlice\n - Relay swapper chain mapping in RelaySwapper/constant.ts\n - Asset data generation via CoinGecko (`\u003ccoingecko_platform_id\u003e`)\n - Environment config for RPC URL\n\n **Chain details:**\n - TVL: \u003ctvl\u003e\n - Native token: \u003ctoken\u003e (18 decimals)\n - Architecture: \u003carch_type\u003e\n - RPC: \u003crpc_url\u003e\n - Explorer: \u003cexplorer_url\u003e\n\n ## Issue (if applicable)\n\n Part of #11902\n\n ## Risk\n\n Low risk — new chain behind feature flag (`\u003cChainName\u003e`), no existing functionality affected.\n\n \u003e New chain plugin + Relay bridge mapping. No modifications to existing chain logic.\n\n ## Testing\n\n ### Engineering\n\n 1. Enable feature flag: set `VITE_FEATURE_\u003cCHAINNAME\u003e=true` in .env\n 2. Verify chain appears in supported chains list\n 3. Verify native token balance loads (connect wallet with \u003ctoken\u003e on \u003cChainName\u003e)\n 4. Verify Relay bridge quote works: bridge ETH from Ethereum → \u003cChainName\u003e\n 5. Run `yarn lint --fix \u0026\u0026 yarn type-check` — must pass\n\n ### Operations\n\n - [x] :checkered_flag: My feature is behind a flag and doesn't require operations testing (yet)\n\n ## Screenshots (if applicable)\n\n N/A — chain integration, no UI changes.\n PREOF\n )\"\n\nNOTE: Replace all \u003cplaceholders\u003e with actual chain values from the bead description/notes.\nNOTE: Use --draft flag to create as draft PR.\nNOTE: Branch off develop (main branch is develop, not main).",
"status": "open",
"priority": 0,
"issue_type": "epic",
"owner": "14963751+NeOMakinG@users.noreply.github.com",
"created_at": "2026-02-17T10:55:02Z",
"created_by": "NeOMakinG",
"updated_at": "2026-02-17T11:21:27Z",
"external_ref": "gh-11902",
"dependency_type": "parent-child"
}
],
"parent": "ss-dx5"
}
]
Loading
Loading