@enzymefinance/testutils 4.0.0-next.0 → 4.0.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/declarations/src/assertions.d.ts +4 -4
  3. package/dist/declarations/src/deployment.d.ts +181 -82
  4. package/dist/declarations/src/gasRelayer.d.ts +56 -54
  5. package/dist/declarations/src/helpers.d.ts +16 -15
  6. package/dist/declarations/src/index.d.ts +6 -6
  7. package/dist/declarations/src/scaffolding/assets.d.ts +10 -10
  8. package/dist/declarations/src/scaffolding/chainlink.d.ts +3 -3
  9. package/dist/declarations/src/scaffolding/common.d.ts +7 -7
  10. package/dist/declarations/src/scaffolding/core.d.ts +17 -16
  11. package/dist/declarations/src/scaffolding/extensions/common.d.ts +11 -11
  12. package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +35 -0
  13. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +56 -59
  14. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +4 -2
  15. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +53 -20
  16. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +99 -0
  17. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +12 -12
  18. package/dist/declarations/src/scaffolding/extensions/index.d.ts +5 -5
  19. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +20 -19
  20. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +28 -28
  21. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +272 -271
  22. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +28 -28
  23. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +14 -12
  24. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +32 -32
  25. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +23 -22
  26. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +23 -0
  27. package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +29 -0
  28. package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +33 -25
  29. package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +15 -15
  30. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +46 -46
  31. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +15 -15
  32. package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +22 -22
  33. package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +12 -12
  34. package/dist/declarations/src/scaffolding/extensions/policies.d.ts +17 -17
  35. package/dist/declarations/src/scaffolding/index.d.ts +8 -8
  36. package/dist/declarations/src/scaffolding/setup.d.ts +77 -75
  37. package/dist/declarations/src/scaffolding/shares.d.ts +35 -35
  38. package/dist/declarations/src/scaffolding/vaultCalls.d.ts +32 -17
  39. package/dist/declarations/src/whales.d.ts +42 -44
  40. package/dist/enzymefinance-testutils.browser.cjs.js +1470 -697
  41. package/dist/enzymefinance-testutils.browser.esm.js +1257 -508
  42. package/dist/enzymefinance-testutils.cjs.dev.js +1470 -697
  43. package/dist/enzymefinance-testutils.cjs.prod.js +1470 -697
  44. package/dist/enzymefinance-testutils.esm.js +1257 -508
  45. package/package.json +6 -6
  46. package/src/assertions.ts +5 -2
  47. package/src/deployment.ts +202 -99
  48. package/src/gasRelayer.ts +17 -18
  49. package/src/helpers.ts +6 -4
  50. package/src/scaffolding/assets.ts +6 -5
  51. package/src/scaffolding/chainlink.ts +2 -2
  52. package/src/scaffolding/common.ts +1 -1
  53. package/src/scaffolding/core.ts +28 -12
  54. package/src/scaffolding/extensions/common.ts +4 -4
  55. package/src/scaffolding/extensions/external-positions/actions.ts +103 -0
  56. package/src/scaffolding/extensions/external-positions/compound.ts +69 -114
  57. package/src/scaffolding/extensions/external-positions/index.ts +2 -0
  58. package/src/scaffolding/extensions/external-positions/mocks.ts +132 -10
  59. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +290 -0
  60. package/src/scaffolding/extensions/fees.ts +1 -1
  61. package/src/scaffolding/extensions/integrations/aave.ts +6 -8
  62. package/src/scaffolding/extensions/integrations/compound.ts +10 -11
  63. package/src/scaffolding/extensions/integrations/curve.ts +72 -68
  64. package/src/scaffolding/extensions/integrations/idle.ts +9 -11
  65. package/src/scaffolding/extensions/integrations/index.ts +2 -0
  66. package/src/scaffolding/extensions/integrations/mock.ts +11 -13
  67. package/src/scaffolding/extensions/integrations/paraSwapV4.ts +16 -11
  68. package/src/scaffolding/extensions/integrations/paraSwapV5.ts +73 -0
  69. package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +117 -0
  70. package/src/scaffolding/extensions/integrations/synthetix.ts +45 -12
  71. package/src/scaffolding/extensions/integrations/trackedAssets.ts +3 -4
  72. package/src/scaffolding/extensions/integrations/uniswapV2.ts +31 -27
  73. package/src/scaffolding/extensions/integrations/uniswapV3.ts +9 -10
  74. package/src/scaffolding/extensions/integrations/yearn.ts +9 -11
  75. package/src/scaffolding/extensions/integrations/zeroExV2.ts +9 -7
  76. package/src/scaffolding/extensions/policies.ts +2 -1
  77. package/src/scaffolding/setup.ts +27 -19
  78. package/src/scaffolding/shares.ts +5 -4
  79. package/src/scaffolding/vaultCalls.ts +50 -3
  80. package/src/whales.ts +26 -17
  81. package/tsconfig.json +2 -1
