From 2a07bc8b358ed7beb5c2cb9d8e5c8ee99b6cbd20 Mon Sep 17 00:00:00 2001 From: Shreerang Kale Date: Thu, 5 Jun 2025 10:21:00 +0530 Subject: [PATCH 1/4] Add accounts for all networks --- src/screens/AddNetwork.tsx | 1 + src/utils/accounts.ts | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/screens/AddNetwork.tsx b/src/screens/AddNetwork.tsx index 806ed15..46fcf7e 100644 --- a/src/screens/AddNetwork.tsx +++ b/src/screens/AddNetwork.tsx @@ -135,6 +135,7 @@ const AddNetwork = () => { ); }, CHAINID_DEBOUNCE_DELAY); + // TODO: Handle replicating existing accounts after adding new network const submit = useCallback( async (data: z.infer) => { const newNetworkData = { diff --git a/src/utils/accounts.ts b/src/utils/accounts.ts index 3b010d5..b384071 100644 --- a/src/utils/accounts.ts +++ b/src/utils/accounts.ts @@ -87,15 +87,26 @@ const createWalletFromMnemonic = async ( }; const addAccount = async ( - networkData: NetworksDataState, + selectedNetwork: NetworksDataState, ): Promise => { try { - const namespaceChainId = `${networkData.namespace}:${networkData.chainId}`; - const id = await getNextAccountId(namespaceChainId); - const hdPath = getHDPath(namespaceChainId, `0'/0/${id}`); - const accounts = await addAccountFromHDPath(hdPath, networkData); - await updateAccountCounter(namespaceChainId, id); - return accounts; + let selectedNetworkAccount + const networksData = await retrieveNetworksData(); + + // Add account to all networks and return account for selected network + for (const network of networksData) { + const namespaceChainId = `${network.namespace}:${network.chainId}`; + const id = await getNextAccountId(namespaceChainId); + const hdPath = getHDPath(namespaceChainId, `0'/0/${id}`); + const account = await addAccountFromHDPath(hdPath, network); + await updateAccountCounter(namespaceChainId, id); + + if (network.networkId === selectedNetwork.networkId) { + selectedNetworkAccount = account; + } + } + + return selectedNetworkAccount; } catch (error) { console.error('Error creating account:', error); } -- 2.45.2 From 5c335d39dbfb33bdc4d6af709e02dd7f25a5f45e Mon Sep 17 00:00:00 2001 From: Shreerang Kale Date: Thu, 5 Jun 2025 12:28:59 +0530 Subject: [PATCH 2/4] Prefill accounts for new network --- src/screens/AddNetwork.tsx | 14 ++++++++++++-- src/utils/accounts.ts | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/screens/AddNetwork.tsx b/src/screens/AddNetwork.tsx index 46fcf7e..7f804ed 100644 --- a/src/screens/AddNetwork.tsx +++ b/src/screens/AddNetwork.tsx @@ -13,7 +13,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { StackParamsList } from "../types"; import { SelectNetworkType } from "../components/SelectNetworkType"; -import { storeNetworkData } from "../utils/accounts"; +import { addAccountsForANetwork, getNextAccountId, storeNetworkData } from "../utils/accounts"; import { useNetworks } from "../context/NetworksContext"; import { COSMOS, @@ -135,7 +135,6 @@ const AddNetwork = () => { ); }, CHAINID_DEBOUNCE_DELAY); - // TODO: Handle replicating existing accounts after adding new network const submit = useCallback( async (data: z.infer) => { const newNetworkData = { @@ -182,6 +181,15 @@ const AddNetwork = () => { const retrievedNetworksData = await storeNetworkData(newNetworkData); setNetworksData(retrievedNetworksData); + // Get number of accounts in first network + const currentNumberOfAccounts = await getNextAccountId( + `${retrievedNetworksData[0].namespace}:${retrievedNetworksData[0].chainId}`, + ); + + const selectedNetwork = retrievedNetworksData.find( + (network) => network.chainId === newNetworkData.chainId, + ); + await Promise.all([ setInternetCredentials( `accounts/${newNetworkData.namespace}:${newNetworkData.chainId}/0`, @@ -200,6 +208,8 @@ const AddNetwork = () => { ), ]); + await addAccountsForANetwork(selectedNetwork!, currentNumberOfAccounts - 1); + navigation.navigate("Home"); }, [navigation, namespace, setNetworksData], diff --git a/src/utils/accounts.ts b/src/utils/accounts.ts index b384071..abeadcb 100644 --- a/src/utils/accounts.ts +++ b/src/utils/accounts.ts @@ -112,6 +112,24 @@ const addAccount = async ( } }; +const addAccountsForANetwork = async ( + network: NetworksDataState, + numberOfAccounts: number, +): Promise => { + try { + const namespaceChainId = `${network.namespace}:${network.chainId}`; + + for (let i = 0; i < numberOfAccounts; i++) { + const id = await getNextAccountId(namespaceChainId); + const hdPath = getHDPath(namespaceChainId, `0'/0/${id}`); + await addAccountFromHDPath(hdPath, network); + await updateAccountCounter(namespaceChainId, id); + } + } catch (error) { + console.error('Error creating account:', error); + } +}; + const addAccountFromHDPath = async ( hdPath: string, networkData: NetworksDataState, @@ -354,6 +372,7 @@ export { createWallet, addAccount, addAccountFromHDPath, + addAccountsForANetwork, storeNetworkData, retrieveNetworksData, retrieveAccounts, -- 2.45.2 From 75df51b7804c3d277ac3142d6eed13e17afd514c Mon Sep 17 00:00:00 2001 From: Shreerang Kale Date: Thu, 5 Jun 2025 13:51:48 +0530 Subject: [PATCH 3/4] Rename methods --- src/components/Accounts.tsx | 2 +- src/hooks/useAddAccountEmbed.ts | 2 +- src/screens/AddNetwork.tsx | 4 ++-- src/utils/accounts.ts | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/Accounts.tsx b/src/components/Accounts.tsx index ee7eb44..f1de0e6 100644 --- a/src/components/Accounts.tsx +++ b/src/components/Accounts.tsx @@ -85,7 +85,7 @@ const Accounts = () => { const addAccountHandler = async () => { setIsAccountCreating(true); - const newAccount = await addAccount(selectedNetwork!); + const newAccount = await addAccount(selectedNetwork!.chainId); setIsAccountCreating(false); if (newAccount) { updateAccounts(newAccount); diff --git a/src/hooks/useAddAccountEmbed.ts b/src/hooks/useAddAccountEmbed.ts index 1182a90..b64aa86 100644 --- a/src/hooks/useAddAccountEmbed.ts +++ b/src/hooks/useAddAccountEmbed.ts @@ -16,7 +16,7 @@ const useAddAccountEmbed = () => { const { getAccountsData } = useAccountsData(); const addAccountHandler = useCallback(async (network: NetworksDataState) => { - const newAccount = await addAccount(network); + const newAccount = await addAccount(network.chainId); if (newAccount) { setAccounts(prev => [...prev, newAccount]); setCurrentIndex(newAccount.index); diff --git a/src/screens/AddNetwork.tsx b/src/screens/AddNetwork.tsx index 7f804ed..b91eff5 100644 --- a/src/screens/AddNetwork.tsx +++ b/src/screens/AddNetwork.tsx @@ -13,7 +13,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { StackParamsList } from "../types"; import { SelectNetworkType } from "../components/SelectNetworkType"; -import { addAccountsForANetwork, getNextAccountId, storeNetworkData } from "../utils/accounts"; +import { addAccountsForNetwork, getNextAccountId, storeNetworkData } from "../utils/accounts"; import { useNetworks } from "../context/NetworksContext"; import { COSMOS, @@ -208,7 +208,7 @@ const AddNetwork = () => { ), ]); - await addAccountsForANetwork(selectedNetwork!, currentNumberOfAccounts - 1); + await addAccountsForNetwork(selectedNetwork!, currentNumberOfAccounts - 1); navigation.navigate("Home"); }, diff --git a/src/utils/accounts.ts b/src/utils/accounts.ts index abeadcb..b65e63d 100644 --- a/src/utils/accounts.ts +++ b/src/utils/accounts.ts @@ -87,7 +87,7 @@ const createWalletFromMnemonic = async ( }; const addAccount = async ( - selectedNetwork: NetworksDataState, + chainId: string, ): Promise => { try { let selectedNetworkAccount @@ -101,7 +101,7 @@ const addAccount = async ( const account = await addAccountFromHDPath(hdPath, network); await updateAccountCounter(namespaceChainId, id); - if (network.networkId === selectedNetwork.networkId) { + if (network.chainId === chainId) { selectedNetworkAccount = account; } } @@ -112,7 +112,7 @@ const addAccount = async ( } }; -const addAccountsForANetwork = async ( +const addAccountsForNetwork = async ( network: NetworksDataState, numberOfAccounts: number, ): Promise => { @@ -372,7 +372,7 @@ export { createWallet, addAccount, addAccountFromHDPath, - addAccountsForANetwork, + addAccountsForNetwork, storeNetworkData, retrieveNetworksData, retrieveAccounts, -- 2.45.2 From 6bc6080e68871df3f1f99d5dac0009c22d043a6c Mon Sep 17 00:00:00 2001 From: Shreerang Kale Date: Thu, 5 Jun 2025 14:01:33 +0530 Subject: [PATCH 4/4] Rename variable --- src/screens/AddNetwork.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/screens/AddNetwork.tsx b/src/screens/AddNetwork.tsx index b91eff5..338ec3f 100644 --- a/src/screens/AddNetwork.tsx +++ b/src/screens/AddNetwork.tsx @@ -182,7 +182,7 @@ const AddNetwork = () => { setNetworksData(retrievedNetworksData); // Get number of accounts in first network - const currentNumberOfAccounts = await getNextAccountId( + const nextAccountId = await getNextAccountId( `${retrievedNetworksData[0].namespace}:${retrievedNetworksData[0].chainId}`, ); @@ -208,7 +208,7 @@ const AddNetwork = () => { ), ]); - await addAccountsForNetwork(selectedNetwork!, currentNumberOfAccounts - 1); + await addAccountsForNetwork(selectedNetwork!, nextAccountId - 1); navigation.navigate("Home"); }, -- 2.45.2