@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.
Files changed (80) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/declarations/src/assertions.d.ts +2 -2
  3. package/dist/declarations/src/deployment.d.ts +172 -68
  4. package/dist/declarations/src/gasRelayer.d.ts +14 -12
  5. package/dist/declarations/src/helpers.d.ts +5 -4
  6. package/dist/declarations/src/scaffolding/assets.d.ts +4 -4
  7. package/dist/declarations/src/scaffolding/chainlink.d.ts +2 -2
  8. package/dist/declarations/src/scaffolding/common.d.ts +1 -1
  9. package/dist/declarations/src/scaffolding/core.d.ts +4 -4
  10. package/dist/declarations/src/scaffolding/extensions/common.d.ts +4 -4
  11. package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +8 -6
  12. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +5 -5
  13. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +1 -0
  14. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +16 -12
  15. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +100 -0
  16. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +4 -4
  17. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +6 -5
  18. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +33 -5
  19. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +101 -84
  20. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +6 -6
  21. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +3 -0
  22. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +4 -4
  23. package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +17 -0
  24. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +6 -5
  25. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +23 -0
  26. package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +29 -0
  27. package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +15 -12
  28. package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +3 -3
  29. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +4 -4
  30. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +4 -4
  31. package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +5 -5
  32. package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +4 -4
  33. package/dist/declarations/src/scaffolding/extensions/policies.d.ts +9 -9
  34. package/dist/declarations/src/scaffolding/setup.d.ts +11 -9
  35. package/dist/declarations/src/scaffolding/shares.d.ts +4 -4
  36. package/dist/declarations/src/scaffolding/vaultCalls.d.ts +11 -2
  37. package/dist/declarations/src/whales.d.ts +24 -19
  38. package/dist/enzymefinance-testutils.browser.cjs.js +1541 -673
  39. package/dist/enzymefinance-testutils.browser.esm.js +1502 -655
  40. package/dist/enzymefinance-testutils.cjs.dev.js +1541 -673
  41. package/dist/enzymefinance-testutils.cjs.prod.js +1541 -673
  42. package/dist/enzymefinance-testutils.esm.js +1502 -655
  43. package/package.json +6 -6
  44. package/src/assertions.ts +5 -2
  45. package/src/deployment.ts +221 -120
  46. package/src/gasRelayer.ts +17 -18
  47. package/src/helpers.ts +6 -4
  48. package/src/scaffolding/assets.ts +7 -6
  49. package/src/scaffolding/chainlink.ts +2 -2
  50. package/src/scaffolding/common.ts +1 -1
  51. package/src/scaffolding/core.ts +4 -8
  52. package/src/scaffolding/extensions/common.ts +4 -4
  53. package/src/scaffolding/extensions/external-positions/actions.ts +14 -9
  54. package/src/scaffolding/extensions/external-positions/compound.ts +28 -29
  55. package/src/scaffolding/extensions/external-positions/index.ts +1 -0
  56. package/src/scaffolding/extensions/external-positions/mocks.ts +32 -36
  57. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +284 -0
  58. package/src/scaffolding/extensions/fees.ts +1 -1
  59. package/src/scaffolding/extensions/integrations/aave.ts +6 -8
  60. package/src/scaffolding/extensions/integrations/compound.ts +171 -11
  61. package/src/scaffolding/extensions/integrations/curve.ts +303 -255
  62. package/src/scaffolding/extensions/integrations/idle.ts +9 -11
  63. package/src/scaffolding/extensions/integrations/index.ts +3 -0
  64. package/src/scaffolding/extensions/integrations/mock.ts +11 -13
  65. package/src/scaffolding/extensions/integrations/olympusV2.ts +71 -0
  66. package/src/scaffolding/extensions/integrations/paraSwapV4.ts +16 -11
  67. package/src/scaffolding/extensions/integrations/paraSwapV5.ts +73 -0
  68. package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +117 -0
  69. package/src/scaffolding/extensions/integrations/synthetix.ts +45 -31
  70. package/src/scaffolding/extensions/integrations/trackedAssets.ts +3 -4
  71. package/src/scaffolding/extensions/integrations/uniswapV2.ts +22 -19
  72. package/src/scaffolding/extensions/integrations/uniswapV3.ts +9 -10
  73. package/src/scaffolding/extensions/integrations/yearn.ts +9 -11
  74. package/src/scaffolding/extensions/integrations/zeroExV2.ts +9 -7
  75. package/src/scaffolding/extensions/policies.ts +2 -1
  76. package/src/scaffolding/setup.ts +27 -13
  77. package/src/scaffolding/shares.ts +5 -4
  78. package/src/scaffolding/vaultCalls.ts +32 -2
  79. package/src/types.d.ts +1 -0
  80. package/src/whales.ts +36 -18
