Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ VITE_STORY_NODE_URL=https://mainnet.storyrpc.io
VITE_HYPEREVM_NODE_URL=https://hyperliquid.drpc.org
VITE_ZKSYNC_ERA_NODE_URL=https://zksync.drpc.org
VITE_BLAST_NODE_URL=https://blast.drpc.org
VITE_ABSTRACT_NODE_URL=
VITE_WORLDCHAIN_NODE_URL=https://worldchain.drpc.org
VITE_HEMI_NODE_URL=https://hemi.drpc.org
VITE_SONIC_NODE_URL=https://sonic.drpc.org
Expand Down Expand Up @@ -338,6 +339,7 @@ VITE_FEATURE_PLUME=false
VITE_FEATURE_STORY=false
VITE_FEATURE_ZK_SYNC_ERA=false
VITE_FEATURE_BLAST=false
VITE_FEATURE_ABSTRACT=false
VITE_FEATURE_HEMI=false
VITE_FEATURE_SONIC=false
VITE_FEATURE_UNICHAIN=false
Expand Down
2 changes: 2 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ VITE_PLUME_NODE_URL=https://rpc.plume.org
VITE_STORY_NODE_URL=https://mainnet.storyrpc.io
VITE_ZKSYNC_ERA_NODE_URL=https://mainnet.era.zksync.io
VITE_BLAST_NODE_URL=https://rpc.blast.io
VITE_ABSTRACT_NODE_URL=https://api.mainnet.abs.xyz
VITE_WORLDCHAIN_NODE_URL=https://worldchain-mainnet.gateway.tenderly.co
VITE_HEMI_NODE_URL=https://rpc.hemi.network/rpc
VITE_SONIC_NODE_URL=https://rpc.soniclabs.com
Expand Down Expand Up @@ -136,6 +137,7 @@ VITE_FEATURE_PLUME=true
VITE_FEATURE_STORY=true
VITE_FEATURE_ZK_SYNC_ERA=true
VITE_FEATURE_BLAST=true
VITE_FEATURE_ABSTRACT=true
VITE_FEATURE_WORLDCHAIN=true
VITE_FEATURE_HEMI=true
VITE_FEATURE_SONIC=true
Expand Down
30 changes: 30 additions & 0 deletions chains/abstract.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"camelName": "abstract",
"pascalName": "Abstract",
"upperName": "ABSTRACT",
"chainId": 2741,
"viemChainName": "abstract",
"nativeSymbol": "ETH",
"nativeName": "Ethereum",
"nativePrecision": 18,
"isNativeEth": true,
"color": "#00D4AA",
"networkIconUrl": "https://assets.relay.link/icons/2741/light.png",
"nativeIconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png",
"explorerUrl": "https://abscan.org",
"explorerAddressLink": "https://abscan.org/address/",
"explorerTxLink": "https://abscan.org/tx/",
"rpcUrl": "https://api.mainnet.abs.xyz",
"fallbackRpcUrls": ["https://rpc.ankr.com/abstract"],
"coingeckoPlatform": "abstract",
"wrappedNativeAddress": null,
"relatedAssetKey": "eip155:1/slip44:60",
"shortName": "ABS",
"swappers": {
"relay": { "supported": true, "relayChainId": 2741 },
"across": { "supported": false },
"portals": { "supported": false },
"zerion": { "supported": false },
"yieldxyz": { "supported": false }
}
}
47 changes: 47 additions & 0 deletions e2e/fixtures/abstract-chain.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Abstract Chain Integration
description: Verify Abstract chain assets appear in swapper, search works, and ETH->Abstract swap quote can be obtained
route: /trade
depends_on:
- wallet-health.yaml
steps:
- name: Verify Abstract ETH appears in popular assets
instruction: >
On the trade/swap page, click the sell asset button (the top asset selector).
In the asset search modal, look for "Abstract" in the popular assets section
or search for "ETH" and look for an Abstract variant.
The Abstract chain's native asset (ETH on Abstract) should be discoverable.
expected: Abstract chain ETH asset is visible in asset picker (either via search or popular assets)
screenshot: true

- name: Search for Abstract ETH in asset picker
instruction: >
In the asset search modal (open the sell asset picker if not already open),
type "abstract" in the search input. Look for results showing Abstract chain assets.
expected: Searching "abstract" shows Abstract chain assets including ETH on Abstract
screenshot: true

- name: Select ETH as sell asset
instruction: >
Close the asset search modal (press Escape or click outside).
Make sure ETH (Ethereum mainnet) is selected as the sell asset.
If it's not, open the sell asset picker and select ETH on Ethereum.
expected: Sell asset shows ETH on Ethereum
screenshot: true

