Skip to content

Commit 7a82d0c

Browse files
committed
SD-95: Add base sepolia
1 parent 420ac48 commit 7a82d0c

File tree

11 files changed

+50
-51
lines changed

11 files changed

+50
-51
lines changed

src/domains/chains/components/ChainSelector.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { useMediaQuery } from '@react-hookz/web';
22
import { useAppKitNetwork } from '@reown/appkit/react';
33
import styled from 'styled-components';
4-
import { objectEntries } from 'tsafe';
54

65
import ChainIcon from 'src/domains/chains/components/ChainIcon';
7-
import chainsDefinitions, { Definition } from 'src/domains/chains/utils/definitions';
6+
import { Definition } from 'src/domains/chains/utils/definitions';
7+
import supportedChains from 'src/domains/chains/utils/supportedChains';
88
import useChain from 'src/domains/chains/utils/useChain';
99
import Button from 'src/domains/misc/components/Button';
1010
import CIcon from 'src/domains/misc/components/CIcon';
@@ -15,17 +15,16 @@ import vars from 'src/domains/styling/utils/vars';
1515

1616
const CHAIN_SELECTOR_WIDTH = 246;
1717

18-
const mainnetChains = objectEntries(chainsDefinitions).map(([, net]) => net.mainnet);
19-
const testnetChains = objectEntries(chainsDefinitions).map(([, net]) => net.testnet);
18+
const { testnet, mainnet } = supportedChains;
2019

