Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
7506c3a
feat: integrate Mantle (chainId 5000) as second-class EVM chain with …
NeOMakinG Feb 17, 2026
70fbffe
feat: integrate Cronos (chainId 25) as second-class EVM chain with Re…
NeOMakinG Feb 17, 2026
150c1cb
fix: add mantle coingecko generated adapter and fix test
NeOMakinG Feb 17, 2026
46d51b4
fix: add cronos coingecko generated adapter and fix test
NeOMakinG Feb 17, 2026
b4a9910
fix: add missing Cronos targetNetwork entry in EvmBaseAdapter
NeOMakinG Feb 17, 2026
5d93fd9
fix: add Mantle TX status polling via useSendActionSubscriber
NeOMakinG Feb 17, 2026
9fe2839
fix: add Cronos TX status polling and relay native asset mapping
NeOMakinG Feb 17, 2026
fe27283
fix: add mantle to coingecko supported chains and zerion
NeOMakinG Feb 17, 2026
d49b10f
fix: add cronos to coingecko supported chains and zerion
NeOMakinG Feb 17, 2026
00a7e81
feat: integrate Sonic (eip155:146) as second-class EVM chain with Rel…
NeOMakinG Feb 17, 2026
206c692
fix: correct Sonic CoinGecko platform ID to sonic-3 and add empty ada…
NeOMakinG Feb 17, 2026
17513b7
feat: integrate Unichain (eip155:130) as second-class citizen via Relay
NeOMakinG Feb 17, 2026
2cd5b8f
fix: add native ETH mapping to Unichain adapter.json
NeOMakinG Feb 17, 2026
fd05ba9
fix: add native Sonic mapping to adapter.json and fix import sort
NeOMakinG Feb 17, 2026
dff96f0
feat: integrate BOB (eip155:60808) as second-class citizen
NeOMakinG Feb 17, 2026
5ee5695
fix: wire BOB adapter.json into generated index and fix test ordering
NeOMakinG Feb 17, 2026
386a336
fix: wire Unichain adapter.json into generated index
NeOMakinG Feb 17, 2026
1ba8009
fix: wire Sonic adapter.json into generated index
NeOMakinG Feb 17, 2026
7bf5ad3
chore: add bead context files (ss-dx5.3 + master ss-dx5)
NeOMakinG Feb 19, 2026
a91456e
chore: add bead context files (ss-dx5.4 + master ss-dx5)
NeOMakinG Feb 19, 2026
e3fe6c3
chore: add bead context files (ss-dx5.7 + master ss-dx5)
NeOMakinG Feb 19, 2026
4d411e0
chore: add bead context files (ss-dx5.8 + master ss-dx5)
NeOMakinG Feb 19, 2026
70794f0
chore: add bead context files (ss-dx5.9 + master ss-dx5)
NeOMakinG Feb 19, 2026
6b57992
Merge remote-tracking branch 'origin/develop' into feat/integrate-man…
gomesalexandre Feb 20, 2026
d689825
fix: broken merge conflict resolutions for mantle entries
gomesalexandre Feb 20, 2026
a057785
chore: regenerate mantle assets via generate:chain
gomesalexandre Feb 20, 2026
20e0f22
Merge remote-tracking branch 'origin/develop' into feat/integrate-cro…
gomesalexandre Feb 20, 2026
e2c1826
Merge branch 'feat/integrate-mantle-relay' into feat/integrate-cronos…
gomesalexandre Feb 20, 2026
763b3cd
fix: resolve merge conflicts and regenerate cronos assets
gomesalexandre Feb 20, 2026
e89b577
fix: lint import sort
gomesalexandre Feb 20, 2026
eb47d3d
Merge branch 'feat/integrate-mantle-relay' into feat/integrate-cronos…
gomesalexandre Feb 20, 2026
d9187a5
Merge remote-tracking branch 'origin/develop' into feat/integrate-son…
gomesalexandre Feb 20, 2026
16865a1
Merge branch 'feat/integrate-cronos-relay' into feat/integrate-sonic-…
gomesalexandre Feb 20, 2026
49efa4d
fix: resolve merge conflicts and regenerate sonic assets
gomesalexandre Feb 20, 2026
9b08032
Merge remote-tracking branch 'origin/develop' into feat/integrate-uni…
gomesalexandre Feb 20, 2026
404771b
Merge branch 'feat/integrate-sonic-relay' into feat/integrate-unichai…
gomesalexandre Feb 20, 2026
f2dcabd
fix: resolve merge conflicts and regenerate unichain assets
gomesalexandre Feb 20, 2026
9af0b4f
merge: origin/develop into feat/integrate-bob-relay
gomesalexandre Feb 20, 2026
218766e
Merge branch 'develop' into feat/integrate-mantle-relay
gomesalexandre Feb 20, 2026
e36244c
merge: feat/integrate-unichain-relay-v2 into feat/integrate-bob-relay
gomesalexandre Feb 20, 2026
59e26c8
feat: stack BOB on develop + unichain, regen assets, lint fix
gomesalexandre Feb 20, 2026
2a8915f
fix: generalize wrapped native detection, fix linea icon, update cont…
gomesalexandre Feb 20, 2026
ee8bba9
chore: update pr beads context
gomesalexandre Feb 20, 2026
0cbc863
merge: feat/integrate-mantle-relay into feat/integrate-cronos-relay
gomesalexandre Feb 20, 2026
45489e0
fix: add WCRO to wrapped native mapping, regen cronos assets
gomesalexandre Feb 20, 2026
989ad92
merge: feat/integrate-cronos-relay into feat/integrate-sonic-relay
gomesalexandre Feb 20, 2026
7e5742b
fix: add wS to wrapped native mapping, regen sonic assets
gomesalexandre Feb 20, 2026
aa0e2a3
merge: feat/integrate-sonic-relay into feat/integrate-unichain-relay-v2
gomesalexandre Feb 20, 2026
f467735
fix: add WETH to wrapped native mapping for unichain, regen assets
gomesalexandre Feb 20, 2026
48b19a3
merge: feat/integrate-unichain-relay-v2 into feat/integrate-bob-relay
gomesalexandre Feb 20, 2026
f9d1d6b
fix: add WETH to wrapped native mapping for bob, regen assets
gomesalexandre Feb 20, 2026
1a09210
Merge remote-tracking branch 'origin/develop' into feat/integrate-bob…
gomesalexandre Feb 21, 2026
c0fd982
fix: regen bob assets with updated related asset index, update bead
gomesalexandre Feb 21, 2026
2f6c137
fix: sort bobAssetId import alphabetically in generateChainRelatedAss…
gomesalexandre Feb 21, 2026
d3e262b
fix: match ethereum assetIds order to enum order in coingecko test
gomesalexandre Feb 21, 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.9.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"id": "ss-dx5.9",
"title": "Integrate BOB (chainId: 60808, ETH, OP Stack L2)",
"description": "TVL: $84.9M | RPC: https://rpc.gobob.xyz/ | Explorer: https://explorer.gobob.xyz | Token Support: Limited | Pattern B (RPC-only) | Bitcoin-focused L2",
"notes": "Logo: https://assets.relay.link/icons/60808/light.png (dark: dark.png)\nCoinGecko: bob-network (⚠️ chain_identifier is null - may need name-based lookup)\nArch: OP Stack L2 (Bitcoin-focused)\nViem: standard OP Stack\nChecklist: [x] chain-adapters [x] caip [x] asset-service [x] feature-flag [x] plugin [x] env-config [x] icon/logo\n\n--- RELAY ACTIVATION ---\n[x] Add to chainIdToRelayChainId in packages/swapper/src/swappers/RelaySwapper/constant.ts\n[x] Add native asset case in packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts\n--- ASSET DATA REGEN ---\n[x] Create scripts/generateAssetData/bob/index.ts\n[x] Add case to scripts/generateAssetData/coingecko.ts\n[x] Add import + getAssets call to scripts/generateAssetData/generateAssetData.ts\n[x] Run: yarn generate:asset-data\n--- DRAFT PR ---\n[x] Branch: feat/integrate-bob-relay (off develop)\n[x] gh pr create --draft using .github/PULL_REQUEST_TEMPLATE.md\n[x] Fill: Description, Issue (Part of #11902), Risk (Low - behind feature flag), Testing (enable flag + verify chain + relay bridge quote), Operations (behind flag checkbox)\n[x] yarn lint --fix && yarn type-check must pass before PR",
"status": "in-review",
"priority": 2,
"issue_type": "task",
"owner": "[email protected]",
"created_at": "2026-02-17T10:55:59Z",
"created_by": "NeOMakinG",
"updated_at": "2026-02-21T11:15:00Z",
"labels": [
"evm",
"op-stack",
"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": "[email protected]",
"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"
}
]
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ VITE_SCROLL_NODE_URL=https://rpc.scroll.io/
VITE_KATANA_NODE_URL=https://rpc.katana.network
VITE_SONIC_NODE_URL=https://rpc.soniclabs.com
VITE_UNICHAIN_NODE_URL=https://mainnet.unichain.org
VITE_BOB_NODE_URL=https://rpc.gobob.xyz
VITE_THORCHAIN_NODE_URL=https://api.thorchain.shapeshift.com/lcd
VITE_MAYACHAIN_NODE_URL=https://api.mayachain.shapeshift.com/lcd
VITE_SOLANA_NODE_URL=https://api.solana.shapeshift.com/api/v1/jsonrpc
Expand Down Expand Up @@ -320,6 +321,7 @@ VITE_FEATURE_NEAR=true
VITE_FEATURE_KATANA=true
VITE_FEATURE_SONIC=false
VITE_FEATURE_UNICHAIN=false
VITE_FEATURE_BOB=false