- name: Select Abstract ETH as buy asset and get quote
instruction: >
Click the buy asset button (bottom asset selector).
In the asset search modal, search for "abstract".
Select the ETH on Abstract result.
After selection, enter "0.001" in the sell amount input field.
Wait for a swap quote to load.
expected: Buy asset shows ETH on Abstract chain, a swap quote is displayed (amount shown or route found)
screenshot: true

- name: Verify Abstract appears in Trade routes
instruction: >
Check if a swap route/quote is shown for ETH -> Abstract ETH swap.
Look for Relay swapper in the route (Abstract is supported by Relay).
Note what quote provider appears.
expected: A swap quote is available for ETH to Abstract ETH via Relay
screenshot: true
11 changes: 11 additions & 0 deletions headers/csps/chains/abstract.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { loadEnv } from 'vite'

import { FALLBACK_RPC_URLS } from '../../../packages/contracts/src/fallbackRpcUrls'
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_ABSTRACT_NODE_URL, ...FALLBACK_RPC_URLS.abstract],
}
2 changes: 2 additions & 0 deletions headers/csps/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { csp as agenticChat } from './agenticChat'
import { csp as trustwallet } from './assetService/trustwallet'
import { csp as base } from './base'
import { csp as chainflip } from './chainflip'
import { csp as abstract } from './chains/abstract'
import { csp as arbitrum } from './chains/arbitrum'
import { csp as avalanche } from './chains/avalanche'
import { csp as baseChain } from './chains/base'
Expand Down Expand Up @@ -130,6 +131,7 @@ export const csps = [
bitcoin,
bitcoincash,
blast,
abstract,
bnbsmartchain,
cosmos,
dogecoin,
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"hdwallet:docker:emulator:stop": "docker ps -q --filter ancestor=kktech/kkemu:latest | xargs -r docker stop",
"dev:swap-widget": "pnpm --filter @shapeshiftoss/swap-widget dev",
"generate:all": "pnpm run generate:caip-adapters && pnpm run generate:color-map && pnpm run generate:asset-data && pnpm run generate:tradable-asset-map && pnpm run generate:thor-longtail-tokens",
"add-chain": "pnpm exec tsx ./scripts/addChain/index.ts",
"generate:chain": "pnpm exec tsx ./scripts/generateChainAssetData.ts",
"generate:caip-adapters": "pnpm --filter @shapeshiftoss/caip generate",
"generate:asset-data": "pnpm exec tsx ./scripts/generateAssetData/generateAssetData.ts && pnpm run codemod:clear-assets-migration",
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"eip155:10/erc20:0x94b008aa00579c1307b0ef2c499ad98a8ce58e58":"tether","eip155:10/erc20:0x0b2c639c533813f4aa9d7837caf62653d097ff85":"usd-coin","eip155:10/erc20:0x1f32b1c2345538c0c6f582fcb022739c4a194ebb":"lido-finance-wsteth","eip155:10/erc20:0x68f180fcce6836688e9084f035309e29bf0a2095":"wrapped-bitcoin","eip155:10/erc20:0x4200000000000000000000000000000000000006":"weth","eip155:10/erc20:0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6":"chainlink","eip155:10/erc20:0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff":"wrapped-eeth","eip155:10/erc20:0x6fd9d7ad17242c41f7131d257212c54a0e816691":"uniswap","eip155:10/erc20:0xdc6ff44d5d932cbd77b52e5612ba0529dc6226f1":"worldcoin-org","eip155:10/erc20:0x9bcef72be871e61ed4fbbc7630889bee758eb81d":"rocket-pool-eth","eip155:10/erc20:0x6985884c4392d348587b19cb9eaaf157f13271cd":"layerzero","eip155:10/erc20:0x0994206dfe8de6ec6920ff4d779b0d950605fb53":"curve-dao-token","eip155:10/erc20:0x2e3d870790dc77a83dd1d18184acc7439a53f475":"frax","eip155:10/erc20:0x4200000000000000000000000000000000000042":"optimism-ethereum","eip155:10/erc20:0x80eede496655fb9047dd39d9f418d5483ed600df":"frax-usd","eip155:10/erc20:0xc6bdfc4f2e90196738873e824a9efa03f7c64176":"vicicoin","eip155:10/erc20:0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91":"wormhole","eip155:10/erc20:0x8700daec35af8ff88c16bdf0418774cb3d7599b4":"synthetix-network-token","eip155:10/erc20:0x3eaeb77b03dbc0f6321ae1b72b2e9adb0f60112b":"sushiswap","eip155:10/erc20:0xaeaeed23478c3a4b798e4ed40d8b7f41366ae861":"ankr","eip155:10/erc20:0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9":"susd","eip155:10/erc20:0xa00e3a3511aac35ca78530c85007afcd31753819":"kyber-network","eip155:10/erc20:0xec6adef5e1006bb305bb1975333e8fc4071295bf":"cartesi","eip155:10/erc20:0xe05a08226c49b636acf99c40da8dc6af83ce5bb3":"ankreth","eip155:10/erc20:0x5f8d72676e37197b5011afc64d8641af2fe41fdb":"measurable-data-token","eip155:10/erc20:0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151":"dhedge-dao","eip155:10/erc20:0xc7edf7b7b3667a06992508e7b156eff794a9e1c8":"persistence","eip155:10/erc20:0xe453d6649643f1f460c371dc3d1da98f7922fe51":"fuse-network","eip155:10/erc20:0x528cdc92eab044e1e39fe43b9514bfdab4412b98":"giveth","eip155:10/erc20:0x1da650c3b2daa8aa9ff6f661d4156ce24d08a062":"dentacoin","eip155:10/erc20:0x6a661312938d22a2a0e27f585073e4406903990a":"mahadao"}
{"eip155:10/erc20:0x94b008aa00579c1307b0ef2c499ad98a8ce58e58":"tether","eip155:10/erc20:0x0b2c639c533813f4aa9d7837caf62653d097ff85":"usd-coin","eip155:10/erc20:0x1f32b1c2345538c0c6f582fcb022739c4a194ebb":"lido-finance-wsteth","eip155:10/erc20:0x68f180fcce6836688e9084f035309e29bf0a2095":"wrapped-bitcoin","eip155:10/erc20:0x4200000000000000000000000000000000000006":"weth","eip155:10/erc20:0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6":"chainlink","eip155:10/erc20:0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff":"wrapped-eeth","eip155:10/erc20:0x6fd9d7ad17242c41f7131d257212c54a0e816691":"uniswap","eip155:10/erc20:0xdc6ff44d5d932cbd77b52e5612ba0529dc6226f1":"worldcoin-org","eip155:10/erc20:0x9bcef72be871e61ed4fbbc7630889bee758eb81d":"rocket-pool-eth","eip155:10/erc20:0x6985884c4392d348587b19cb9eaaf157f13271cd":"layerzero","eip155:10/erc20:0x0994206dfe8de6ec6920ff4d779b0d950605fb53":"curve-dao-token","eip155:10/erc20:0x4200000000000000000000000000000000000042":"optimism-ethereum","eip155:10/erc20:0x2e3d870790dc77a83dd1d18184acc7439a53f475":"frax","eip155:10/erc20:0x80eede496655fb9047dd39d9f418d5483ed600df":"frax-usd","eip155:10/erc20:0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91":"wormhole","eip155:10/erc20:0xc6bdfc4f2e90196738873e824a9efa03f7c64176":"vicicoin","eip155:10/erc20:0x8700daec35af8ff88c16bdf0418774cb3d7599b4":"synthetix-network-token","eip155:10/erc20:0x3eaeb77b03dbc0f6321ae1b72b2e9adb0f60112b":"sushiswap","eip155:10/erc20:0xaeaeed23478c3a4b798e4ed40d8b7f41366ae861":"ankr","eip155:10/erc20:0xa00e3a3511aac35ca78530c85007afcd31753819":"kyber-network","eip155:10/erc20:0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9":"susd","eip155:10/erc20:0xec6adef5e1006bb305bb1975333e8fc4071295bf":"cartesi","eip155:10/erc20:0xe05a08226c49b636acf99c40da8dc6af83ce5bb3":"ankreth","eip155:10/erc20:0x5f8d72676e37197b5011afc64d8641af2fe41fdb":"measurable-data-token","eip155:10/erc20:0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151":"dhedge-dao","eip155:10/erc20:0xc7edf7b7b3667a06992508e7b156eff794a9e1c8":"persistence","eip155:10/erc20:0xe453d6649643f1f460c371dc3d1da98f7922fe51":"fuse-network","eip155:10/erc20:0x528cdc92eab044e1e39fe43b9514bfdab4412b98":"giveth","eip155:10/erc20:0x1da650c3b2daa8aa9ff6f661d4156ce24d08a062":"dentacoin","eip155:10/erc20:0x6a661312938d22a2a0e27f585073e4406903990a":"mahadao"}
Loading
Loading