diff --git a/.eslintignore b/.eslintignore index 294d360a4..81332340f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,5 +7,6 @@ .eslintrc.js babel.config.js /src-ssr +/src-pwa /tests/polkadot_wallet /tests/metamask_wallet \ No newline at end of file diff --git a/.gitignore b/.gitignore index e26d0db58..b730a6afe 100644 --- a/.gitignore +++ b/.gitignore @@ -47,5 +47,8 @@ zombienet-macos polkadot astar-collator +# Temp folder +*temp + # Chopstick binaries -db.sqlite* \ No newline at end of file +db.sqlite* diff --git a/package.json b/package.json index 5ca954acf..64dd4baa2 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "dependencies": { "@astar-network/astar-sdk-core": "^0.2.8", - "@astar-network/astar-ui": "^0.0.136", + "@astar-network/astar-ui": "^0.0.137", "@astar-network/metamask-astar-adapter": "^0.5.4", "@astar-network/metamask-astar-types": "^0.6.1", "@ethersproject/bignumber": "^5.5.0", diff --git a/src/App.vue b/src/App.vue index 473e7f165..84a826cc5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -40,7 +40,7 @@ // https://polkadot.js.org/docs/api/FAQ/#since-upgrading-to-the-7x-series-typescript-augmentation-is-missing import 'reflect-metadata'; import '@polkadot/api-augment'; -import { defineComponent, computed, ref, watch } from 'vue'; +import { defineComponent, computed, ref, watch, onMounted } from 'vue'; import DashboardLayout from 'layouts/DashboardLayout.vue'; import { useStore } from 'src/store'; import ModalLoading from 'components/common/ModalLoading.vue'; @@ -61,6 +61,13 @@ import { container } from 'src/v2/common'; import { Symbols } from 'src/v2/symbols'; import { useAccount, useAppRouter } from 'src/hooks'; import { LOCAL_STORAGE } from 'src/config/localStorage'; +import { + AccountLedgerChangedMessage, + IDappStakingService, + ProtocolStateChangedMessage, +} from './staking-v3'; +import { useDappStaking, useDapps } from './staking-v3/hooks'; +import { IDappStakingRepository as IDappStakingRepositoryV3 } from 'src/staking-v3/logic/repositories'; export default defineComponent({ name: 'App', @@ -75,7 +82,18 @@ export default defineComponent({ setup() { useAppRouter(); const store = useStore(); - const { currentAccountName } = useAccount(); + const { currentAccountName, currentAccount } = useAccount(); + const { + protocolState, + getAllRewards, + getCurrentEraInfo, + getDappTiers, + fetchStakerInfoToStore, + fetchTiersConfigurationToStore, + fetchEraLengthsToStore, + isDappStakingV3, + } = useDappStaking(); + const { fetchStakeAmountsToStore, fetchDappsToStore } = useDapps(); const isLoading = computed(() => store.getters['general/isLoading']); const showAlert = computed(() => store.getters['general/showAlert']); @@ -94,7 +112,7 @@ export default defineComponent({ showDisclaimerModal.value = isOpen; }; - // Handle busy and extrisnsic call status messages. + // Handle busy and extrinsic call status messages. const eventAggregator = container.get(Symbols.EventAggregator); eventAggregator.subscribe(ExtrinsicStatusMessage.name, (m) => { const message = m as ExtrinsicStatusMessage; @@ -124,9 +142,65 @@ export default defineComponent({ store.commit('dapps/setCurrentEra', message.era, { root: true }); }); + // **** dApp staking v3 + // dApp staking v3 data changed subscriptions. + onMounted(() => { + if (isDappStakingV3.value) { + container + .get(Symbols.DappStakingRepositoryV3) + .startProtocolStateSubscription(); + } + }); + + eventAggregator.subscribe(ProtocolStateChangedMessage.name, async (m) => { + const message = m as ProtocolStateChangedMessage; + + if (message.state) { + console.log('protocol state', message.state); + store.commit('stakingV3/setProtocolState', message.state, { root: true }); + await fetchDappsToStore(); + await Promise.all([ + getAllRewards(), + getCurrentEraInfo(), + getDappTiers(message.state.era - 1), + fetchStakeAmountsToStore(), + fetchStakerInfoToStore(), + fetchEraLengthsToStore(), + ]); + } + }); + + eventAggregator.subscribe(AccountLedgerChangedMessage.name, (m) => { + const message = m as AccountLedgerChangedMessage; + if (message.ledger) { + store.commit('stakingV3/setLedger', message.ledger, { root: true }); + console.log('ledger', message.ledger); + } + }); + // **** end dApp staking v3 + // Handle wallet change so we can inject proper wallet - watch([isEthWallet, currentWallet, isH160, currentAccountName], () => { + let previousAddress: string | undefined = undefined; + watch([isEthWallet, currentWallet, isH160, currentAccountName], async () => { setCurrentWallet(isEthWallet.value, currentWallet.value); + + // Subscribe to an account specific dApp staking v3 data. + if (!isDappStakingV3.value) return; + + // Memo: Can't use senderSs58Account here because unified account is not stored to vuex yet + // and senderSs58Account contains evm mapped address which is incorrect for unified account. + if (currentAccount.value && currentAccount.value !== previousAddress) { + const stakingService = container.get<() => IDappStakingService>( + Symbols.DappStakingServiceFactoryV3 + )(); + await stakingService.startAccountLedgerSubscription(currentAccount.value); + fetchStakerInfoToStore(); + getAllRewards(); + fetchTiersConfigurationToStore(); + getDappTiers((protocolState.value?.era ?? 0) - 1); + + previousAddress = currentAccount.value; + } }); const removeSplashScreen = () => { diff --git a/src/components/assets/Assets.vue b/src/components/assets/Assets.vue index 5762ffd77..92752a7e6 100644 --- a/src/components/assets/Assets.vue +++ b/src/components/assets/Assets.vue @@ -10,14 +10,25 @@ :is-loading-xcm-assets-amount="isLoadingXcmAssetsAmount" /> -
+ + + +
- +
- +
@@ -30,19 +41,22 @@ + + diff --git a/src/components/assets/styles/account.scss b/src/components/assets/styles/account.scss index b5ac0e35f..2c52b32a5 100644 --- a/src/components/assets/styles/account.scss +++ b/src/components/assets/styles/account.scss @@ -4,6 +4,10 @@ display: flex; flex-direction: column; gap: 32px; + margin-top: -36px; + @media (min-width: $lg) { + margin-top: 0; + } } .row--details-signatory { @@ -60,8 +64,6 @@ img { width: 32px; height: 32px; - // object-fit: cover; - // border-radius: 9999px; } } @@ -218,7 +220,7 @@ background-color: white; padding: 16px; min-height: 180px; - @media (min-width: $sm) { + @media (min-width: $lg) { border-radius: 16px; margin: 0; } @@ -270,7 +272,7 @@ color: white; background: linear-gradient(270deg, #6c6c6c 25%, #b7b7b7 100%); } - &:not(.active){ + &:not(.active) { cursor: pointer; } } @@ -330,7 +332,7 @@ } } } - } + } } .row--account-rewards { diff --git a/src/components/assets/styles/your-project.scss b/src/components/assets/styles/your-project.scss new file mode 100644 index 000000000..119c12ae9 --- /dev/null +++ b/src/components/assets/styles/your-project.scss @@ -0,0 +1,84 @@ +@import 'src/css/quasar.variables.scss'; + +.wrapper--your-project { + padding: 8px 16px; + @media (min-width: $lg) { + padding: 16px; + } +} + +.box--dapps { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + + @media (min-width: $md) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 32px; + } + @media (min-width: $xxl) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +.text--title { + font-weight: 600; + @media (min-width: $lg) { + font-size: 14px; + } +} + +.row--title { + display: flex; + align-items: center; + gap: 16px; + svg { + width: 32px; + height: 32px; + } +} + +.card--dapp { + cursor: pointer; + background-color: $gray-1; + border-radius: 16px; + column-gap: 10px; + display: flex; + align-items: center; + padding: 16px; + font-size: 16px; + font-weight: 600; + color: $navy-1; + line-height: 1.25; + transition: all 0.2s ease; + &:hover{ + background-color: $gray-2; + } +} + +.icon--dapp-logo { + width: 32px; + height: 32px; + border-radius: 8px; + object-fit: contain; +} + +.separator { + background-color: $gray-2; + height: 1px; + margin-top: 24px; + margin-bottom: 24px; +} + +.body--dark { + .card--dapp { + background-color: $navy-3; + color: $gray-1; + &:hover{ + background-color: lighten($navy-3,5%); + } + } + .separator { + background-color: $navy-3; + } +} diff --git a/src/components/common/Balance.vue b/src/components/common/Balance.vue index a85b37b2f..732e354ef 100644 --- a/src/components/common/Balance.vue +++ b/src/components/common/Balance.vue @@ -2,14 +2,14 @@
{{ `${formattedBalance}` }}
diff --git a/src/components/common/styles/back-to-page.scss b/src/components/common/styles/back-to-page.scss index 8012d499d..4ddcb8c7e 100644 --- a/src/components/common/styles/back-to-page.scss +++ b/src/components/common/styles/back-to-page.scss @@ -24,3 +24,9 @@ .icon--back { font-size: 18px; } + +.body--dark{ + .container--back { + color: $gray-3; + } +} diff --git a/src/components/common/themes/DividerNewYear.vue b/src/components/common/themes/DividerNewYear.vue index cd5197a62..196ccf754 100644 --- a/src/components/common/themes/DividerNewYear.vue +++ b/src/components/common/themes/DividerNewYear.vue @@ -56,4 +56,4 @@ export default defineComponent({ #793b02 104.05% ); } - \ No newline at end of file + diff --git a/src/components/common/themes/DividerNewYearMobile.vue b/src/components/common/themes/DividerNewYearMobile.vue index 747dd4f30..5c38b7d8b 100644 --- a/src/components/common/themes/DividerNewYearMobile.vue +++ b/src/components/common/themes/DividerNewYearMobile.vue @@ -28,4 +28,4 @@ export default defineComponent({ #793b02 104.05% ); } - \ No newline at end of file + diff --git a/src/components/common/themes/LunarPack.vue b/src/components/common/themes/LunarPack.vue index 73e9f9821..3157cea03 100644 --- a/src/components/common/themes/LunarPack.vue +++ b/src/components/common/themes/LunarPack.vue @@ -151,4 +151,4 @@ export default defineComponent({ height: 240px; z-index: 9999; } - \ No newline at end of file + diff --git a/src/components/common/themes/SnowPack.vue b/src/components/common/themes/SnowPack.vue index 0e7491ad3..d38f60491 100644 --- a/src/components/common/themes/SnowPack.vue +++ b/src/components/common/themes/SnowPack.vue @@ -210,4 +210,4 @@ export default defineComponent({ } } } - \ No newline at end of file + diff --git a/src/components/dapp-staking/StakingTop.vue b/src/components/dapp-staking/StakingTop.vue index 80da710dd..109e02c41 100644 --- a/src/components/dapp-staking/StakingTop.vue +++ b/src/components/dapp-staking/StakingTop.vue @@ -118,6 +118,8 @@ export default defineComponent({ .extra-wrapper { max-width: $container-max-width; margin: 0 auto; + z-index: 1; + position: relative; } .container--main { diff --git a/src/components/dapp-staking/dapp/DappStatistics.vue b/src/components/dapp-staking/dapp/DappStatistics.vue index 1c3ab5e50..9447db13d 100644 --- a/src/components/dapp-staking/dapp/DappStatistics.vue +++ b/src/components/dapp-staking/dapp/DappStatistics.vue @@ -29,6 +29,33 @@ +
+
+
+ + {{ $t('stakingV3.currentTier') }} + +
+
+ + {{ $n(1) }} + +
+
+
+
+
+ + {{ $t('stakingV3.totalEarned') }} + +
+
+ + + {{ $t('amountToken', { amount: 10, token: nativeTokenSymbol }) }} + +
+
diff --git a/src/components/dapp-staking/my-staking/BannerArea.vue b/src/components/dapp-staking/my-staking/BannerArea.vue index 79fdacaf9..183b3371f 100644 --- a/src/components/dapp-staking/my-staking/BannerArea.vue +++ b/src/components/dapp-staking/my-staking/BannerArea.vue @@ -31,4 +31,4 @@ export default defineComponent({ gap: 24px; } } - \ No newline at end of file + diff --git a/src/components/dapp-staking/my-staking/Register.vue b/src/components/dapp-staking/my-staking/Register.vue index d0eb5519c..3c7581a4e 100644 --- a/src/components/dapp-staking/my-staking/Register.vue +++ b/src/components/dapp-staking/my-staking/Register.vue @@ -65,7 +65,6 @@ export default defineComponent({ border-radius: 6px; padding: 24px; cursor: pointer; - margin-top: 50px; color: $gray-1; font-size: 16px; } diff --git a/src/components/dapp-staking/my-staking/styles/top-metric.scss b/src/components/dapp-staking/my-staking/styles/top-metric.scss index 2d869f0b0..dfe5af515 100644 --- a/src/components/dapp-staking/my-staking/styles/top-metric.scss +++ b/src/components/dapp-staking/my-staking/styles/top-metric.scss @@ -2,7 +2,6 @@ .panel { background-size: cover; - padding-top: 55px; padding-left: 16px; padding-right: 16px; @media (min-width: $md) { diff --git a/src/components/dapp-staking/stake-manage/StakeForm.vue b/src/components/dapp-staking/stake-manage/StakeForm.vue index 4a4a3587b..82ed2b880 100644 --- a/src/components/dapp-staking/stake-manage/StakeForm.vue +++ b/src/components/dapp-staking/stake-manage/StakeForm.vue @@ -83,17 +83,15 @@
{{ $t(warningMsg) }}
-
- - - {{ $t('confirm') }} - - -
+ + + {{ $t('confirm') }} + + diff --git a/src/components/header/ClaimWarningBanner.vue b/src/components/header/ClaimWarningBanner.vue index f2ab354d9..e6aee85e4 100644 --- a/src/components/header/ClaimWarningBanner.vue +++ b/src/components/header/ClaimWarningBanner.vue @@ -1,6 +1,6 @@ diff --git a/src/components/header/Header.vue b/src/components/header/Header.vue index 80b6057f0..f745f91d2 100644 --- a/src/components/header/Header.vue +++ b/src/components/header/Header.vue @@ -264,13 +264,10 @@ export default defineComponent({ @import 'src/css/quasar.variables.scss'; .wrapper { z-index: 100; + position: sticky; + top: 0; @media (min-width: $lg) { - border-left: solid 1px $navy-3; - width: 100%; - position: absolute; - top: 0; - left: 224px; - padding-right: 224px; + position: relative; } } diff --git a/src/components/header/mobile/MobileNav.vue b/src/components/header/mobile/MobileNav.vue index a915e4e47..dc8682af6 100644 --- a/src/components/header/mobile/MobileNav.vue +++ b/src/components/header/mobile/MobileNav.vue @@ -167,7 +167,6 @@ export default defineComponent({ color: $gray-1; display: flex; flex-direction: column; - // gap: 40px; padding-top: 40px; height: calc(100vh - 64px); overflow-y: auto; diff --git a/src/components/sidenav/SidebarDesktop.vue b/src/components/sidenav/SidebarDesktop.vue index e62b35506..f379ff317 100644 --- a/src/components/sidenav/SidebarDesktop.vue +++ b/src/components/sidenav/SidebarDesktop.vue @@ -91,7 +91,6 @@ -
diff --git a/src/components/sidenav/styles/sidebar-desktop.scss b/src/components/sidenav/styles/sidebar-desktop.scss index ff964d7fd..84e44b089 100644 --- a/src/components/sidenav/styles/sidebar-desktop.scss +++ b/src/components/sidenav/styles/sidebar-desktop.scss @@ -31,6 +31,7 @@ background: #081029; display: flex; flex-direction: column; + border-right: solid 1px $navy-3; } .menu { diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss index b4195a231..9a25fe68b 100644 --- a/src/css/quasar.variables.scss +++ b/src/css/quasar.variables.scss @@ -1,3 +1,4 @@ +$white: #fff; $gray-1: #f7f7f8; $gray-2: #e6e9ee; $gray-3: #9da3ae; @@ -11,15 +12,17 @@ $gray-7: #222829; $navy-1: #080f2e; $navy-2: #060b23; $navy-3: #1f2f5f; -$navy-4: #141E3E; +$navy-4: #141e3e; $object-light: #e6e9ee; $modal-item-bg-dark: #141c34; $astar-blue: #0085ff; $astar-blue-dark: #05b6fd; -$astar-pink: #E0338F; -$astar-purple: #703AC2; +$astar-pink: #e0338f; +$astar-pink-01: rgba(230, 0, 122, 1); + +$astar-purple: #703ac2; $shiden-purple: #770cff; $shiden-purple-dark: #a67cff; $warning-red: #ff5621; diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index ed75811c8..b10abce38 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -69,6 +69,8 @@ export default { ledgerNotOpened: 'Ledger has not opened Astar App. Please open it and refresh this page.', claimRewards: 'DApp Staking V3 is coming early 2024! Make sure to claim your rewards and stay tuned for the release date.', + underDevelopmentShibuyaWarning: + 'dApp Staking V3 is in beta. We are adding fixes and improves everyday to get ready for the launch.', }, toast: { transactionFailed: 'Transaction failed with error: {message}', @@ -110,6 +112,7 @@ export default { youtube: 'YouTube', docs: 'Documentation', loading: 'Loading...', + comingSoon: 'Coming soon', speed: { speed: 'Transaction speed', speedTip: 'Transaction speed (Tip)', @@ -328,6 +331,13 @@ export default { uaw: 'Unique Active Wallets', cantClaimWihtoutError: 'You cannot claim with automatic re-stake because it is been a while since you claimed your rewards. Please turn off the Auto Re-Stake feature to be able to claim. After you claimed rewards you can turn on re-stake again. The UI team is working to fix this issue.', + migrationSupport: { + actionRequired: 'Action Required', + yourTokensAreLocked: + 'Your tokens are locked in dAppStaking V2. Please migrate your funds to V3 today and start participating.', + balanceFromV2: 'Balance from V2 (locked)', + migrateNow: 'Migrate Now', + }, stakePage: { backToDappList: 'Back to dApps list', whereFundsFrom: 'Where would you like to bring your funds from?', @@ -500,6 +510,7 @@ export default { removeFromFavorite: 'Remove from favorite', unifyAccounts: 'Unify accounts', yourEstimatedRewards: 'Claim your estimated rewards', + yourProject: 'Your Project', toast: { completedMessage: 'You have sent {transferAmt} {symbol} to {toAddress}', completedBridgeMessage: 'You have sent {transferAmt} {symbol} from {fromChain} to {toChain}', @@ -684,6 +695,138 @@ export default { agree: 'Agree', decline: 'Decline', }, + stakingV3: { + title: 'dApp Staking v3', + noDappSelected: 'No dApp selected.', + stakerRewardsExpired: 'Staker rewards expired.', + dappStaking: { + Disabled: 'Pallet is disabled/in maintenance mode.', + NoExpiredEntries: 'There are no expired entries to clean up.', + NoStakingInfo: 'Account has no staking information for the contract', + NotOperatedDApp: 'dApp is part of dApp staking but is not active anymore.', + PeriodEndsNextEra: 'Period ends in the next era.', + TooManyStakedContracts: + 'There are too many contract stake entries for the account. This can be cleaned up by either unstaking or cleaning expired entries.', + TooManyUnlockingChunks: + 'Contract has too many unlocking chunks. Withdraw the existing chunks if possible or wait for current chunks to complete unlocking process to withdraw them.', + UnavailableStakeFunds: + 'The staking amount surpasses the current balance available for staking.', + UnclaimedRewards: + 'There are unclaimed rewards remaining from past eras or periods. They should be claimed before attempting any stake modification again.', + UnstakeAmountTooLarge: 'Unstake amount is greater than the staked amount.', + UnstakeFromPastPeriod: + 'Unstaking is rejected since the period in which past stake was active has passed.', + ZeroAmount: 'Amount must be greater than 0.', + }, + successfullyStaked: 'You successfully staked to {contractAddress}', + voteTitle: 'Vote!', + voteText: 'I would like to vote my tokens with', + transferText: 'I would like to move my funds from', + stakeVoteOn: 'And vote/stake on', + stakeTitle: 'Stake!', + minimumStakingAmount: 'Minimum staking amount is {amount} {symbol}', + minBalanceAfterStaking: + 'Account must hold more than {amount} {symbol} transferrable tokens after you stake.', + selectProjects: 'Select projects', + chooseProject: 'Choose a project to vote', + availableToVote: 'Available to vote', + totalVote: 'Total vote', + totalStake: 'Total stake', + totalTransferable: 'Total transferable', + lockedBalance: 'Locked balance', + alreadyVoted: 'Already voted', + alreadyStaked: 'Already staked', + remainingLockedBalance: 'Remaining locked balance', + voteLockedTokensWarning: + 'Be sure you vote on dapps otherwise those tokens are not eligible for any rewards.', + rewardsWillBeClaimed: 'Your unclaimed rewards will be claimed.', + basicRewards: 'Basic rewards', + bonusRewards: 'Bonus rewards', + dAppRewards: 'dApp rewards', + done: 'Done', + search: 'Search', + build: 'Build', + newDappPromotion: 'New dApp promotion', + votingNow: 'Voting Now', + voteNow: 'Vote now', + voteStakeToday: 'Vote / Stake today', + vote: 'Vote', + voteToday: 'Be entitled to bonus pool today', + stakeOn: 'Stake on {name}', + tier: 'Tier', + tierLeaderboard: 'Tier Leaderboard', + projectLeaderboards: 'Project Leaderboards', + rewardPerDay: 'Reward per era', + myStaking: 'My Staking', + myDapps: 'My dApps', + unbonding: 'Unbonding', + totalEstimatedRewards: 'Total estimated rewards', + claim: 'Claim', + dApp: 'dApp', + stakedAmount: 'Staked amount', + unstakedAmount: 'Locked but unstaked amount', + bonusReward: 'Bonus reward', + manage: 'Manage', + add: 'Add', + unbond: 'Unbond', + unlock: 'Unlock', + stake: 'Stake', + move: 'Move', + index: 'Index', + chunk: 'Chunk', + unbondingAmount: 'Unbonding amount', + withdraw: 'Withdraw', + relock: 'Re-lock', + currentTier: 'Current Tier', + numberOfStakers: 'Number of Stakers', + totalEarned: 'Total Earned', + yourDashboard: 'Your Dashboard', + edit: 'Edit', + editProjectPage: { + title: 'Edit Project Page', + text: 'You can change the images, description at any time.', + }, + editYourInfo: { + title: 'Edit your owner info', + text: 'If you wish to change registered smart contract or rewards receiving address.', + }, + addPromotion: { + title: 'Add a promotion card', + text: 'If you have anything to share with the community, you can create a card on the top page to promote about it!', + }, + yourRewards: 'Your Rewards', + availableToClaim: 'Available to claim', + alreadyClaimed: 'Already claimed', + eras: '{era} eras', + claimed: 'Claimed', + period: 'Period {period}', + claimNow: 'Claim these rewards now, as they will expire at the end of the current period.', + remainingEras: 'Remaining eras / blocks', + back: 'Back', + era: 'Era', + numberOfDapps: 'Number of dApps', + tvl: 'TVL', + filledSlot: 'Filled slots', + unfilledSlot: 'Unfilled slots', + ourDapps: 'Our dApps', + ourData: 'Our data', + dapp: { + voteAndStake: 'Vote & Stake', + overview: 'Overview', + }, + unregisteredDappInfo: + "This project has been unregistered. You don't have to do anything - If you do not move funds within this period, you will continue to earn basic rewards and be entitled to receive bonus.", + voteSuccess: 'You successfully voted on {number} dApp(s). All pending rewards are claimed.', + unbondSuccess: 'You successfully unbonded from {dapp}.', + unbondFromUnregisteredSuccess: 'You successfully unbonded from unregistered dApp {dapp}.', + claimRewardSuccess: 'You successfully claimed your rewards.', + withdrawSuccess: 'You successfully withdrew your locked tokens.', + relockSuccess: 'You successfully re-locked your tokens.', + searchDapps: 'Search dapps', + startStakingNow: 'Start Staking Now', + noEntry: 'No entry', + burn: 'Burn', + }, bridge: { bridge: 'Bridge', history: 'Recent History', diff --git a/src/layouts/DashboardLayout.vue b/src/layouts/DashboardLayout.vue index 65be0c791..606d5cc17 100644 --- a/src/layouts/DashboardLayout.vue +++ b/src/layouts/DashboardLayout.vue @@ -1,19 +1,11 @@