@enzymefinance/testutils 4.0.0-next.2 → 4.0.0-next.7
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +32 -0
- package/dist/declarations/src/assertions.d.ts +2 -2
- package/dist/declarations/src/deployment.d.ts +172 -68
- package/dist/declarations/src/gasRelayer.d.ts +14 -12
- package/dist/declarations/src/helpers.d.ts +5 -4
- package/dist/declarations/src/scaffolding/assets.d.ts +4 -4
- package/dist/declarations/src/scaffolding/chainlink.d.ts +2 -2
- package/dist/declarations/src/scaffolding/common.d.ts +1 -1
- package/dist/declarations/src/scaffolding/core.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/common.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +8 -6
- package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +5 -5
- package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +1 -0
- package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +16 -12
- package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +100 -0
- package/dist/declarations/src/scaffolding/extensions/fees.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +6 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +33 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +101 -84
- package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +6 -6
- package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +3 -0
- package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +17 -0
- package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +6 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +23 -0
- package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +29 -0
- package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +15 -12
- package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +3 -3
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +5 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +4 -4
- package/dist/declarations/src/scaffolding/extensions/policies.d.ts +9 -9
- package/dist/declarations/src/scaffolding/setup.d.ts +11 -9
- package/dist/declarations/src/scaffolding/shares.d.ts +4 -4
- package/dist/declarations/src/scaffolding/vaultCalls.d.ts +11 -2
- package/dist/declarations/src/whales.d.ts +24 -19
- package/dist/enzymefinance-testutils.browser.cjs.js +1541 -673
- package/dist/enzymefinance-testutils.browser.esm.js +1502 -655
- package/dist/enzymefinance-testutils.cjs.dev.js +1541 -673
- package/dist/enzymefinance-testutils.cjs.prod.js +1541 -673
- package/dist/enzymefinance-testutils.esm.js +1502 -655
- package/package.json +6 -6
- package/src/assertions.ts +5 -2
- package/src/deployment.ts +221 -120
- package/src/gasRelayer.ts +17 -18
- package/src/helpers.ts +6 -4
- package/src/scaffolding/assets.ts +7 -6
- package/src/scaffolding/chainlink.ts +2 -2
- package/src/scaffolding/common.ts +1 -1
- package/src/scaffolding/core.ts +4 -8
- package/src/scaffolding/extensions/common.ts +4 -4
- package/src/scaffolding/extensions/external-positions/actions.ts +14 -9
- package/src/scaffolding/extensions/external-positions/compound.ts +28 -29
- package/src/scaffolding/extensions/external-positions/index.ts +1 -0
- package/src/scaffolding/extensions/external-positions/mocks.ts +32 -36
- package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +284 -0
- package/src/scaffolding/extensions/fees.ts +1 -1
- package/src/scaffolding/extensions/integrations/aave.ts +6 -8
- package/src/scaffolding/extensions/integrations/compound.ts +171 -11
- package/src/scaffolding/extensions/integrations/curve.ts +303 -255
- package/src/scaffolding/extensions/integrations/idle.ts +9 -11
- package/src/scaffolding/extensions/integrations/index.ts +3 -0
- package/src/scaffolding/extensions/integrations/mock.ts +11 -13
- package/src/scaffolding/extensions/integrations/olympusV2.ts +71 -0
- package/src/scaffolding/extensions/integrations/paraSwapV4.ts +16 -11
- package/src/scaffolding/extensions/integrations/paraSwapV5.ts +73 -0
- package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +117 -0
- package/src/scaffolding/extensions/integrations/synthetix.ts +45 -31
- package/src/scaffolding/extensions/integrations/trackedAssets.ts +3 -4
- package/src/scaffolding/extensions/integrations/uniswapV2.ts +22 -19
- package/src/scaffolding/extensions/integrations/uniswapV3.ts +9 -10
- package/src/scaffolding/extensions/integrations/yearn.ts +9 -11
- package/src/scaffolding/extensions/integrations/zeroExV2.ts +9 -7
- package/src/scaffolding/extensions/policies.ts +2 -1
- package/src/scaffolding/setup.ts +27 -13
- package/src/scaffolding/shares.ts +5 -4
- package/src/scaffolding/vaultCalls.ts +32 -2
- package/src/types.d.ts +1 -0
- package/src/whales.ts +36 -18
@@ -1,16 +1,16 @@
|
|
1
|
-
import { AddressLike
|
2
|
-
import {
|
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';
|
3
5
|
import {
|
4
6
|
callOnExternalPositionArgs,
|
5
|
-
ComptrollerLib,
|
6
7
|
encodeArgs,
|
7
|
-
ExternalPositionManager,
|
8
8
|
ExternalPositionManagerActionId,
|
9
9
|
externalPositionReactivateArgs,
|
10
10
|
externalPositionRemoveArgs,
|
11
11
|
IExternalPositionProxy,
|
12
12
|
} from '@enzymefinance/protocol';
|
13
|
-
import { BigNumberish, BytesLike } from 'ethers';
|
13
|
+
import type { BigNumberish, BytesLike } from 'ethers';
|
14
14
|
|
15
15
|
export async function callOnExternalPosition({
|
16
16
|
signer,
|
@@ -28,9 +28,9 @@ export async function callOnExternalPosition({
|
|
28
28
|
actionArgs: BytesLike;
|
29
29
|
}) {
|
30
30
|
const callArgs = callOnExternalPositionArgs({
|
31
|
-
externalPositionProxy,
|
32
|
-
actionId,
|
33
31
|
actionArgs,
|
32
|
+
actionId,
|
33
|
+
externalPositionProxy,
|
34
34
|
});
|
35
35
|
|
36
36
|
return comptrollerProxy
|
@@ -44,26 +44,31 @@ export async function createExternalPosition({
|
|
44
44
|
externalPositionManager,
|
45
45
|
externalPositionTypeId,
|
46
46
|
initializationData = '0x',
|
47
|
+
callOnExternalPositionData = '0x',
|
47
48
|
}: {
|
48
49
|
signer: SignerWithAddress;
|
49
50
|
comptrollerProxy: ComptrollerLib;
|
50
51
|
externalPositionManager: ExternalPositionManager;
|
51
52
|
externalPositionTypeId: BigNumberish;
|
52
53
|
initializationData?: BytesLike;
|
54
|
+
callOnExternalPositionData?: BytesLike;
|
53
55
|
}) {
|
54
56
|
const receipt = await comptrollerProxy
|
55
57
|
.connect(signer)
|
56
58
|
.callOnExtension(
|
57
59
|
externalPositionManager,
|
58
60
|
ExternalPositionManagerActionId.CreateExternalPosition,
|
59
|
-
encodeArgs(
|
61
|
+
encodeArgs(
|
62
|
+
['uint256', 'bytes', 'bytes'],
|
63
|
+
[externalPositionTypeId, initializationData, callOnExternalPositionData],
|
64
|
+
),
|
60
65
|
);
|
61
66
|
|
62
67
|
const event = extractEvent(receipt, externalPositionManager.abi.getEvent('ExternalPositionDeployedForFund'));
|
63
68
|
|
64
69
|
const externalPositionProxy = new IExternalPositionProxy(event[0].args.externalPosition, signer);
|
65
70
|
|
66
|
-
return {
|
71
|
+
return { externalPositionProxy, receipt };
|
67
72
|
}
|
68
73
|
|
69
74
|
export async function reactivateExternalPosition({
|
@@ -1,15 +1,14 @@
|
|
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
|
-
compoundExternalPositionActionArgs,
|
9
5
|
CompoundDebtPositionActionId,
|
6
|
+
compoundExternalPositionActionArgs,
|
7
|
+
encodeArgs,
|
10
8
|
ExternalPositionType,
|
11
9
|
} from '@enzymefinance/protocol';
|
12
|
-
import { BigNumberish } from 'ethers';
|
10
|
+
import type { BigNumberish } from 'ethers';
|
11
|
+
|
13
12
|
import { callOnExternalPosition, createExternalPosition } from './actions';
|
14
13
|
|
15
14
|
export async function compoundDebtPositionAddCollateral({
|
@@ -30,18 +29,18 @@ export async function compoundDebtPositionAddCollateral({
|
|
30
29
|
externalPositionProxy: AddressLike;
|
31
30
|
}) {
|
32
31
|
const actionArgs = compoundExternalPositionActionArgs({
|
33
|
-
assets,
|
34
32
|
amounts,
|
33
|
+
assets,
|
35
34
|
data: encodeArgs(['address[]'], [cTokens]),
|
36
35
|
});
|
37
36
|
|
38
37
|
return callOnExternalPosition({
|
39
|
-
|
38
|
+
actionArgs,
|
39
|
+
actionId: CompoundDebtPositionActionId.AddCollateralAssets,
|
40
40
|
comptrollerProxy,
|
41
41
|
externalPositionManager,
|
42
42
|
externalPositionProxy,
|
43
|
-
|
44
|
-
actionArgs,
|
43
|
+
signer: fundOwner,
|
45
44
|
});
|
46
45
|
}
|
47
46
|
|
@@ -64,18 +63,18 @@ export async function compoundDebtPositionBorrow({
|
|
64
63
|
cTokens: AddressLike[];
|
65
64
|
}) {
|
66
65
|
const actionArgs = compoundExternalPositionActionArgs({
|
67
|
-
assets,
|
68
66
|
amounts,
|
67
|
+
assets,
|
69
68
|
data: encodeArgs(['address[]'], [cTokens]),
|
70
69
|
});
|
71
70
|
|
72
71
|
return callOnExternalPosition({
|
73
|
-
|
72
|
+
actionArgs,
|
73
|
+
actionId: CompoundDebtPositionActionId.BorrowAsset,
|
74
74
|
comptrollerProxy,
|
75
75
|
externalPositionManager,
|
76
76
|
externalPositionProxy,
|
77
|
-
|
78
|
-
actionArgs,
|
77
|
+
signer: fundOwner,
|
79
78
|
});
|
80
79
|
}
|
81
80
|
|
@@ -92,18 +91,18 @@ export async function compoundDebtPositionClaimComp({
|
|
92
91
|
externalPositionProxy: AddressLike;
|
93
92
|
}) {
|
94
93
|
const actionArgs = compoundExternalPositionActionArgs({
|
95
|
-
assets: [],
|
96
94
|
amounts: [],
|
95
|
+
assets: [],
|
97
96
|
data: '0x',
|
98
97
|
});
|
99
98
|
|
100
99
|
return callOnExternalPosition({
|
101
|
-
|
100
|
+
actionArgs,
|
101
|
+
actionId: CompoundDebtPositionActionId.ClaimComp,
|
102
102
|
comptrollerProxy,
|
103
103
|
externalPositionManager,
|
104
104
|
externalPositionProxy,
|
105
|
-
|
106
|
-
actionArgs,
|
105
|
+
signer: fundOwner,
|
107
106
|
});
|
108
107
|
}
|
109
108
|
|
@@ -125,18 +124,18 @@ export async function compoundDebtPositionRemoveCollateral({
|
|
125
124
|
cTokens: AddressLike[];
|
126
125
|
}) {
|
127
126
|
const actionArgs = compoundExternalPositionActionArgs({
|
128
|
-
assets,
|
129
127
|
amounts,
|
128
|
+
assets,
|
130
129
|
data: encodeArgs(['address[]'], [cTokens]),
|
131
130
|
});
|
132
131
|
|
133
132
|
return callOnExternalPosition({
|
134
|
-
|
133
|
+
actionArgs,
|
134
|
+
actionId: CompoundDebtPositionActionId.RemoveCollateralAssets,
|
135
135
|
comptrollerProxy,
|
136
136
|
externalPositionManager,
|
137
137
|
externalPositionProxy,
|
138
|
-
|
139
|
-
actionArgs,
|
138
|
+
signer: fundOwner,
|
140
139
|
});
|
141
140
|
}
|
142
141
|
|
@@ -158,18 +157,18 @@ export async function compoundDebtPositionRepayBorrow({
|
|
158
157
|
cTokens: AddressLike[];
|
159
158
|
}) {
|
160
159
|
const actionArgs = compoundExternalPositionActionArgs({
|
161
|
-
assets,
|
162
160
|
amounts,
|
161
|
+
assets,
|
163
162
|
data: encodeArgs(['address[]'], [cTokens]),
|
164
163
|
});
|
165
164
|
|
166
165
|
return callOnExternalPosition({
|
167
|
-
|
166
|
+
actionArgs,
|
167
|
+
actionId: CompoundDebtPositionActionId.RepayBorrowedAssets,
|
168
168
|
comptrollerProxy,
|
169
169
|
externalPositionManager,
|
170
170
|
externalPositionProxy,
|
171
|
-
|
172
|
-
actionArgs,
|
171
|
+
signer: fundOwner,
|
173
172
|
});
|
174
173
|
}
|
175
174
|
|
@@ -183,9 +182,9 @@ export async function createCompoundDebtPosition({
|
|
183
182
|
externalPositionManager: ExternalPositionManager;
|
184
183
|
}) {
|
185
184
|
return createExternalPosition({
|
186
|
-
signer,
|
187
185
|
comptrollerProxy,
|
188
186
|
externalPositionManager,
|
189
187
|
externalPositionTypeId: ExternalPositionType.CompoundDebtPosition,
|
188
|
+
signer,
|
190
189
|
});
|
191
190
|
}
|
@@ -1,19 +1,16 @@
|
|
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
|
-
encodeArgs,
|
4
|
-
ExternalPositionManagerActionId,
|
5
|
-
ExternalPositionFactory,
|
6
|
-
ExternalPositionManager,
|
7
5
|
mockGenericExternalPositionActionArgs,
|
8
6
|
MockGenericExternalPositionActionId,
|
9
7
|
MockGenericExternalPositionLib,
|
10
8
|
MockGenericExternalPositionParser,
|
11
9
|
VaultLib,
|
12
|
-
} from '@enzymefinance/protocol
|
13
|
-
import {
|
14
|
-
|
15
|
-
import {
|
16
|
-
import { callOnExternalPosition } from './actions';
|
10
|
+
} from '@enzymefinance/protocol';
|
11
|
+
import type { BigNumberish } from 'ethers';
|
12
|
+
|
13
|
+
import { callOnExternalPosition, createExternalPosition } from './actions';
|
17
14
|
|
18
15
|
export async function createMockExternalPosition({
|
19
16
|
comptrollerProxy,
|
@@ -55,22 +52,21 @@ export async function createMockExternalPosition({
|
|
55
52
|
[mockExternalPositionParser],
|
56
53
|
);
|
57
54
|
|
58
|
-
const receipt = await
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
);
|
55
|
+
const receipt = await createExternalPosition({
|
56
|
+
comptrollerProxy,
|
57
|
+
externalPositionManager,
|
58
|
+
externalPositionTypeId: typeId,
|
59
|
+
signer: fundOwner,
|
60
|
+
});
|
65
61
|
|
66
62
|
const externalPositionProxy = (await vaultProxy.getActiveExternalPositions())[0];
|
67
63
|
|
68
64
|
return {
|
69
|
-
typeId,
|
70
|
-
mockGenericExternalPositionLib,
|
71
|
-
mockExternalPositionParser,
|
72
65
|
externalPositionProxy,
|
66
|
+
mockExternalPositionParser,
|
67
|
+
mockGenericExternalPositionLib,
|
73
68
|
receipt,
|
69
|
+
typeId,
|
74
70
|
};
|
75
71
|
}
|
76
72
|
|
@@ -90,17 +86,17 @@ export async function mockExternalPositionAddDebtAssets({
|
|
90
86
|
amounts: BigNumberish[];
|
91
87
|
}) {
|
92
88
|
const actionArgs = mockGenericExternalPositionActionArgs({
|
93
|
-
assets,
|
94
89
|
amounts,
|
90
|
+
assets,
|
95
91
|
});
|
96
92
|
|
97
93
|
return callOnExternalPosition({
|
98
|
-
|
94
|
+
actionArgs,
|
95
|
+
actionId: MockGenericExternalPositionActionId.AddDebtAssets,
|
99
96
|
comptrollerProxy,
|
100
97
|
externalPositionManager,
|
101
98
|
externalPositionProxy,
|
102
|
-
|
103
|
-
actionArgs,
|
99
|
+
signer,
|
104
100
|
});
|
105
101
|
}
|
106
102
|
|
@@ -120,17 +116,17 @@ export async function mockExternalPositionAddManagedAssets({
|
|
120
116
|
amounts: BigNumberish[];
|
121
117
|
}) {
|
122
118
|
const actionArgs = mockGenericExternalPositionActionArgs({
|
123
|
-
assets,
|
124
119
|
amounts,
|
120
|
+
assets,
|
125
121
|
});
|
126
122
|
|
127
123
|
return callOnExternalPosition({
|
128
|
-
|
124
|
+
actionArgs,
|
125
|
+
actionId: MockGenericExternalPositionActionId.AddManagedAssets,
|
129
126
|
comptrollerProxy,
|
130
127
|
externalPositionManager,
|
131
128
|
externalPositionProxy,
|
132
|
-
|
133
|
-
actionArgs,
|
129
|
+
signer,
|
134
130
|
});
|
135
131
|
}
|
136
132
|
|
@@ -150,17 +146,17 @@ export async function mockExternalPositionRemoveDebtAssets({
|
|
150
146
|
amounts: BigNumberish[];
|
151
147
|
}) {
|
152
148
|
const actionArgs = mockGenericExternalPositionActionArgs({
|
153
|
-
assets,
|
154
149
|
amounts,
|
150
|
+
assets,
|
155
151
|
});
|
156
152
|
|
157
153
|
return callOnExternalPosition({
|
158
|
-
|
154
|
+
actionArgs,
|
155
|
+
actionId: MockGenericExternalPositionActionId.RemoveDebtAssets,
|
159
156
|
comptrollerProxy,
|
160
157
|
externalPositionManager,
|
161
158
|
externalPositionProxy,
|
162
|
-
|
163
|
-
actionArgs,
|
159
|
+
signer,
|
164
160
|
});
|
165
161
|
}
|
166
162
|
|
@@ -180,16 +176,16 @@ export async function mockExternalPositionRemoveManagedAssets({
|
|
180
176
|
amounts: BigNumberish[];
|
181
177
|
}) {
|
182
178
|
const actionArgs = mockGenericExternalPositionActionArgs({
|
183
|
-
assets,
|
184
179
|
amounts,
|
180
|
+
assets,
|
185
181
|
});
|
186
182
|
|
187
183
|
return callOnExternalPosition({
|
188
|
-
|
184
|
+
actionArgs,
|
185
|
+
actionId: MockGenericExternalPositionActionId.RemoveManagedAssets,
|
189
186
|
comptrollerProxy,
|
190
187
|
externalPositionManager,
|
191
188
|
externalPositionProxy,
|
192
|
-
|
193
|
-
actionArgs,
|
189
|
+
signer,
|
194
190
|
});
|
195
191
|
}
|
@@ -0,0 +1,284 @@
|
|
1
|
+
import type { AddressLike, Call, Contract } from '@enzymefinance/ethers';
|
2
|
+
import { contract, extractEvent, resolveAddress } from '@enzymefinance/ethers';
|
3
|
+
import type { SignerWithAddress } from '@enzymefinance/hardhat';
|
4
|
+
import type { ComptrollerLib, ExternalPositionManager } from '@enzymefinance/protocol';
|
5
|
+
import {
|
6
|
+
callOnExternalPositionArgs,
|
7
|
+
ExternalPositionManagerActionId,
|
8
|
+
ExternalPositionType,
|
9
|
+
UniswapV3LiquidityPositionActionId,
|
10
|
+
uniswapV3LiquidityPositionAddLiquidityArgs,
|
11
|
+
uniswapV3LiquidityPositionCollectArgs,
|
12
|
+
UniswapV3LiquidityPositionLib,
|
13
|
+
uniswapV3LiquidityPositionMintArgs,
|
14
|
+
uniswapV3LiquidityPositionPurgeArgs,
|
15
|
+
uniswapV3LiquidityPositionRemoveLiquidityArgs,
|
16
|
+
} from '@enzymefinance/protocol';
|
17
|
+
import type { BigNumber, BigNumberish, BytesLike } from 'ethers';
|
18
|
+
|
19
|
+
import { createExternalPosition } from './actions';
|
20
|
+
|
21
|
+
export enum UniswapV3FeeAmount {
|
22
|
+
LOW = 500,
|
23
|
+
MEDIUM = 3000,
|
24
|
+
HIGH = 10000,
|
25
|
+
}
|
26
|
+
|
27
|
+
export const uniswapV3LiquidityPositionGetMinTick = (tickSpacing: number) =>
|
28
|
+
Math.ceil(-887272 / tickSpacing) * tickSpacing;
|
29
|
+
export const uniswapV3LiquidityPositionGetMaxTick = (tickSpacing: number) =>
|
30
|
+
Math.floor(887272 / tickSpacing) * tickSpacing;
|
31
|
+
|
32
|
+
export interface IUniswapV3NonFungibleTokenManager extends Contract<IUniswapV3NonFungibleTokenManager> {
|
33
|
+
positions: Call<
|
34
|
+
(tokenId: BigNumberish) => {
|
35
|
+
nonce: BigNumber;
|
36
|
+
operator: string;
|
37
|
+
token0: string;
|
38
|
+
token1: string;
|
39
|
+
fee: BigNumber;
|
40
|
+
tickLower: BigNumber;
|
41
|
+
tickUpper: BigNumber;
|
42
|
+
liquidity: BigNumber;
|
43
|
+
feeGrowthInside0LastX128: BigNumber;
|
44
|
+
feeGrowthInside1LastX128: BigNumber;
|
45
|
+
tokensOwed0: BigNumber;
|
46
|
+
tokensOwed1: BigNumber;
|
47
|
+
},
|
48
|
+
Contract<any>
|
49
|
+
>;
|
50
|
+
}
|
51
|
+
|
52
|
+
export const IUniswapV3NonFungibleTokenManager = contract<IUniswapV3NonFungibleTokenManager>()`
|
53
|
+
function positions(uint256 tokenId) view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
|
54
|
+
`;
|
55
|
+
|
56
|
+
export async function createUniswapV3LiquidityPosition({
|
57
|
+
signer,
|
58
|
+
comptrollerProxy,
|
59
|
+
externalPositionManager,
|
60
|
+
callOnExternalPositionData = '0x',
|
61
|
+
}: {
|
62
|
+
signer: SignerWithAddress;
|
63
|
+
comptrollerProxy: ComptrollerLib;
|
64
|
+
externalPositionManager: ExternalPositionManager;
|
65
|
+
callOnExternalPositionData?: BytesLike;
|
66
|
+
}) {
|
67
|
+
const { externalPositionProxy: externalPositionProxyContract, receipt } = await createExternalPosition({
|
68
|
+
callOnExternalPositionData,
|
69
|
+
comptrollerProxy,
|
70
|
+
externalPositionManager,
|
71
|
+
externalPositionTypeId: ExternalPositionType.UniswapV3LiquidityPosition,
|
72
|
+
signer,
|
73
|
+
});
|
74
|
+
|
75
|
+
return { externalPositionProxyAddress: externalPositionProxyContract.address, receipt };
|
76
|
+
}
|
77
|
+
|
78
|
+
export async function uniswapV3LiquidityPositionAddLiquidity({
|
79
|
+
signer,
|
80
|
+
comptrollerProxy,
|
81
|
+
externalPositionManager,
|
82
|
+
externalPositionProxy,
|
83
|
+
nftId,
|
84
|
+
amount0Desired,
|
85
|
+
amount1Desired,
|
86
|
+
amount0Min = 0,
|
87
|
+
amount1Min = 0,
|
88
|
+
}: {
|
89
|
+
signer: SignerWithAddress;
|
90
|
+
comptrollerProxy: ComptrollerLib;
|
91
|
+
externalPositionManager: ExternalPositionManager;
|
92
|
+
externalPositionProxy: AddressLike;
|
93
|
+
nftId: BigNumberish;
|
94
|
+
amount0Desired: BigNumberish;
|
95
|
+
amount1Desired: BigNumberish;
|
96
|
+
amount0Min?: BigNumberish;
|
97
|
+
amount1Min?: BigNumberish;
|
98
|
+
}) {
|
99
|
+
const actionArgs = uniswapV3LiquidityPositionAddLiquidityArgs({
|
100
|
+
amount0Desired,
|
101
|
+
amount0Min,
|
102
|
+
amount1Desired,
|
103
|
+
amount1Min,
|
104
|
+
nftId,
|
105
|
+
});
|
106
|
+
|
107
|
+
const callArgs = callOnExternalPositionArgs({
|
108
|
+
actionArgs,
|
109
|
+
actionId: UniswapV3LiquidityPositionActionId.AddLiquidity,
|
110
|
+
externalPositionProxy,
|
111
|
+
});
|
112
|
+
|
113
|
+
return comptrollerProxy
|
114
|
+
.connect(signer)
|
115
|
+
.callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
|
116
|
+
}
|
117
|
+
|
118
|
+
export async function uniswapV3LiquidityPositionCollect({
|
119
|
+
signer,
|
120
|
+
comptrollerProxy,
|
121
|
+
externalPositionManager,
|
122
|
+
externalPositionProxy,
|
123
|
+
nftId,
|
124
|
+
}: {
|
125
|
+
signer: SignerWithAddress;
|
126
|
+
comptrollerProxy: ComptrollerLib;
|
127
|
+
externalPositionManager: ExternalPositionManager;
|
128
|
+
externalPositionProxy: AddressLike;
|
129
|
+
nftId: BigNumberish;
|
130
|
+
}) {
|
131
|
+
const actionArgs = uniswapV3LiquidityPositionCollectArgs({
|
132
|
+
nftId,
|
133
|
+
});
|
134
|
+
|
135
|
+
const callArgs = callOnExternalPositionArgs({
|
136
|
+
actionArgs,
|
137
|
+
actionId: UniswapV3LiquidityPositionActionId.Collect,
|
138
|
+
externalPositionProxy,
|
139
|
+
});
|
140
|
+
|
141
|
+
return comptrollerProxy
|
142
|
+
.connect(signer)
|
143
|
+
.callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
|
144
|
+
}
|
145
|
+
|
146
|
+
export async function uniswapV3LiquidityPositionMint({
|
147
|
+
signer,
|
148
|
+
comptrollerProxy,
|
149
|
+
externalPositionManager,
|
150
|
+
externalPositionProxy,
|
151
|
+
token0,
|
152
|
+
token1,
|
153
|
+
fee,
|
154
|
+
tickLower,
|
155
|
+
tickUpper,
|
156
|
+
amount0Desired,
|
157
|
+
amount1Desired,
|
158
|
+
amount0Min = 0,
|
159
|
+
amount1Min = 0,
|
160
|
+
}: {
|
161
|
+
signer: SignerWithAddress;
|
162
|
+
comptrollerProxy: ComptrollerLib;
|
163
|
+
externalPositionManager: ExternalPositionManager;
|
164
|
+
externalPositionProxy: AddressLike;
|
165
|
+
token0: AddressLike;
|
166
|
+
token1: AddressLike;
|
167
|
+
fee: BigNumberish;
|
168
|
+
tickLower: BigNumberish;
|
169
|
+
tickUpper: BigNumberish;
|
170
|
+
amount0Desired: BigNumberish;
|
171
|
+
amount1Desired: BigNumberish;
|
172
|
+
amount0Min?: BigNumberish;
|
173
|
+
amount1Min?: BigNumberish;
|
174
|
+
}) {
|
175
|
+
const actionArgs = uniswapV3LiquidityPositionMintArgs({
|
176
|
+
amount0Desired,
|
177
|
+
amount0Min,
|
178
|
+
amount1Desired,
|
179
|
+
amount1Min,
|
180
|
+
fee,
|
181
|
+
tickLower,
|
182
|
+
tickUpper,
|
183
|
+
token0,
|
184
|
+
token1,
|
185
|
+
});
|
186
|
+
|
187
|
+
const callArgs = callOnExternalPositionArgs({
|
188
|
+
actionArgs,
|
189
|
+
actionId: UniswapV3LiquidityPositionActionId.Mint,
|
190
|
+
externalPositionProxy,
|
191
|
+
});
|
192
|
+
|
193
|
+
const receipt = await comptrollerProxy
|
194
|
+
.connect(signer)
|
195
|
+
.callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
|
196
|
+
|
197
|
+
const externalPosition = new UniswapV3LiquidityPositionLib(externalPositionProxy, provider);
|
198
|
+
const nftId = extractEvent(receipt, externalPosition.abi.getEvent('NFTPositionAdded'))[0].args.tokenId;
|
199
|
+
|
200
|
+
return { nftId, receipt };
|
201
|
+
}
|
202
|
+
|
203
|
+
export async function uniswapV3LiquidityPositionPurge({
|
204
|
+
signer,
|
205
|
+
comptrollerProxy,
|
206
|
+
externalPositionManager,
|
207
|
+
externalPositionProxy,
|
208
|
+
nftId,
|
209
|
+
liquidity,
|
210
|
+
amount0Min = 0,
|
211
|
+
amount1Min = 0,
|
212
|
+
}: {
|
213
|
+
signer: SignerWithAddress;
|
214
|
+
comptrollerProxy: ComptrollerLib;
|
215
|
+
externalPositionManager: ExternalPositionManager;
|
216
|
+
externalPositionProxy: AddressLike;
|
217
|
+
nftId: BigNumberish;
|
218
|
+
liquidity: BigNumberish;
|
219
|
+
amount0Min?: BigNumberish;
|
220
|
+
amount1Min?: BigNumberish;
|
221
|
+
}) {
|
222
|
+
const actionArgs = uniswapV3LiquidityPositionPurgeArgs({
|
223
|
+
amount0Min,
|
224
|
+
amount1Min,
|
225
|
+
liquidity,
|
226
|
+
nftId,
|
227
|
+
});
|
228
|
+
|
229
|
+
const callArgs = callOnExternalPositionArgs({
|
230
|
+
actionArgs,
|
231
|
+
actionId: UniswapV3LiquidityPositionActionId.Purge,
|
232
|
+
externalPositionProxy,
|
233
|
+
});
|
234
|
+
|
235
|
+
return comptrollerProxy
|
236
|
+
.connect(signer)
|
237
|
+
.callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
|
238
|
+
}
|
239
|
+
|
240
|
+
export async function uniswapV3LiquidityPositionRemoveLiquidity({
|
241
|
+
signer,
|
242
|
+
comptrollerProxy,
|
243
|
+
externalPositionManager,
|
244
|
+
externalPositionProxy,
|
245
|
+
nftId,
|
246
|
+
liquidity,
|
247
|
+
amount0Min = 0,
|
248
|
+
amount1Min = 0,
|
249
|
+
}: {
|
250
|
+
signer: SignerWithAddress;
|
251
|
+
comptrollerProxy: ComptrollerLib;
|
252
|
+
externalPositionManager: ExternalPositionManager;
|
253
|
+
externalPositionProxy: AddressLike;
|
254
|
+
nftId: BigNumberish;
|
255
|
+
liquidity: BigNumberish;
|
256
|
+
amount0Min?: BigNumberish;
|
257
|
+
amount1Min?: BigNumberish;
|
258
|
+
}) {
|
259
|
+
const actionArgs = uniswapV3LiquidityPositionRemoveLiquidityArgs({
|
260
|
+
amount0Min,
|
261
|
+
amount1Min,
|
262
|
+
liquidity,
|
263
|
+
nftId,
|
264
|
+
});
|
265
|
+
|
266
|
+
const callArgs = callOnExternalPositionArgs({
|
267
|
+
actionArgs,
|
268
|
+
actionId: UniswapV3LiquidityPositionActionId.RemoveLiquidity,
|
269
|
+
externalPositionProxy,
|
270
|
+
});
|
271
|
+
|
272
|
+
return comptrollerProxy
|
273
|
+
.connect(signer)
|
274
|
+
.callOnExtension(externalPositionManager, ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
|
275
|
+
}
|
276
|
+
|
277
|
+
export function uniswapV3OrderTokenPair({ tokenA, tokenB }: { tokenA: AddressLike; tokenB: AddressLike }) {
|
278
|
+
const tokenAAddress = resolveAddress(tokenA);
|
279
|
+
const tokenBAddress = resolveAddress(tokenB);
|
280
|
+
|
281
|
+
return tokenAAddress < tokenBAddress
|
282
|
+
? { token0: tokenAAddress, token1: tokenBAddress }
|
283
|
+
: { token0: tokenBAddress, token1: tokenAAddress };
|
284
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { SignerWithAddress } from '@enzymefinance/hardhat';
|
1
|
+
import type { SignerWithAddress } from '@enzymefinance/hardhat';
|
2
2
|
import { FeeHook, feeManagerConfigArgs, FeeSettlementType, IFee } from '@enzymefinance/protocol';
|
3
3
|
import { constants, utils } from 'ethers';
|
4
4
|
|
@@ -1,17 +1,15 @@
|
|
1
|
-
import { SignerWithAddress } from '@enzymefinance/hardhat';
|
1
|
+
import type { SignerWithAddress } from '@enzymefinance/hardhat';
|
2
|
+
import type { AaveAdapter, ComptrollerLib, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
|
2
3
|
import {
|
3
|
-
AaveAdapter,
|
4
4
|
aaveLendArgs,
|
5
5
|
aaveRedeemArgs,
|
6
6
|
callOnIntegrationArgs,
|
7
|
-
ComptrollerLib,
|
8
|
-
IntegrationManager,
|
9
7
|
IntegrationManagerActionId,
|
10
8
|
lendSelector,
|
11
9
|
redeemSelector,
|
12
|
-
StandardToken,
|
13
10
|
} from '@enzymefinance/protocol';
|
14
|
-
import { BigNumberish
|
11
|
+
import type { BigNumberish } from 'ethers';
|
12
|
+
import { utils } from 'ethers';
|
15
13
|
|
16
14
|
export async function aaveLend({
|
17
15
|
comptrollerProxy,
|
@@ -35,8 +33,8 @@ export async function aaveLend({
|
|
35
33
|
|
36
34
|
const callArgs = callOnIntegrationArgs({
|
37
35
|
adapter: aaveAdapter,
|
38
|
-
selector: lendSelector,
|
39
36
|
encodedCallArgs: lendArgs,
|
37
|
+
selector: lendSelector,
|
40
38
|
});
|
41
39
|
|
42
40
|
const lendTx = comptrollerProxy
|
@@ -68,8 +66,8 @@ export async function aaveRedeem({
|
|
68
66
|
|
69
67
|
const callArgs = callOnIntegrationArgs({
|
70
68
|
adapter: aaveAdapter,
|
71
|
-
selector: redeemSelector,
|
72
69
|
encodedCallArgs: redeemArgs,
|
70
|
+
selector: redeemSelector,
|
73
71
|
});
|
74
72
|
|
75
73
|
const redeemTx = comptrollerProxy
|