@@ -0,0 +1,103 @@
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import { extractEvent } from '@enzymefinance/ethers';
3
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
4
+ import type { ComptrollerLib, ExternalPositionManager } from '@enzymefinance/protocol';
5
+ import {
6
+ callOnExternalPositionArgs,
7
+ encodeArgs,
8
+ ExternalPositionManagerActionId,
9
+ externalPositionReactivateArgs,
10
+ externalPositionRemoveArgs,
11
+ IExternalPositionProxy,
12
+ } from '@enzymefinance/protocol';
13
+ import type { BigNumberish, BytesLike } from 'ethers';
14
+
15
+ export async function callOnExternalPosition({
16
+ signer,
17
+ comptrollerProxy,
18
+ externalPositionManager,
19
+ externalPositionProxy,
20
+ actionId,
21
+ actionArgs,
22
+ }: {
23
+ signer: SignerWithAddress;
24
+ comptrollerProxy: ComptrollerLib;
25
+ externalPositionManager: ExternalPositionManager;
26
+ externalPositionProxy: AddressLike;
27
+ actionId: BigNumberish;
28
+ actionArgs: BytesLike;
29
+ }) {
30
+ const callArgs = callOnExternalPositionArgs({
31
+ actionArgs,
32
+ actionId,
33
+ externalPositionProxy,
34
+ });
35
+
36
+ return comptrollerProxy
37
+ .connect(signer)
38
+ .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
39
+ }
40
+
41
+ export async function createExternalPosition({
42
+ signer,
43
+ comptrollerProxy,
44
+ externalPositionManager,
45
+ externalPositionTypeId,
46
+ initializationData = '0x',
47
+ }: {
48
+ signer: SignerWithAddress;
49
+ comptrollerProxy: ComptrollerLib;
50
+ externalPositionManager: ExternalPositionManager;
51
+ externalPositionTypeId: BigNumberish;
52
+ initializationData?: BytesLike;
53
+ }) {
54
+ const receipt = await comptrollerProxy
55
+ .connect(signer)
56
+ .callOnExtension(
57
+ externalPositionManager,
58
+ ExternalPositionManagerActionId.CreateExternalPosition,
59
+ encodeArgs(['uint256', 'bytes'], [externalPositionTypeId, initializationData]),
60
+ );
61
+
62
+ const event = extractEvent(receipt, externalPositionManager.abi.getEvent('ExternalPositionDeployedForFund'));
63
+
64
+ const externalPositionProxy = new IExternalPositionProxy(event[0].args.externalPosition, signer);
65
+
66
+ return { externalPositionProxy, receipt };
67
+ }
68
+
69
+ export async function reactivateExternalPosition({
70
+ signer,
71
+ comptrollerProxy,
72
+ externalPositionManager,
73
+ externalPositionProxy,
74
+ }: {
75
+ signer: SignerWithAddress;
76
+ comptrollerProxy: ComptrollerLib;
77
+ externalPositionManager: ExternalPositionManager;
78
+ externalPositionProxy: AddressLike;
79
+ }) {
80
+ const callArgs = externalPositionReactivateArgs({ externalPositionProxy });
81
+
82
+ return comptrollerProxy
83
+ .connect(signer)
84
+ .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.ReactivateExternalPosition, callArgs);
85
+ }
86
+
87
+ export async function removeExternalPosition({
88
+ signer,
89
+ comptrollerProxy,
90
+ externalPositionManager,
91
+ externalPositionProxy,
92
+ }: {
93
+ signer: SignerWithAddress;
94
+ comptrollerProxy: ComptrollerLib;
95
+ externalPositionManager: ExternalPositionManager;
96
+ externalPositionProxy: AddressLike;
97
+ }) {
98
+ const callArgs = externalPositionRemoveArgs({ externalPositionProxy });
99
+
100
+ return comptrollerProxy
101
+ .connect(signer)
102
+ .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.RemoveExternalPosition, callArgs);
103
+ }
@@ -1,40 +1,17 @@
1
- import { AddressLike } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
+ import type { ComptrollerLib, ExternalPositionManager, VaultLib } from '@enzymefinance/protocol';
3
4
  import {
4
- ComptrollerLib,
5
- encodeArgs,
6
- ExternalPositionManager,
7
- VaultLib,
8
- callOnExternalPositionArgs,
9
- compoundExternalPositionActionArgs,
10
- ExternalPositionManagerActionId,
11
5
  CompoundDebtPositionActionId,
12
- externalPositionRemoveArgs,
6
+ compoundExternalPositionActionArgs,
7
+ encodeArgs,
8
+ ExternalPositionType,
13
9
  } from '@enzymefinance/protocol';
