From b19d6e55fc0455d9eb9e1e1ab6e72ce0c1515d32 Mon Sep 17 00:00:00 2001 From: Nicole O'Brien Date: Wed, 15 Nov 2023 09:09:13 +0000 Subject: [PATCH] release: desktop 0.1.0 (#1371) * chore: set feature flags * remove border bottom (#1372) * add feature flag for particles (#1374) * fix: filter modal height after re-open (#1369) * fix: filter modal height after re-open * fix calculation * revert visibility control changes * Fix: gas estimation (#1373) * feat: throw error if gasEstimate is wrong * fix: update fallback amounts --------- Co-authored-by: Nicole O'Brien * calculate storage deposit on mint nft (#1375) Co-authored-by: Nicole O'Brien * fix: image preventing click * dont restart the poll on dashboard render (#1376) Co-authored-by: Tuditi <45079109+Tuditi@users.noreply.github.com> * fix: hideValue in NodeConfigurationForm's SelectInput * hotfix: removes `link` currency (crashes the app & corrupts profile) * Add fix for zero balance (#1378) * chore: increment version to 0.1.0-alpha-7 * feat: follow MM convention for using address indices to generate multiple accounts (#1381) * feat: follow MM convention * chore: prepare release * fix: tokenError reset * fix: early access instead of production in version toast * chore: remove private token from auto update * chore: disable faq --------- Co-authored-by: Mark Nardi Co-authored-by: Jean Ribeiro Co-authored-by: Tuditi <45079109+Tuditi@users.noreply.github.com> Co-authored-by: Matthew Maxwell <44885822+maxwellmattryan@users.noreply.github.com> Co-authored-by: Tuditi --- .github/workflows/reusable_build.yml | 35 ++++++++---------- .../popups/MintNftConfirmationPopup.svelte | 23 +++++++----- packages/desktop/electron-builder-config.ts | 3 -- packages/desktop/features/app.features.ts | 3 ++ .../desktop/features/contacts.features.ts | 2 +- .../desktop/features/onboarding.features.ts | 2 +- .../desktop/features/settings.features.ts | 2 +- packages/desktop/package.json | 2 +- .../views/components/Background.svelte | 3 +- .../desktop/views/dashboard/Dashboard.svelte | 6 ++-- .../send-flow/views/SelectTokenView.svelte | 36 +++++++++++-------- .../views/SettingsListForCategory.svelte | 13 ++++++- .../atoms/LedgerIllustration.svelte | 2 +- .../shared/src/components/modals/Modal.svelte | 23 ++++++------ .../organisms/NodeConfigurationForm.svelte | 1 + .../generateAndStoreEvmAddressForAccounts.ts | 22 +++++++----- .../fallback-estimated-gas.constant.ts | 6 ++-- .../core/market/enums/market-currency.enum.ts | 1 - .../core/network/classes/iscp-chain.class.ts | 7 +++- .../canAccountMakeStardustTransaction.ts | 28 +++++++++++++++ .../src/lib/core/network/utils/index.ts | 1 + .../actions/send/signAndSendEvmTransaction.ts | 7 +++- .../lib/core/wallet/actions/signMessage.ts | 7 ++-- .../interfaces/app-features.interface.ts | 1 + packages/shared/src/locales/en.json | 3 +- 25 files changed, 153 insertions(+), 86 deletions(-) create mode 100644 packages/shared/src/lib/core/network/utils/canAccountMakeStardustTransaction.ts diff --git a/.github/workflows/reusable_build.yml b/.github/workflows/reusable_build.yml index 39a75d6d39..e6fb1f58a4 100644 --- a/.github/workflows/reusable_build.yml +++ b/.github/workflows/reusable_build.yml @@ -63,36 +63,36 @@ jobs: - name: Set up certificate (Windows) if: ${{ inputs.sign && inputs.os == 'windows-2022' }} run: | - echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 - shell: bash + echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 + shell: bash - name: Set variables for signing (Windows) if: ${{ inputs.sign && inputs.os == 'windows-2022' }} run: | - echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV" - echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV" - echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV" - echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV" - echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH - echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH - echo "C:\Program Files\DigiCert\DigiCert Keylocker Tools" >> $GITHUB_PATH + echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV" + echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV" + echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV" + echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV" + echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH + echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH + echo "C:\Program Files\DigiCert\DigiCert Keylocker Tools" >> $GITHUB_PATH shell: bash - name: Install DigiCert KeyLocker KSP (Windows) if: ${{ inputs.sign && inputs.os == 'windows-2022' }} run: | - curl -X GET "https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download" -H "x-api-key:${{ secrets.SM_API_KEY }}" -o Keylockertools-windows-x64.msi - msiexec /i Keylockertools-windows-x64.msi /quiet /qn - smksp_registrar.exe list - smctl.exe keypair ls - C:\\Windows\\System32\\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user + curl -X GET "https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download" -H "x-api-key:${{ secrets.SM_API_KEY }}" -o Keylockertools-windows-x64.msi + msiexec /i Keylockertools-windows-x64.msi /quiet /qn + smksp_registrar.exe list + smctl.exe keypair ls + C:\\Windows\\System32\\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user shell: cmd - name: Sync Certificates with KeyLocker KSP (Windows) if: ${{ inputs.sign && inputs.os == 'windows-2022' }} run: smctl windows certsync shell: cmd - + - name: Set deployment target (MacOS) run: echo "MACOSX_DEPLOYMENT_TARGET=10.14" >> $GITHUB_ENV # TODO: set this to 10.12 once rocksDB issue is fixed if: inputs.os == 'macos-11' @@ -146,7 +146,6 @@ jobs: BLOOM_APPLE_ID: ${{ secrets.APPLE_ID }} # Requires prefix of BLOOM otherwise electron builder tries to notarize the app using the env variables BLOOM_APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} # Requires prefix of BLOOM otherwise electron builder tries to notarize the app using the env variables GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PRIVATE_REPO_ACCESS_TOKEN: ${{ vars.PRIVATE_REPO_ACCESS_TOKEN }} # TODO: Remove following lines after we're open source MACOS_SKIP_NOTARIZATION: false working-directory: packages/desktop if: ${{ inputs.sign && inputs.os == 'macos-11' }} @@ -156,7 +155,6 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} MACOS_SKIP_NOTARIZATION: true - PRIVATE_REPO_ACCESS_TOKEN: ${{ vars.PRIVATE_REPO_ACCESS_TOKEN }} # TODO: Remove following lines after we're open source working-directory: packages/desktop if: ${{ ! inputs.sign && inputs.os == 'macos-11' }} @@ -165,7 +163,6 @@ jobs: env: CERTIFICATE_FINGERPRINT: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PRIVATE_REPO_ACCESS_TOKEN: ${{ vars.PRIVATE_REPO_ACCESS_TOKEN }} # TODO: Remove following lines after we're open source SIGN: true working-directory: packages/desktop if: ${{ inputs.sign && inputs.os == 'windows-2022' }} @@ -174,7 +171,6 @@ jobs: run: yarn compile:${env:STAGE}:win env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PRIVATE_REPO_ACCESS_TOKEN: ${{ vars.PRIVATE_REPO_ACCESS_TOKEN }} # TODO: Remove following lines after we're open source SIGN: false working-directory: packages/desktop if: ${{ ! inputs.sign && inputs.os == 'windows-2022' }} @@ -185,7 +181,6 @@ jobs: if: inputs.os == 'ubuntu-20.04' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PRIVATE_REPO_ACCESS_TOKEN: ${{ vars.PRIVATE_REPO_ACCESS_TOKEN }} # TODO: Remove following lines after we're open source - name: Import GPG key (Linux) run: | echo "$GPG_PRIVATE_KEY" | base64 -d > /tmp/private.key && \ diff --git a/packages/desktop/components/popup/popups/MintNftConfirmationPopup.svelte b/packages/desktop/components/popup/popups/MintNftConfirmationPopup.svelte index f14662bdae..ea4558de97 100644 --- a/packages/desktop/components/popup/popups/MintNftConfirmationPopup.svelte +++ b/packages/desktop/components/popup/popups/MintNftConfirmationPopup.svelte @@ -37,12 +37,17 @@ ...(attributes && { attributes }), } - async function prepareNftOutput(): Promise { - const outputData = buildNftOutputBuilderParams(irc27Metadata, $selectedAccount.depositAddress) - const client = await getClient() - const preparedOutput = await client.buildNftOutput(outputData) - storageDeposit = Number(preparedOutput.amount) ?? 0 - totalStorageDeposit = storageDeposit * quantity + async function setStorageDeposit(): Promise { + try { + const outputData = buildNftOutputBuilderParams(irc27Metadata, $selectedAccount.depositAddress) + const client = await getClient() + const preparedOutput = await client.buildNftOutput(outputData) + + storageDeposit = Number(preparedOutput.amount) ?? 0 + totalStorageDeposit = storageDeposit * quantity + } catch (err) { + handleError(err) + } } async function mintAction(): Promise { @@ -72,8 +77,8 @@ onMount(async () => { try { + void setStorageDeposit() await _onMount() - await prepareNftOutput() } catch (err) { handleError(err) } @@ -97,7 +102,7 @@
- + @@ -123,7 +128,7 @@ { key: localize('general.storageDeposit'), value: - quantity === 0 + quantity === 1 ? formatTokenAmountPrecise(storageDeposit, getBaseToken()) : undefined, }, diff --git a/packages/desktop/electron-builder-config.ts b/packages/desktop/electron-builder-config.ts index d876d5ad9c..5adbdf5586 100644 --- a/packages/desktop/electron-builder-config.ts +++ b/packages/desktop/electron-builder-config.ts @@ -141,9 +141,6 @@ const prodConfig: Configuration = { vPrefixedTagName: false, channel: 'latest', publishAutoUpdate: true, - // TODO: Remove following lines after we're open source - private: true, - token: process.env.PRIVATE_REPO_ACCESS_TOKEN, }, } diff --git a/packages/desktop/features/app.features.ts b/packages/desktop/features/app.features.ts index 7d26bb66d2..e64378351d 100644 --- a/packages/desktop/features/app.features.ts +++ b/packages/desktop/features/app.features.ts @@ -18,6 +18,9 @@ const appFeatures: IAppFeatures = { de: false, }, }, + particles: { + enabled: false, + }, } export default appFeatures diff --git a/packages/desktop/features/contacts.features.ts b/packages/desktop/features/contacts.features.ts index 5ffe3852fe..f7c0d3b958 100644 --- a/packages/desktop/features/contacts.features.ts +++ b/packages/desktop/features/contacts.features.ts @@ -1,7 +1,7 @@ import { IContactsFeatures } from '@lib/features/interfaces' const contactsFeatures: IContactsFeatures = { - enabled: true, + enabled: false, sendTo: { enabled: true, }, diff --git a/packages/desktop/features/onboarding.features.ts b/packages/desktop/features/onboarding.features.ts index df10fcfb13..2f0ea5f474 100644 --- a/packages/desktop/features/onboarding.features.ts +++ b/packages/desktop/features/onboarding.features.ts @@ -49,7 +49,7 @@ const onboardingFeaturesForTestnet: IOnboardingFeaturesForNetwork = { softwareProfile: { enabled: true, skipVerification: { - enabled: true, + enabled: false, }, }, ledgerProfile: { diff --git a/packages/desktop/features/settings.features.ts b/packages/desktop/features/settings.features.ts index ad5f433425..9b9b0e9199 100644 --- a/packages/desktop/features/settings.features.ts +++ b/packages/desktop/features/settings.features.ts @@ -98,7 +98,7 @@ const settingsFeatures: ISettingsFeatures = { enabled: true, }, faq: { - enabled: true, + enabled: false, }, discord: { enabled: true, diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 9935e71104..bf6a4126d4 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "desktop", "productName": "Bloom", - "version": "0.1.0-alpha-6", + "version": "0.1.0", "description": "Simple and secure web3 wallet for the IOTA and Shimmer ecosystem", "main": "public/build/main.process.js", "repository": "git@github.com:bloomwalletio/bloom.git", diff --git a/packages/desktop/views/components/Background.svelte b/packages/desktop/views/components/Background.svelte index 6bd5628c9a..b3b6604541 100644 --- a/packages/desktop/views/components/Background.svelte +++ b/packages/desktop/views/components/Background.svelte @@ -1,4 +1,5 @@ - + {#if pill} diff --git a/packages/shared/src/components/modals/Modal.svelte b/packages/shared/src/components/modals/Modal.svelte index b106b80bb3..60aaaa9ef3 100644 --- a/packages/shared/src/components/modals/Modal.svelte +++ b/packages/shared/src/components/modals/Modal.svelte @@ -53,29 +53,32 @@ if (!show || !modal) { return } + const viewportHeight = window.innerHeight - const modalRect = modal?.getBoundingClientRect() - const spaceAbove = modalRect?.top - const spaceBelow = viewportHeight - modalRect?.bottom - const maxSpace = - spaceBelow > 0 ? modalRect?.height - Math.abs(spaceAbove) : modalRect?.height - Math.abs(spaceBelow) - maxHeight = maxSpace - 10 + const modalRect = modal.getBoundingClientRect() + + const availableSpace = position.top ? viewportHeight - modalRect.top : modalRect.bottom + maxHeight = availableSpace - 10 + } + + function handleResize() { + updateMaxHeight() } onMount(() => { if (autoMaxHeight) { - window.addEventListener('resize', () => void updateMaxHeight()) - void updateMaxHeight() + window.addEventListener('resize', handleResize) + updateMaxHeight() } }) onDestroy(() => { if (autoMaxHeight) { - window.removeEventListener('resize', () => void updateMaxHeight()) + window.removeEventListener('resize', handleResize) } }) - $: show, autoMaxHeight && void updateMaxHeight() + $: if (show && autoMaxHeight) updateMaxHeight() {#if show} diff --git a/packages/shared/src/components/organisms/NodeConfigurationForm.svelte b/packages/shared/src/components/organisms/NodeConfigurationForm.svelte index 2e2ed3b0aa..88ced8909b 100644 --- a/packages/shared/src/components/organisms/NodeConfigurationForm.svelte +++ b/packages/shared/src/components/organisms/NodeConfigurationForm.svelte @@ -133,6 +133,7 @@ label={localize('general.network')} options={networkOptions} disabled={isBusy} + hideValue /> {#if networkType === OnboardingNetworkType.Custom} diff --git a/packages/shared/src/lib/core/layer-2/actions/generateAndStoreEvmAddressForAccounts.ts b/packages/shared/src/lib/core/layer-2/actions/generateAndStoreEvmAddressForAccounts.ts index 48f5661754..4a69dd525c 100644 --- a/packages/shared/src/lib/core/layer-2/actions/generateAndStoreEvmAddressForAccounts.ts +++ b/packages/shared/src/lib/core/layer-2/actions/generateAndStoreEvmAddressForAccounts.ts @@ -20,15 +20,19 @@ export async function generateAndStoreEvmAddressForAccounts( let evmAddress: string | undefined if (profileType === ProfileType.Software) { const manager = await api.getSecretManager(getProfileManager().id) - evmAddress = ( - await manager.generateEvmAddresses({ - coinType, - accountIndex, - options: { - internal: false, - }, - }) - )?.[0] + // Follow MetaMask's convention around incrementing address indices instead of account indices + const addresses = await manager.generateEvmAddresses({ + coinType, + accountIndex: 0, + range: { + start: accountIndex, + end: accountIndex + 1, + }, + options: { + internal: false, + }, + }) + evmAddress = addresses?.[0] } else { evmAddress = await Ledger.generateEvmAddress(accountIndex, coinType) evmAddress = evmAddress.toLowerCase() diff --git a/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts b/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts index c78b43f8dd..d8ad3cc5b1 100644 --- a/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts +++ b/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts @@ -7,9 +7,9 @@ import { SendFlowType } from '@core/wallet/enums' * Native Token Transfer: < 24350 glow * NFT Transfer: < 24700 glow */ export const FALLBACK_ESTIMATED_GAS: { [key in SendFlowType]: number } = { - [SendFlowType.BaseCoinTransfer]: 24_200, - [SendFlowType.TokenTransfer]: 24_350, - [SendFlowType.NftTransfer]: 24_700, + [SendFlowType.BaseCoinTransfer]: 10_000, + [SendFlowType.TokenTransfer]: 10_000, + [SendFlowType.NftTransfer]: 50_000, [SendFlowType.TokenUnwrap]: 53_892, [SendFlowType.NftUnwrap]: 72_307, } diff --git a/packages/shared/src/lib/core/market/enums/market-currency.enum.ts b/packages/shared/src/lib/core/market/enums/market-currency.enum.ts index fc500a4bc3..eb4ff99bce 100644 --- a/packages/shared/src/lib/core/market/enums/market-currency.enum.ts +++ b/packages/shared/src/lib/core/market/enums/market-currency.enum.ts @@ -7,7 +7,6 @@ export enum MarketCurrency { Eos = 'eos', Xrp = 'xrp', Xlm = 'xlm', - Link = 'link', Dot = 'dot', Yfi = 'yfi', Usd = 'usd', diff --git a/packages/shared/src/lib/core/network/classes/iscp-chain.class.ts b/packages/shared/src/lib/core/network/classes/iscp-chain.class.ts index 9664f8b5d9..b235fe5e1e 100644 --- a/packages/shared/src/lib/core/network/classes/iscp-chain.class.ts +++ b/packages/shared/src/lib/core/network/classes/iscp-chain.class.ts @@ -99,7 +99,12 @@ export class IscpChain implements IChain { const data = await response.json() if (response.status === 200) { - return Number(data.gasFeeCharged ?? '0') + const gasEstimate = Number(data.gasFeeCharged ?? '0') + if (Number.isNaN(gasEstimate) || gasEstimate === 0) { + throw new Error(`Gas fee has an invalid value: ${gasEstimate}!`) + } + + return gasEstimate } else { throw new Error(data) } diff --git a/packages/shared/src/lib/core/network/utils/canAccountMakeStardustTransaction.ts b/packages/shared/src/lib/core/network/utils/canAccountMakeStardustTransaction.ts new file mode 100644 index 0000000000..f53a906ea1 --- /dev/null +++ b/packages/shared/src/lib/core/network/utils/canAccountMakeStardustTransaction.ts @@ -0,0 +1,28 @@ +import { get } from 'svelte/store' +import { isStardustNetwork } from '@core/network/utils' +import { activeAccounts } from '@core/profile/stores' +import { SendFlowType } from '@core/wallet/enums' +import { NetworkId } from '../types' + +export function canAccountMakeStardustTransaction( + accountIndex: number, + networkId: NetworkId, + sendFlowType: SendFlowType +): boolean | undefined { + if (!isStardustNetwork(networkId)) { + return undefined + } + + switch (sendFlowType) { + case SendFlowType.BaseCoinTransfer: + default: { + const account = get(activeAccounts)?.[accountIndex] + if (account) { + const baseTokenBalance = account?.balances.baseCoin + return BigInt(baseTokenBalance?.available ?? 0) > BigInt(0) + } else { + return undefined + } + } + } +} diff --git a/packages/shared/src/lib/core/network/utils/index.ts b/packages/shared/src/lib/core/network/utils/index.ts index baf8278b5a..7cb7538b6f 100644 --- a/packages/shared/src/lib/core/network/utils/index.ts +++ b/packages/shared/src/lib/core/network/utils/index.ts @@ -1,5 +1,6 @@ export * from './buildChainFromNetwork' export * from './buildPersistedNetworkFromNodeInfoResponse' +export * from './canAccountMakeStardustTransaction' export * from './checkIfOnSameNetwork' export * from './checkNodeUrlValidity' export * from './doesNodeHavePlugin' diff --git a/packages/shared/src/lib/core/wallet/actions/send/signAndSendEvmTransaction.ts b/packages/shared/src/lib/core/wallet/actions/send/signAndSendEvmTransaction.ts index 72b9d9d7fe..a1a17ec3a3 100644 --- a/packages/shared/src/lib/core/wallet/actions/send/signAndSendEvmTransaction.ts +++ b/packages/shared/src/lib/core/wallet/actions/send/signAndSendEvmTransaction.ts @@ -28,14 +28,19 @@ export async function signAndSendEvmTransaction( const bip44Path = { coinType, - account: account.index, + account: 0, change: 0, addressIndex: 0, } + const { index } = account + let signedTransaction: string | undefined if (get(isSoftwareProfile)) { + // Follow MetaMask's convention around incrementing address indices instead of account indices + bip44Path.addressIndex = index signedTransaction = await signEvmTransactionWithStronghold(transaction, bip44Path, chainId) } else if (get(isActiveLedgerProfile)) { + bip44Path.account = index signedTransaction = (await Ledger.signEvmTransaction(txData, chainId, bip44Path)) as string } diff --git a/packages/shared/src/lib/core/wallet/actions/signMessage.ts b/packages/shared/src/lib/core/wallet/actions/signMessage.ts index 090eb2f6f7..7a44bc8cb0 100644 --- a/packages/shared/src/lib/core/wallet/actions/signMessage.ts +++ b/packages/shared/src/lib/core/wallet/actions/signMessage.ts @@ -12,15 +12,18 @@ export async function signMessage( ): Promise { const bip44Path = { coinType, - account: account.index, + account: 0, change: 0, addressIndex: 0, } - + const { index } = account let signedMessage: string | undefined if (get(isSoftwareProfile)) { + // Follow MetaMask's convention around incrementing address indices instead of account indices + bip44Path.addressIndex = index signedMessage = await signMessageWithStronghold(message, bip44Path) } else if (get(isActiveLedgerProfile)) { + bip44Path.account = index signedMessage = await Ledger.signMessage(message, bip44Path) } diff --git a/packages/shared/src/lib/features/interfaces/app-features.interface.ts b/packages/shared/src/lib/features/interfaces/app-features.interface.ts index e21df70bb7..441978df26 100644 --- a/packages/shared/src/lib/features/interfaces/app-features.interface.ts +++ b/packages/shared/src/lib/features/interfaces/app-features.interface.ts @@ -12,4 +12,5 @@ export interface IAppFeatures { de: boolean } } + particles: IFeatureFlag } diff --git a/packages/shared/src/locales/en.json b/packages/shared/src/locales/en.json index 2677a019ef..5e23a193a0 100644 --- a/packages/shared/src/locales/en.json +++ b/packages/shared/src/locales/en.json @@ -673,7 +673,7 @@ "installedVersion": "Installed version", "newVersion": "New version", "stage": "Stage", - "prod": "Production", + "prod": "Early Access", "alpha": "Alpha", "beta": "Beta", "releasedAt": "Released at", @@ -1661,6 +1661,7 @@ "insufficientFunds": "This wallet has insufficient funds.", "insufficientFundsGasFee": "Insufficient funds to cover the gas fee.", "insufficientFundsStorageDeposit": "Insufficient funds to cover the storage deposit.", + "insufficientFundsTransaction": "Insufficient funds to make a transaction.", "ongoingTransaction": "If you have ongoing transactions, please wait for their confirmation.", "cancelled": "The transaction was cancelled.", "invalidExpirationDateTime": "The chosen expiration date/time is invalid.",