@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
@@ -1,18 +1,21 @@
1
- import { AddressLike, randomAddress } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import { randomAddress } from '@enzymefinance/ethers';
3
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
4
+ import type { FundDeployer, StandardToken } from '@enzymefinance/protocol';
3
5
  import {
4
6
  ComptrollerLib,
5
7
  ComptrollerProxy,
6
8
  encodeFunctionData,
7
- FundDeployer,
8
9
  GasRelayPaymasterLib,
9
- StandardToken,
10
10
  VaultLib,
11
11
  VaultProxy,
12
12
  } from '@enzymefinance/protocol';
13
- import { BigNumber, BigNumberish, BytesLike, utils } from 'ethers';
13
+ import type { BigNumberish, BytesLike } from 'ethers';
14
+ import { BigNumber, utils } from 'ethers';
15
+
14
16
  import { assertEvent } from '../assertions';
15
- import { buyShares, BuySharesParams } from './shares';
17
+ import type { BuySharesParams } from './shares';
18
+ import { buyShares } from './shares';
16
19
 
17
20
  export type InitialInvestmentParams = Omit<BuySharesParams, 'comptrollerProxy' | 'denominationAsset'>;
18
21
 
@@ -34,6 +37,7 @@ export interface CreateNewFundParams {
34
37
  sharesActionTimelock?: BigNumberish;
35
38
  fundOwner?: AddressLike;
36
39
  fundName?: string;
40
+ fundSymbol?: string;
37
41
  feeManagerConfig?: BytesLike;
38
42
  policyManagerConfig?: BytesLike;
39
43
  investment?: InitialInvestmentParams;
@@ -66,6 +70,7 @@ export async function createComptrollerProxy({
66
70
 
67
71
  return {
68
72
  comptrollerProxy: new ComptrollerLib(comptrollerProxyContract, signer),
73
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
69
74
  receipt: comptrollerProxyContract.deployment!,
70
75
  };
71
76
  }
@@ -92,17 +97,15 @@ export async function createMigrationRequest({
92
97
  );
93
98
 
94
99
  const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
95
- creator: signer,
96
100
  comptrollerProxy: expect.any(String) as string,
101
+ creator: signer,
97
102
  denominationAsset,
98
103
  sharesActionTimelock: BigNumber.from(sharesActionTimelock),
99
- feeManagerConfigData: utils.hexlify(feeManagerConfigData),
100
- policyManagerConfigData: utils.hexlify(policyManagerConfigData),
101
104
  });
102
105
 
103
106
  return {
104
- receipt,
105
107
  comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
108
+ receipt,
106
109
  };
107
110
  }
108
111
 
@@ -114,29 +117,36 @@ export async function createNewFund({
114
117
  sharesActionTimelock = 0,
115
118
  fundOwner = randomAddress(),
116
119
  fundName = 'My Fund',
120
+ fundSymbol = '',
117
121
  feeManagerConfig = '0x',
118
122
  policyManagerConfig = '0x',
119
123
  investment,
120
124
  }: CreateNewFundParams) {
121
125
  const receipt = await fundDeployer
122
126
  .connect(signer)
123
- .createNewFund(fundOwner, fundName, denominationAsset, sharesActionTimelock, feeManagerConfig, policyManagerConfig);
127
+ .createNewFund(
128
+ fundOwner,
129
+ fundName,
130
+ fundSymbol,
131
+ denominationAsset,
132
+ sharesActionTimelock,
133
+ feeManagerConfig,
134
+ policyManagerConfig,
135
+ );
124
136
 
125
137
  const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
126
- creator: signer,
127
138
  comptrollerProxy: expect.any(String) as string,
139
+ creator: signer,
128
140
  denominationAsset,
129
141
  sharesActionTimelock: BigNumber.from(sharesActionTimelock),
130
- feeManagerConfigData: utils.hexlify(feeManagerConfig),
131
- policyManagerConfigData: utils.hexlify(policyManagerConfig),
132
142
  });
133
143
 
134
144
  const comptrollerProxy = new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer);
135
145
 
136
146
  const newFundDeployedArgs = assertEvent(receipt, 'NewFundCreated', {
147
+ comptrollerProxy,
137
148
  creator: signer,
138
149
  vaultProxy: expect.any(String) as string,
139
- comptrollerProxy,
140
150
  });
141
151
 
142
152
  const vaultProxy = new VaultLib(newFundDeployedArgs.vaultProxy, signer);
@@ -176,17 +186,15 @@ export async function createReconfigurationRequest({
176
186
  );
177
187
 
178
188
  const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
179
- creator: signer,
180
189
  comptrollerProxy: expect.any(String) as string,
190
+ creator: signer,
181
191
  denominationAsset,
182
192
  sharesActionTimelock: BigNumber.from(sharesActionTimelock),
183
- feeManagerConfigData: utils.hexlify(feeManagerConfigData),
184
- policyManagerConfigData: utils.hexlify(policyManagerConfigData),
185
193
  });
