diff --git a/packages/desktop/components/modals/AccountActionsMenu.svelte b/packages/desktop/components/modals/AccountActionsMenu.svelte index 691e11a08bf..89d548291ba 100644 --- a/packages/desktop/components/modals/AccountActionsMenu.svelte +++ b/packages/desktop/components/modals/AccountActionsMenu.svelte @@ -34,6 +34,11 @@ modal?.close() } + function onWithdrawFromL2Click(): void { + openPopup({ id: PopupId.WithdrawFromL2 }) + modal?.close() + } + function onVerifyAddressClick(): void { const ADDRESS_INDEX = 0 checkOrConnectLedger(() => { @@ -79,6 +84,9 @@ onClick={onViewAddressHistoryClick} /> {/if} + {#if $activeProfile?.network?.id === NetworkId.Shimmer || $activeProfile?.network?.id === NetworkId.Testnet} + + {/if} {#if $isActiveLedgerProfile} + import { closePopup } from '@auxiliary/popup' + import { getSelectedAccount } from '@core/account' + import { localize } from '@core/i18n' + import { getArchivedBaseTokens } from '@core/layer-2/helpers/getArchivedBaseTokens' + import { getBaseToken } from '@core/profile' + import { truncateString } from '@core/utils' + import { formatTokenAmountPrecise } from '@core/wallet' + import { Button, FontWeight, KeyValueBox, Spinner, Text, TextType } from 'shared/components' + import { onMount } from 'svelte' + + let address: string | undefined = undefined + let withdrawableAmount: number | undefined = undefined + const isBusy = false + const isWithdrawing = false + + function onCancelClick(): void { + closePopup() + } + + async function onWithdrawFromL2Click(): Promise { + // todo: implement withdrawing + // await withdrawFunds(address) + } + + onMount(async () => { + address = getSelectedAccount().depositAddress + withdrawableAmount = await getArchivedBaseTokens(address) + }) + + +
+ + {localize('popups.withdrawFromL2.title')} + + {localize('popups.withdrawFromL2.body')} + {#if address} + + {:else} +
+ +
+ {/if} +
+ + +
+
diff --git a/packages/shared/lib/auxiliary/popup/enums/popup-id.enum.ts b/packages/shared/lib/auxiliary/popup/enums/popup-id.enum.ts index c0378ef4623..568a7fab5d4 100644 --- a/packages/shared/lib/auxiliary/popup/enums/popup-id.enum.ts +++ b/packages/shared/lib/auxiliary/popup/enums/popup-id.enum.ts @@ -49,4 +49,5 @@ export enum PopupId { VestingCollect = 'vestingCollect', PayoutDetails = 'payoutDetails', VestingRewardsFinder = 'vestingRewardsFinder', + WithdrawFromL2 = 'withdrawFromL2', } diff --git a/packages/shared/lib/core/layer-2/constants/withdraw.constant.ts b/packages/shared/lib/core/layer-2/constants/withdraw.constant.ts index 6f807a1fb1a..bb28c9b935b 100644 --- a/packages/shared/lib/core/layer-2/constants/withdraw.constant.ts +++ b/packages/shared/lib/core/layer-2/constants/withdraw.constant.ts @@ -1 +1 @@ -export const WITHDRAW = 0x9dcc0f41; \ No newline at end of file +export const WITHDRAW = 0x9dcc0f41 diff --git a/packages/shared/lib/core/layer-2/helpers/getArchivedBaseTokens.ts b/packages/shared/lib/core/layer-2/helpers/getArchivedBaseTokens.ts index ac8165f4d92..29ace955b4b 100644 --- a/packages/shared/lib/core/layer-2/helpers/getArchivedBaseTokens.ts +++ b/packages/shared/lib/core/layer-2/helpers/getArchivedBaseTokens.ts @@ -1,18 +1,20 @@ -const URL = - "https://archive.evm.shimmer.shimmer.network/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s/core/accounts/account/{address}/balance"; +import { get } from 'svelte/store' +import { activeProfile } from '@core/profile' +import { DEFAULT_CHAIN_CONFIGURATIONS } from '@core/network' interface Response { - baseTokens: number; + baseTokens: number } export async function getArchivedBaseTokens(address: string): Promise { - const url = URL.replace("{address}", address); - try { - const res: Response = await fetch(url) - .then((r) => r.json()); + const defaultChainConfig = DEFAULT_CHAIN_CONFIGURATIONS[get(activeProfile)?.network?.id] + const URL = `${defaultChainConfig?.archiveEndpoint}/core/accounts/account/${address}/balance` - return res.baseTokens; - } catch (_) { - return 0; - } + try { + const res: Response = await fetch(URL).then((r) => r.json()) + + return res.baseTokens + } catch (_) { + return 0 + } } diff --git a/packages/shared/lib/core/layer-2/helpers/widthdrawL2Funds.ts b/packages/shared/lib/core/layer-2/helpers/widthdrawL2Funds.ts index bf5d6405fb3..d62fe1c4088 100644 --- a/packages/shared/lib/core/layer-2/helpers/widthdrawL2Funds.ts +++ b/packages/shared/lib/core/layer-2/helpers/widthdrawL2Funds.ts @@ -1,19 +1,21 @@ -const URL = - "https://archive.evm.shimmer.shimmer.network/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s/core/accounts/account/{address}/balance"; +import { get } from 'svelte/store' +import { activeProfile } from '@core/profile' +import { DEFAULT_CHAIN_CONFIGURATIONS } from '@core/network' interface Response { - baseTokens: number; + baseTokens: number } +export async function withdrawFunds(address: string): Promise { + const defaultChainConfig = DEFAULT_CHAIN_CONFIGURATIONS[get(activeProfile)?.network?.id] + // todo: change to withdraw endpoint + const URL = `${defaultChainConfig?.archiveEndpoint}/core/accounts/account/${address}/balance` -export async function withdrawFunds(address: string) { - const url = URL.replace("{address}", address); - try { - const res: Response = await fetch(url) - .then((r) => r.json()); + try { + const res: Response = await fetch(URL).then((r) => r.json()) - return res.baseTokens; - } catch (_) { - return 0; - } + return res.baseTokens + } catch (_) { + return 0 + } } diff --git a/packages/shared/lib/core/network/constants/default-chain-configurations.constant.ts b/packages/shared/lib/core/network/constants/default-chain-configurations.constant.ts index 340325a1a74..6aa59426305 100644 --- a/packages/shared/lib/core/network/constants/default-chain-configurations.constant.ts +++ b/packages/shared/lib/core/network/constants/default-chain-configurations.constant.ts @@ -11,6 +11,8 @@ export const DEFAULT_CHAIN_CONFIGURATIONS: Readonly<{ [id in NetworkId]?: ChainM aliasAddress: 'smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s', iscpEndpoint: 'https://api.evm.shimmer.network/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s', + archiveEndpoint: + 'https://archive.evm.shimmer.network/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s', }, [NetworkId.Testnet]: { type: ChainType.Iscp, @@ -19,5 +21,7 @@ export const DEFAULT_CHAIN_CONFIGURATIONS: Readonly<{ [id in NetworkId]?: ChainM aliasAddress: 'rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex', iscpEndpoint: 'https://api.evm.testnet.shimmer.network/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex', + archiveEndpoint: + 'https://archive.evm.testnet.shimmer.network/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex', }, } diff --git a/packages/shared/lib/core/network/interfaces/chain-metadata.interface.ts b/packages/shared/lib/core/network/interfaces/chain-metadata.interface.ts index aeaa86e36d4..22569ae5ae7 100644 --- a/packages/shared/lib/core/network/interfaces/chain-metadata.interface.ts +++ b/packages/shared/lib/core/network/interfaces/chain-metadata.interface.ts @@ -11,4 +11,5 @@ export interface IIscpChainMetadata extends IBaseChainMetadata { type: ChainType.Iscp aliasAddress: string iscpEndpoint: string + archiveEndpoint: string } diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 772f587a656..d1eb9dc981e 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1188,6 +1188,12 @@ "disclaimer": "List of addresses with funds or known by this profile", "indexAndType": "{internal, select, true {Internal address} other {Deposit address}} {index}", "internal": "Internal" + }, + "withdrawFromL2": { + "title": "Withdraw from L2", + "body": "List of addresses with withdrawable funds", + "withdraw": "Withdraw", + "withdrawing": "Withdrawing..." } }, "charts": { @@ -1340,6 +1346,7 @@ "viewStatus": "View status", "viewAddressHistory": "View address history", "viewBalanceBreakdown": "View balance breakdown", + "withdrawFromL2": "Withdraw from L2", "verifyDepositAddress": "Verify deposit address", "showHiddenAccounts": "Show hidden wallets", "confirm": "Confirm",