Compare commits

..
Author SHA1 Message Date
Bill He 1cdee2813f Onboarding status do not rely on squidAPI to determine if deposit/withdraw 2023-10-16 10:03:30 -07:00
Bill 944cea0d3d Hide wallet options (#70)
* Hide wallet options

* remove WC 1

* gitignore .env

* remove .env

* remove wc1
2023-10-16 09:07:35 -07:00
Rui 4ea2bdf53d Updated wallets.json and add chain name and logo to env.json (#68) 2023-10-13 14:44:34 -07:00
aleka c40f5eb549 update about wallets link and localized string nits (#69)
* update about wallets link and localized string nits

* udpate wallet connect2 metadata
2023-10-12 17:10:51 -04:00
15 changed files with 60 additions and 152 deletions
-6
View File
@@ -1,6 +0,0 @@
VITE_BASE_URL=https://v4.testnet.dydx.exchange
VITE_ALCHEMY_API_KEY=FP275q327Yh7qswtZWenbPXdZZdnAFmC
VITE_WALLETCONNECT1_BRIDGE=wss://api.dydx.exchange/wc/
VITE_WALLETCONNECT2_PROJECT_ID=fbe94eaa691fa8d929561f8567062b32
-1
View File
@@ -4,7 +4,6 @@ VITE_ALCHEMY_API_KEY=
VITE_PK_ENCRYPTION_KEY= VITE_PK_ENCRYPTION_KEY=
VITE_WALLETCONNECT1_BRIDGE=
VITE_WALLETCONNECT2_PROJECT_ID= VITE_WALLETCONNECT2_PROJECT_ID=
VITE_V3_TOKEN_ADDRESS= VITE_V3_TOKEN_ADDRESS=
+1
View File
@@ -13,6 +13,7 @@ dist
dist-ssr dist-ssr
*.local *.local
*.key *.key
.env
# Editor directories and files # Editor directories and files
.vscode/* .vscode/*
+1 -1
View File
@@ -40,7 +40,7 @@
"@cosmjs/tendermint-rpc": "^0.31.0", "@cosmjs/tendermint-rpc": "^0.31.0",
"@dydxprotocol/v4-abacus": "^0.6.4", "@dydxprotocol/v4-abacus": "^0.6.4",
"@dydxprotocol/v4-client-js": "^0.36.1", "@dydxprotocol/v4-client-js": "^0.36.1",
"@dydxprotocol/v4-localization": "^0.1.24", "@dydxprotocol/v4-localization": "^0.1.28",
"@ethersproject/providers": "^5.7.2", "@ethersproject/providers": "^5.7.2",
"@js-joda/core": "^5.5.3", "@js-joda/core": "^5.5.3",
"@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-collapsible": "^1.0.3",
+8 -8
View File
@@ -1,9 +1,5 @@
lockfileVersion: '6.0' lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
dependencies: dependencies:
'@0xsquid/sdk': '@0xsquid/sdk':
specifier: ^1.10.0 specifier: ^1.10.0
@@ -33,8 +29,8 @@ dependencies:
specifier: ^0.36.1 specifier: ^0.36.1
version: 0.36.1 version: 0.36.1
'@dydxprotocol/v4-localization': '@dydxprotocol/v4-localization':
specifier: ^0.1.24 specifier: ^0.1.28
version: 0.1.24 version: 0.1.28
'@ethersproject/providers': '@ethersproject/providers':
specifier: ^5.7.2 specifier: ^5.7.2
version: 5.7.2 version: 5.7.2
@@ -1010,8 +1006,8 @@ packages:
- utf-8-validate - utf-8-validate
dev: false dev: false
/@dydxprotocol/v4-localization@0.1.24: /@dydxprotocol/v4-localization@0.1.28:
resolution: {integrity: sha512-zSiu8+/6BWNWZXxe73zUp/UjuLG1Cp5UuhXKtbATqqkeZyVCs01QxbBCTs1MLfgsLh02IrfhXCPHvXnzZyReEw==} resolution: {integrity: sha512-g6LwjX7EIRm9HISfSX0H6yhktBCZby5opP/yI2aIUvn2OYyB25WcjLEuEvzW5Bh9XXiLijgLf3Tk91wPKWuFbA==}
dev: false dev: false
/@dydxprotocol/v4-proto@0.2.1: /@dydxprotocol/v4-proto@0.2.1:
@@ -14099,3 +14095,7 @@ packages:
/zwitch@2.0.4: /zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
dev: true dev: true
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+12 -69
View File
@@ -32,7 +32,6 @@ export enum WalletConnectionType {
CoinbaseWalletSdk = 'coinbaseWalletSdk', CoinbaseWalletSdk = 'coinbaseWalletSdk',
CosmosSigner = 'CosmosSigner', CosmosSigner = 'CosmosSigner',
InjectedEip1193 = 'injectedEip1193', InjectedEip1193 = 'injectedEip1193',
WalletConnect1 = 'walletConnect1',
WalletConnect2 = 'walletConnect2', WalletConnect2 = 'walletConnect2',
} }
@@ -62,10 +61,6 @@ export const walletConnectionTypes: Record<WalletConnectionType, WalletConnectio
name: 'injected EIP-1193 provider', name: 'injected EIP-1193 provider',
wagmiConnectorId: 'injected', wagmiConnectorId: 'injected',
}, },
[WalletConnectionType.WalletConnect1]: {
name: 'WalletConnect 1.0',
wagmiConnectorId: 'walletConnectLegacy',
},
[WalletConnectionType.WalletConnect2]: { [WalletConnectionType.WalletConnect2]: {
name: 'WalletConnect 2.0', name: 'WalletConnect 2.0',
wagmiConnectorId: 'walletConnect', wagmiConnectorId: 'walletConnect',
@@ -92,7 +87,6 @@ export enum WalletType {
Rainbow = 'RAINBOW_WALLET', Rainbow = 'RAINBOW_WALLET',
TokenPocket = 'TOKEN_POCKET', TokenPocket = 'TOKEN_POCKET',
TrustWallet = 'TRUST_WALLET', TrustWallet = 'TRUST_WALLET',
WalletConnect = 'WALLETCONNECT',
WalletConnect2 = 'WALLETCONNECT_2', WalletConnect2 = 'WALLETCONNECT_2',
// TestWallet = 'TEST_WALLET', // TestWallet = 'TEST_WALLET',
OtherWallet = 'OTHER_WALLET', OtherWallet = 'OTHER_WALLET',
@@ -104,7 +98,6 @@ type WalletConfig = {
icon: string; icon: string;
connectionTypes: WalletConnectionType[]; connectionTypes: WalletConnectionType[];
matchesInjectedEip1193?: (provider: ExternalProvider & any) => boolean; matchesInjectedEip1193?: (provider: ExternalProvider & any) => boolean;
walletconnect1Name?: string;
walletconnect2Id?: string; walletconnect2Id?: string;
}; };
@@ -117,7 +110,6 @@ export const wallets: Record<WalletType, WalletConfig> = {
WalletConnectionType.InjectedEip1193, WalletConnectionType.InjectedEip1193,
// WalletConnectionType.CoinbaseWalletSdk, // WalletConnectionType.CoinbaseWalletSdk,
WalletConnectionType.WalletConnect2, WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
], ],
matchesInjectedEip1193: (provider) => matchesInjectedEip1193: (provider) =>
Object.entries(wallets).every( Object.entries(wallets).every(
@@ -131,30 +123,23 @@ export const wallets: Record<WalletType, WalletConfig> = {
type: WalletType.BitKeep, type: WalletType.BitKeep,
stringKey: STRING_KEYS.BITKEEP, stringKey: STRING_KEYS.BITKEEP,
icon: BitkeepIcon, icon: BitkeepIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isBitKeep, // isBitKeepChrome, isBitEthereum matchesInjectedEip1193: (provider) => provider.isBitKeep, // isBitKeepChrome, isBitEthereum
walletconnect1Name: 'bitkeep',
walletconnect2Id: '38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662', walletconnect2Id: '38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662',
}, },
[WalletType.BitPie]: { [WalletType.BitPie]: {
type: WalletType.BitPie, type: WalletType.BitPie,
stringKey: STRING_KEYS.BITPIE, stringKey: STRING_KEYS.BITPIE,
icon: BitpieIcon, icon: BitpieIcon,
connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect1], connectionTypes: [WalletConnectionType.InjectedEip1193],
matchesInjectedEip1193: (provider) => provider.isBitpie, matchesInjectedEip1193: (provider) => provider.isBitpie,
walletconnect1Name: 'bitpie',
}, },
[WalletType.CloverWallet]: { [WalletType.CloverWallet]: {
type: WalletType.CloverWallet, type: WalletType.CloverWallet,
stringKey: STRING_KEYS.CLOVER_WALLET, stringKey: STRING_KEYS.CLOVER_WALLET,
icon: CloverWalletIcon, icon: CloverWalletIcon,
connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect1], connectionTypes: [WalletConnectionType.InjectedEip1193],
matchesInjectedEip1193: (provider) => provider.isClover, matchesInjectedEip1193: (provider) => provider.isClover,
// walletconnect1Name: 'clover',
}, },
[WalletType.CoinbaseWallet]: { [WalletType.CoinbaseWallet]: {
type: WalletType.CoinbaseWallet, type: WalletType.CoinbaseWallet,
@@ -163,33 +148,23 @@ export const wallets: Record<WalletType, WalletConfig> = {
connectionTypes: [ connectionTypes: [
WalletConnectionType.CoinbaseWalletSdk, WalletConnectionType.CoinbaseWalletSdk,
WalletConnectionType.InjectedEip1193, WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect1, WalletConnectionType.WalletConnect2,
], ],
matchesInjectedEip1193: (provider) => provider.isCoinbaseWallet, // provider.selectedProvider?.isCoinbaseWallet, matchesInjectedEip1193: (provider) => provider.isCoinbaseWallet, // provider.selectedProvider?.isCoinbaseWallet,
walletconnect1Name: 'coinbase',
}, },
[WalletType.Coin98]: { [WalletType.Coin98]: {
type: WalletType.Coin98, type: WalletType.Coin98,
stringKey: STRING_KEYS.COIN98, stringKey: STRING_KEYS.COIN98,
icon: Coin98Icon, icon: Coin98Icon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isCoin98, matchesInjectedEip1193: (provider) => provider.isCoin98,
walletconnect1Name: 'coin98',
walletconnect2Id: '2a3c89040ac3b723a1972a33a125b1db11e258a6975d3a61252cd64e6ea5ea01', walletconnect2Id: '2a3c89040ac3b723a1972a33a125b1db11e258a6975d3a61252cd64e6ea5ea01',
}, },
[WalletType.HuobiWallet]: { [WalletType.HuobiWallet]: {
type: WalletType.HuobiWallet, type: WalletType.HuobiWallet,
stringKey: STRING_KEYS.HUOBI_WALLET, stringKey: STRING_KEYS.HUOBI_WALLET,
icon: HuobiIcon, icon: HuobiIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isHbWallet, matchesInjectedEip1193: (provider) => provider.isHbWallet,
walletconnect2Id: '797c615e2c556b610c048eb35535f212c0dd58de5d03e763120e90a7d1350a77', walletconnect2Id: '797c615e2c556b610c048eb35535f212c0dd58de5d03e763120e90a7d1350a77',
}, },
@@ -197,74 +172,48 @@ export const wallets: Record<WalletType, WalletConfig> = {
type: WalletType.ImToken, type: WalletType.ImToken,
stringKey: STRING_KEYS.IMTOKEN, stringKey: STRING_KEYS.IMTOKEN,
icon: ImTokenIcon, icon: ImTokenIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isImToken, matchesInjectedEip1193: (provider) => provider.isImToken,
walletconnect1Name: 'imtoken',
walletconnect2Id: 'ef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef', walletconnect2Id: 'ef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef',
}, },
[WalletType.MathWallet]: { [WalletType.MathWallet]: {
type: WalletType.MathWallet, type: WalletType.MathWallet,
stringKey: STRING_KEYS.MATH_WALLET, stringKey: STRING_KEYS.MATH_WALLET,
icon: MathWalletIcon, icon: MathWalletIcon,
connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect1], connectionTypes: [WalletConnectionType.InjectedEip1193],
matchesInjectedEip1193: (provider) => provider.isMathWallet, matchesInjectedEip1193: (provider) => provider.isMathWallet,
walletconnect1Name: 'math',
walletconnect2Id: '7674bb4e353bf52886768a3ddc2a4562ce2f4191c80831291218ebd90f5f5e26', walletconnect2Id: '7674bb4e353bf52886768a3ddc2a4562ce2f4191c80831291218ebd90f5f5e26',
}, },
[WalletType.MetaMask]: { [WalletType.MetaMask]: {
type: WalletType.MetaMask, type: WalletType.MetaMask,
stringKey: STRING_KEYS.METAMASK, stringKey: STRING_KEYS.METAMASK,
icon: MetaMaskIcon, icon: MetaMaskIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: isMetaMask, matchesInjectedEip1193: isMetaMask,
walletconnect1Name: 'metamask',
walletconnect2Id: 'c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96', walletconnect2Id: 'c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96',
}, },
[WalletType.Rainbow]: { [WalletType.Rainbow]: {
type: WalletType.Rainbow, type: WalletType.Rainbow,
stringKey: STRING_KEYS.RAINBOW_WALLET, stringKey: STRING_KEYS.RAINBOW_WALLET,
icon: RainbowIcon, icon: RainbowIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isRainbowWallet, matchesInjectedEip1193: (provider) => provider.isRainbowWallet,
walletconnect1Name: 'rainbow',
walletconnect2Id: '1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369', walletconnect2Id: '1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369',
}, },
[WalletType.TokenPocket]: { [WalletType.TokenPocket]: {
type: WalletType.TokenPocket, type: WalletType.TokenPocket,
stringKey: STRING_KEYS.TOKEN_POCKET, stringKey: STRING_KEYS.TOKEN_POCKET,
icon: TokenPocketIcon, icon: TokenPocketIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isTokenPocket, matchesInjectedEip1193: (provider) => provider.isTokenPocket,
walletconnect1Name: 'tokenpocket',
walletconnect2Id: '20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66', walletconnect2Id: '20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66',
}, },
[WalletType.TrustWallet]: { [WalletType.TrustWallet]: {
type: WalletType.TrustWallet, type: WalletType.TrustWallet,
stringKey: STRING_KEYS.TRUST_WALLET, stringKey: STRING_KEYS.TRUST_WALLET,
icon: TrustWalletIcon, icon: TrustWalletIcon,
connectionTypes: [ connectionTypes: [WalletConnectionType.InjectedEip1193, WalletConnectionType.WalletConnect2],
WalletConnectionType.InjectedEip1193,
WalletConnectionType.WalletConnect2,
WalletConnectionType.WalletConnect1,
],
matchesInjectedEip1193: (provider) => provider.isTrust, matchesInjectedEip1193: (provider) => provider.isTrust,
walletconnect1Name: 'trust',
walletconnect2Id: '4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0', walletconnect2Id: '4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0',
}, },
[WalletType.WalletConnect2]: { [WalletType.WalletConnect2]: {
@@ -273,12 +222,6 @@ export const wallets: Record<WalletType, WalletConfig> = {
icon: WalletConnectIcon, icon: WalletConnectIcon,
connectionTypes: [WalletConnectionType.WalletConnect2], connectionTypes: [WalletConnectionType.WalletConnect2],
}, },
[WalletType.WalletConnect]: {
type: WalletType.WalletConnect,
stringKey: STRING_KEYS.WALLET_CONNECT,
icon: WalletConnectIcon,
connectionTypes: [WalletConnectionType.WalletConnect1],
},
[WalletType.Keplr]: { [WalletType.Keplr]: {
type: WalletType.Keplr, type: WalletType.Keplr,
stringKey: STRING_KEYS.KEPLR, stringKey: STRING_KEYS.KEPLR,
+7 -11
View File
@@ -2,27 +2,23 @@ import { WalletType } from '@/constants/wallets';
import { isTruthy } from '@/lib/isTruthy'; import { isTruthy } from '@/lib/isTruthy';
import { useSelectedNetwork } from './useSelectedNetwork';
export const useDisplayedWallets = () => { export const useDisplayedWallets = () => {
const { selectedNetwork } = useSelectedNetwork();
return [ return [
WalletType.MetaMask, WalletType.MetaMask,
import.meta.env.MODE !== 'production' && WalletType.Keplr, import.meta.env.MODE !== 'production' && WalletType.Keplr,
WalletType.WalletConnect2, WalletType.WalletConnect2,
WalletType.WalletConnect,
WalletType.CoinbaseWallet, WalletType.CoinbaseWallet,
WalletType.ImToken, // Hide these wallet options until they can be properly tested on mainnet
WalletType.Rainbow, // WalletType.ImToken,
WalletType.TrustWallet, // WalletType.Rainbow,
WalletType.HuobiWallet, // WalletType.TrustWallet,
WalletType.BitKeep, // WalletType.HuobiWallet,
WalletType.Coin98, // WalletType.BitKeep,
// WalletType.Coin98,
WalletType.OtherWallet, WalletType.OtherWallet,
].filter(isTruthy); ].filter(isTruthy);
+6 -5
View File
@@ -110,18 +110,18 @@ export const notificationTypes = [
const stringGetter = useStringGetter(); const stringGetter = useStringGetter();
const { transferNotifications } = useLocalNotifications(); const { transferNotifications } = useLocalNotifications();
const getTitleStringKey = useCallback((type: 'deposit' | 'withdraw', finished: boolean) => { const getTitleStringKey = useCallback((type: 'deposit' | 'withdrawal', finished: boolean) => {
if (type === 'deposit' && !finished) return STRING_KEYS.DEPOSIT_IN_PROGRESS; if (type === 'deposit' && !finished) return STRING_KEYS.DEPOSIT_IN_PROGRESS;
if (type === 'deposit' && finished) return STRING_KEYS.DEPOSIT; if (type === 'deposit' && finished) return STRING_KEYS.DEPOSIT;
if (type === 'withdraw' && !finished) return STRING_KEYS.WITHDRAW_IN_PROGRESS; if (type === 'withdrawal' && !finished) return STRING_KEYS.WITHDRAW_IN_PROGRESS;
return STRING_KEYS.WITHDRAW; return STRING_KEYS.WITHDRAW;
}, []); }, []);
useEffect(() => { useEffect(() => {
for (const transfer of transferNotifications) { for (const transfer of transferNotifications) {
const { toChainId, status, txHash, toAmount } = transfer; const { fromChainId, status, txHash, toAmount } = transfer;
const finished = Boolean(status) && status?.squidTransactionStatus !== 'ongoing'; const finished = Boolean(status) && status?.squidTransactionStatus !== 'ongoing';
const type = toChainId === TESTNET_CHAIN_ID ? 'deposit' : 'withdraw'; const type = fromChainId === TESTNET_CHAIN_ID ? 'withdrawal' : 'deposit';
// @ts-ignore status.errors is not in the type definition but can be returned // @ts-ignore status.errors is not in the type definition but can be returned
const error = status?.errors?.length ? status?.errors[0] : status?.error; const error = status?.errors?.length ? status?.errors[0] : status?.error;
@@ -154,6 +154,7 @@ export const notificationTypes = [
description: description, description: description,
customContent: ( customContent: (
<TransferStatusToast <TransferStatusToast
type={type}
toAmount={transfer.toAmount} toAmount={transfer.toAmount}
triggeredAt={transfer.triggeredAt} triggeredAt={transfer.triggeredAt}
status={transfer.status} status={transfer.status}
@@ -162,7 +163,7 @@ export const notificationTypes = [
customMenuContent: !finished && ( customMenuContent: !finished && (
<div> <div>
{description} {description}
<TransferStatusSteps status={transfer.status} /> <TransferStatusSteps status={transfer.status} type={type} />
</div> </div>
), ),
toastSensitivity: 'foreground', toastSensitivity: 'foreground',
+2 -28
View File
@@ -87,24 +87,15 @@ const injectedConnectorOptions = {
}, },
}; };
const walletconnect1ConnectorOptions = {
chains,
options: {
bridge: import.meta.env.VITE_WALLETCONNECT1_BRIDGE,
qrcode: true,
},
};
const walletconnect2ConnectorOptions: ConstructorParameters<typeof WalletConnectConnector>[0] = { const walletconnect2ConnectorOptions: ConstructorParameters<typeof WalletConnectConnector>[0] = {
chains, chains,
options: { options: {
projectId: import.meta.env.VITE_WALLETCONNECT2_PROJECT_ID, projectId: import.meta.env.VITE_WALLETCONNECT2_PROJECT_ID,
metadata: { metadata: {
// TODO: update to local URLs/images
name: 'dYdX', name: 'dYdX',
description: '', description: '',
url: 'https://trade.dydx.exchange', url: import.meta.env.VITE_BASE_URL,
icons: ['https://trade.dydx.exchange/cbw-image.png'], icons: [`${import.meta.env.VITE_BASE_URL}/cbw-image.png}`],
}, },
showQrModal: true, showQrModal: true,
qrModalOptions: { qrModalOptions: {
@@ -143,7 +134,6 @@ const connectors = [
reloadOnDisconnect: false, reloadOnDisconnect: false,
}, },
}), }),
new WalletConnectLegacyConnector(walletconnect1ConnectorOptions),
new WalletConnectConnector(walletconnect2ConnectorOptions), new WalletConnectConnector(walletconnect2ConnectorOptions),
new InjectedConnector(injectedConnectorOptions), new InjectedConnector(injectedConnectorOptions),
]; ];
@@ -166,19 +156,6 @@ const createInjectedConnectorWithProvider = (provider: ExternalProvider) =>
provider as unknown as Awaited<ReturnType<InjectedConnector['getProvider']>>; provider as unknown as Awaited<ReturnType<InjectedConnector['getProvider']>>;
})(injectedConnectorOptions) as InjectedConnector; })(injectedConnectorOptions) as InjectedConnector;
// Create a custom wagmi WalletConnectLegacyConnector with a modal showing only wallet links matching the given name
const createWalletConnect1ConnectorWithName = (walletconnect1Name: string) =>
new WalletConnectLegacyConnector({
...walletconnect1ConnectorOptions,
options: {
...walletconnect1ConnectorOptions.options,
qrcodeModalOptions: {
desktopLinks: [walletconnect1Name],
mobileLinks: [walletconnect1Name],
},
},
});
const createWalletConnect2ConnectorWithId = (walletconnect2Id: string) => const createWalletConnect2ConnectorWithId = (walletconnect2Id: string) =>
new WalletConnectConnector({ new WalletConnectConnector({
...walletconnect2ConnectorOptions, ...walletconnect2ConnectorOptions,
@@ -214,9 +191,6 @@ export const resolveWagmiConnector = ({
return walletConnection.type === WalletConnectionType.InjectedEip1193 && walletConnection.provider return walletConnection.type === WalletConnectionType.InjectedEip1193 && walletConnection.provider
? createInjectedConnectorWithProvider(walletConnection.provider) ? createInjectedConnectorWithProvider(walletConnection.provider)
: walletConnection.type === WalletConnectionType.WalletConnect1 &&
walletConfig.walletconnect1Name
? createWalletConnect1ConnectorWithName(walletConfig.walletconnect1Name)
: walletConnection.type === WalletConnectionType.WalletConnect2 && walletConfig.walletconnect2Id : walletConnection.type === WalletConnectionType.WalletConnect2 && walletConfig.walletconnect2Id
? createWalletConnect2ConnectorWithId(walletConfig.walletconnect2Id) ? createWalletConnect2ConnectorWithId(walletConfig.walletconnect2Id)
: connectors.find(({ id }: { id: string }) => id === walletConnectionConfig.wagmiConnectorId); : connectors.find(({ id }: { id: string }) => id === walletConnectionConfig.wagmiConnectorId);
-6
View File
@@ -45,12 +45,6 @@ export const getWalletConnection = ({
break; break;
} }
case WalletConnectionType.WalletConnect1: {
return {
type: WalletConnectionType.WalletConnect1,
};
}
case WalletConnectionType.WalletConnect2: { case WalletConnectionType.WalletConnect2: {
return { return {
type: WalletConnectionType.WalletConnect2, type: WalletConnectionType.WalletConnect2,
+3 -7
View File
@@ -1,6 +1,5 @@
import { useCallback, useState, useMemo } from 'react'; import { useCallback, useState, useMemo } from 'react';
import styled, { type AnyStyledComponent } from 'styled-components'; import styled, { type AnyStyledComponent } from 'styled-components';
import { TESTNET_CHAIN_ID } from '@dydxprotocol/v4-client-js';
import { Root, Trigger, Content } from '@radix-ui/react-collapsible'; import { Root, Trigger, Content } from '@radix-ui/react-collapsible';
import { StatusResponse } from '@0xsquid/sdk'; import { StatusResponse } from '@0xsquid/sdk';
@@ -21,12 +20,14 @@ import { LoadingDots } from '@/components/Loading/LoadingDots';
import { layoutMixins } from '@/styles/layoutMixins'; import { layoutMixins } from '@/styles/layoutMixins';
type ElementProps = { type ElementProps = {
type: 'withdrawal' | 'deposit';
toAmount?: number; toAmount?: number;
triggeredAt?: number; triggeredAt?: number;
status?: StatusResponse; status?: StatusResponse;
}; };
export const TransferStatusToast = ({ export const TransferStatusToast = ({
type,
toAmount, toAmount,
triggeredAt = Date.now(), triggeredAt = Date.now(),
status, status,
@@ -38,11 +39,6 @@ export const TransferStatusToast = ({
// @ts-ignore status.errors is not in the type definition but can be returned // @ts-ignore status.errors is not in the type definition but can be returned
const error = status?.errors?.length ? status?.errors[0] : status?.error; const error = status?.errors?.length ? status?.errors[0] : status?.error;
const type = useMemo(
() => (status?.toChain?.chainData?.chainId === TESTNET_CHAIN_ID ? 'deposit' : 'withdrawal'),
[status]
);
const updateSecondsLeft = useCallback(() => { const updateSecondsLeft = useCallback(() => {
const fromChainEta = (status?.fromChain?.chainData?.estimatedRouteDuration || 0) * 1000; const fromChainEta = (status?.fromChain?.chainData?.estimatedRouteDuration || 0) * 1000;
const toChainEta = (status?.toChain?.chainData?.estimatedRouteDuration || 0) * 1000; const toChainEta = (status?.toChain?.chainData?.estimatedRouteDuration || 0) * 1000;
@@ -69,7 +65,7 @@ export const TransferStatusToast = ({
side="bottom" side="bottom"
slotReceipt={ slotReceipt={
<Styled.Receipt> <Styled.Receipt>
<TransferStatusSteps status={status} /> <TransferStatusSteps status={status} type={type} />
</Styled.Receipt> </Styled.Receipt>
} }
> >
+7 -4
View File
@@ -1,7 +1,6 @@
import { useMemo } from 'react'; import { useMemo } from 'react';
import styled, { css, keyframes, type AnyStyledComponent } from 'styled-components'; import styled, { css, keyframes, type AnyStyledComponent } from 'styled-components';
import { StatusResponse } from '@0xsquid/sdk'; import { StatusResponse } from '@0xsquid/sdk';
import { TESTNET_CHAIN_ID } from '@dydxprotocol/v4-client-js';
import { useStringGetter } from '@/hooks'; import { useStringGetter } from '@/hooks';
@@ -15,6 +14,7 @@ import { STRING_KEYS } from '@/constants/localization';
type ElementProps = { type ElementProps = {
status?: StatusResponse; status?: StatusResponse;
type: 'withdrawal' | 'deposit';
}; };
enum TransferStatusStep { enum TransferStatusStep {
@@ -24,14 +24,13 @@ enum TransferStatusStep {
Complete, Complete,
} }
export const TransferStatusSteps = ({ status }: ElementProps) => { export const TransferStatusSteps = ({ status, type }: ElementProps) => {
const stringGetter = useStringGetter(); const stringGetter = useStringGetter();
const { currentStep, steps, type } = useMemo(() => { const { currentStep, steps } = useMemo(() => {
const routeStatus = status?.routeStatus; const routeStatus = status?.routeStatus;
const fromChain = status?.fromChain?.chainData?.chainId; const fromChain = status?.fromChain?.chainData?.chainId;
const toChain = status?.toChain?.chainData?.chainId; const toChain = status?.toChain?.chainData?.chainId;
const type = toChain === TESTNET_CHAIN_ID ? 'deposit' : 'withdrawal';
const steps = [ const steps = [
{ {
@@ -74,6 +73,10 @@ export const TransferStatusSteps = ({ status }: ElementProps) => {
currentStep = TransferStatusStep.FromChain; currentStep = TransferStatusStep.FromChain;
} }
if (status?.squidTransactionStatus === 'success') {
currentStep = TransferStatusStep.Complete;
}
return { return {
currentStep, currentStep,
steps, steps,
+2 -2
View File
@@ -27,9 +27,9 @@ export const DisconnectDialog = ({ setIsOpen }: ElementProps) => {
}; };
return ( return (
<Dialog isOpen setIsOpen={setIsOpen} title="Disconnect"> <Dialog isOpen setIsOpen={setIsOpen} title={stringGetter({ key: STRING_KEYS.DISCONNECT })}>
<Styled.Content> <Styled.Content>
<p>Are you sure you want to disconnect your account?</p> <p>{stringGetter({ key: STRING_KEYS.DISCONNECT_CONFIRMATION })}</p>
<Styled.ButtonRow> <Styled.ButtonRow>
<Close asChild> <Close asChild>
<Button action={ButtonAction.Destroy} onClick={disconnect}> <Button action={ButtonAction.Destroy} onClick={disconnect}>
@@ -19,7 +19,7 @@ import { useDisplayedWallets } from '@/hooks/useDisplayedWallets';
import { breakpoints } from '@/styles'; import { breakpoints } from '@/styles';
import { layoutMixins } from '@/styles/layoutMixins'; import { layoutMixins } from '@/styles/layoutMixins';
const aboutWalletsLink = `https://www.dydxacademy.info/educational-video-series/onboarding-to-defi-with-dydx`; const aboutWalletsLink = `https://www.dydx.academy/video/defi-wallet`;
export const ChooseWallet = () => { export const ChooseWallet = () => {
const stringGetter = useStringGetter(); const stringGetter = useStringGetter();
@@ -34,7 +34,14 @@ export const ChooseWallet = () => {
<Styled.AlertMessage type={AlertType.Error}> <Styled.AlertMessage type={AlertType.Error}>
{ {
<h4> <h4>
Couldn't connect to {stringGetter({ key: wallets[selectedWalletType].stringKey })}. {stringGetter({
key: STRING_KEYS.COULD_NOT_CONNECT,
params: {
WALLET: stringGetter({
key: wallets[selectedWalletType].stringKey,
}),
},
})}
</h4> </h4>
} }
{selectedWalletError} {selectedWalletError}