# Yield.xyz Feature Flag
VITE_FEATURE_YIELD_XYZ=true
Expand Down
2 changes: 2 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ VITE_PLASMA_NODE_URL=https://rpc.plasma.to
VITE_KATANA_NODE_URL=https://rpc.katana.network
VITE_SONIC_NODE_URL=https://rpc.soniclabs.com
VITE_UNICHAIN_NODE_URL=https://mainnet.unichain.org
VITE_BOB_NODE_URL=https://rpc.gobob.xyz
VITE_HYPEREVM_NODE_URL=https://rpc.hyperliquid.xyz/evm
VITE_MANTLE_NODE_URL=https://rpc.mantle.xyz
VITE_INK_NODE_URL=https://ink.drpc.org
Expand Down Expand Up @@ -112,6 +113,7 @@ VITE_FEATURE_SCROLL=true
VITE_FEATURE_KATANA=true
VITE_FEATURE_SONIC=true
VITE_FEATURE_UNICHAIN=true
VITE_FEATURE_BOB=true
VITE_FEATURE_TON=true
VITE_FEATURE_STONFI_SWAP=true
VITE_FEATURE_ACROSS_SWAP=true
Expand Down
10 changes: 10 additions & 0 deletions headers/csps/chains/bob.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { loadEnv } from 'vite'

