Skip to content

Commit 8b38310

Browse files
committed
feat: migration continue wrong network hook added
1 parent 201ef6b commit 8b38310

File tree

11 files changed

+52
-45
lines changed

11 files changed

+52
-45
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"test:ci": "jest --ci"
3232
},
3333
"dependencies": {
34-
"@aave/contract-helpers": "1.9.0",
34+
"@aave/contract-helpers": "1.9.1-d6df625bf33ae6be0ed1a122ca941e3015691c6a.0",
3535
"@aave/math-utils": "1.9.0",
3636
"@emotion/cache": "11.10.3",
3737
"@emotion/react": "11.10.4",

src/components/transactions/FlowCommons/ModalWrapper.tsx

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from 'src/hooks/app-data-provider/useAppDataProvider';
99
import { useWalletBalances } from 'src/hooks/app-data-provider/useWalletBalances';
1010
import { AssetCapsProvider } from 'src/hooks/useAssetCaps';
11+
import { useIsWrongNetwork } from 'src/hooks/useIsWrongNetwork';
1112
import { useModalContext } from 'src/hooks/useModal';
1213
import { usePermissions } from 'src/hooks/usePermissions';
1314
import { useProtocolDataContext } from 'src/hooks/useProtocolDataContext';
@@ -46,17 +47,15 @@ export const ModalWrapper: React.FC<{
4647
requiredPermission,
4748
keepWrappedSymbol,
4849
}) => {
49-
const { chainId: connectedChainId, watchModeOnlyAddress } = useWeb3Context();
50+
const { watchModeOnlyAddress } = useWeb3Context();
5051
const { walletBalances } = useWalletBalances();
51-
const {
52-
currentChainId: marketChainId,
53-
currentNetworkConfig,
54-
currentMarketData,
55-
} = useProtocolDataContext();
52+
const { currentNetworkConfig, currentMarketData } = useProtocolDataContext();
5653
const { user, reserves } = useAppDataContext();
5754
const { txError, mainTxState } = useModalContext();
5855
const { permissions } = usePermissions();
5956

57+
const { isWrongNetwork, requiredChainId } = useIsWrongNetwork(_requiredChainId);
58+
6059
if (txError && txError.blocking) {
6160
return <TxErrorView txError={txError} />;
6261
}
@@ -70,9 +69,6 @@ export const ModalWrapper: React.FC<{
7069
return <>{currentMarketData.permissionComponent}</>;
7170
}
7271

73-
const requiredChainId = _requiredChainId ? _requiredChainId : marketChainId;
74-
const isWrongNetwork = connectedChainId !== requiredChainId;
75-
7672
const poolReserve = reserves.find((reserve) => {
7773
if (underlyingAsset.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase())
7874
return reserve.isWrappedBaseAsset;

src/hooks/useIsWrongNetwork.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { useWeb3Context } from 'src/libs/hooks/useWeb3Context';
2+
3+
import { useProtocolDataContext } from './useProtocolDataContext';
4+
5+
export function useIsWrongNetwork(_requiredChainId?: number) {
6+
const { currentChainId } = useProtocolDataContext();
7+
const { chainId: connectedChainId } = useWeb3Context();
8+
9+
const requiredChainId = _requiredChainId ? _requiredChainId : currentChainId;
10+
const isWrongNetwork = connectedChainId !== requiredChainId;
11+
12+
return {
13+
isWrongNetwork,
14+
requiredChainId,
15+
};
16+
}

src/hooks/useUserReserves.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
selectUserBorrowPositions,
2+
selectNonEmptyUserBorrowPositions,
33
selectUserNonEmtpySummaryAndIncentive,
44
} from 'src/store/poolSelectors';
55
import { useRootStore } from 'src/store/root';
@@ -13,7 +13,7 @@ export const useUserReserves = () => {
1313
selectUserNonEmtpySummaryAndIncentive(state, currentTimestamp)
1414
);
1515
const borrowPositions = useRootStore((state) =>
16-
selectUserBorrowPositions(state, currentTimestamp)
16+
selectNonEmptyUserBorrowPositions(state, currentTimestamp)
1717
);
1818

1919
return { user, borrowPositions };

src/store/poolSelectors.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import { formatReservesAndIncentives, formatUserSummaryAndIncentives } from '@aave/math-utils';
22
import { EmodeCategory } from 'src/helpers/types';
33
import { fetchIconSymbolAndName, STABLE_ASSETS } from 'src/ui-config/reservePatches';
4-
import { CustomMarket, MarketDataType, marketsData } from 'src/utils/marketsAndNetworksConfig';
5-
import { PoolReserve } from './poolSlice';
4+
import { CustomMarket, marketsData } from 'src/utils/marketsAndNetworksConfig';
65

6+
import { PoolReserve } from './poolSlice';
77
import { RootStore } from './root';
88

99
export const selectCurrentChainIdV2MarketKey = (state: RootStore): CustomMarket => {
10-
// TODO: make it dynamic
10+
if (state.currentChainId) {
11+
// TODO: make it dynamic
12+
}
1113
return 'fork_proto_polygon' as CustomMarket;
1214
};
1315

1416
export const selectCurrentChainIdV3MarketKey = (state: RootStore): CustomMarket => {
15-
// TODO: make it dynamic
17+
if (state.currentChainId) {
18+
// TODO: make it dynamic
19+
}
1620
return 'fork_proto_polygon_v3' as CustomMarket;
1721
};
1822

@@ -147,7 +151,7 @@ export const selectUserNonEmtpySummaryAndIncentive = (
147151
};
148152
};
149153

150-
export const selectUserBorrowPositions = (state: RootStore, currentTimestamp: number) => {
154+
export const selectNonEmptyUserBorrowPositions = (state: RootStore, currentTimestamp: number) => {
151155
const user = selectUserSummaryAndIncentives(state, currentTimestamp);
152156
const borrowedPositions = user.userReservesData.filter(
153157
(reserve) => reserve.variableBorrows != '0' || reserve.stableBorrows != '0'

src/store/poolSlice.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { SupplyActionProps } from 'src/components/transactions/Supply/SupplyActi
3535
import { SwapActionProps } from 'src/components/transactions/Swap/SwapActions';
3636
import { getRepayCallData, getSwapCallData } from 'src/hooks/useSwap';
3737
import { MarketDataType } from 'src/ui-config/marketsConfig';
38-
import { availableMarkets, marketsData, networkConfigs } from 'src/utils/marketsAndNetworksConfig';
38+
import { marketsData } from 'src/utils/marketsAndNetworksConfig';
3939
import { optimizedPath } from 'src/utils/utils';
4040
import { StateCreator } from 'zustand';
4141

src/store/root.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { enableMapSet } from 'immer';
22
import { CustomMarket } from 'src/ui-config/marketsConfig';
3-
import { marketsData } from 'src/utils/marketsAndNetworksConfig';
43
import create from 'zustand';
54
import { devtools } from 'zustand/middleware';
65

src/store/v3MigrationSelectors.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
selectCurrentChainIdV2MarketData,
1414
selectCurrentChainIdV3MarketData,
1515
selectFormatBaseCurrencyData,
16-
selectFormatUserEmodeCategoryId,
1716
selectUserNonEmtpySummaryAndIncentive,
1817
selectUserSummaryAndIncentives,
1918
} from './poolSelectors';
@@ -97,7 +96,6 @@ export const selectFormatUserSummaryForMigration = (
9796
reserves: ReserveDataHumanized[] = [],
9897
userReserves: UserReserveDataHumanized[] = [],
9998
baseCurrencyData: PoolBaseCurrencyHumanized,
100-
userEmodeCategoryId: number,
10199
currentTimestamp: number
102100
) => {
103101
const { marketReferenceCurrencyDecimals, marketReferenceCurrencyPriceInUsd } = baseCurrencyData;
@@ -135,13 +133,11 @@ export const selectV2UserSummaryAfterMigration = (store: RootStore, currentTimes
135133
}) || [];
136134

137135
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserve);
138-
const userEmodeCategoryId = selectFormatUserEmodeCategoryId(poolReserve);
139136

140137
return selectFormatUserSummaryForMigration(
141138
poolReserve?.reserves,
142139
userReserves,
143140
baseCurrencyData,
144-
userEmodeCategoryId,
145141
currentTimestamp
146142
);
147143
};
@@ -170,7 +166,6 @@ export const selectV3UserSummaryAfterMigration = (store: RootStore, currentTimes
170166
userReserve.scaledATokenBalance,
171167
suppliedAsset.scaledATokenBalance
172168
);
173-
//TODO: merge only if emode categories are the same?
174169
return {
175170
...userReserve,
176171
scaledATokenBalance: combinedScaledATokenBalance,
@@ -188,27 +183,27 @@ export const selectV3UserSummaryAfterMigration = (store: RootStore, currentTimes
188183
}) || [];
189184

190185
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserveV3);
191-
const userEmodeCategoryId = selectFormatUserEmodeCategoryId(poolReserveV3);
192186

