@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,17 +1,28 @@
|
|
1
|
-
import { AddressLike, Contract,
|
2
|
-
import {
|
1
|
+
import type { AddressLike, Contract, Send } from '@enzymefinance/ethers';
|
2
|
+
import { contract, resolveAddress } from '@enzymefinance/ethers';
|
3
|
+
import type { SignerWithAddress } from '@enzymefinance/hardhat';
|
4
|
+
import type {
|
5
|
+
CompoundAdapter,
|
6
|
+
CompoundPriceFeed,
|
7
|
+
ComptrollerLib,
|
8
|
+
ICERC20,
|
9
|
+
IntegrationManager,
|
10
|
+
VaultLib,
|
11
|
+
} from '@enzymefinance/protocol';
|
3
12
|
import {
|
4
13
|
callOnIntegrationArgs,
|
5
|
-
|
14
|
+
claimRewardsSelector,
|
6
15
|
compoundArgs,
|
7
|
-
|
16
|
+
compoundClaimRewardsArgs,
|
8
17
|
IntegrationManagerActionId,
|
9
18
|
lendSelector,
|
10
19
|
redeemSelector,
|
11
|
-
|
20
|
+
StandardToken,
|
12
21
|
} from '@enzymefinance/protocol';
|
13
|
-
import { BigNumberish
|
14
|
-
import {
|
22
|
+
import type { BigNumberish } from 'ethers';
|
23
|
+
import { BigNumber, utils } from 'ethers';
|
24
|
+
|
25
|
+
import { getAssetBalances } from '../../common';
|
15
26
|
|
16
27
|
export interface ICompoundComptroller extends Contract<ICompoundComptroller> {
|
17
28
|
claimComp: Send<(_account: AddressLike) => void>;
|
@@ -21,6 +32,155 @@ export const ICompoundComptroller = contract<ICompoundComptroller>()`
|
|
21
32
|
function claimComp(address)
|
22
33
|
`;
|
23
34
|
|
35
|
+
export async function assertCompoundLend({
|
36
|
+
tokenWhale,
|
37
|
+
comptrollerProxy,
|
38
|
+
vaultProxy,
|
39
|
+
integrationManager,
|
40
|
+
fundOwner,
|
41
|
+
compoundAdapter,
|
42
|
+
tokenAmount = utils.parseEther('1'),
|
43
|
+
cToken,
|
44
|
+
compoundPriceFeed,
|
45
|
+
}: {
|
46
|
+
tokenWhale: SignerWithAddress;
|
47
|
+
comptrollerProxy: ComptrollerLib;
|
48
|
+
vaultProxy: VaultLib;
|
49
|
+
integrationManager: IntegrationManager;
|
50
|
+
fundOwner: SignerWithAddress;
|
51
|
+
compoundAdapter: CompoundAdapter;
|
52
|
+
tokenAmount?: BigNumber;
|
53
|
+
cToken: ICERC20;
|
54
|
+
compoundPriceFeed: CompoundPriceFeed;
|
55
|
+
}) {
|
56
|
+
const token = new StandardToken(await compoundPriceFeed.getTokenFromCToken.args(cToken).call(), tokenWhale);
|
57
|
+
await token.connect(tokenWhale).transfer(vaultProxy, tokenAmount);
|
58
|
+
const rateBefore = await cToken.exchangeRateStored.call();
|
59
|
+
|
60
|
+
// Exchange rate stored can have a small deviation from exchangeRateStored
|
61
|
+
const minIncomingCTokenAmount = tokenAmount
|
62
|
+
.mul(utils.parseEther('1'))
|
63
|
+
.div(rateBefore)
|
64
|
+
.mul(BigNumber.from('999'))
|
65
|
+
.div(BigNumber.from('1000'));
|
66
|
+
|
67
|
+
const [preTxIncomingAssetBalance, preTxOutgoingAssetBalance] = await getAssetBalances({
|
68
|
+
account: vaultProxy,
|
69
|
+
assets: [cToken as any, token],
|
70
|
+
});
|
71
|
+
|
72
|
+
const lendReceipt = await compoundLend({
|
73
|
+
cToken,
|
74
|
+
cTokenAmount: minIncomingCTokenAmount,
|
75
|
+
compoundAdapter,
|
76
|
+
comptrollerProxy,
|
77
|
+
fundOwner,
|
78
|
+
integrationManager,
|
79
|
+
tokenAmount,
|
80
|
+
});
|
81
|
+
|
82
|
+
// Get exchange rate after tx (the rate is updated right after)
|
83
|
+
const rate = await cToken.exchangeRateStored();
|
84
|
+
const [postTxIncomingAssetBalance, postTxOutgoingAssetBalance] = await getAssetBalances({
|
85
|
+
account: vaultProxy,
|
86
|
+
assets: [cToken as any, token],
|
87
|
+
});
|
88
|
+
|
89
|
+
const expectedCTokenAmount = tokenAmount.mul(utils.parseEther('1')).div(rate);
|
90
|
+
expect(postTxIncomingAssetBalance).toEqBigNumber(preTxIncomingAssetBalance.add(expectedCTokenAmount));
|
91
|
+
expect(postTxOutgoingAssetBalance).toEqBigNumber(preTxOutgoingAssetBalance.sub(tokenAmount));
|
92
|
+
|
93
|
+
return lendReceipt;
|
94
|
+
}
|
95
|
+
|
96
|
+
export async function assertCompoundRedeem({
|
97
|
+
comptrollerProxy,
|
98
|
+
vaultProxy,
|
99
|
+
integrationManager,
|
100
|
+
fundOwner,
|
101
|
+
compoundAdapter,
|
102
|
+
cToken,
|
103
|
+
compoundPriceFeed,
|
104
|
+
}: {
|
105
|
+
comptrollerProxy: ComptrollerLib;
|
106
|
+
vaultProxy: VaultLib;
|
107
|
+
integrationManager: IntegrationManager;
|
108
|
+
fundOwner: SignerWithAddress;
|
109
|
+
compoundAdapter: CompoundAdapter;
|
110
|
+
cToken: ICERC20;
|
111
|
+
compoundPriceFeed: CompoundPriceFeed;
|
112
|
+
}) {
|
113
|
+
const cTokenAmount = utils.parseUnits('1', await cToken.decimals());
|
114
|
+
await cToken.transfer(vaultProxy, cTokenAmount);
|
115
|
+
|
116
|
+
const token = new StandardToken(await compoundPriceFeed.getTokenFromCToken.args(cToken).call(), provider);
|
117
|
+
const [preTxIncomingAssetBalance, preTxOutgoingAssetBalance] = await getAssetBalances({
|
118
|
+
account: vaultProxy,
|
119
|
+
assets: [token, cToken as any],
|
120
|
+
});
|
121
|
+
|
122
|
+
const rateBefore = await cToken.exchangeRateStored();
|
123
|
+
const minIncomingTokenAmount = cTokenAmount.mul(rateBefore).div(utils.parseEther('1'));
|
124
|
+
|
125
|
+
const redeemReceipt = await compoundRedeem({
|
126
|
+
cToken,
|
127
|
+
cTokenAmount,
|
128
|
+
compoundAdapter,
|
129
|
+
comptrollerProxy,
|
130
|
+
fundOwner,
|
131
|
+
integrationManager,
|
132
|
+
tokenAmount: minIncomingTokenAmount,
|
133
|
+
vaultProxy,
|
134
|
+
});
|
135
|
+
|
136
|
+
const [postTxIncomingAssetBalance, postTxOutgoingAssetBalance] = await getAssetBalances({
|
137
|
+
account: vaultProxy,
|
138
|
+
assets: [token, cToken as any],
|
139
|
+
});
|
140
|
+
|
141
|
+
// Get exchange rate after tx (the rate is updated right after)
|
142
|
+
const rate = await cToken.exchangeRateStored();
|
143
|
+
const expectedTokenAmount = cTokenAmount.mul(rate).div(utils.parseEther('1'));
|
144
|
+
|
145
|
+
expect(postTxIncomingAssetBalance).toEqBigNumber(preTxIncomingAssetBalance.add(expectedTokenAmount));
|
146
|
+
expect(postTxOutgoingAssetBalance).toEqBigNumber(preTxOutgoingAssetBalance.sub(cTokenAmount));
|
147
|
+
|
148
|
+
return redeemReceipt;
|
149
|
+
}
|
150
|
+
|
151
|
+
export async function compoundClaim({
|
152
|
+
comptrollerProxy,
|
153
|
+
integrationManager,
|
154
|
+
fundOwner,
|
155
|
+
compoundAdapter,
|
156
|
+
compoundComptroller,
|
157
|
+
cTokens,
|
158
|
+
}: {
|
159
|
+
comptrollerProxy: ComptrollerLib;
|
160
|
+
integrationManager: IntegrationManager;
|
161
|
+
fundOwner: SignerWithAddress;
|
162
|
+
compoundAdapter: CompoundAdapter;
|
163
|
+
compoundComptroller: AddressLike;
|
164
|
+
cTokens: AddressLike[];
|
165
|
+
}) {
|
166
|
+
const claimArgs = compoundClaimRewardsArgs({
|
167
|
+
cTokens,
|
168
|
+
compoundComptroller,
|
169
|
+
});
|
170
|
+
|
171
|
+
const callArgs = callOnIntegrationArgs({
|
172
|
+
adapter: compoundAdapter,
|
173
|
+
encodedCallArgs: claimArgs,
|
174
|
+
selector: claimRewardsSelector,
|
175
|
+
});
|
176
|
+
|
177
|
+
const claimRewardsTx = comptrollerProxy
|
178
|
+
.connect(fundOwner)
|
179
|
+
.callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
|
180
|
+
|
181
|
+
return claimRewardsTx;
|
182
|
+
}
|
183
|
+
|
24
184
|
export async function compoundLend({
|
25
185
|
comptrollerProxy,
|
26
186
|
integrationManager,
|
@@ -40,14 +200,14 @@ export async function compoundLend({
|
|
40
200
|
}) {
|
41
201
|
const lendArgs = compoundArgs({
|
42
202
|
cToken,
|
43
|
-
outgoingAssetAmount: tokenAmount,
|
44
203
|
minIncomingAssetAmount: cTokenAmount,
|
204
|
+
outgoingAssetAmount: tokenAmount,
|
45
205
|
});
|
46
206
|
|
47
207
|
const callArgs = callOnIntegrationArgs({
|
48
208
|
adapter: compoundAdapter,
|
49
|
-
selector: lendSelector,
|
50
209
|
encodedCallArgs: lendArgs,
|
210
|
+
selector: lendSelector,
|
51
211
|
});
|
52
212
|
|
53
213
|
const lendTx = comptrollerProxy
|
@@ -77,14 +237,14 @@ export async function compoundRedeem({
|
|
77
237
|
}) {
|
78
238
|
const redeemArgs = compoundArgs({
|
79
239
|
cToken: resolveAddress(cToken),
|
80
|
-
outgoingAssetAmount: cTokenAmount,
|
81
240
|
minIncomingAssetAmount: tokenAmount,
|
241
|
+
outgoingAssetAmount: cTokenAmount,
|
82
242
|
});
|
83
243
|
|
84
244
|
const callArgs = callOnIntegrationArgs({
|
85
245
|
adapter: compoundAdapter,
|
86
|
-
selector: redeemSelector,
|
87
246
|
encodedCallArgs: redeemArgs,
|
247
|
+
selector: redeemSelector,
|
88
248
|
});
|
89
249
|
|
90
250
|
const redeemTx = comptrollerProxy
|