14
- import { BigNumberish } from 'ethers';
15
-
16
- const protocol = 0;
10
+ import type { BigNumberish } from 'ethers';
17
11
 
18
- export async function createExternalPosition({
19
- comptrollerProxy,
20
- externalPositionManager,
21
- fundOwner,
22
- }: {
23
- comptrollerProxy: ComptrollerLib;
24
- externalPositionManager: ExternalPositionManager;
25
- fundOwner: SignerWithAddress;
26
- }) {
27
- const createExternalPositionTx = comptrollerProxy
28
- .connect(fundOwner)
29
- .callOnExtension(
30
- externalPositionManager,
31
- ExternalPositionManagerActionId.CreateExternalPosition,
32
- encodeArgs(['uint256', 'bytes'], [protocol, '0x']),
33
- );
34
- return createExternalPositionTx;
35
- }
12
+ import { callOnExternalPosition, createExternalPosition } from './actions';
36
13
 
37
- export async function addCollateral({
14
+ export async function compoundDebtPositionAddCollateral({
38
15
  comptrollerProxy,
39
16
  externalPositionManager,
40
17
  fundOwner,
@@ -52,129 +29,117 @@ export async function addCollateral({
52
29
  externalPositionProxy: AddressLike;
53
30
  }) {
54
31
  const actionArgs = compoundExternalPositionActionArgs({
55
- assets,
56
32
  amounts,
33
+ assets,
57
34
  data: encodeArgs(['address[]'], [cTokens]),
58
35
  });
59
36
 
60
- const callArgs = callOnExternalPositionArgs({
61
- externalPositionProxy,
37
+ return callOnExternalPosition({
38
+ actionArgs,
62
39
  actionId: CompoundDebtPositionActionId.AddCollateralAssets,
63
- encodedCallArgs: actionArgs,
40
+ comptrollerProxy,
41
+ externalPositionManager,
42
+ externalPositionProxy,
43
+ signer: fundOwner,
64
44
  });
65
-
66
- const addCollateralTx = comptrollerProxy
67
- .connect(fundOwner)
68
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
69
-
70
- return addCollateralTx;
71
45
  }
72
46
 
73
- export async function removeCollateral({
47
+ export async function compoundDebtPositionBorrow({
74
48
  comptrollerProxy,
75
49
  externalPositionManager,
76
50
  fundOwner,
51
+ externalPositionProxy,
77
52
  assets,
78
53
  amounts,
79
- externalPositionProxy,
80
54
  cTokens,
81
55
  }: {
82
56
  comptrollerProxy: ComptrollerLib;
57
+ vaultProxy: VaultLib;
83
58
  externalPositionManager: ExternalPositionManager;
84
59
  fundOwner: SignerWithAddress;
60
+ externalPositionProxy: AddressLike;
85
61
  assets: AddressLike[];
86
62
  amounts: BigNumberish[];
87
- externalPositionProxy: AddressLike;
88
63
  cTokens: AddressLike[];
89
64
  }) {
90
65
  const actionArgs = compoundExternalPositionActionArgs({
91
- assets,
92
66
  amounts,
67
+ assets,
93
68
  data: encodeArgs(['address[]'], [cTokens]),
94
69
  });
95
70
 
96
- const callArgs = callOnExternalPositionArgs({
71
+ return callOnExternalPosition({
72
+ actionArgs,
73
+ actionId: CompoundDebtPositionActionId.BorrowAsset,
74
+ comptrollerProxy,
75
+ externalPositionManager,
97
76
  externalPositionProxy,
98
- actionId: CompoundDebtPositionActionId.RemoveCollateralAssets,
99
- encodedCallArgs: actionArgs,
77
+ signer: fundOwner,
100
78
  });
101
-
102
- const removeCollateralTx = comptrollerProxy
103
- .connect(fundOwner)
104
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
105
-
106
- return removeCollateralTx;
107
79
  }
108
80
 
109
- export async function borrow({
81
+ export async function compoundDebtPositionClaimComp({
110
82
  comptrollerProxy,
111
83
  externalPositionManager,
112
84
  fundOwner,
113
85
  externalPositionProxy,
114
- assets,
115
- amounts,
116
- cTokens,
117
86
  }: {
118
87
  comptrollerProxy: ComptrollerLib;
119
88
  vaultProxy: VaultLib;
120
89
  externalPositionManager: ExternalPositionManager;
121
90
  fundOwner: SignerWithAddress;
122
91
  externalPositionProxy: AddressLike;
123
- assets: AddressLike[];
124
- amounts: BigNumberish[];
125
- cTokens: AddressLike[];
126
92
  }) {
127
93
  const actionArgs = compoundExternalPositionActionArgs({
128
- assets,
129
- amounts,
130
- data: encodeArgs(['address[]'], [cTokens]),
94
+ amounts: [],
95
+ assets: [],
96
+ data: '0x',
131
97
  });
132
98
 
133
- const callArgs = callOnExternalPositionArgs({
99
+ return callOnExternalPosition({
100
+ actionArgs,
101
+ actionId: CompoundDebtPositionActionId.ClaimComp,
102
+ comptrollerProxy,
103
+ externalPositionManager,
134
104
  externalPositionProxy,
135
- actionId: CompoundDebtPositionActionId.BorrowAsset,
136
- encodedCallArgs: actionArgs,
105
+ signer: fundOwner,
137
106
  });
138
-
139
- const borrowTx = comptrollerProxy
140
- .connect(fundOwner)
141
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
142
-
143
- return borrowTx;
144
107
  }
145
108
 
146
- export async function claimComp({
109
+ export async function compoundDebtPositionRemoveCollateral({
147
110
  comptrollerProxy,
148
111
  externalPositionManager,
149
112
  fundOwner,
113
+ assets,
114
+ amounts,
150
115
  externalPositionProxy,
116
+ cTokens,
151
117
  }: {
152
118
  comptrollerProxy: ComptrollerLib;
153
- vaultProxy: VaultLib;
154
119
  externalPositionManager: ExternalPositionManager;
155
120
  fundOwner: SignerWithAddress;
121
+ assets: AddressLike[];
122
+ amounts: BigNumberish[];
156
123
  externalPositionProxy: AddressLike;
124
+ cTokens: AddressLike[];
157
125
  }) {
158
126
  const actionArgs = compoundExternalPositionActionArgs({
159
- assets: [],
160
- amounts: [],
161
- data: '0x',
127
+ amounts,
128
+ assets,
129
+ data: encodeArgs(['address[]'], [cTokens]),
162
130
  });
163
131
 
164
- const callArgs = callOnExternalPositionArgs({
132
+ return callOnExternalPosition({
133
+ actionArgs,
134
+ actionId: CompoundDebtPositionActionId.RemoveCollateralAssets,
135
+ comptrollerProxy,
136
+ externalPositionManager,
165
137
  externalPositionProxy,
166
- actionId: CompoundDebtPositionActionId.ClaimComp,
167
- encodedCallArgs: actionArgs,
138
+ signer: fundOwner,
168
139
  });
169
-
170
- const claimCompTx = comptrollerProxy
171
- .connect(fundOwner)
172
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
173
-
174
- return claimCompTx;
175
140
  }
176
141
 
177
- export async function repayBorrow({
142
+ export async function compoundDebtPositionRepayBorrow({
178
143
  comptrollerProxy,
179
144
  externalPositionManager,
180
145
  fundOwner,
@@ -192,44 +157,34 @@ export async function repayBorrow({
192
157
  cTokens: AddressLike[];
193
158
  }) {
194
159
  const actionArgs = compoundExternalPositionActionArgs({
195
- assets,
196
160
  amounts,
161
+ assets,
197
162
  data: encodeArgs(['address[]'], [cTokens]),
198
163
  });
199
164
 
200
- const callArgs = callOnExternalPositionArgs({
201
- externalPositionProxy,
165
+ return callOnExternalPosition({
166
+ actionArgs,
202
167
  actionId: CompoundDebtPositionActionId.RepayBorrowedAssets,
203
- encodedCallArgs: actionArgs,
168
+ comptrollerProxy,
169
+ externalPositionManager,
170
+ externalPositionProxy,
171
+ signer: fundOwner,
204
172
  });
205
-
206
- const repayTx = comptrollerProxy
207
- .connect(fundOwner)
208
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
209
-
210
- return repayTx;
211
173
  }
212
174
 
213
- export async function removeExternalPosition({
175
+ export async function createCompoundDebtPosition({
176
+ signer,
214
177
  comptrollerProxy,
215
178
  externalPositionManager,
216
- fundOwner,
217
- externalPositionProxy,
218
179
  }: {
180
+ signer: SignerWithAddress;
219
181
  comptrollerProxy: ComptrollerLib;
220
182
  externalPositionManager: ExternalPositionManager;
221
- fundOwner: SignerWithAddress;
222
- externalPositionProxy: AddressLike;
223
183
  }) {
224
- const actionArgs = externalPositionRemoveArgs({
225
- externalPositionProxy,
184
+ return createExternalPosition({
185
+ comptrollerProxy,
186
+ externalPositionManager,
187
+ externalPositionTypeId: ExternalPositionType.CompoundDebtPosition,
188
+ signer,
226
189
  });
227
-
228
- const callArgs = callOnExternalPositionArgs({ externalPositionProxy, encodedCallArgs: actionArgs });
229
-
230
- const removeExternalPositionTx = comptrollerProxy
231
- .connect(fundOwner)
232
- .callOnExtension(externalPositionManager, ExternalPositionManagerActionId.RemoveExternalPosition, callArgs);
233
-
234
- return removeExternalPositionTx;
235
190
  }
@@ -1,2 +1,4 @@
1
+ export * from './actions';
1
2
  export * from './compound';
2
3
  export * from './mocks';
4
+ export * from './uniswap-v3-liquidity';
@@ -1,16 +1,18 @@
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
+ import type { ComptrollerLib, ExternalPositionFactory, ExternalPositionManager } from '@enzymefinance/protocol';
1
4
  import {
2
- ComptrollerLib,
3
5
  encodeArgs,
4
6
  ExternalPositionManagerActionId,
5
- ExternalPositionFactory,
6
- ExternalPositionManager,
7
+ mockGenericExternalPositionActionArgs,
8
+ MockGenericExternalPositionActionId,
7
9
  MockGenericExternalPositionLib,
8
10
  MockGenericExternalPositionParser,
9
11
  VaultLib,
10
- } from '@enzymefinance/protocol/src';
11
- import { SignerWithAddress } from '@enzymefinance/hardhat';
12
- import { AddressLike } from '@enzymefinance/ethers';
13
- import { BigNumberish } from 'ethers';
12
+ } from '@enzymefinance/protocol';
13
+ import type { BigNumberish } from 'ethers';
14
+
15
+ import { callOnExternalPosition } from './actions';
14
16
 
15
17
  export async function createMockExternalPosition({
16
18
  comptrollerProxy,
@@ -63,10 +65,130 @@ export async function createMockExternalPosition({
63
65
  const externalPositionProxy = (await vaultProxy.getActiveExternalPositions())[0];
64
66
 
65
67
  return {
66
- typeId,
67
- mockGenericExternalPositionLib,
68
- mockExternalPositionParser,
69
68
  externalPositionProxy,
69
+ mockExternalPositionParser,
70
+ mockGenericExternalPositionLib,
70
71
  receipt,
72
+ typeId,
71
73
  };
72
74
  }
75
+
76
+ export async function mockExternalPositionAddDebtAssets({
77
+ signer,
78
+ comptrollerProxy,
79
+ externalPositionManager,
80
+ externalPositionProxy,
81
+ assets,
82
+ amounts,
83
+ }: {
84
+ signer: SignerWithAddress;
85
+ comptrollerProxy: ComptrollerLib;
86
+ externalPositionManager: ExternalPositionManager;
87
+ externalPositionProxy: AddressLike;
88
+ assets: AddressLike[];
89
+ amounts: BigNumberish[];
90
+ }) {
91
+ const actionArgs = mockGenericExternalPositionActionArgs({
92
+ amounts,
93
+ assets,
94
+ });
95
+
96
+ return callOnExternalPosition({
97
+ actionArgs,
98
+ actionId: MockGenericExternalPositionActionId.AddDebtAssets,
99
+ comptrollerProxy,
100
+ externalPositionManager,
101
+ externalPositionProxy,
102
+ signer,
103
+ });
104
+ }
105
+
106
+ export async function mockExternalPositionAddManagedAssets({
107
+ signer,
108
+ comptrollerProxy,
109
+ externalPositionManager,
110
+ externalPositionProxy,
111
+ assets,
112
+ amounts,
113
+ }: {
114
+ signer: SignerWithAddress;
115
+ comptrollerProxy: ComptrollerLib;
116
+ externalPositionManager: ExternalPositionManager;
117
+ externalPositionProxy: AddressLike;
118
+ assets: AddressLike[];
119
+ amounts: BigNumberish[];
120
+ }) {
121
+ const actionArgs = mockGenericExternalPositionActionArgs({
122
+ amounts,
123
+ assets,
124
+ });
125
+
126
+ return callOnExternalPosition({
127
+ actionArgs,
128
+ actionId: MockGenericExternalPositionActionId.AddManagedAssets,
129
+ comptrollerProxy,
130
+ externalPositionManager,
131
+ externalPositionProxy,
132
+ signer,
133
+ });
134
+ }
135
+
136
+ export async function mockExternalPositionRemoveDebtAssets({
137
+ signer,
138
+ comptrollerProxy,
139
+ externalPositionManager,
140
+ externalPositionProxy,
141
+ assets,
142
+ amounts,
143
+ }: {
144
+ signer: SignerWithAddress;
145
+ comptrollerProxy: ComptrollerLib;
146
+ externalPositionManager: ExternalPositionManager;
147
+ externalPositionProxy: AddressLike;
148
+ assets: AddressLike[];
149
+ amounts: BigNumberish[];
150
+ }) {
151
+ const actionArgs = mockGenericExternalPositionActionArgs({
152
+ amounts,
153
+ assets,
154
+ });
155
+
156
+ return callOnExternalPosition({
157
+ actionArgs,
158
+ actionId: MockGenericExternalPositionActionId.RemoveDebtAssets,
159
+ comptrollerProxy,
160
+ externalPositionManager,
161
+ externalPositionProxy,
162
+ signer,
163
+ });
164
+ }
165
+
166
+ export async function mockExternalPositionRemoveManagedAssets({
167
+ signer,
168
+ comptrollerProxy,
169
+ externalPositionManager,
170
+ externalPositionProxy,
171
+ assets,
172
+ amounts,
173
+ }: {
174
+ signer: SignerWithAddress;
175
+ comptrollerProxy: ComptrollerLib;
176
+ externalPositionManager: ExternalPositionManager;
177
+ externalPositionProxy: AddressLike;
178
+ assets: AddressLike[];
179
+ amounts: BigNumberish[];
180
+ }) {
181
+ const actionArgs = mockGenericExternalPositionActionArgs({
182
+ amounts,
183
+ assets,
184
+ });
185
+
186
+ return callOnExternalPosition({
187
+ actionArgs,
188
+ actionId: MockGenericExternalPositionActionId.RemoveManagedAssets,
189
+ comptrollerProxy,
190
+ externalPositionManager,
191
+ externalPositionProxy,
192
+ signer,
193
+ });
194
+ }