@@ -1,15 +1,13 @@
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, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
3
4
  import {
4
5
  callOnIntegrationArgs,
5
- ComptrollerLib,
6
- IntegrationManager,
7
6
  IntegrationManagerActionId,
8
- StandardToken,
9
7
  takeOrderSelector,
10
8
  uniswapV3TakeOrderArgs,
11
9
  } from '@enzymefinance/protocol';
12
- import { BigNumber, BigNumberish } from 'ethers';
10
+ import type { BigNumber, BigNumberish } from 'ethers';
13
11
 
14
12
  export async function uniswapV3TakeOrder({
15
13
  comptrollerProxy,
@@ -34,20 +32,21 @@ export async function uniswapV3TakeOrder({
34
32
  }) {
35
33
  if (seedFund) {
36
34
  // Seed the VaultProxy with enough outgoingAsset for the tx
37
- await pathAddresses[0].transfer(await comptrollerProxy.getVaultProxy(), outgoingAssetAmount);
35
+ const vaultProxy = await comptrollerProxy.getVaultProxy();
36
+ await pathAddresses[0].transfer(vaultProxy, outgoingAssetAmount);
38
37
  }
39
38
 
40
39
  const takeOrderArgs = uniswapV3TakeOrderArgs({
40
+ minIncomingAssetAmount,
41
+ outgoingAssetAmount,
41
42
  pathAddresses,
42
43
  pathFees,
43
- outgoingAssetAmount,
44
- minIncomingAssetAmount,
45
44
  });
46
45
 
47
46
  const callArgs = callOnIntegrationArgs({
48
47
  adapter: uniswapV3Adapter,
49
- selector: takeOrderSelector,
50
48
  encodedCallArgs: takeOrderArgs,
49
+ selector: takeOrderSelector,
51
50
  });
52
51
 
53
52
  return comptrollerProxy
@@ -1,17 +1,15 @@
1
- import { SignerWithAddress } from '@enzymefinance/hardhat';
1
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
2
+ import type { ComptrollerLib, IntegrationManager, StandardToken, YearnVaultV2Adapter } from '@enzymefinance/protocol';
2
3
  import {
3
4
  callOnIntegrationArgs,
4
- ComptrollerLib,
5
- IntegrationManager,
6
5
  IntegrationManagerActionId,
7
6
  lendSelector,
8
7
  redeemSelector,
9
- StandardToken,
10
- YearnVaultV2Adapter,
11
8
  yearnVaultV2LendArgs,
12
9
  yearnVaultV2RedeemArgs,
13
10
  } from '@enzymefinance/protocol';
14
- import { BigNumber, BigNumberish } from 'ethers';
11
+ import type { BigNumberish } from 'ethers';
12
+ import { BigNumber } from 'ethers';
15
13
 
16
14
  export async function yearnVaultV2Lend({
17
15
  signer,
@@ -32,12 +30,12 @@ export async function yearnVaultV2Lend({
32
30
  }) {
33
31
  const callArgs = callOnIntegrationArgs({
34
32
  adapter: yearnVaultV2Adapter,
35
- selector: lendSelector,
36
33
  encodedCallArgs: yearnVaultV2LendArgs({
37
- yVault,
38
- outgoingUnderlyingAmount,
39
34
  minIncomingYVaultSharesAmount,
35
+ outgoingUnderlyingAmount,
36
+ yVault,
40
37
  }),
38
+ selector: lendSelector,
41
39
  });
42
40
 
43
41
  return comptrollerProxy
@@ -66,13 +64,13 @@ export async function yearnVaultV2Redeem({
66
64
  }) {
67
65
  const callArgs = callOnIntegrationArgs({
68
66
  adapter: yearnVaultV2Adapter,
69
- selector: redeemSelector,
70
67
  encodedCallArgs: yearnVaultV2RedeemArgs({
71
- yVault,
72
68
  maxOutgoingYVaultSharesAmount,
73
69
  minIncomingUnderlyingAmount,
74
70
  slippageToleranceBps,
71
+ yVault,
75
72
  }),
73
+ selector: redeemSelector,
76
74
  });
77
75
 
78
76
  return comptrollerProxy
@@ -1,16 +1,18 @@
1
- import { SignerWithAddress } from '@enzymefinance/hardhat';
2
- import {
1
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
2
+ import type {
3
3
  ComptrollerLib,
4
4
  IntegrationManager,
5
- ZeroExV2Adapter,
6
- VaultLib,
7
5
  SignedZeroExV2Order,
6
+ VaultLib,
7
+ ZeroExV2Adapter,
8
+ } from '@enzymefinance/protocol';
9
+ import {
8
10
  callOnIntegrationArgs,
11
+ IntegrationManagerActionId,
9
12
  takeOrderSelector,
10
13
  zeroExV2TakeOrderArgs,
11
- IntegrationManagerActionId,
12
14
  } from '@enzymefinance/protocol';
13
- import { BigNumberish } from 'ethers';
15
+ import type { BigNumberish } from 'ethers';
14
16
 
15
17
  export async function zeroExV2TakeOrder({
16
18
  comptrollerProxy,
@@ -35,8 +37,8 @@ export async function zeroExV2TakeOrder({
35
37
 
36
38
  const callArgs = callOnIntegrationArgs({
37
39
  adapter: zeroExV2Adapter,
38
- selector: takeOrderSelector,
39
40
  encodedCallArgs: takeOrderArgs,
41
+ selector: takeOrderSelector,
40
42
  });
41
43
 
42
44
  return comptrollerProxy
@@ -1,5 +1,6 @@
1
1
  import { IPolicy, PolicyHook, policyManagerConfigArgs } from '@enzymefinance/protocol';
2
- import { constants, Signer, utils } from 'ethers';
2
+ import type { Signer } from 'ethers';
3
+ import { constants, utils } from 'ethers';
3
4
 
4
5
  // Policy Manager
5
6
 
@@ -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,15 +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
104
  });
100
105
 
101
106
  return {
102
- receipt,
103
107
  comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
108
+ receipt,
104
109
  };
105
110
  }
106
111
 
@@ -112,17 +117,26 @@ export async function createNewFund({
112
117
  sharesActionTimelock = 0,
113
118
  fundOwner = randomAddress(),
114
119
  fundName = 'My Fund',
120
+ fundSymbol = '',
115
121
  feeManagerConfig = '0x',
116
122
  policyManagerConfig = '0x',
117
123
  investment,
118
124
  }: CreateNewFundParams) {
119
125
  const receipt = await fundDeployer
120
126
  .connect(signer)
121
- .createNewFund(fundOwner, fundName, denominationAsset, sharesActionTimelock, feeManagerConfig, policyManagerConfig);
127
+ .createNewFund(
128
+ fundOwner,
129
+ fundName,
130
+ fundSymbol,
131
+ denominationAsset,
132
+ sharesActionTimelock,
133
+ feeManagerConfig,
134
+ policyManagerConfig,
135
+ );
122
136
 
123
137
  const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
124
- creator: signer,
125
138
  comptrollerProxy: expect.any(String) as string,
139
+ creator: signer,
126
140
  denominationAsset,
127
141
  sharesActionTimelock: BigNumber.from(sharesActionTimelock),
128
142
  });
@@ -130,9 +144,9 @@ export async function createNewFund({
130
144
  const comptrollerProxy = new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer);
131
145
 
132
146
  const newFundDeployedArgs = assertEvent(receipt, 'NewFundCreated', {
147
+ comptrollerProxy,
133
148
  creator: signer,
134
149
  vaultProxy: expect.any(String) as string,
135
- comptrollerProxy,
136
150
  });
137
151
 
138
152
  const vaultProxy = new VaultLib(newFundDeployedArgs.vaultProxy, signer);
@@ -172,15 +186,15 @@ export async function createReconfigurationRequest({
172
186
  );
173
187
 
174
188
  const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
175
- creator: signer,
176
189
  comptrollerProxy: expect.any(String) as string,
190
+ creator: signer,
177
191
  denominationAsset,
178
192
  sharesActionTimelock: BigNumber.from(sharesActionTimelock),
179
193
  });
180
194
 
181
195
  return {
182
- receipt,
183
196
  comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
197
+ receipt,
184
198
  };
185
199
  }
186
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,6 +1,8 @@
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,
@@ -9,6 +11,34 @@ import {
9
11
  } from '@enzymefinance/protocol';
10
12
  import { constants, utils } from 'ethers';
11
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
+ }
41
+
12
42
  export function vaultCallCurveMinterMint({
13
43
  comptrollerProxy,
14
44
  minter,
package/src/types.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  import '@enzymefinance/hardhat/types';
2
+ import 'hardhat-deploy/dist/src/type-extensions';
package/src/whales.ts CHANGED
@@ -1,43 +1,58 @@
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',
13
+ dai: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
14
+ knc: '0x09d51654bd9efbfcb56da3491989cc1444095fff',
15
15
  ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
16
16
  link: '0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6',
17
17
  mana: '0xefb94ac00f1cee8a89d5c3f49faa799da6f03024',
18
18
  mln: '0xd8f8a53945bcfbbc19da162aa405e662ef71c40d',
19
+ ohm: '0x71a53aff36a699110d66d6bdfff2320caf8d2d59',
19
20
  rep: '0xc6a043b07d33b6f30d8cb501026c391cfd25abe1',
20
21
  ren: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
22
+ susd: '0xa5f7a39e55d7878bc5bd754ee5d6bd7a7662355b',
23
+ sohm: '0xf280f037cdbda99727ddf5dfede91e68fa78605c',
21
24
  uni: '0x47173b170c64d16393a52e6c480b3ad8c302ba1e',
22
25
  usdc: '0xae2d4617c862309a3d75a0ffb358c7a5009c673f',
23
26
  usdt: '0x5041ed759dd4afc3a72b8192c143f72f4724081a',
24
27
  weth: '0xe08A8b19e5722a201EaF20A6BC595eF655397bd5',
25
28
  zrx: '0x206376e8940e42538781cd94ef024df3c1e0fd43',
26
- cbat: '0x285306442cd985cab2c30515cfdab106fca7bc44',
29
+ // aTokens
30
+ ausdc: '0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296',
31
+ ausdt: '0x7d6149ad9a573a6e2ca6ebf7d4897c1b766841b4',
32
+ // cTokens
27
33
  ccomp: '0xd74f186194ab9219fafac5c2fe4b3270169666db',
28
- cdai: '0x2bddEd18E2CA464355091266B7616956944ee7eE',
34
+ cdai: '0xab4ce310054a11328685ece1043211b68ba5d082',
29
35
  ceth: '0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8',
30
- crep: '0xc2386de1b7271a87b416f4605d500846e826a185',
31
- cuni: '0x8889ff5b6323e71c28c26d2c34b8bb52654f00a6',
32
- cusdc: '0xb3bd459e0598dde1fe84b1d0a1430be175b5d5be',
33
- czrx: '0x57ca561798413a20508b6bc997481e784f3e6e5f',
36
+ cuni: '0x39d8014b4f40d2cbc441137011d32023f4f1fd87',
37
+ cusdc: '0xe1ed4da4284924ddaf69983b4d813fb1be58c380',
38
+ // fTokens
39
+ fdai7: '0x88884e35d7006ae84efef09ee6bc6a43dd8e2bb8',
40
+ feth7: '0xcd2ba6a4d50745b0b4096186f925115387852c15',
41
+ fdai8: '0x93f3f612a525a59523e91cc5552f718df9fc0746',
42
+ ftribe8: '0xdb5ac83c137321da29a59a7592232bc4ed461730',
43
+ // ptTokens
44
+ ptUsdc: '0xd18236cd213f39d078177b6f6908f0e44e88e4aa',
45
+ // synths (unsupported)
34
46
  seth: '0xc34a7c65aa08cb36744bda8eeec7b8e9891e147c',
35
- seur: '0xe896e539e557bc751860a7763c8dd589af1698ce',
36
- susd: '0x49BE88F0fcC3A8393a59d3688480d7D253C37D2A',
47
+ sxag: '0x40d68c490bf7262ec40048099aec23535f734be2',
48
+ sxau: '0x92eb453b7b5b8d41edb44e2c8b8b53eb70a482c7',
49
+ // misc
37
50
  lidoSteth: '0x31f644e2dd5d74f5c8d6d9de89dd517474d51800',
38
- eurs: '0x98ed26de6451db36246672df78ae7c50f2c76f6d',
39
- idle: '0x34aaa3d5a73d6f9594326d0422ce69748f09b14f',
51
+ ust: '0xf584f8728b874a6a5c7a8d4d387c9aae9172d621',
52
+ // Curve steth pool related
53
+ stecrv: '0x56c915758ad3f76fd287fff7563ee313142fb663',
40
54
  } as const;
55
+ /* eslint-enable sort-keys-fix/sort-keys-fix */
41
56
 
42
57
  export type Whale = keyof typeof whales;
43
58
  export type WhaleSigners<T extends Partial<Whale> = Whale> = Record<T, SignerWithAddress>;
@@ -45,12 +60,14 @@ export type WhaleSigners<T extends Partial<Whale> = Whale> = Record<T, SignerWit
45
60
  export async function unlockWhale(token: Whale) {
46
61
  const address = resolveAddress(whales[token]);
47
62
  await provider.send('hardhat_impersonateAccount', [address]);
63
+
48
64
  return provider.getSignerWithAddress(address);
49
65
  }
50
66
 
51
67
  export async function unlockAllWhales() {
52
68
  const keys = Object.keys(whales) as Whale[];
53
69
  const signers = await Promise.all(keys.map(async (token) => unlockWhale(token)));
70
+
54
71
  return keys.reduce((carry, key, index) => {
55
72
  return { ...carry, [key]: signers[index] };
56
73
  }, {} as WhaleSigners);
@@ -58,6 +75,7 @@ export async function unlockAllWhales() {
58
75
 
59
76
  export async function unlockWhales<T extends Whale>(...tokens: T[]) {
60
77
  const signers = await Promise.all(tokens.map(async (token) => unlockWhale(token)));
78
+
61
79
  return tokens.reduce((carry, key, index) => {
62
80
  return { ...carry, [key]: signers[index] };
63
81
  }, {} as WhaleSigners<T>);