2120
const ChainSelector = () => {
2221
const chainConfig = useChain();
2322
const isLargeScreen = useMediaQuery(`(min-width: ${BREAKPOINTS.sm})`);
2423
const { switchNetwork } = useAppKitNetwork();
25-
const isSelectedChainTestnet = testnetChains.some(c => c.id === chainConfig?.id);
24+
const isSelectedChainTestnet = testnet.some(c => c.id === chainConfig?.id);
2625

2726
const renderOption = (chain: Definition) => {
28-
const isTestnet = testnetChains.some(c => c.id === chain.id);
27+
const isTestnet = testnet.some(c => c.id === chain.id);
2928

3029
return {
3130
onClick: () => void switchNetwork(chain),
@@ -44,8 +43,8 @@ const ChainSelector = () => {
4443
<StyledSelectBox
4544
align="start"
4645
sections={[
47-
{ title: 'Mainnet', options: mainnetChains.map(renderOption) },
48-
{ title: 'Testnet', options: testnetChains.map(renderOption) },
46+
{ title: 'Mainnet', options: mainnet.map(renderOption) },
47+
{ title: 'Testnet', options: testnet.map(renderOption) },
4948
]}
5049
>
5150
<StyledButton variant="secondary">

src/domains/chains/utils/clients/wagmiAdapter.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import { WagmiAdapter } from '@reown/appkit-adapter-wagmi';
2-
import { objectEntries } from 'tsafe';
32

4-
import chainsDefinitions from 'src/domains/chains/utils/definitions';
3+
import supportedChains from 'src/domains/chains/utils/supportedChains';
54

6-
const mainnetNetworks = objectEntries(chainsDefinitions).map(([_, network]) => network.mainnet);
7-
const testnetNetworks = objectEntries(chainsDefinitions).map(([_, network]) => network.testnet);
8-
9-
const networks = [...mainnetNetworks, ...testnetNetworks];
5+
const { all: networks } = supportedChains;
106
const projectId = import.meta.env.PUBLIC_VAR_REOWN_PROJECT_ID;
117

128
export default new WagmiAdapter({

src/domains/chains/utils/definitions/chains/base/base.ts

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,24 @@
1-
import { base, baseSepolia } from 'viem/chains';
1+
import { baseSepolia } from 'viem/chains';
22

3+
import CBtcIcon from '../../commonTokensIcons/cBtc.svg?react';
34
import NativeTokenIcon from '../../commonTokensIcons/eth.svg?react';
45
import UsdcIcon from '../../commonTokensIcons/usdc.svg?react';
5-
import UsdtIcon from '../../commonTokensIcons/usdt.svg?react';
6-
import WBtcIcon from '../../commonTokensIcons/wBtc.svg?react';
7-
import WEthIcon from '../../commonTokensIcons/wBtc.svg?react';
86
import { ChainConfig } from '../../definitions';
97

108
import ChainIcon from './base.svg?react';
119

1210
const config: ChainConfig = {
13-
mainnet: {
14-
...base,
15-
ChainIcon,
16-
NativeTokenIcon,
17-
whitelistedTokens: {
18-
'0x0555E30da8f98308EdB960aa94C0Db47230d2B9c': { icon: WBtcIcon },
19-
'0xf28587b974BF0323d1f17F65eF33D19b66f4a97d': { icon: WBtcIcon },
20-
'0x4200000000000000000000000000000000000006': { icon: WEthIcon },
21-
'0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913': { icon: UsdcIcon },
22-
'0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2': { icon: UsdtIcon },
23-
},
24-
urlPathSegment: 'base',
25-
},
2611
testnet: {
2712
...baseSepolia,
2813
shielderConfig: {
29-
shielderContractAddress: '0x72B16db09D234A69a7e2df05503923A885eCe0Ea',
30-
// TODO(SD-31): Replace the placeholder relayer URL with chain-specific URLs once provided.
31-
// https://cardinal-cryptography.atlassian.net/browse/SD-31
32-
relayerUrl: 'https://shielder-relayer-dev.test.azero.dev',
14+
shielderContractAddress: '0x2098a5f59DAB63F1a2aB7C0715DA437D1efB012B',
15+
relayerUrl: 'https://shielder-relayer-v2.test.azero.dev/base-testnet',
3316
},
3417
ChainIcon,
3518
NativeTokenIcon,
3619
whitelistedTokens: {
37-
'0x1bf0aeb4C1A1C0896887814d679defcc1325EdE3': { icon: WBtcIcon },
38-
'0xE707a4609c5c34b6F7328dd674DBb0823E575963': { icon: WBtcIcon },
39-
'0x4200000000000000000000000000000000000006': { icon: WEthIcon },
40-
'0xf7464321dE37BdE4C03AAeeF6b1e7b71379A9a64': { icon: UsdcIcon },
41-
'0xd7e9C75C6C05FdE929cAc19bb887892de78819B7': { icon: UsdtIcon },
20+
'0x31e9bF3Bd30204360C966E0cE4e33ED0A74C8556': { icon: CBtcIcon },
21+
'0xda3699eb401Ce640bdBfCE148A9D00FA652409e1': { icon: UsdcIcon },
4222
},
4323
urlPathSegment: 'base-sepolia',
4424
},
Lines changed: 4 additions & 0 deletions
Loading

src/domains/chains/utils/definitions/definitions.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { NetworkEnvironment } from 'src/domains/chains/types/misc';
55

66
import alephZero from './chains/alephZero';
77
import arbitrum from './chains/arbitrum';
8+
import base from './chains/base';
89

910
export type Definition = {
1011
id: number,
@@ -21,10 +22,10 @@ export type Definition = {
2122
urlPathSegment: string,
2223
} & Pick<Chain, 'id' | 'nativeCurrency' | 'rpcUrls' | 'blockExplorers'>;
2324

24-
export type ChainConfig = Record<NetworkEnvironment, Definition>;
25+
export type ChainConfig = Partial<Record<NetworkEnvironment, Definition>>;
2526

2627
export default {
2728
alephZero,
2829
arbitrum,
29-
// base,
30+
base,
3031
} satisfies Record<string, ChainConfig>;

src/domains/chains/utils/getChainConfigById.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import { objectEntries } from 'tsafe';
22

33
import definitions from 'src/domains/chains/utils/definitions';
4+
import isDefined from 'src/domains/misc/utils/isDefined';
45

56
export default (chainId: number | string) => {
67
const configEntry = objectEntries(definitions)
7-
.flatMap(([chain, chainGroup]) =>
8-
objectEntries(chainGroup).flatMap(([_, definition]) => ({ ...definition, chain }))
8+
.flatMap(([chain, group]) =>
9+
objectEntries(group)
10+
.map(([, def]) => def)
11+
.filter(isDefined)
12+
.map(def => ({ ...def, chain }))
913
)
1014
.find(({ id }) => id === chainId);
1115

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { objectEntries } from 'tsafe';
2+
3+
import isDefined from 'src/domains/misc/utils/isDefined';
4+
5+
import chainsDefinitions from './definitions';
6+
7+
const mainnetChains = objectEntries(chainsDefinitions).map(([, net]) => net.mainnet).filter(isDefined);
8+
const testnetChains = objectEntries(chainsDefinitions).map(([, net]) => net.testnet).filter(isDefined);
9+
10+
export default {
11+
mainnet: mainnetChains,
12+
testnet: testnetChains,
13+
all: [...mainnetChains, ...testnetChains],
14+
};

src/domains/chains/utils/useConnectedChainNetworkEnvironment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ export default () => {
1515
}))
1616
);
1717

18-
return configs.find(({ config }) => config.id === connectedChain.id)?.networkEnvironment;
18+
return configs.find(({ config }) => config && config.id === connectedChain.id)?.networkEnvironment;
1919
};

src/domains/chains/utils/useSyncChainWithUrl.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
import { useMutation } from '@tanstack/react-query';
22
import { useEffect, useRef } from 'react';
3-
import { objectEntries } from 'tsafe';
43
import { useSwitchChain } from 'wagmi';
54

6-
import chainsDefinitions from 'src/domains/chains/utils/definitions';
5+
import supportedChains from 'src/domains/chains/utils/supportedChains';
76
import useChain from 'src/domains/chains/utils/useChain';
87
import router from 'src/domains/routing/utils/router';
98

10-
const mainnetChains = objectEntries(chainsDefinitions).map(([_, network]) => network.mainnet);
11-
const testnetChains = objectEntries(chainsDefinitions).map(([_, network]) => network.testnet);
12-
const allChainsDefinitions = [...mainnetChains, ...testnetChains];
9+
const { all: allChainsDefinitions } = supportedChains;
1310

1411
const useSyncChainWithUrl = () => {
1512
const initialChainPath = useRef<string | null>(null);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default <T>(
2+
v: T | null | undefined,
3+
): v is NonNullable<T> => v != null;

0 commit comments

Comments
 (0)