diff --git a/source/pages/Send/SendEth.tsx b/source/pages/Send/SendEth.tsx
index 64953d313..bfff929b3 100644
--- a/source/pages/Send/SendEth.tsx
+++ b/source/pages/Send/SendEth.tsx
@@ -35,7 +35,7 @@ export const SendEth = () => {
gasPrice: 0,
});
const [isMessageVisible, setIsMessageVisible] = useState(false);
- const [inputValue, setInputValue] = useState({ address: '', amount: 0 });
+ const [inputValue, setInputValue] = useState({ address: '', amount: null });
const [isValidAddress, setIsValidAddress] = useState(null);
const [isValidAmount, setIsValidAmount] = useState(null);
diff --git a/source/pages/Settings/CustomRPC.tsx b/source/pages/Settings/CustomRPC.tsx
index 566387add..fc6863db7 100644
--- a/source/pages/Settings/CustomRPC.tsx
+++ b/source/pages/Settings/CustomRPC.tsx
@@ -33,7 +33,7 @@ const CustomRPCView = () => {
>(null);
const [isSyscoinRpc, setIsSyscoinRpc] = useState(Boolean(isSyscoinSelected));
const { activeNetwork, isBitcoinBased } = useSelector(
- (state: RootState) => state.vault
+ (rootState: RootState) => rootState.vault
);
const { wallet } = getController();
const { alert, navigate } = useUtils();
@@ -74,7 +74,6 @@ const CustomRPCView = () => {
setAddedRpc(true);
return;
}
-
await controller.wallet.editCustomRpc(customRpc, state.selected);
setLoading(false);
setAddedRpc(true);
@@ -99,7 +98,7 @@ const CustomRPCView = () => {
url: (state && state.selected && state.selected.url) ?? '',
chainId: (state && state.selected && state.selected.chainId) ?? '',
symbol: (state && state.selected && state.selected.currency) ?? '',
- explorer: (state && state.selected && state.selected.explorer) ?? '',
+ explorer: (state && state.selected && state.selected.url) ?? '',
};
const isInputDisableByEditMode = state ? state.isDefault : false;
diff --git a/source/pages/Settings/ExternalAddRPC.tsx b/source/pages/Settings/ExternalAddRPC.tsx
index 2eb409c3e..19f0dc594 100644
--- a/source/pages/Settings/ExternalAddRPC.tsx
+++ b/source/pages/Settings/ExternalAddRPC.tsx
@@ -1,6 +1,8 @@
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
+import { INetwork } from '@pollum-io/sysweb3-network';
+
import {
DefaultModal,
Layout,
@@ -12,22 +14,32 @@ import { dispatchBackgroundEvent, getController } from 'utils/browser';
const CustomRPCExternal = () => {
const { host, ...data } = useQueryData();
const { t } = useTranslation();
- const [loading, setLoading] = useState(false);
- const [confirmed, setConfirmed] = useState(false);
const { alert } = useUtils();
const controller = getController();
+
+ const [loading, setLoading] = useState(false);
+ const [confirmed, setConfirmed] = useState(false);
+
const wallet = controller.wallet;
+
const onSubmit = async (customRpc: any) => {
setLoading(true);
+ const networkWithCustomParams = {
+ ...customRpc,
+ explorer: data?.apiUrl ? data.apiUrl : customRpc?.apiUrl || '',
+ } as INetwork;
+
try {
- await controller.wallet.addCustomRpc(customRpc).then(async (network) => {
- setConfirmed(true);
- setLoading(false);
- const type = data.eventName;
- dispatchBackgroundEvent(`${type}.${host}`, null);
- await wallet.setActiveNetwork(network, 'ethereum');
- });
+ await controller.wallet
+ .addCustomRpc(networkWithCustomParams)
+ .then(async (network) => {
+ setConfirmed(true);
+ setLoading(false);
+ const type = data.eventName;
+ dispatchBackgroundEvent(`${type}.${host}`, null);
+ await wallet.setActiveNetwork(network, 'ethereum');
+ });
} catch (error: any) {
alert.removeAll();
alert.error(error.message);
diff --git a/source/routers/index.tsx b/source/routers/index.tsx
index 96c923e7b..521626668 100644
--- a/source/routers/index.tsx
+++ b/source/routers/index.tsx
@@ -41,7 +41,6 @@ import {
import { WarningModal } from 'components/Modal';
import { useUtils } from 'hooks/index';
import { ChainErrorPage } from 'pages/Chain';
-import { Faucet } from 'pages/Faucet';
import { SwitchNetwork } from 'pages/SwitchNetwork';
import {
inactivityTime,
@@ -199,11 +198,6 @@ export const Router = () => {
element={
} />}
/>
-
} />}
- />
-
} />}
diff --git a/source/scripts/Background/controllers/MainController.ts b/source/scripts/Background/controllers/MainController.ts
index aeb19079a..f60ab1597 100644
--- a/source/scripts/Background/controllers/MainController.ts
+++ b/source/scripts/Background/controllers/MainController.ts
@@ -52,7 +52,6 @@ import {
setTransactionStatusToAccelerated,
setUpdatedNftsToState,
setOpenDAppErrorModal,
- setFaucetModalState as setFaucetState,
} from 'state/vault';
import {
IOmmitedAccount,
@@ -122,10 +121,6 @@ const MainController = (walletState): IMainController => {
store.dispatch(setEthProperty(exist));
};
- const setFaucetModalState = (chainId: number) => {
- store.dispatch(setFaucetState({ chainId }));
- };
-
const setAdvancedSettings = (advancedProperty: string, isActive: boolean) => {
store.dispatch(setSettings({ advancedProperty, isActive }));
};
@@ -1095,6 +1090,8 @@ const MainController = (walletState): IMainController => {
activeNetwork.url
);
+ console.log('updatedNfts', updatedNfts);
+
const validateUpdatedAndPreviousNftsLength =
updatedNfts.length < currentAccount.assets.nfts.length;
@@ -1647,7 +1644,6 @@ const MainController = (walletState): IMainController => {
validatePendingEvmTransactions,
...keyringManager,
openDAppErrorModal,
- setFaucetModalState,
};
};
diff --git a/source/scripts/Background/controllers/MigrationController.ts b/source/scripts/Background/controllers/MigrationController.ts
new file mode 100644
index 000000000..34007ca53
--- /dev/null
+++ b/source/scripts/Background/controllers/MigrationController.ts
@@ -0,0 +1,11 @@
+import { loadState } from 'utils/localStorage';
+
+const MigrationController = async () => {
+ const state: any = await loadState();
+
+ if (!state) {
+ return;
+ }
+};
+
+export default MigrationController;
diff --git a/source/scripts/Background/controllers/faucetController.ts b/source/scripts/Background/controllers/faucetController.ts
deleted file mode 100644
index a6eaa1342..000000000
--- a/source/scripts/Background/controllers/faucetController.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import axios from 'axios';
-
-const claimFaucet = async (chainId: number, walletAddress: string) => {
- let chainName: string;
-
- if (chainId === 57) {
- chainName = `nevm-mainnet`;
- } else if (chainId === 5700) {
- chainName = `nevm-testnet`;
- } else if (chainId === 57000) {
- chainName = `rollux-testnet`;
- } else if (chainId === 570) {
- chainName = `rollux-mainnet`;
- } else {
- chainName = ``;
- }
- try {
- const { data } = await axios.get(
- `https://chains.tools/api/faucet/claim?networkKey=${chainName}&walletAddress=${walletAddress}`
- );
- return data;
- } catch (err) {
- return err;
- }
-};
-
-export { claimFaucet };
diff --git a/source/scripts/Background/controllers/index.ts b/source/scripts/Background/controllers/index.ts
index 704a23f64..b4a1fee1a 100755
--- a/source/scripts/Background/controllers/index.ts
+++ b/source/scripts/Background/controllers/index.ts
@@ -19,7 +19,6 @@ import {
setAccountTypeInAccountsObject,
setActiveNetwork,
setAdvancedSettings,
- setFaucetModalState,
setIsLastTxConfirmed,
setNetwork,
setTimer,
@@ -180,12 +179,6 @@ const MasterController = (
store.getState()?.vault?.networks?.[TransactionsType.Syscoin][57]
?.isTestnet === undefined;
- const isOldFaucetState = store.getState()?.vault?.faucetModal === undefined;
-
- if (isOldFaucetState) {
- store.dispatch(setFaucetModalState({ chainId: 0, isFirstTime: true }));
- }
-
if (isNetworkOldState || isNetworkOldEVMStateWithoutTestnet) {
Object.values(initialNetworksState[TransactionsType.Ethereum]).forEach(
(network) => {
diff --git a/source/scripts/Background/controllers/message-handler/types.ts b/source/scripts/Background/controllers/message-handler/types.ts
index 73eecea6f..af875f982 100644
--- a/source/scripts/Background/controllers/message-handler/types.ts
+++ b/source/scripts/Background/controllers/message-handler/types.ts
@@ -10,13 +10,6 @@ export enum HardWallets {
TREZOR = 'TREZOR',
}
-export enum FaucetChainIds {
- RolluxMainnet = 570,
- RolluxTestnet = 57000,
- nevmTestnet = 5700,
- nevmMainnet = 57,
-}
-
//TODO: addtype for rpc subscription notifications here
export enum PaliEvents {
accountsChanged = 'pali_accountsChanged',
diff --git a/source/scripts/Background/index.ts b/source/scripts/Background/index.ts
index 1871c07a6..d0970508c 100755
--- a/source/scripts/Background/index.ts
+++ b/source/scripts/Background/index.ts
@@ -11,6 +11,7 @@ import { log } from 'utils/logger';
import { PaliLanguages } from 'utils/types';
import MasterController, { IMasterController } from './controllers';
+import MigrationController from './controllers/MigrationController';
import { IEvmTransactionResponse } from './controllers/transactions/types';
/* eslint-disable @typescript-eslint/ban-ts-comment */
declare global {
@@ -33,6 +34,7 @@ const onWalletReady = (windowController: IMasterController) => {
};
if (!window.controller) {
+ MigrationController();
window.controller = MasterController(onWalletReady);
}
diff --git a/source/state/vault/index.ts b/source/state/vault/index.ts
index e338f7647..8ec7de1b2 100644
--- a/source/state/vault/index.ts
+++ b/source/state/vault/index.ts
@@ -79,12 +79,6 @@ export const initialState: IVaultState = {
networks: initialNetworksState,
error: false,
isPolling: false,
- faucetModal: {
- 57: true,
- 570: true,
- 5700: true,
- 57000: true,
- },
currentBlock: undefined,
coinsList: [],
};
@@ -306,27 +300,6 @@ const VaultState = createSlice({
setIsNetworkChanging(state: IVaultState, action: PayloadAction
) {
state.isNetworkChanging = action.payload;
},
- setFaucetModalState: (
- state: IVaultState,
- action: PayloadAction<{ chainId: number; isFirstTime?: boolean }>
- ) => {
- const { chainId, isFirstTime } = action.payload;
- if (state.isBitcoinBased) {
- return;
- }
-
- if (isFirstTime) {
- state.faucetModal = {
- 57: true,
- 570: true,
- 5700: true,
- 57000: true,
- };
- return;
- }
-
- state.faucetModal[chainId] = false;
- },
setIsDappAskingToChangeNetwork(
state: IVaultState,
action: PayloadAction
@@ -843,7 +816,6 @@ export const {
setTransactionStatusToAccelerated,
setCoinsList,
setIsLastTxConfirmed,
- setFaucetModalState,
} = VaultState.actions;
export default VaultState.reducer;
diff --git a/source/state/vault/types.ts b/source/state/vault/types.ts
index 6598f1132..7a8b1e78a 100644
--- a/source/state/vault/types.ts
+++ b/source/state/vault/types.ts
@@ -28,9 +28,6 @@ export interface IVaultState {
coinsList: any[];
currentBlock: ethers.providers.Block;
error: boolean;
- faucetModal: {
- [k: number]: boolean;
- };
hasErrorOndAppEVM: boolean;
hasEthProperty: boolean;
isBitcoinBased: boolean;
diff --git a/source/types/controllers.ts b/source/types/controllers.ts
index 06d8dcc9f..cdac0c482 100644
--- a/source/types/controllers.ts
+++ b/source/types/controllers.ts
@@ -126,7 +126,6 @@ export interface IMainController extends IKeyringManager {
newTxValue: IEvmTransactionResponse
) => void;
setEvmTransactionAsCanceled: (txHash: string, chainID: number) => void;
- setFaucetModalState: (chainId: number) => void;
setHasEthProperty: (exist: boolean) => void;
setIsAutolockEnabled: (isEnabled: boolean) => void;
setIsLastTxConfirmed: (
diff --git a/source/utils/browser.ts b/source/utils/browser.ts
index 75bc804ef..e03efdd86 100644
--- a/source/utils/browser.ts
+++ b/source/utils/browser.ts
@@ -12,3 +12,7 @@ export const dispatchBackgroundEvent = (eventName: string, data: any) => {
const background = browser.extension.getBackgroundPage();
background.dispatchEvent(new CustomEvent(eventName, { detail: data }));
};
+
+export const reload = () => {
+ browser.runtime.reload();
+};
diff --git a/source/utils/localStorage.ts b/source/utils/localStorage.ts
new file mode 100644
index 000000000..08cdc5136
--- /dev/null
+++ b/source/utils/localStorage.ts
@@ -0,0 +1,25 @@
+import store from 'state/store';
+
+export const saveState = async (appState) => {
+ try {
+ const serializedState = JSON.stringify(appState);
+ await localStorage.setItem('persist:root', serializedState);
+ console.log('State saved successfully!');
+ } catch (e) {
+ console.error(' Error saving state', e);
+ }
+};
+
+export const loadState = async () => {
+ try {
+ const state = store.getState();
+
+ if (state === null) {
+ return undefined;
+ }
+ return state;
+ } catch (e) {
+ console.error(' Error getting state', e);
+ return null;
+ }
+};
diff --git a/source/utils/version.ts b/source/utils/version.ts
new file mode 100644
index 000000000..bc67f978f
--- /dev/null
+++ b/source/utils/version.ts
@@ -0,0 +1,16 @@
+// This function compares two versions. The format should be {major}.{minor}.{patch}
+// The function returns -1 if the first version (v1) is less than the second (v2), 1 if the first version (v1) is greater than the second (v2), and 0 if they are equal.
+export const compareVersions = (v1: string, v2: string): number => {
+ const v1Parts = v1.split('.').map(Number);
+ const v2Parts = v2.split('.').map(Number);
+
+ for (let i = 0; i < 3; i++) {
+ if (v1Parts[i] > v2Parts[i]) {
+ return 1;
+ } else if (v1Parts[i] < v2Parts[i]) {
+ return -1;
+ }
+ }
+
+ return 0;
+};
diff --git a/yarn.lock b/yarn.lock
index fa1ad3a49..c06af75b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3131,9 +3131,11 @@
integrity sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ==
"@types/node@^18.16.3":
- version "18.16.9"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.9.tgz#e79416d778a8714597342bb87efb5a6e914f7a73"
- integrity sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==
+ version "18.19.43"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.43.tgz#fe01bb599b60bb3279c26d0fdb751d2f3e299ae0"
+ integrity sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==
+ dependencies:
+ undici-types "~5.26.4"
"@types/normalize-package-data@^2.4.0":
version "2.4.1"
@@ -13395,6 +13397,11 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
undici@^5.14.0:
version "5.22.1"
resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b"