193187
return selectFormatUserSummaryForMigration(
194188
poolReserveV3?.reserves,
195189
userReserves,
196190
baseCurrencyData,
197-
userEmodeCategoryId,
198191
currentTimestamp
199192
);
200193
};
201194

202195
export const selectV3UserSummary = (store: RootStore, timestamp: number) => {
203196
const poolReserveV3 = selectCurrentChainIdV3MarketData(store);
204197
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserveV3);
205-
const userEmodeCategoryId = selectFormatUserEmodeCategoryId(poolReserveV3);
206198

207199
return selectFormatUserSummaryForMigration(
208200
poolReserveV3?.reserves,
209201
poolReserveV3?.userReserves,
210202
baseCurrencyData,
211-
userEmodeCategoryId,
212203
timestamp
213204
);
214205
};
206+
207+
export const selectIsMigrationAvailable = (store: RootStore) => {
208+
return Boolean(store.currentMarketData.addresses.V3_MIGRATOR);
209+
};

src/store/v3MigrationSlice.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,20 @@ import {
22
ERC20_2612Service,
33
ERC20Service,
44
EthereumTransactionTypeExtended,
5+
Pool,
56
V3MigrationHelperService,
67
valueToWei,
7-
Pool,
8-
InterestRate,
98
} from '@aave/contract-helpers';
109
import { V3MigrationHelperSignedPermit } from '@aave/contract-helpers/dist/esm/v3-migration-contract/v3MigrationTypes';
11-
import { valueToBigNumber } from '@aave/math-utils';
1210
import { SignatureLike } from '@ethersproject/bytes';
1311
import dayjs from 'dayjs';
14-
import { BigNumber, BigNumberish, constants } from 'ethers';
12+
import { BigNumberish } from 'ethers';
1513
import { produce } from 'immer';
1614
import { Approval } from 'src/helpers/useTransactionHandler';
17-
import { CustomMarket } from 'src/ui-config/marketsConfig';
1815
import { marketsData } from 'src/utils/marketsAndNetworksConfig';
1916
import { StateCreator } from 'zustand';
20-
import {
21-
selectCurrentChainIdV2MarketData,
22-
selectCurrentChainIdV2MarketKey,
23-
selectCurrentChainIdV3MarketKey,
24-
} from './poolSelectors';
2517

