diff --git a/src/lib/withdraw/actions/connect-wallet.ts b/src/lib/withdraw/actions/connect-wallet.ts index 62978b8..4c16225 100644 --- a/src/lib/withdraw/actions/connect-wallet.ts +++ b/src/lib/withdraw/actions/connect-wallet.ts @@ -4,7 +4,7 @@ import { iscAbi, iscContractAddress } from '$lib/withdraw'; import { WTOKEN_CONTRACT_CHAIN_MAP, wIOTAAbi, wSMRAbi, wToken } from '$lib/wrap'; import { defaultEvmStores, selectedAccount, web3 } from 'svelte-web3'; import { get } from 'svelte/store'; -import { addSelectedNetworkToMetamask, subscribeBalance } from '.'; +import { addSelectedNetworkToMetamask, subscribeBalance, subscribeConnectedNetwork } from '.'; import { updateWithdrawStateStore, withdrawStateStore } from '../stores'; export async function connectToWallet() { @@ -35,6 +35,7 @@ export async function connectToWallet() { const wTokenContractObj = new wToken(get(withdrawStateStore)?.contractWToken); updateWithdrawStateStore({ wTokenContractObj }); + await subscribeConnectedNetwork(); await subscribeBalance(); } catch (ex) { console.error('Failed to connect to wallet: ', ex.message); diff --git a/src/lib/withdraw/actions/disconnect-wallet.ts b/src/lib/withdraw/actions/disconnect-wallet.ts index 18f8cdc..22b7b43 100644 --- a/src/lib/withdraw/actions/disconnect-wallet.ts +++ b/src/lib/withdraw/actions/disconnect-wallet.ts @@ -1,8 +1,9 @@ import { defaultEvmStores } from 'svelte-web3'; -import { unsubscribeBalance } from './subscriptions'; +import { unsubscribeConnectedNetwork, unsubscribeBalance } from './subscriptions'; export async function disconnectWallet(): Promise { await defaultEvmStores.disconnect(); + unsubscribeConnectedNetwork(); unsubscribeBalance(); } diff --git a/src/lib/withdraw/actions/subscriptions.ts b/src/lib/withdraw/actions/subscriptions.ts index 985ef97..888cb4f 100644 --- a/src/lib/withdraw/actions/subscriptions.ts +++ b/src/lib/withdraw/actions/subscriptions.ts @@ -1,9 +1,15 @@ import { clearIntervalAsync, setIntervalAsync } from 'set-interval-async'; +import { chainId, connected, selectedAccount } from 'svelte-web3'; import { get } from 'svelte/store'; import { updateWithdrawStateStore, withdrawStateStore } from '../stores'; import { pollAccount } from './polls'; + +import { selectedNetwork } from '$lib/evm-toolkit'; +import { NotificationType, showNotification } from '$lib/notification'; +import { disconnectWallet } from '.'; + export async function subscribeBalance() { await unsubscribeBalance(); const $withdrawStateStore = get(withdrawStateStore); @@ -28,3 +34,28 @@ export async function unsubscribeBalance() { balancePollingHandle: undefined, }); } + +let connectedNetworkInterval: NodeJS.Timeout | null = null; +export async function subscribeConnectedNetwork() { + connectedNetworkInterval = setInterval(async () => { + if (get(connected) || get(selectedAccount)) { + if (BigInt(get(chainId)) !== BigInt(get(selectedNetwork)?.chainID)) { + try { + await disconnectWallet(); + } catch (e) { + showNotification({ + type: NotificationType.Error, + message: e, + }); + console.error(e); + } + } + } + }, 1000); +} + +export async function unsubscribeConnectedNetwork() { + if (connectedNetworkInterval) { + clearInterval(connectedNetworkInterval); + } +}