From 0357bf530fb1220f33bd8b061f648668ff3cbe89 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Tue, 27 Jun 2023 20:08:45 +1000 Subject: [PATCH 1/8] Add Sepolia network --- src/assets/data/contracts/sepolia.json | 70 +++++++++++++++++++++++++ src/lib/config/index.ts | 3 ++ src/lib/config/sepolia/contracts.ts | 28 ++++++++++ src/lib/config/sepolia/index.ts | 67 +++++++++++++++++++++++ src/lib/config/sepolia/keys.ts | 8 +++ src/lib/config/sepolia/pools.ts | 61 +++++++++++++++++++++ src/lib/config/sepolia/rateProviders.ts | 9 ++++ src/lib/config/sepolia/tokenlists.ts | 13 +++++ src/lib/config/sepolia/tokens.ts | 31 +++++++++++ 9 files changed, 290 insertions(+) create mode 100644 src/assets/data/contracts/sepolia.json create mode 100644 src/lib/config/sepolia/contracts.ts create mode 100644 src/lib/config/sepolia/index.ts create mode 100644 src/lib/config/sepolia/keys.ts create mode 100644 src/lib/config/sepolia/pools.ts create mode 100644 src/lib/config/sepolia/rateProviders.ts create mode 100644 src/lib/config/sepolia/tokenlists.ts create mode 100644 src/lib/config/sepolia/tokens.ts diff --git a/src/assets/data/contracts/sepolia.json b/src/assets/data/contracts/sepolia.json new file mode 100644 index 0000000000..77b059a62f --- /dev/null +++ b/src/assets/data/contracts/sepolia.json @@ -0,0 +1,70 @@ +{ + "AaveLinearPoolFactory": "0xDF9B5B00Ef9bca66e9902Bd813dB14e4343Be025", + "Authorizer": "0xA331D84eC860Bf466b4CdCcFb4aC09a1B43F3aE6", + "AuthorizerAdaptor": "0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965", + "AuthorizerAdaptorEntrypoint": "0xb9aD3466cdd42015cc05d4804DC68D562b6a2065", + "AuthorizerWithAdaptorValidation": "0xb521dD5C8e13fE202626CaC98873FEA2b7760cE4", + "BalancerHelpers": "0xdAE7e32ADc5d490a43cCba1f0c736033F2b4eFca", + "BalancerMinter": "0x1783Cd84b3d01854A96B4eD5843753C2CcbD574A", + "BalancerQueries": "0x1802953277FD955f9a254B80Aa0582f193cF1d77", + "BalancerRelayer": "0x6d5342d716c13d9a3F072a2B11498624ADe27f90", + "BalancerTokenAdmin": "0x7d2248F194755DCa9A1887099394F39476d28C9a", + "BALTokenHolderFactory": "0xEF454a7B3f965D3f6723E462405246f8Cd865425", + "BatchRelayerLibrary": "0x5F6848976C2914403B425F18B589A65772F082E3", + "ChildChainGauge": "0xC49Ca921c4CD1117162eAEEc0ee969649997950c", + "ChildChainGaugeFactory": "0xC370cD86d5488c1788b62f11b09adb0C47F47440", + "CircuitBreakerLib": "0x4C0C450bEdB9282A7a54fCB316c285E85A8c0265", + "ComposableStablePoolFactory": "0xA3fd20E29358c056B727657E83DFd139abBC9924", + "ERC4626LinearPoolFactory": "0x59562f93c447656F6E4799fC1FC7c3d977C3324F", + "ExternalWeightedMath": "0x8246e571d88ACd1346179Cc3641DE87Fe3544d7A", + "FeeDistributor": "0xA6971317Fb06c76Ef731601C64433a4846fCa707", + "GaugeAdder": "0x1DF32616fb1bBaEd07f42F1a1EfD1D0E232AcB4a", + "GaugeController": "0x577e5993B9Cc480F07F98B5Ebd055604bd9071C4", + "GearboxLinearPoolFactory": "0x8df317a729fcaA260306d7de28888932cb579b88", + "L2BalancerPseudoMinter": "0xb51f7fFc97CeDFb6922e8B9Bbf3eF7575fafD630", + "L2LayerZeroBridgeForwarder": "0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7", + "LiquidityGaugeFactory": "0x2FF226CD12C80511a641A6101F071d853A4e5363", + "LiquidityGaugeV5": "0x82416Ce6eA7dD4923d4A3ED70a79B4A432a382C4", + "ManagedPoolAddRemoveTokenLib": "0xc7416E4f3715467dDcf28dc409A9483b2E4D4F43", + "ManagedPoolAmmLib": "0xa30aDE89E6af5b0Ca515cd78e44f9aD0c63989b2", + "ManagedPoolFactory": "0x63e179C5b6d54B2c2e36b9cE4085EF5A8C86D50c", + "MockAaveLendingPool": "0x300Ab2038EAc391f26D9F895dc61F8F66a548833", + "MockAaveLinearPool": "0xE4EfD99f3C03778ba913Eb578C599329634e2bd7", + "MockComposableStablePool": "0xA8D865FE1D68a405B29f884358468c9B52d4841d", + "MockERC4626LinearPool": "0x0c2EAd6F2Dc2A9385187023F4cec5925337B330f", + "MockERC4626Token": "0x2498A2B0d6462d2260EAC50aE1C3e03F4829BA95", + "MockGearboxDieselToken": "0x4C32a8a8fDa4E24139B51b456B42290f51d6A1c4", + "MockGearboxLinearPool": "0x112a7b7ca66E6963C49BC523A415F7D8CDB806B9", + "MockGearboxVault": "0x3B1eb8EB7b43882b385aB30533D9A2BeF9052a98", + "MockLiquidityBootstrappingPool": "0xe90472ffc41D7Ddf8E3B456bBA748e3F22c59C6f", + "MockManagedPool": "0xE458224CA8d6605c87b73E92aa5CB7A4e77770f3", + "MockShareToken": "0x0c6052254551EAe3ECac77B01DFcf1025418828f", + "MockSilo": "0x6B1Da720Be2D11d95177ccFc40A917c2688f396c", + "MockSiloLinearPool": "0xA149CF2D795AaB83a15673f5Beade9361e4e3F65", + "MockSiloRepository": "0xa7d524046ef89de9F8e4f2d7B029f66cCB738d48", + "MockStaticAToken": "0x03F3Fb107e74F2EAC9358862E91ad3c692712054", + "MockWeightedPool": "0xf7a7E1F48FA43cb7919Ff4Eb362c5bE78092dF4A", + "MockYearnLinearPool": "0x016B7366F76aa2794097798B90CF239796AEff8d", + "MockYearnTokenVault": "0x9129E834e15eA19b6069e8f08a8EcFc13686B8dC", + "NoProtocolFeeLiquidityBootstrappingPoolFactory": "0x45fFd460cC6642B8D8Fb12373DFd77Ceb0f4932B", + "NullVotingEscrow": "0x475D18169BE8a89357A9ee3Ab00ca386d20fA229", + "PoolRecoveryHelper": "0x1b6F057520B4e826271D47b8bdab98E35Af17E59", + "PreseededVotingEscrowDelegation": "0xb1a4FE1C6d25a0DDAb47431A92A723dd71d9021f", + "ProtocolFeePercentagesProvider": "0xf7D5DcE55E6D47852F054697BAB6A1B48A00ddbd", + "ProtocolFeesCollector": "0xce88686553686DA562CE7Cea497CE749DA109f9F", + "ProtocolFeesWithdrawer": "0x809B79b53F18E9bc08A961ED4678B901aC93213a", + "ProtocolIdRegistry": "0x6CaD2ea22BFA7F4C14Aae92E47F510Cd5C509bc7", + "RecoveryModeHelper": "0x5419e785b83Ad3539D3a8741C0ABb77D90d8784E", + "SiloLinearPoolFactory": "0x8eA89804145c007e7D226001A96955ad53836087", + "SingleRecipientGauge": "0x9a5ddDE7056ceFFb03D9962c4549Ac1C4ad1F985", + "SingleRecipientGaugeFactory": "0x7EE4D172Ae50C627a1BFA9A99E1260C54dA26fdF", + "SmartWalletChecker": "0x230a59F4d9ADc147480f03B0D3fFfeCd56c3289a", + "TestBalancerToken": "0xb19382073c7A0aDdbb56Ac6AF1808Fa49e377B75", + "Vault": "0xBA12222222228d8Ba445958a75a0704d566BF2C8", + "VeBoostV2": "0x927906bbAc747c13c75F6447FE8abb490EAB456C", + "VotingEscrow": "0x150A72e4D4d81BbF045565E232c50Ed0931ad795", + "VotingEscrowDelegation": "0x0c5538098EBe88175078972F514C9e101D325D4F", + "VotingEscrowDelegationProxy": "0xD87F44Df0159DC78029AB9CA7D7e57E7249F5ACD", + "WeightedPoolFactory": "0x7920BFa1b2041911b354747CA7A6cDD2dfC50Cfd", + "YearnLinearPoolFactory": "0xAcf05BE5134d64d150d153818F8C67EE36996650" +} diff --git a/src/lib/config/index.ts b/src/lib/config/index.ts index 7624c79370..9f6deca9d4 100644 --- a/src/lib/config/index.ts +++ b/src/lib/config/index.ts @@ -6,6 +6,7 @@ import gnosisChain from './gnosis-chain'; import mainnet from './mainnet'; import optimism from './optimism'; import polygon from './polygon'; +import sepolia from './sepolia'; import zkevm from './zkevm'; // We don't import Network from sdk to avoid extra bundle size when loading app (while the SDK is not tree-shakable) @@ -19,6 +20,7 @@ export enum Network { FANTOM = 250, ZKEVM = 1101, ARBITRUM = 42161, + SEPOLIA = 11155111, } const config: Record = { @@ -29,6 +31,7 @@ const config: Record = { [Network.OPTIMISM]: optimism, [Network.GNOSIS]: gnosisChain, [Network.ZKEVM]: zkevm, + [Network.SEPOLIA]: sepolia, }; export default config; diff --git a/src/lib/config/sepolia/contracts.ts b/src/lib/config/sepolia/contracts.ts new file mode 100644 index 0000000000..83c24aef58 --- /dev/null +++ b/src/lib/config/sepolia/contracts.ts @@ -0,0 +1,28 @@ +import { Contracts } from '../types'; +import * as sepolia from '@/assets/data/contracts/sepolia.json'; + +const contracts: Contracts = { + merkleRedeem: '', + merkleOrchard: '', + multicall: '', + authorizer: sepolia.Authorizer, + vault: sepolia.Vault, + weightedPoolFactory: sepolia.WeightedPoolFactory, + stablePoolFactory: sepolia.ComposableStablePoolFactory, + lidoRelayer: '', + balancerHelpers: sepolia.BalancerHelpers, + batchRelayer: sepolia.BalancerRelayer, + gaugeFactory: '', + balancerMinter: sepolia.BalancerMinter, + gaugeController: sepolia.GaugeController, + tokenAdmin: sepolia.BalancerTokenAdmin, + veBAL: sepolia.VotingEscrow, + veDelegationProxy: '', + veBALHelpers: '', + feeDistributor: '', + feeDistributorDeprecated: '', + faucet: '', + gaugeRewardsHelper: '', +}; + +export default contracts; diff --git a/src/lib/config/sepolia/index.ts b/src/lib/config/sepolia/index.ts new file mode 100644 index 0000000000..2f0f2d9dfc --- /dev/null +++ b/src/lib/config/sepolia/index.ts @@ -0,0 +1,67 @@ +import { Config } from '../types'; +import contracts from './contracts'; +import keys from './keys'; +import tokenlists from './tokenlists'; +import tokens from './tokens'; +import pools from './pools'; +import rateProviders from './rateProviders'; + +const config: Config = { + key: '11155111', + chainId: 11155111, + chainName: 'Sepolia', + name: 'Ethereum Testnet Sepolia', + shortName: 'Sepolia', + monorepoName: 'sepolia', + slug: 'sepolia', + network: 'sepolia', + trustWalletNetwork: 'ethereum', + unknown: false, + visibleInUI: true, + testNetwork: true, + rpc: `https://sepolia.infura.io/v3/${keys.infura}`, + ws: `wss://sepolia.infura.io/ws/v3/${keys.infura}`, + explorer: 'https://sepolia.etherscan.io', + explorerName: 'Etherscan', + subgraph: '', + poolsUrlV2: '', + subgraphs: { + main: [''], + aave: '', + gauge: '', + blocks: '', + }, + bridgeUrl: '', + supportsEIP1559: true, + supportsElementPools: true, + blockTime: 12, + nativeAsset: { + name: 'Ether', + address: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', + symbol: 'ETH', + decimals: 18, + deeplinkId: 'ether', + logoURI: 'tokens/eth.png', + minTransactionBuffer: '0.05', + }, + thirdParty: { + coingecko: { + nativeAssetId: 'ethereum', + platformId: 'ethereum', + }, + }, + addresses: { + ...contracts, + }, + pools, + tokens, + keys, + gauges: { + type: 2, + weight: 100, + }, + tokenlists, + rateProviders, +}; + +export default config; diff --git a/src/lib/config/sepolia/keys.ts b/src/lib/config/sepolia/keys.ts new file mode 100644 index 0000000000..0d45e2c229 --- /dev/null +++ b/src/lib/config/sepolia/keys.ts @@ -0,0 +1,8 @@ +import { Keys } from '../types'; + +const keys: Keys = { + infura: 'daaa68ec242643719749dd1caba2fc66', + alchemy: 'oGLgncMVHNWltnK0nTfiryxQ6gYemKQO', +}; + +export default keys; diff --git a/src/lib/config/sepolia/pools.ts b/src/lib/config/sepolia/pools.ts new file mode 100644 index 0000000000..097f929bb1 --- /dev/null +++ b/src/lib/config/sepolia/pools.ts @@ -0,0 +1,61 @@ +import { Pools } from '@/types/pools'; + +const pools: Pools = { + IdsMap: { + staBAL: '', + bbAaveUSD: { + v1: '', + v2: '', + v3: '', + }, + veBAL: '', + }, + Pagination: { + PerPage: 10, + PerPool: 10, + PerPoolInitial: 5, + }, + BoostsEnabled: true, + DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b', + ZeroAddress: '0x0000000000000000000000000000000000000000', + DynamicFees: { + Gauntlet: [], + }, + BlockList: [], + IncludedPoolTypes: [ + 'Weighted', + 'Stable', + 'MetaStable', + 'LiquidityBootstrapping', + 'Investment', + 'StablePhantom', + 'ComposableStable', + ], + Stable: { + AllowList: [], + }, + Investment: { + AllowList: [], + }, + Weighted: { + // Only effective after given timestamp here: usePool.ts#createdAfterTimestamp + // see useDisabledJoinPool.ts#nonAllowedWeightedPoolAfterTimestamp for logic. + AllowList: [], + }, + Factories: {}, + Stakable: { + VotingGaugePools: [], + AllowList: [], + }, + Metadata: {}, + Deep: [], + BoostedApr: [], + DisabledJoins: [], + Deprecated: { + deprecatedid: {}, //Used for unit testing + }, + ExitViaInternalBalance: [], + Risks: {}, +}; + +export default pools; diff --git a/src/lib/config/sepolia/rateProviders.ts b/src/lib/config/sepolia/rateProviders.ts new file mode 100644 index 0000000000..a2072658fc --- /dev/null +++ b/src/lib/config/sepolia/rateProviders.ts @@ -0,0 +1,9 @@ +import { RateProviders } from '../types'; + +const rateProviders: RateProviders = { + '*': { + '0x0000000000000000000000000000000000000000': true, + }, +}; + +export default rateProviders; diff --git a/src/lib/config/sepolia/tokenlists.ts b/src/lib/config/sepolia/tokenlists.ts new file mode 100644 index 0000000000..0118c9e2fd --- /dev/null +++ b/src/lib/config/sepolia/tokenlists.ts @@ -0,0 +1,13 @@ +import { TokenListURLMap } from '@/types/TokenList'; + +const tokenlists: TokenListURLMap = { + Balancer: { + Default: + 'https://raw.githubusercontent.com/balancer/tokenlists/main/generated/listed-old.tokenlist.json', + Vetted: + 'https://raw.githubusercontent.com/balancer/tokenlists/main/generated/balancer.tokenlist.json', + }, + External: [], +}; + +export default tokenlists; diff --git a/src/lib/config/sepolia/tokens.ts b/src/lib/config/sepolia/tokens.ts new file mode 100644 index 0000000000..9db1c26d00 --- /dev/null +++ b/src/lib/config/sepolia/tokens.ts @@ -0,0 +1,31 @@ +import { TokenConstants } from '../types'; + +const tokens: TokenConstants = { + Popular: { + Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'USDT', 'WETH'], + }, + InitialSwapTokens: { + input: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', + output: '', + }, + Addresses: { + nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', + wNativeAsset: '', + WETH: '', + BAL: '', + bbaUSD: '', + bbaUSDv2: '', + rETH: '', + stMATIC: '', + stETH: '', + wstETH: '', + }, + PriceChainMap: { + /** + * Addresses must be lower case and map from sepolia to mainnet, e.g + * [sepolia address]: mainnet address + */ + }, +}; + +export default tokens; From 75f966fb7658bc0a58148bc2794dbc8758d499d5 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Tue, 4 Jul 2023 20:25:56 +1000 Subject: [PATCH 2/8] Add subgraphs, remove unused keys --- src/lib/config/gnosis-chain/index.ts | 5 +---- src/lib/config/goerli/keys.ts | 1 - src/lib/config/sepolia/index.ts | 10 +++++++--- src/lib/config/sepolia/keys.ts | 1 - 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib/config/gnosis-chain/index.ts b/src/lib/config/gnosis-chain/index.ts index 3ca95fdb2f..743d21ce46 100644 --- a/src/lib/config/gnosis-chain/index.ts +++ b/src/lib/config/gnosis-chain/index.ts @@ -60,10 +60,7 @@ const config: Config = { }, pools, tokens, - keys: { - infura: 'daaa68ec242643719749dd1caba2fc66', - alchemy: 'oGLgncMVHNWltnK0nTfiryxQ6gYemKQO', - }, + keys: {}, gauges: { type: 2, weight: 100, diff --git a/src/lib/config/goerli/keys.ts b/src/lib/config/goerli/keys.ts index 0d45e2c229..b3fc7bb9dc 100644 --- a/src/lib/config/goerli/keys.ts +++ b/src/lib/config/goerli/keys.ts @@ -2,7 +2,6 @@ import { Keys } from '../types'; const keys: Keys = { infura: 'daaa68ec242643719749dd1caba2fc66', - alchemy: 'oGLgncMVHNWltnK0nTfiryxQ6gYemKQO', }; export default keys; diff --git a/src/lib/config/sepolia/index.ts b/src/lib/config/sepolia/index.ts index 2f0f2d9dfc..aece1efe55 100644 --- a/src/lib/config/sepolia/index.ts +++ b/src/lib/config/sepolia/index.ts @@ -23,12 +23,16 @@ const config: Config = { ws: `wss://sepolia.infura.io/ws/v3/${keys.infura}`, explorer: 'https://sepolia.etherscan.io', explorerName: 'Etherscan', - subgraph: '', + subgraph: + 'https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest', poolsUrlV2: '', subgraphs: { - main: [''], + main: [ + 'https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest', + ], aave: '', - gauge: '', + gauge: + 'https://api.studio.thegraph.com/query/24660/balancer-gauges-sepolia-beta/version/latest', blocks: '', }, bridgeUrl: '', diff --git a/src/lib/config/sepolia/keys.ts b/src/lib/config/sepolia/keys.ts index 0d45e2c229..b3fc7bb9dc 100644 --- a/src/lib/config/sepolia/keys.ts +++ b/src/lib/config/sepolia/keys.ts @@ -2,7 +2,6 @@ import { Keys } from '../types'; const keys: Keys = { infura: 'daaa68ec242643719749dd1caba2fc66', - alchemy: 'oGLgncMVHNWltnK0nTfiryxQ6gYemKQO', }; export default keys; From 9029eceb4983bca96f2e95e6a42f158a11369a85 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Thu, 6 Jul 2023 18:48:04 +1000 Subject: [PATCH 3/8] Add multicall, tokens and priceChainMap --- src/lib/config/sepolia/contracts.ts | 2 +- src/lib/config/sepolia/tokens.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lib/config/sepolia/contracts.ts b/src/lib/config/sepolia/contracts.ts index 83c24aef58..3362223274 100644 --- a/src/lib/config/sepolia/contracts.ts +++ b/src/lib/config/sepolia/contracts.ts @@ -4,7 +4,7 @@ import * as sepolia from '@/assets/data/contracts/sepolia.json'; const contracts: Contracts = { merkleRedeem: '', merkleOrchard: '', - multicall: '', + multicall: '0xca11bde05977b3631167028862be2a173976ca11', authorizer: sepolia.Authorizer, vault: sepolia.Vault, weightedPoolFactory: sepolia.WeightedPoolFactory, diff --git a/src/lib/config/sepolia/tokens.ts b/src/lib/config/sepolia/tokens.ts index 9db1c26d00..f5b8d45f0e 100644 --- a/src/lib/config/sepolia/tokens.ts +++ b/src/lib/config/sepolia/tokens.ts @@ -6,13 +6,13 @@ const tokens: TokenConstants = { }, InitialSwapTokens: { input: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', - output: '', + output: '0xb19382073c7A0aDdbb56Ac6AF1808Fa49e377B75', }, Addresses: { nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', - wNativeAsset: '', - WETH: '', - BAL: '', + wNativeAsset: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9', + WETH: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9', + BAL: '0xb19382073c7A0aDdbb56Ac6AF1808Fa49e377B75', bbaUSD: '', bbaUSDv2: '', rETH: '', @@ -25,6 +25,10 @@ const tokens: TokenConstants = { * Addresses must be lower case and map from sepolia to mainnet, e.g * [sepolia address]: mainnet address */ + '0x7b79995e5f793a07bc00c21412e50ecae098e7f9': + '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + '0xb19382073c7a0addbb56ac6af1808fa49e377b75': + '0xba100000625a3754423978a60c9317c58a424e3d', }, }; From c6c77602f40606187aae7fdc87e26dc3547a9121 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Fri, 7 Jul 2023 15:40:08 +1000 Subject: [PATCH 4/8] Replace all goerli network checks with generic testnet checks --- src/components/navs/AppNav/DesktopLinks/DesktopLinks.vue | 4 ++-- src/composables/useNetwork.ts | 2 +- src/composables/useVotingGauges.ts | 8 ++++---- src/constants/voting-gauges.ts | 7 +++++++ src/lib/config/zkevm/index.ts | 3 ++- src/plugins/router/index.ts | 4 ++-- .../balancer/gauges/gauge-controller.decorator.ts | 6 +++--- src/services/block/block.service.ts | 3 +-- 8 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/components/navs/AppNav/DesktopLinks/DesktopLinks.vue b/src/components/navs/AppNav/DesktopLinks/DesktopLinks.vue index f1e6f42598..cebf5e7479 100644 --- a/src/components/navs/AppNav/DesktopLinks/DesktopLinks.vue +++ b/src/components/navs/AppNav/DesktopLinks/DesktopLinks.vue @@ -1,7 +1,7 @@