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 806ed15..338ec3f 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 { addAccountsForNetwork, getNextAccountId, storeNetworkData } from "../utils/accounts"; import { useNetworks } from "../context/NetworksContext"; import { COSMOS, @@ -181,6 +181,15 @@ const AddNetwork = () => { const retrievedNetworksData = await storeNetworkData(newNetworkData); setNetworksData(retrievedNetworksData); + // Get number of accounts in first network + const nextAccountId = 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`, @@ -199,6 +208,8 @@ const AddNetwork = () => { ), ]); + await addAccountsForNetwork(selectedNetwork!, nextAccountId - 1); + navigation.navigate("Home"); }, [navigation, namespace, setNetworksData], diff --git a/src/utils/accounts.ts b/src/utils/accounts.ts index 3b010d5..b65e63d 100644 --- a/src/utils/accounts.ts +++ b/src/utils/accounts.ts @@ -87,15 +87,44 @@ const createWalletFromMnemonic = async ( }; const addAccount = async ( - networkData: NetworksDataState, + chainId: string, ): 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.chainId === chainId) { + selectedNetworkAccount = account; + } + } + + return selectedNetworkAccount; + } catch (error) { + console.error('Error creating account:', error); + } +}; + +const addAccountsForNetwork = 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); } @@ -343,6 +372,7 @@ export { createWallet, addAccount, addAccountFromHDPath, + addAccountsForNetwork, storeNetworkData, retrieveNetworksData, retrieveAccounts,