18+
import { selectCurrentChainIdV2MarketKey, selectCurrentChainIdV3MarketKey } from './poolSelectors';
2619
import { RootStore } from './root';
2720
import {
2821
selectedUserSupplyReservesForMigration,
@@ -197,8 +190,7 @@ export const createV3MigrationSlice: StateCreator<
197190
});
198191
},
199192
getMigratorAddress: () => {
200-
// TODO: map migrator addresses for each chain after deployment
201-
return '0x01ce9bbcc0418614a8bba983fe79cf77211996f2';
193+
return get().currentMarketData.addresses.V3_MIGRATOR || '';
202194
},
203195
getMigrationServiceInstance: () => {
204196
const address = get().getMigratorAddress();
@@ -219,8 +211,11 @@ export const createV3MigrationSlice: StateCreator<
219211
WETH_GATEWAY: currentMarketV3Data.addresses.WETH_GATEWAY,
220212
L2_ENCODER: currentMarketV3Data.addresses.L2_ENCODER,
221213
});
214+
const migrationServiceInstances = get().migrationServiceInstances;
222215
const newMigratorInstance = new V3MigrationHelperService(provider, migratorAddress, pool);
223-
// TODO: don't forget to add maping here
216+
set({
217+
migrationServiceInstances: { ...migrationServiceInstances, [address]: newMigratorInstance },
218+
});
224219
return newMigratorInstance;
225220
},
226221
migrateBorrow: async (signedPermits: V3MigrationHelperSignedPermit[] = []) => {

src/ui-config/marketsConfig.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export type MarketDataType = {
3131
UI_POOL_DATA_PROVIDER: string;
3232
UI_INCENTIVE_DATA_PROVIDER?: string;
3333
COLLECTOR?: string;
34+
V3_MIGRATOR?: string;
3435
};
3536
/**
3637
* https://www.hal.xyz/ has integrated aave for healtfactor warning notification
@@ -152,6 +153,7 @@ export const marketsData: {
152153
UI_POOL_DATA_PROVIDER: '0x0d24b23DBaB0dc1A6F58029bA94F94Ff0D5382c2',
153154
UI_INCENTIVE_DATA_PROVIDER: '0x645654D59A5226CBab969b1f5431aA47CBf64ab8',
154155
COLLECTOR: '0x7734280A4337F37Fbf4651073Db7c28C80B339e9',
156+
V3_MIGRATOR: '0x01ce9bbcc0418614a8bba983fe79cf77211996f2',
155157
},
156158
halIntegration: {
157159
URL: 'https://app.hal.xyz/recipes/aave-track-your-health-factor',

0 commit comments

Comments
 (0)