import type { Csp } from '../../types'

const mode = process.env.MODE ?? process.env.NODE_ENV ?? 'development'
const env = loadEnv(mode, process.cwd(), '')

export const csp: Csp = {
'connect-src': [env.VITE_BOB_NODE_URL],
}
2 changes: 2 additions & 0 deletions headers/csps/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { csp as berachain } from './chains/berachain'
import { csp as bitcoin } from './chains/bitcoin'
import { csp as bitcoincash } from './chains/bitcoincash'
import { csp as bnbsmartchain } from './chains/bnbsmartchain'
import { csp as bob } from './chains/bob'
import { csp as cosmos } from './chains/cosmos'
import { csp as cronos } from './chains/cronos'
import { csp as dogecoin } from './chains/dogecoin'
Expand Down Expand Up @@ -121,6 +122,7 @@ export const csps = [
cosmos,
dogecoin,
ethereum,
bob,
gnosis,
berachain,
hyperevm,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"eip155:60808/slip44:60":"ethereum"}
2 changes: 2 additions & 0 deletions packages/caip/src/adapters/coingecko/generated/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import hyperevm from "./eip155_999/adapter.json";
import plasma from "./eip155_9745/adapter.json";
import katana from "./eip155_747474/adapter.json";
import linea from "./eip155_59144/adapter.json";
import bob from "./eip155_60808/adapter.json";
import megaeth from "./eip155_4326/adapter.json";
import mantle from "./eip155_5000/adapter.json";
import berachain from "./eip155_80094/adapter.json";
Expand Down Expand Up @@ -47,6 +48,7 @@ export {
gnosis,
arbitrum,
base,
bob,
monad,
hyperevm,
plasma,
Expand Down
7 changes: 7 additions & 0 deletions packages/caip/src/adapters/coingecko/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,18 @@ describe('adapters:coingecko', () => {
assetNamespace: 'slip44',
assetReference: ASSET_REFERENCE.Unichain,
})
const ethOnBob = toAssetId({
chainNamespace,
chainReference: CHAIN_REFERENCE.BobMainnet,
assetNamespace: 'slip44',
assetReference: ASSET_REFERENCE.Bob,
})
expect(coingeckoToAssetIds('ethereum')).toEqual([
ethOnEthereum,
ethOnOptimism,
ethOnArbitrum,
ethOnBase,
ethOnBob,
ethOnLinea,
ethOnMegaEth,
ethOnInk,
Expand Down
6 changes: 6 additions & 0 deletions packages/caip/src/adapters/coingecko/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
avalancheChainId,
baseChainId,
berachainChainId,
bobChainId,
bscChainId,
CHAIN_NAMESPACE,
CHAIN_REFERENCE,
Expand Down Expand Up @@ -63,6 +64,7 @@ export enum CoingeckoAssetPlatform {
Mantle = 'mantle',
Linea = 'linea',
Unichain = 'unichain',
Bob = 'bob-network',
Sonic = 'sonic',
MegaEth = 'megaeth',
Berachain = 'berachain',
Expand Down Expand Up @@ -134,6 +136,8 @@ export const chainIdToCoingeckoAssetPlatform = (chainId: ChainId): string => {
return CoingeckoAssetPlatform.Sonic
case CHAIN_REFERENCE.UnichainMainnet:
return CoingeckoAssetPlatform.Unichain
case CHAIN_REFERENCE.BobMainnet:
return CoingeckoAssetPlatform.Bob
case CHAIN_REFERENCE.MegaEthMainnet:
return CoingeckoAssetPlatform.MegaEth
case CHAIN_REFERENCE.LineaMainnet:
Expand Down Expand Up @@ -259,6 +263,8 @@ export const coingeckoAssetPlatformToChainId = (
return sonicChainId
case CoingeckoAssetPlatform.Unichain:
return unichainChainId
case CoingeckoAssetPlatform.Bob:
return bobChainId
case CoingeckoAssetPlatform.MegaEth:
return megaethChainId
case CoingeckoAssetPlatform.Linea:
Expand Down
3 changes: 3 additions & 0 deletions packages/caip/src/adapters/coingecko/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ describe('adapters:coingecko:utils', () => {
'eip155:57073': {
'eip155:57073/slip44:60': 'ethereum',
},
'eip155:60808': {
'eip155:60808/slip44:60': 'ethereum',
},
'eip155:25': {
'eip155:25/slip44:60': 'crypto-com-chain',
},
Expand Down
17 changes: 17 additions & 0 deletions packages/caip/src/adapters/coingecko/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import {
bchChainId,
berachainAssetId,
berachainChainId,
bobAssetId,
bobChainId,
bscAssetId,
bscChainId,
btcChainId,
Expand Down Expand Up @@ -431,6 +433,20 @@ export const parseData = (coins: CoingeckoCoin[]): AssetMap => {
}
}

if (Object.keys(platforms).includes(CoingeckoAssetPlatform.Bob)) {
try {
const assetId = toAssetId({
chainNamespace: CHAIN_NAMESPACE.Evm,
chainReference: CHAIN_REFERENCE.BobMainnet,
assetNamespace: 'erc20',
assetReference: platforms[CoingeckoAssetPlatform.Bob],
})
prev[bobChainId][assetId] = id
} catch {
// unable to create assetId, skip token
}
}

if (Object.keys(platforms).includes(CoingeckoAssetPlatform.Starknet)) {
try {
const assetId = toAssetId({
Expand Down Expand Up @@ -497,6 +513,7 @@ export const parseData = (coins: CoingeckoCoin[]): AssetMap => {
[scrollChainId]: { [scrollAssetId]: 'ethereum' },
[sonicChainId]: { [sonicAssetId]: 'sonic-3' },
[unichainChainId]: { [unichainAssetId]: 'ethereum' },
[bobChainId]: { [bobAssetId]: 'ethereum' },
[solanaChainId]: { [solAssetId]: 'solana' },
[starknetChainId]: { [starknetAssetId]: 'starknet' },
[tronChainId]: { [tronAssetId]: 'tron' },
Expand Down
5 changes: 5 additions & 0 deletions packages/caip/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export const lineaAssetId: AssetId = 'eip155:59144/slip44:60'
export const scrollAssetId: AssetId = 'eip155:534352/slip44:60'
export const sonicAssetId: AssetId = 'eip155:146/slip44:60'
export const unichainAssetId: AssetId = 'eip155:130/slip44:60'
export const bobAssetId: AssetId = 'eip155:60808/slip44:60'
export const solAssetId: AssetId = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501'
export const wrappedSolAssetId: AssetId =
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:So11111111111111111111111111111111111111112'
Expand Down Expand Up @@ -97,6 +98,7 @@ export const lineaChainId: ChainId = 'eip155:59144'
export const scrollChainId: ChainId = 'eip155:534352'
export const sonicChainId: ChainId = 'eip155:146'
export const unichainChainId: ChainId = 'eip155:130'
export const bobChainId: ChainId = 'eip155:60808'

export const cosmosChainId: ChainId = 'cosmos:cosmoshub-4'
export const thorchainChainId: ChainId = 'cosmos:thorchain-1'
Expand Down Expand Up @@ -157,6 +159,7 @@ export const CHAIN_REFERENCE = {
ScrollMainnet: '534352', // https://scrollscan.com
SonicMainnet: '146', // https://docs.soniclabs.com
UnichainMainnet: '130', // https://docs.unichain.org
BobMainnet: '60808', // https://docs.gobob.xyz
SolanaMainnet: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', // https://namespaces.chainagnostic.org/solana/caip2
TronMainnet: '0x2b6653dc', // https://developers.tron.network/docs/networks
SuiMainnet: '35834a8a', // First 8 chars of SUI mainnet genesis hash
Expand Down Expand Up @@ -210,6 +213,7 @@ export const ASSET_REFERENCE = {
Scroll: '60', // evm chain which uses ethereum derivation path as common practice
Sonic: '60', // evm chain which uses ethereum derivation path as common practice
Unichain: '60', // evm chain which uses ethereum derivation path as common practice
Bob: '60', // evm chain which uses ethereum derivation path as common practice
Solana: '501',
Tron: '195',
Sui: '784',
Expand Down Expand Up @@ -248,6 +252,7 @@ export const VALID_CHAIN_IDS: ValidChainMap = Object.freeze({
CHAIN_REFERENCE.ScrollMainnet,
CHAIN_REFERENCE.SonicMainnet,
CHAIN_REFERENCE.UnichainMainnet,
CHAIN_REFERENCE.BobMainnet,
],
[CHAIN_NAMESPACE.CosmosSdk]: [
CHAIN_REFERENCE.CosmosHubMainnet,
Expand Down
9 changes: 9 additions & 0 deletions packages/chain-adapters/src/evm/EvmBaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
supportsAvalanche,
supportsBase,
supportsBerachain,
supportsBob,
supportsBSC,
supportsCronos,
supportsETH,
Expand Down Expand Up @@ -104,6 +105,7 @@ export const evmChainIds = [
KnownChainIds.ScrollMainnet,
KnownChainIds.SonicMainnet,
KnownChainIds.UnichainMainnet,
KnownChainIds.BobMainnet,
] as const

export type EvmChainAdapter = EvmBaseAdapter<EvmChainId>
Expand Down Expand Up @@ -224,6 +226,8 @@ export abstract class EvmBaseAdapter<T extends EvmChainId> implements IChainAdap
return supportsSonic(wallet)
case Number(fromChainId(KnownChainIds.UnichainMainnet).chainReference):
return supportsUnichain(wallet)
case Number(fromChainId(KnownChainIds.BobMainnet).chainReference):
return supportsBob(wallet)
default:
return false
}
Expand Down Expand Up @@ -361,6 +365,11 @@ export abstract class EvmBaseAdapter<T extends EvmChainId> implements IChainAdap
symbol: 'ETH',
explorer: 'https://uniscan.xyz',
},
[KnownChainIds.BobMainnet]: {
name: 'Ethereum',
symbol: 'ETH',
explorer: 'https://explorer.gobob.xyz',
},
}[this.chainId]

try {
Expand Down
2 changes: 2 additions & 0 deletions packages/chain-adapters/src/evm/SecondClassEvmAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { AssetId, ChainId } from '@shapeshiftoss/caip'
import {
ASSET_NAMESPACE,
berachainChainId,
bobChainId,
cronosChainId,
hyperEvmChainId,
mantleChainId,
Expand Down Expand Up @@ -50,6 +51,7 @@ const WRAPPED_NATIVE_CONTRACT_BY_CHAIN_ID: Partial<Record<ChainId, string>> = {
[cronosChainId]: '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23',
[sonicChainId]: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38',
[unichainChainId]: '0x4200000000000000000000000000000000000006',
[bobChainId]: '0x4200000000000000000000000000000000000006',
}
const BATCH_SIZE = 500

Expand Down
Loading
Loading