186
194
 
187
195
  return {
188
- receipt,
189
196
  comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
197
+ receipt,
190
198
  };
191
199
  }
192
200
 
@@ -1,7 +1,8 @@
1
- import { AddressLike } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
3
- import { ComptrollerLib, StandardToken } from '@enzymefinance/protocol';
4
- import { BigNumberish, constants, utils } from 'ethers';
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
+ import type { ComptrollerLib, StandardToken } from '@enzymefinance/protocol';
4
+ import type { BigNumberish } from 'ethers';
5
+ import { constants, utils } from 'ethers';
5
6
 
6
7
  export interface BuySharesParams {
7
8
  comptrollerProxy: ComptrollerLib;
@@ -1,12 +1,43 @@
1
- import { AddressLike } from '@enzymefinance/ethers';
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
+ import type { AddressListRegistry, AddressListUpdateType, ComptrollerLib } from '@enzymefinance/protocol';
2
4
  import {
3
- ComptrollerLib,
5
+ addressListRegistryCreateListSelector,
4
6
  curveMinterMintManySelector,
5
7
  curveMinterMintSelector,
6
8
  curveMinterToggleApproveMintSelector,
7
9
  encodeArgs,
10
+ sighash,
8
11
  } from '@enzymefinance/protocol';
9
- import { constants } from 'ethers';
12
+ import { constants, utils } from 'ethers';
13
+
14
+ export async function vaultCallCreateNewList({
15
+ addressListRegistry,
16
+ comptrollerProxy,
17
+ items,
18
+ owner,
19
+ signer,
20
+ updateType,
21
+ }: {
22
+ addressListRegistry: AddressListRegistry;
23
+ comptrollerProxy: ComptrollerLib;
24
+ items: AddressLike[];
25
+ owner: AddressLike;
26
+ signer: SignerWithAddress;
27
+ updateType: AddressListUpdateType;
28
+ }) {
29
+ await comptrollerProxy
30
+ .connect(signer)
31
+ .vaultCallOnContract(
32
+ addressListRegistry.address,
33
+ addressListRegistryCreateListSelector,
34
+ encodeArgs(['address', 'uint8', 'address[]'], [owner, updateType, items]),
35
+ );
36
+
37
+ const listCount = await addressListRegistry.getListCount();
38
+
39
+ return listCount.sub(1);
40
+ }
10
41
 
11
42
  export function vaultCallCurveMinterMint({
12
43
  comptrollerProxy,
@@ -56,3 +87,19 @@ export function vaultCallCurveMinterToggleApproveMint({
56
87
  encodeArgs(['address'], [account]),
57
88
  );
58
89
  }
90
+
91
+ export function vaultCallStartAssetBypassTimelock({
92
+ comptrollerProxy,
93
+ contract,
94
+ asset,
95
+ }: {
96
+ comptrollerProxy: ComptrollerLib;
97
+ contract: AddressLike;
98
+ asset: AddressLike;
99
+ }) {
100
+ return comptrollerProxy.vaultCallOnContract(
101
+ contract,
102
+ sighash(utils.FunctionFragment.fromString('startAssetBypassTimelock(address)')),
103
+ encodeArgs(['address'], [asset]),
104
+ );
105
+ }
package/src/whales.ts CHANGED
@@ -1,43 +1,49 @@
1
1
  import { resolveAddress } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
2
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
3
 
4
+ /* eslint-disable sort-keys-fix/sort-keys-fix */
4
5
  const whales = {
5
- wdgld: '0x9aa65464b4cfbe3dc2bdb3df412aee2b3de86687',
6
- adai: '0x62e41b1185023bcc14a465d350e1dde341557925',
7
- ausdc: '0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296',
6
+ // primitives
8
7
  bat: '0x12274c71304bc0e6b38a56b94d2949b118feb838',
9
8
  bnb: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
10
- bnt: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
11
- comp: '0xC89b6f0146642688bb254bF93C28fcCF1E182C81',
9
+ bnt: '0x7d1ed1601a12a172269436fa95fe156650603c1d',
10
+ busd: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
11
+ comp: '0x0f50d31b3eaefd65236dd3736b863cffa4c63c4e',
12
12
  crv: '0x4ce799e6eD8D64536b67dD428565d52A531B3640',
13
- dai: '0x16463c0fdb6ba9618909f5b120ea1581618c1b9e',
14
- knc: '0x9d1167df52328db20d5d77288dce6ae3ef3a3e1f',
15
- ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
13
+ dai: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
14
+ knc: '0x09d51654bd9efbfcb56da3491989cc1444095fff',
16
15
  link: '0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6',
17
16
  mana: '0xefb94ac00f1cee8a89d5c3f49faa799da6f03024',
18
17
  mln: '0xd8f8a53945bcfbbc19da162aa405e662ef71c40d',
19
18
  rep: '0xc6a043b07d33b6f30d8cb501026c391cfd25abe1',
20
19
  ren: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
20
+ susd: '0xa5f7a39e55d7878bc5bd754ee5d6bd7a7662355b',
21
21
  uni: '0x47173b170c64d16393a52e6c480b3ad8c302ba1e',
22
22
  usdc: '0xae2d4617c862309a3d75a0ffb358c7a5009c673f',
23
23
  usdt: '0x5041ed759dd4afc3a72b8192c143f72f4724081a',
24
24
  weth: '0xe08A8b19e5722a201EaF20A6BC595eF655397bd5',
25
25
  zrx: '0x206376e8940e42538781cd94ef024df3c1e0fd43',
26
- cbat: '0x285306442cd985cab2c30515cfdab106fca7bc44',
26
+ // aTokens
27
+ ausdc: '0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296',
28
+ // cTokens
27
29
  ccomp: '0xd74f186194ab9219fafac5c2fe4b3270169666db',
28
- cdai: '0x2bddEd18E2CA464355091266B7616956944ee7eE',
30
+ cdai: '0xab4ce310054a11328685ece1043211b68ba5d082',
29
31
  ceth: '0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8',
30
- crep: '0xc2386de1b7271a87b416f4605d500846e826a185',
31
- cuni: '0x8889ff5b6323e71c28c26d2c34b8bb52654f00a6',
32
+ cuni: '0x39d8014b4f40d2cbc441137011d32023f4f1fd87',
32
33
  cusdc: '0xb3bd459e0598dde1fe84b1d0a1430be175b5d5be',
33
- czrx: '0x57ca561798413a20508b6bc997481e784f3e6e5f',
34
+ // ptTokens
35
+ ptUsdc: '0xd18236cd213f39d078177b6f6908f0e44e88e4aa',
36
+ // synths
34
37
  seth: '0xc34a7c65aa08cb36744bda8eeec7b8e9891e147c',
35
- seur: '0xe896e539e557bc751860a7763c8dd589af1698ce',
36
- susd: '0x49BE88F0fcC3A8393a59d3688480d7D253C37D2A',
38
+ seur: '0xc3f2f91723b16b95bef0619b2504c049075d5b0b',
39
+ sxag: '0x40d68c490bf7262ec40048099aec23535f734be2',
40
+ sxau: '0x92eb453b7b5b8d41edb44e2c8b8b53eb70a482c7',
41
+ // misc
37
42
  lidoSteth: '0x31f644e2dd5d74f5c8d6d9de89dd517474d51800',
43
+ ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
38
44
  eurs: '0x98ed26de6451db36246672df78ae7c50f2c76f6d',
39
- idle: '0x34aaa3d5a73d6f9594326d0422ce69748f09b14f',
40
45
  } as const;
46
+ /* eslint-enable sort-keys-fix/sort-keys-fix */
41
47
 
42
48
  export type Whale = keyof typeof whales;
43
49
  export type WhaleSigners<T extends Partial<Whale> = Whale> = Record<T, SignerWithAddress>;
@@ -45,12 +51,14 @@ export type WhaleSigners<T extends Partial<Whale> = Whale> = Record<T, SignerWit
45
51
  export async function unlockWhale(token: Whale) {
46
52
  const address = resolveAddress(whales[token]);
47
53
  await provider.send('hardhat_impersonateAccount', [address]);
54
+
48
55
  return provider.getSignerWithAddress(address);
49
56
  }
50
57
 
51
58
  export async function unlockAllWhales() {
52
59
  const keys = Object.keys(whales) as Whale[];
53
60
  const signers = await Promise.all(keys.map(async (token) => unlockWhale(token)));
61
+
54
62
  return keys.reduce((carry, key, index) => {
55
63
  return { ...carry, [key]: signers[index] };
56
64
  }, {} as WhaleSigners);
@@ -58,6 +66,7 @@ export async function unlockAllWhales() {
58
66
 
59
67
  export async function unlockWhales<T extends Whale>(...tokens: T[]) {
60
68
  const signers = await Promise.all(tokens.map(async (token) => unlockWhale(token)));
69
+
61
70
  return tokens.reduce((carry, key, index) => {
62
71
  return { ...carry, [key]: signers[index] };
63
72
  }, {} as WhaleSigners<T>);
package/tsconfig.json CHANGED
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "extends": "../../tsconfig.json",
3
- "include": ["src", "../../deploy"]
3
+ "include": ["src"],
4
+ "files": []
4
5
  }