@@ -3,56 +3,38 @@ import { validateArgs } from '../../../../utils'
3
3
import { vaultMulticall } from '../../../../contracts'
4
4
5
5
6
- export const commonLogic = async ( values : UpdateWhitelistInput ) => {
7
- const { options, contracts, assets, vaultAddress, userAddress } = values
6
+ const validateList = ( whitelist : UpdateWhitelistInput [ 'whitelist' ] ) => {
7
+ const isValid = whitelist . every ( ( whitelistItem ) => (
8
+ whitelistItem
9
+ && typeof whitelistItem === 'object'
10
+ && typeof whitelistItem . address === 'string'
11
+ && typeof whitelistItem . isNew === 'boolean'
12
+ ) )
13
+
14
+ if ( ! isValid ) {
15
+ throw new Error ( 'The "whitelist" argument must be an array of objects with "address" and "isNew" properties' )
16
+ }
17
+ }
8
18
9
- validateArgs . bigint ( { assets } )
10
- validateArgs . address ( { vaultAddress , userAddress } )
19
+ export const commonLogic = ( values : UpdateWhitelistInput ) => {
20
+ const { options , contracts , userAddress, vaultAddress , whitelist } = values
11
21
12
- const params : Parameters < typeof vaultMulticall > [ 0 ] [ 'request' ] [ 'params' ] = [ ]
22
+ validateArgs . array ( { whitelist } )
23
+ validateArgs . address ( { vaultAddress, userAddress } )
24
+ validateList ( whitelist )
13
25
14
26
const multicallCommonArgs : Omit < Parameters < typeof vaultMulticall > [ 0 ] , 'request' > = {
15
- vaultContract : contracts . helpers . createVault ( vaultAddress ) ,
27
+ vaultContract : contracts . helpers . createPrivateVault ( vaultAddress ) ,
16
28
keeperContract : contracts . base . keeper ,
17
29
vaultAddress,
18
30
userAddress,
19
31
options,
20
32
}
21
33
22
- const isCollateralized = await contracts . base . keeper . isCollateralized ( vaultAddress )
23
-
24
- if ( isCollateralized ) {
25
- const result = await vaultMulticall < [ { shares : bigint } ] > ( {
26
- ...multicallCommonArgs ,
27
- request : {
28
- params : [ { method : 'convertToShares' , args : [ assets ] } ] ,
29
- callStatic : true ,
30
- } ,
31
- } )
32
-
33
- const exitQueueShares = result [ 0 ] . shares
34
-
35
- params . push ( {
36
- method : 'enterExitQueue' ,
37
- args : [ exitQueueShares , userAddress ] ,
38
- } )
39
- }
40
- else {
41
- const result = await vaultMulticall < [ { shares : bigint } ] > ( {
42
- ...multicallCommonArgs ,
43
- request : {
44
- params : [ { method : 'convertToShares' , args : [ assets ] } ] ,
45
- callStatic : true ,
46
- } ,
47
- } )
48
-
49
- const shares = result [ 0 ] . shares
50
-
51
- params . push ( {
52
- method : 'redeem' ,
53
- args : [ shares , userAddress ] ,
54
- } )
55
- }
34
+ const params : Parameters < typeof vaultMulticall > [ 0 ] [ 'request' ] [ 'params' ] = whitelist . map ( ( { address, isNew } ) => ( {
35
+ method : 'updateWhitelist' ,
36
+ args : [ address , isNew ] ,
37
+ } ) )
56
38
57
39
return {
58
40
params,
0 commit comments