From 1940b8ec58c4ce30ecbd104232838860ae5151fa Mon Sep 17 00:00:00 2001 From: Gareth Fuller Date: Tue, 22 Aug 2023 16:48:30 +0100 Subject: [PATCH] hotfix: Recovery exits (#4040) * feat: Recovery exits * chore: Add migration notices * chore: Update title * chore: bump SDK version * chore: Bump chunk size limit * chore: Add link to forum post * chore: Add link to pool page alert * chore: Style link --- package-lock.json | 14 +- package.json | 2 +- src/App.vue | 18 +- src/components/_global/BalTable/BalTable.vue | 15 +- .../btns/TxActionBtn/TxActionBtn.vue | 14 +- .../contextual/pages/pool/PoolActionsCard.vue | 14 + .../contextual/pages/pool/PoolStatCards.vue | 13 +- .../pool/staking/StakingIncentivesCard.vue | 2 +- .../pages/pool/withdraw/WithdrawPage.vue | 3 +- .../pages/vebal/LMVoting/GaugesFilters.vue | 3 +- .../pages/vebal/LMVoting/LMVoting.vue | 3 +- .../contextual/pages/vebal/LMVoting/types.ts | 2 +- .../CrossChainBoostCards.vue | 5 +- .../cross-chain-boost/CrossChainSyncModal.vue | 2 +- .../cross-chain-boost/ProceedToSyncModal.vue | 3 +- .../cross-chain-boost/SyncFinalState.vue | 3 +- .../cross-chain-boost/SyncNetworkAction.vue | 3 +- .../cross-chain-boost/SyncSelectNetwork.vue | 3 +- src/components/heros/PortfolioPageHero.vue | 3 +- src/components/modals/VeBalRedirectModal.vue | 2 +- src/components/navs/AppNav/AppNavSettings.vue | 2 +- .../tables/PoolsTable/PoolsTable.vue | 2 + src/composables/approvals/types.ts | 1 + .../approvals/useTokenApprovalActions.ts | 4 + .../queries/useCrossChainNetwork.ts | 3 +- .../queries/useOmniEscrowLocksQuery.ts | 3 +- src/composables/queries/usePoolsQuery.ts | 3 +- .../queries/useVotingEscrowQuery.ts | 3 +- src/composables/useBlocknative.ts | 2 +- src/composables/useDisabledJoinPool.ts | 2 + src/composables/useNetwork.spec.ts | 2 +- src/composables/useNetwork.ts | 3 +- src/composables/usePoolHelpers.spec.ts | 2 +- src/composables/usePoolHelpers.ts | 46 +- src/composables/usePoolRisks.spec.ts | 2 +- src/composables/useSupportsBlocknative.ts | 2 +- src/constants/pool-lists/csp-issue.ts | 438 +++++ src/constants/queryKeys.ts | 2 +- src/constants/voting-gauges.ts | 2 +- src/dependencies/balancer-sdk.mocks.ts | 2 + src/lib/balancer.sdk.ts | 2 +- src/lib/config/arbitrum/pools.ts | 42 + src/lib/config/avalanche/pools.ts | 38 +- src/lib/config/gnosis-chain/pools.ts | 31 +- src/lib/config/index.ts | 18 +- src/lib/config/mainnet/pools.ts | 89 + src/lib/config/polygon/pools.ts | 75 + src/lib/config/types.ts | 17 +- src/lib/config/zkevm/pools.ts | 9 +- src/lib/scripts/tokenlists.generator.ts | 2 +- src/lib/scripts/voting-gauge.generator.ts | 2 +- src/lib/utils/urls.ts | 3 +- src/locales/default.json | 7 + src/pages/claim/index.vue | 2 +- src/pages/index.vue | 10 +- src/pages/portfolio.vue | 2 + .../UserInvestedInAffectedPoolAlert.vue | 28 + .../components/TokenUnwrapTable.vue | 391 +++++ .../recovery-exit/components/UnstakeTable.vue | 412 +++++ .../components/WithdrawalModal.vue | 70 + .../components/WithdrawalsTable.vue | 376 +++++ src/pages/recovery-exit/recovery-exit.vue | 149 ++ .../useUserIsDepositedInAffectedPool.ts | 221 +++ src/plugins/router/index.ts | 7 + src/plugins/router/nav-guards.ts | 2 +- .../cross-chain-sync.provider.spec.ts | 2 +- src/providers/cross-chain-sync.provider.ts | 2 +- src/providers/local/exit-pool.provider.ts | 3 +- src/providers/local/user-pools.provider.ts | 4 +- src/providers/token-lists.provider.ts | 4 +- .../batch-relayer/abi/AaveWrapping.json | 109 ++ .../batch-relayer/abi/BalancerRelayer.json | 67 + .../batch-relayer/abi/BatchRelayer.json | 67 + .../abi/BatchRelayerLibrary.json | 1485 +++++++++++++++++ .../batch-relayer/abi/BatchRelayerView.json | 67 + .../batch-relayer/abi/Erc4626Wrapping.json | 118 ++ .../batch-relayer/abi/GaugeActions.json | 177 ++ .../batch-relayer/abi/LinearPool.json | 1062 ++++++++++++ .../batch-relayer/abi/ReaperWrapping.json | 99 ++ .../batch-relayer/abi/VaultActions.json | 428 +++++ .../batch-relayer/abi/YearnWrapping.json | 99 ++ .../batch-relayer/batch-relayer.service.ts | 215 +++ .../extensions/aave-wrapping.service.ts | 18 + .../extensions/erc4626-wrapping.service.ts | 32 + .../extensions/euler-wrapping.service.ts | 23 + .../extensions/gauge-actions.service.ts | 27 + .../extensions/gearbox-wrapping.service.ts | 23 + .../extensions/reaper-wrapping.service.ts | 32 + .../extensions/silo-wrapping.service.ts | 23 + .../extensions/tetu-wrapping.service.ts | 23 + .../extensions/vault-actions.service.ts | 85 + .../extensions/yearn-wrapping.service.ts | 29 + .../balancer/batch-relayer/relayer-types.ts | 150 ++ .../contracts/contracts/vebal-proxy.ts | 2 +- .../gauges/gauge-controller.decorator.ts | 2 +- .../exits/handlers/recovery-exit.handler.ts | 16 +- .../balancer/subgraph/entities/pools/index.ts | 2 +- src/services/config/config.service.ts | 3 +- src/services/contracts/vault.service.mocks.ts | 2 +- src/services/cowswap/constants.ts | 2 +- .../cowswap/cowswapProtocol.service.ts | 2 +- src/services/pool/types.ts | 16 +- .../rpc-provider/rpc-provider.service.ts | 2 +- .../staking/staking-rewards.service.ts | 2 +- src/services/token-list/token-list.service.ts | 2 +- .../trustwallet/walletconnect.connector.ts | 2 +- src/services/web3/wallet.service.ts | 2 +- src/types/pools.ts | 1 + vite.config.ts | 2 +- 109 files changed, 7058 insertions(+), 133 deletions(-) create mode 100644 src/constants/pool-lists/csp-issue.ts create mode 100644 src/pages/recovery-exit/UserInvestedInAffectedPoolAlert.vue create mode 100644 src/pages/recovery-exit/components/TokenUnwrapTable.vue create mode 100644 src/pages/recovery-exit/components/UnstakeTable.vue create mode 100644 src/pages/recovery-exit/components/WithdrawalModal.vue create mode 100644 src/pages/recovery-exit/components/WithdrawalsTable.vue create mode 100644 src/pages/recovery-exit/recovery-exit.vue create mode 100644 src/pages/recovery-exit/useUserIsDepositedInAffectedPool.ts create mode 100644 src/services/balancer/batch-relayer/abi/AaveWrapping.json create mode 100644 src/services/balancer/batch-relayer/abi/BalancerRelayer.json create mode 100644 src/services/balancer/batch-relayer/abi/BatchRelayer.json create mode 100644 src/services/balancer/batch-relayer/abi/BatchRelayerLibrary.json create mode 100644 src/services/balancer/batch-relayer/abi/BatchRelayerView.json create mode 100644 src/services/balancer/batch-relayer/abi/Erc4626Wrapping.json create mode 100644 src/services/balancer/batch-relayer/abi/GaugeActions.json create mode 100644 src/services/balancer/batch-relayer/abi/LinearPool.json create mode 100644 src/services/balancer/batch-relayer/abi/ReaperWrapping.json create mode 100644 src/services/balancer/batch-relayer/abi/VaultActions.json create mode 100644 src/services/balancer/batch-relayer/abi/YearnWrapping.json create mode 100644 src/services/balancer/batch-relayer/batch-relayer.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/aave-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/erc4626-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/euler-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/gauge-actions.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/gearbox-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/reaper-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/silo-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/tetu-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/vault-actions.service.ts create mode 100644 src/services/balancer/batch-relayer/extensions/yearn-wrapping.service.ts create mode 100644 src/services/balancer/batch-relayer/relayer-types.ts diff --git a/package-lock.json b/package-lock.json index 4c587236e5..08de11562a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@aave/protocol-js": "^4.3.0", "@balancer-labs/assets": "github:balancer-labs/assets#master", - "@balancer-labs/sdk": "^1.1.4-beta.19", + "@balancer-labs/sdk": "^1.1.4-beta.20", "@balancer-labs/typechain": "^1.0.0", "@balancer-labs/v2-deployments": "^3.2.0", "@cowprotocol/contracts": "^1.3.1", @@ -1523,9 +1523,9 @@ } }, "node_modules/@balancer-labs/sdk": { - "version": "1.1.4-beta.19", - "resolved": "https://registry.npmjs.org/@balancer-labs/sdk/-/sdk-1.1.4-beta.19.tgz", - "integrity": "sha512-rPKkYpFyDZUq6Oh1qLaYGm2Z9k7pwvZumXWKraitUAYg3WxXh+VwU5f3zPVWXb1a+M4vwY6AHyT5vmdp/a7Q4w==", + "version": "1.1.4-beta.20", + "resolved": "https://registry.npmjs.org/@balancer-labs/sdk/-/sdk-1.1.4-beta.20.tgz", + "integrity": "sha512-O6OS+lp6LGYpvYc/bXuwIyfKJdw/Fl+/p53Sb3geKxeJHEPFpKXXoiXdQyG2BLLyWQyrxJyl3UkRo+9U+agDHA==", "dev": true, "dependencies": { "@balancer-labs/sor": "^4.1.1-beta.16", @@ -29577,9 +29577,9 @@ } }, "@balancer-labs/sdk": { - "version": "1.1.4-beta.19", - "resolved": "https://registry.npmjs.org/@balancer-labs/sdk/-/sdk-1.1.4-beta.19.tgz", - "integrity": "sha512-rPKkYpFyDZUq6Oh1qLaYGm2Z9k7pwvZumXWKraitUAYg3WxXh+VwU5f3zPVWXb1a+M4vwY6AHyT5vmdp/a7Q4w==", + "version": "1.1.4-beta.20", + "resolved": "https://registry.npmjs.org/@balancer-labs/sdk/-/sdk-1.1.4-beta.20.tgz", + "integrity": "sha512-O6OS+lp6LGYpvYc/bXuwIyfKJdw/Fl+/p53Sb3geKxeJHEPFpKXXoiXdQyG2BLLyWQyrxJyl3UkRo+9U+agDHA==", "dev": true, "requires": { "@balancer-labs/sor": "^4.1.1-beta.16", diff --git a/package.json b/package.json index 07af7ebfbb..0d4052b1bd 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@aave/protocol-js": "^4.3.0", "@balancer-labs/assets": "github:balancer-labs/assets#master", - "@balancer-labs/sdk": "^1.1.4-beta.19", + "@balancer-labs/sdk": "^1.1.4-beta.20", "@balancer-labs/typechain": "^1.0.0", "@balancer-labs/v2-deployments": "^3.2.0", "@cowprotocol/contracts": "^1.3.1", diff --git a/src/App.vue b/src/App.vue index c655bdefb4..26af782549 100644 --- a/src/App.vue +++ b/src/App.vue @@ -25,6 +25,8 @@ import useAlerts, { AlertPriority, AlertType, } from './composables/useAlerts'; +import { useI18n } from 'vue-i18n'; +import useNetwork from './composables/useNetwork'; // Dynamic import of layout components: // it prevents the initial bundle from including all the layouts (and their unique dependencies) @@ -75,15 +77,21 @@ const { sidebarOpen } = useSidebar(); const { addAlert } = useAlerts(); const { handleThirdPartyModalToggle, isThirdPartyServicesModalVisible } = useThirdPartyServices(); +const { t } = useI18n(); +const router = useRouter(); +const { networkSlug } = useNetwork(); // OPTIONAL FEATURE ALERTS are enabled by featureAlertEnabled toggle const featureAlert: Alert = { - id: 'feature-alert', - priority: AlertPriority.LOW, - label: '', // Add the new feature alert text here and set featureAlertEnabled to true to activate it - type: AlertType.FEATURE, + id: 'csp-alert', + priority: AlertPriority.HIGH, + label: t('poolWarnings.cspPoolVulnWarning.generalTitle'), // Add the new feature alert text here and set featureAlertEnabled to true to activate it + type: AlertType.ERROR, rememberClose: false, - actionOnClick: false, + actionLabel: 'Recovery exit', + action: () => { + router.push({ name: 'recovery-exit', params: { networkSlug } }); + }, }; const featureAlertEnabled = false; if (featureAlertEnabled) addAlert(featureAlert); diff --git a/src/components/_global/BalTable/BalTable.vue b/src/components/_global/BalTable/BalTable.vue index 0b750faa17..026fb35d91 100644 --- a/src/components/_global/BalTable/BalTable.vue +++ b/src/components/_global/BalTable/BalTable.vue @@ -199,16 +199,13 @@ const shouldRenderTotals = computed(() => props.columns.some(column => column.totalsCell !== undefined) ); -watch( - () => props.data, - newData => { - if (currentSortColumn.value && currentSortDirection.value !== null) { - handleSort(currentSortColumn.value, false); - return; - } - tableData.value = newData; +watch([() => props.data, () => props.isLoading], ([newData]) => { + if (currentSortColumn.value && currentSortDirection.value !== null) { + handleSort(currentSortColumn.value, false); + return; } -); + tableData.value = newData; +});