@enzymefinance/testutils 4.0.0 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. package/dist/index.d.ts +1566 -0
  2. package/dist/index.js +3375 -0
  3. package/dist/index.mjs +3375 -0
  4. package/package.json +74 -11
  5. package/CHANGELOG.md +0 -84
  6. package/dist/declarations/src/assertions.d.ts +0 -4
  7. package/dist/declarations/src/deployment.d.ts +0 -188
  8. package/dist/declarations/src/gasRelayer.d.ts +0 -56
  9. package/dist/declarations/src/helpers.d.ts +0 -16
  10. package/dist/declarations/src/index.d.ts +0 -6
  11. package/dist/declarations/src/scaffolding/assets.d.ts +0 -10
  12. package/dist/declarations/src/scaffolding/chainlink.d.ts +0 -3
  13. package/dist/declarations/src/scaffolding/common.d.ts +0 -7
  14. package/dist/declarations/src/scaffolding/core.d.ts +0 -16
  15. package/dist/declarations/src/scaffolding/extensions/common.d.ts +0 -11
  16. package/dist/declarations/src/scaffolding/extensions/external-positions/aave-debt.d.ts +0 -51
  17. package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +0 -36
  18. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +0 -56
  19. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +0 -5
  20. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +0 -56
  21. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +0 -100
  22. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +0 -12
  23. package/dist/declarations/src/scaffolding/extensions/index.d.ts +0 -5
  24. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +0 -20
  25. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +0 -56
  26. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +0 -106
  27. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +0 -28
  28. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +0 -14
  29. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +0 -32
  30. package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +0 -17
  31. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +0 -23
  32. package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +0 -29
  33. package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +0 -28
  34. package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +0 -15
  35. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +0 -46
  36. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +0 -15
  37. package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +0 -22
  38. package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +0 -12
  39. package/dist/declarations/src/scaffolding/extensions/policies.d.ts +0 -17
  40. package/dist/declarations/src/scaffolding/index.d.ts +0 -8
  41. package/dist/declarations/src/scaffolding/setup.d.ts +0 -77
  42. package/dist/declarations/src/scaffolding/shares.d.ts +0 -35
  43. package/dist/declarations/src/scaffolding/vaultCalls.d.ts +0 -32
  44. package/dist/declarations/src/whales.d.ts +0 -49
  45. package/dist/enzymefinance-testutils.browser.cjs.js +0 -4158
  46. package/dist/enzymefinance-testutils.browser.esm.js +0 -4028
  47. package/dist/enzymefinance-testutils.cjs.d.ts +0 -1
  48. package/dist/enzymefinance-testutils.cjs.dev.js +0 -4158
  49. package/dist/enzymefinance-testutils.cjs.js +0 -7
  50. package/dist/enzymefinance-testutils.cjs.prod.js +0 -4158
  51. package/dist/enzymefinance-testutils.esm.js +0 -4028
  52. package/src/assertions.ts +0 -23
  53. package/src/deployment.ts +0 -280
  54. package/src/gasRelayer.ts +0 -95
  55. package/src/helpers.ts +0 -39
  56. package/src/index.ts +0 -6
  57. package/src/scaffolding/assets.ts +0 -37
  58. package/src/scaffolding/chainlink.ts +0 -8
  59. package/src/scaffolding/common.ts +0 -11
  60. package/src/scaffolding/core.ts +0 -103
  61. package/src/scaffolding/extensions/common.ts +0 -30
  62. package/src/scaffolding/extensions/external-positions/aave-debt.ts +0 -179
  63. package/src/scaffolding/extensions/external-positions/actions.ts +0 -108
  64. package/src/scaffolding/extensions/external-positions/compound.ts +0 -190
  65. package/src/scaffolding/extensions/external-positions/index.ts +0 -5
  66. package/src/scaffolding/extensions/external-positions/mocks.ts +0 -191
  67. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +0 -284
  68. package/src/scaffolding/extensions/fees.ts +0 -70
  69. package/src/scaffolding/extensions/index.ts +0 -5
  70. package/src/scaffolding/extensions/integrations/aave.ts +0 -78
  71. package/src/scaffolding/extensions/integrations/compound.ts +0 -255
  72. package/src/scaffolding/extensions/integrations/curve.ts +0 -354
  73. package/src/scaffolding/extensions/integrations/idle.ts +0 -104
  74. package/src/scaffolding/extensions/integrations/index.ts +0 -14
  75. package/src/scaffolding/extensions/integrations/mock.ts +0 -116
  76. package/src/scaffolding/extensions/integrations/olympusV2.ts +0 -71
  77. package/src/scaffolding/extensions/integrations/paraSwapV5.ts +0 -73
  78. package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +0 -117
  79. package/src/scaffolding/extensions/integrations/synthetix.ts +0 -111
  80. package/src/scaffolding/extensions/integrations/trackedAssets.ts +0 -48
  81. package/src/scaffolding/extensions/integrations/uniswapV2.ts +0 -175
  82. package/src/scaffolding/extensions/integrations/uniswapV3.ts +0 -55
  83. package/src/scaffolding/extensions/integrations/yearn.ts +0 -79
  84. package/src/scaffolding/extensions/integrations/zeroExV2.ts +0 -47
  85. package/src/scaffolding/extensions/policies.ts +0 -112
  86. package/src/scaffolding/index.ts +0 -8
  87. package/src/scaffolding/setup.ts +0 -243
  88. package/src/scaffolding/shares.ts +0 -80
  89. package/src/scaffolding/vaultCalls.ts +0 -105
  90. package/src/types.d.ts +0 -2
  91. package/src/whales.ts +0 -82
  92. package/tsconfig.json +0 -5
@@ -1,112 +0,0 @@
1
- import { IPolicy, PolicyHook, policyManagerConfigArgs } from '@enzymefinance/protocol';
2
- import type { Signer } from 'ethers';
3
- import { constants, utils } from 'ethers';
4
-
5
- // Policy Manager
6
-
7
- export async function generatePolicyManagerConfigWithMockPolicies({ deployer }: { deployer: Signer }) {
8
- const policies = Object.values(
9
- await generateMockPolicies({
10
- deployer,
11
- }),
12
- );
13
-
14
- // Guarantees one policy has settings data
15
- const policiesSettingsData = [...new Array(policies.length - 1).fill(constants.HashZero), utils.randomBytes(10)];
16
-
17
- return policyManagerConfigArgs({
18
- policies,
19
- settings: policiesSettingsData,
20
- });
21
- }
22
-
23
- export async function generateMockPolicies({ deployer }: { deployer: Signer }) {
24
- // Create mock policies
25
- const mockAddTrackedAssetsPolicy = await IPolicy.mock(deployer);
26
- const mockCreateExternalPositionPolicy = await IPolicy.mock(deployer);
27
- const mockPostBuySharesPolicy = await IPolicy.mock(deployer);
28
- const mockPostCallOnExternalPositionPolicy = await IPolicy.mock(deployer);
29
- const mockPostCoIPolicy = await IPolicy.mock(deployer);
30
- const mockRedeemSharesForSpecificAssetsPolicy = await IPolicy.mock(deployer);
31
- const mockPreTransferSharesPolicy = await IPolicy.mock(deployer);
32
- const mockRemoveExternalPositionPolicy = await IPolicy.mock(deployer);
33
-
34
- // Initialize mock policy return values
35
- await Promise.all([
36
- // AddTrackedAssets
37
- mockAddTrackedAssetsPolicy.identifier.returns(`MOCK_ADD_TRACKED_ASSETS`),
38
- mockAddTrackedAssetsPolicy.addFundSettings.returns(undefined),
39
- mockAddTrackedAssetsPolicy.activateForFund.returns(undefined),
40
- mockAddTrackedAssetsPolicy.canDisable.returns(false),
41
- mockAddTrackedAssetsPolicy.validateRule.returns(true),
42
- mockAddTrackedAssetsPolicy.implementedHooks.returns([PolicyHook.AddTrackedAssets]),
43
- mockAddTrackedAssetsPolicy.updateFundSettings.returns(undefined),
44
- // CreateExternalPosition
45
- mockCreateExternalPositionPolicy.identifier.returns(`MOCK_CREATE_EXTERNAL_POSITION`),
46
- mockCreateExternalPositionPolicy.addFundSettings.returns(undefined),
47
- mockCreateExternalPositionPolicy.activateForFund.returns(undefined),
48
- mockCreateExternalPositionPolicy.canDisable.returns(false),
49
- mockCreateExternalPositionPolicy.validateRule.returns(true),
50
- mockCreateExternalPositionPolicy.implementedHooks.returns([PolicyHook.CreateExternalPosition]),
51
- mockCreateExternalPositionPolicy.updateFundSettings.returns(undefined),
52
- // PostBuyShares
53
- mockPostBuySharesPolicy.identifier.returns(`MOCK_POST_BUY_SHARES`),
54
- mockPostBuySharesPolicy.addFundSettings.returns(undefined),
55
- mockPostBuySharesPolicy.activateForFund.returns(undefined),
56
- mockPostBuySharesPolicy.canDisable.returns(false),
57
- mockPostBuySharesPolicy.validateRule.returns(true),
58
- mockPostBuySharesPolicy.implementedHooks.returns([PolicyHook.PostBuyShares]),
59
- mockPostBuySharesPolicy.updateFundSettings.returns(undefined),
60
- // PostCallOnExternalPosition
61
- mockPostCallOnExternalPositionPolicy.identifier.returns(`MOCK_POST_CALL_ON_EXTERNAL_POSITION`),
62
- mockPostCallOnExternalPositionPolicy.addFundSettings.returns(undefined),
63
- mockPostCallOnExternalPositionPolicy.activateForFund.returns(undefined),
64
- mockPostCallOnExternalPositionPolicy.canDisable.returns(false),
65
- mockPostCallOnExternalPositionPolicy.validateRule.returns(true),
66
- mockPostCallOnExternalPositionPolicy.implementedHooks.returns([PolicyHook.PostCallOnExternalPosition]),
67
- mockPostCallOnExternalPositionPolicy.updateFundSettings.returns(undefined),
68
- // PostCallOnIntegration
69
- mockPostCoIPolicy.identifier.returns(`MOCK_POST_CALL_ON_INTEGRATION`),
70
- mockPostCoIPolicy.addFundSettings.returns(undefined),
71
- mockPostCoIPolicy.activateForFund.returns(undefined),
72
- mockPostCoIPolicy.canDisable.returns(false),
73
- mockPostCoIPolicy.validateRule.returns(true),
74
- mockPostCoIPolicy.implementedHooks.returns([PolicyHook.PostCallOnIntegration]),
75
- mockPostCoIPolicy.updateFundSettings.returns(undefined),
76
- // PreTransferSharesPolicy
77
- mockPreTransferSharesPolicy.identifier.returns(`MOCK_PRE_TRANSFER_SHARES`),
78
- mockPreTransferSharesPolicy.addFundSettings.returns(undefined),
79
- mockPreTransferSharesPolicy.activateForFund.returns(undefined),
80
- mockPreTransferSharesPolicy.canDisable.returns(false),
81
- mockPreTransferSharesPolicy.validateRule.returns(true),
82
- mockPreTransferSharesPolicy.implementedHooks.returns([PolicyHook.PreTransferShares]),
83
- mockPreTransferSharesPolicy.updateFundSettings.returns(undefined),
84
- // RedeemSharesForSpecificAssets
85
- mockRedeemSharesForSpecificAssetsPolicy.identifier.returns(`MOCK_REDEEM_SHARES_FOR_SPECIFIC_ASSETS`),
86
- mockRedeemSharesForSpecificAssetsPolicy.addFundSettings.returns(undefined),
87
- mockRedeemSharesForSpecificAssetsPolicy.activateForFund.returns(undefined),
88
- mockRedeemSharesForSpecificAssetsPolicy.canDisable.returns(false),
89
- mockRedeemSharesForSpecificAssetsPolicy.validateRule.returns(true),
90
- mockRedeemSharesForSpecificAssetsPolicy.implementedHooks.returns([PolicyHook.RedeemSharesForSpecificAssets]),
91
- mockRedeemSharesForSpecificAssetsPolicy.updateFundSettings.returns(undefined),
92
- // RemoveExternalPosition
93
- mockRemoveExternalPositionPolicy.identifier.returns(`MOCK_REMOVE_EXTERNAL_POSITION`),
94
- mockRemoveExternalPositionPolicy.addFundSettings.returns(undefined),
95
- mockRemoveExternalPositionPolicy.activateForFund.returns(undefined),
96
- mockRemoveExternalPositionPolicy.canDisable.returns(false),
97
- mockRemoveExternalPositionPolicy.validateRule.returns(true),
98
- mockRemoveExternalPositionPolicy.implementedHooks.returns([PolicyHook.RedeemSharesForSpecificAssets]),
99
- mockRemoveExternalPositionPolicy.updateFundSettings.returns(undefined),
100
- ]);
101
-
102
- return {
103
- mockAddTrackedAssetsPolicy,
104
- mockCreateExternalPositionPolicy,
105
- mockPostBuySharesPolicy,
106
- mockPostCallOnExternalPositionPolicy,
107
- mockPostCoIPolicy,
108
- mockPreTransferSharesPolicy,
109
- mockRedeemSharesForSpecificAssetsPolicy,
110
- mockRemoveExternalPositionPolicy,
111
- };
112
- }
@@ -1,8 +0,0 @@
1
- export * from './assets';
2
- export * from './chainlink';
3
- export * from './common';
4
- export * from './core';
5
- export * from './extensions';
6
- export * from './setup';
7
- export * from './shares';
8
- export * from './vaultCalls';
@@ -1,243 +0,0 @@
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';
5
- import {
6
- ComptrollerLib,
7
- ComptrollerProxy,
8
- encodeFunctionData,
9
- GasRelayPaymasterLib,
10
- VaultLib,
11
- VaultProxy,
12
- } from '@enzymefinance/protocol';
13
- import type { BigNumberish, BytesLike } from 'ethers';
14
- import { BigNumber, utils } from 'ethers';
15
-
16
- import { assertEvent } from '../assertions';
17
- import type { BuySharesParams } from './shares';
18
- import { buyShares } from './shares';
19
-
20
- export type InitialInvestmentParams = Omit<BuySharesParams, 'comptrollerProxy' | 'denominationAsset'>;
21
-
22
- export interface CreateMigrationRequestParams {
23
- signer: SignerWithAddress;
24
- fundDeployer: FundDeployer;
25
- vaultProxy: AddressLike;
26
- denominationAsset: AddressLike;
27
- sharesActionTimelock?: BigNumberish;
28
- feeManagerConfigData?: BytesLike;
29
- policyManagerConfigData?: BytesLike;
30
- bypassPrevReleaseFailure?: boolean;
31
- }
32
-
33
- export interface CreateNewFundParams {
34
- signer: SignerWithAddress;
35
- fundDeployer: FundDeployer;
36
- denominationAsset: StandardToken;
37
- sharesActionTimelock?: BigNumberish;
38
- fundOwner?: AddressLike;
39
- fundName?: string;
40
- fundSymbol?: string;
41
- feeManagerConfig?: BytesLike;
42
- policyManagerConfig?: BytesLike;
43
- investment?: InitialInvestmentParams;
44
- }
45
-
46
- export interface CreateReconfigurationRequestParams {
47
- signer: SignerWithAddress;
48
- fundDeployer: FundDeployer;
49
- vaultProxy: AddressLike;
50
- denominationAsset: AddressLike;
51
- sharesActionTimelock?: BigNumberish;
52
- feeManagerConfigData?: BytesLike;
53
- policyManagerConfigData?: BytesLike;
54
- }
55
-
56
- export async function createComptrollerProxy({
57
- signer,
58
- comptrollerLib,
59
- denominationAsset,
60
- sharesActionTimelock = 0,
61
- }: {
62
- signer: SignerWithAddress;
63
- comptrollerLib: ComptrollerLib;
64
- denominationAsset: AddressLike;
65
- sharesActionTimelock?: BigNumberish;
66
- }) {
67
- const constructData = encodeFunctionData(comptrollerLib.init.fragment, [denominationAsset, sharesActionTimelock]);
68
-
69
- const comptrollerProxyContract = await ComptrollerProxy.deploy(signer, constructData, comptrollerLib);
70
-
71
- return {
72
- comptrollerProxy: new ComptrollerLib(comptrollerProxyContract, signer),
73
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
74
- receipt: comptrollerProxyContract.deployment!,
75
- };
76
- }
77
-
78
- export async function createMigrationRequest({
79
- signer,
80
- fundDeployer,
81
- vaultProxy,
82
- denominationAsset,
83
- sharesActionTimelock = 0,
84
- feeManagerConfigData = '0x',
85
- policyManagerConfigData = '0x',
86
- bypassPrevReleaseFailure = false,
87
- }: CreateMigrationRequestParams) {
88
- const receipt = await fundDeployer
89
- .connect(signer)
90
- .createMigrationRequest(
91
- vaultProxy,
92
- denominationAsset,
93
- sharesActionTimelock,
94
- feeManagerConfigData,
95
- policyManagerConfigData,
96
- bypassPrevReleaseFailure,
97
- );
98
-
99
- const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
100
- comptrollerProxy: expect.any(String) as string,
101
- creator: signer,
102
- denominationAsset,
103
- sharesActionTimelock: BigNumber.from(sharesActionTimelock),
104
- });
105
-
106
- return {
107
- comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
108
- receipt,
109
- };
110
- }
111
-
112
- // TODO: should we pass in the fundOwner as a signer also so we can connect comptroller proxy and vault proxy to that acct instead?
113
- export async function createNewFund({
114
- signer,
115
- fundDeployer,
116
- denominationAsset,
117
- sharesActionTimelock = 0,
118
- fundOwner = randomAddress(),
119
- fundName = 'My Fund',
120
- fundSymbol = '',
121
- feeManagerConfig = '0x',
122
- policyManagerConfig = '0x',
123
- investment,
124
- }: CreateNewFundParams) {
125
- const receipt = await fundDeployer
126
- .connect(signer)
127
- .createNewFund(
128
- fundOwner,
129
- fundName,
130
- fundSymbol,
131
- denominationAsset,
132
- sharesActionTimelock,
133
- feeManagerConfig,
134
- policyManagerConfig,
135
- );
136
-
137
- const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
138
- comptrollerProxy: expect.any(String) as string,
139
- creator: signer,
140
- denominationAsset,
141
- sharesActionTimelock: BigNumber.from(sharesActionTimelock),
142
- });
143
-
144
- const comptrollerProxy = new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer);
145
-
146
- const newFundDeployedArgs = assertEvent(receipt, 'NewFundCreated', {
147
- comptrollerProxy,
148
- creator: signer,
149
- vaultProxy: expect.any(String) as string,
150
- });
151
-
152
- const vaultProxy = new VaultLib(newFundDeployedArgs.vaultProxy, signer);
153
-
154
- if (investment != null) {
155
- await buyShares({
156
- comptrollerProxy,
157
- denominationAsset,
158
- ...investment,
159
- });
160
- }
161
-
162
- return {
163
- comptrollerProxy,
164
- receipt,
165
- vaultProxy,
166
- };
167
- }
168
-
169
- export async function createReconfigurationRequest({
170
- signer,
171
- fundDeployer,
172
- vaultProxy,
173
- denominationAsset,
174
- sharesActionTimelock = 0,
175
- feeManagerConfigData = '0x',
176
- policyManagerConfigData = '0x',
177
- }: CreateReconfigurationRequestParams) {
178
- const receipt = await fundDeployer
179
- .connect(signer)
180
- .createReconfigurationRequest(
181
- vaultProxy,
182
- denominationAsset,
183
- sharesActionTimelock,
184
- feeManagerConfigData,
185
- policyManagerConfigData,
186
- );
187
-
188
- const comptrollerDeployedArgs = assertEvent(receipt, 'ComptrollerProxyDeployed', {
189
- comptrollerProxy: expect.any(String) as string,
190
- creator: signer,
191
- denominationAsset,
192
- sharesActionTimelock: BigNumber.from(sharesActionTimelock),
193
- });
194
-
195
- return {
196
- comptrollerProxy: new ComptrollerLib(comptrollerDeployedArgs.comptrollerProxy, signer),
197
- receipt,
198
- };
199
- }
200
-
201
- export async function createVaultProxy({
202
- signer,
203
- vaultLib,
204
- fundOwner,
205
- fundAccessor,
206
- fundName = 'My Fund',
207
- }: {
208
- signer: SignerWithAddress;
209
- vaultLib: VaultLib;
210
- fundOwner: AddressLike;
211
- fundAccessor: SignerWithAddress;
212
- fundName?: string;
213
- }) {
214
- const constructData = encodeFunctionData(vaultLib.init.fragment, [fundOwner, fundAccessor, fundName]);
215
-
216
- const vaultProxyContract = await VaultProxy.deploy(signer, constructData, vaultLib);
217
-
218
- return new VaultLib(vaultProxyContract, fundAccessor);
219
- }
220
-
221
- export async function setupGasRelayerPaymaster({
222
- signer,
223
- vaultProxy,
224
- fundAccessor,
225
- weth,
226
- startingBalance = utils.parseUnits('10', 18),
227
- }: {
228
- signer: SignerWithAddress;
229
- vaultProxy: AddressLike;
230
- fundAccessor: AddressLike;
231
- weth: StandardToken;
232
- startingBalance?: BigNumberish;
233
- }) {
234
- await weth.transfer(vaultProxy, startingBalance);
235
- const comptrollerProxy = new ComptrollerLib(fundAccessor, signer);
236
- const receipt = await comptrollerProxy.deployGasRelayPaymaster();
237
-
238
- const eventArgs = assertEvent(receipt, 'GasRelayPaymasterSet', {
239
- gasRelayPaymaster: expect.any(String) as string,
240
- });
241
-
242
- return new GasRelayPaymasterLib(eventArgs.gasRelayPaymaster, signer);
243
- }
@@ -1,80 +0,0 @@
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';
6
-
7
- export interface BuySharesParams {
8
- comptrollerProxy: ComptrollerLib;
9
- denominationAsset: StandardToken;
10
- buyer: SignerWithAddress;
11
- investmentAmount?: BigNumberish;
12
- minSharesQuantity?: BigNumberish;
13
- seedBuyer?: boolean;
14
- }
15
-
16
- export interface RedeemSharesForSpecificAssetsParams {
17
- comptrollerProxy: ComptrollerLib;
18
- signer: SignerWithAddress;
19
- recipient?: AddressLike;
20
- quantity?: BigNumberish;
21
- payoutAssets: AddressLike[];
22
- payoutAssetPercentages: BigNumberish[];
23
- }
24
-
25
- export interface RedeemSharesInKindParams {
26
- comptrollerProxy: ComptrollerLib;
27
- signer: SignerWithAddress;
28
- recipient?: AddressLike;
29
- quantity?: BigNumberish;
30
- additionalAssets?: AddressLike[];
31
- assetsToSkip?: AddressLike[];
32
- }
33
-
34
- export async function buyShares(options: BuySharesParams) {
35
- return (await buySharesFunction(options)).send();
36
- }
37
-
38
- export async function buySharesFunction({
39
- comptrollerProxy,
40
- denominationAsset,
41
- buyer,
42
- investmentAmount,
43
- minSharesQuantity = 1,
44
- seedBuyer = false,
45
- }: BuySharesParams) {
46
- if (investmentAmount == undefined) {
47
- investmentAmount = utils.parseUnits('1', await denominationAsset.decimals());
48
- }
49
- if (seedBuyer) {
50
- await denominationAsset.transfer(buyer, investmentAmount);
51
- }
52
-
53
- await denominationAsset.connect(buyer).approve(comptrollerProxy, investmentAmount);
54
-
55
- return comptrollerProxy.connect(buyer).buyShares.args(investmentAmount, minSharesQuantity).ref;
56
- }
57
-
58
- export async function redeemSharesForSpecificAssets({
59
- comptrollerProxy,
60
- signer,
61
- recipient = signer,
62
- quantity = constants.MaxUint256,
63
- payoutAssets,
64
- payoutAssetPercentages,
65
- }: RedeemSharesForSpecificAssetsParams) {
66
- return comptrollerProxy
67
- .connect(signer)
68
- .redeemSharesForSpecificAssets(recipient, quantity, payoutAssets, payoutAssetPercentages);
69
- }
70
-
71
- export async function redeemSharesInKind({
72
- comptrollerProxy,
73
- signer,
74
- recipient = signer,
75
- quantity = constants.MaxUint256,
76
- additionalAssets = [],
77
- assetsToSkip = [],
78
- }: RedeemSharesInKindParams) {
79
- return comptrollerProxy.connect(signer).redeemSharesInKind(recipient, quantity, additionalAssets, assetsToSkip);
80
- }
@@ -1,105 +0,0 @@
1
- import type { AddressLike } from '@enzymefinance/ethers';
2
- import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
- import type { AddressListRegistry, AddressListUpdateType, ComptrollerLib } from '@enzymefinance/protocol';
4
- import {
5
- addressListRegistryCreateListSelector,
6
- curveMinterMintManySelector,
7
- curveMinterMintSelector,
8
- curveMinterToggleApproveMintSelector,
9
- encodeArgs,
10
- sighash,
11
- } from '@enzymefinance/protocol';
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
- }
41
-
42
- export function vaultCallCurveMinterMint({
43
- comptrollerProxy,
44
- minter,
45
- gauge,
46
- }: {
47
- comptrollerProxy: ComptrollerLib;
48
- minter: AddressLike;
49
- gauge: AddressLike;
50
- }) {
51
- return comptrollerProxy.vaultCallOnContract(minter, curveMinterMintSelector, encodeArgs(['address'], [gauge]));
52
- }
53
-
54
- export function vaultCallCurveMinterMintMany({
55
- comptrollerProxy,
56
- minter,
57
- gauges,
58
- }: {
59
- comptrollerProxy: ComptrollerLib;
60
- minter: AddressLike;
61
- gauges: AddressLike[];
62
- }) {
63
- const gaugesFormatted = new Array(8).fill(constants.AddressZero);
64
- for (const i in gauges) {
65
- gaugesFormatted[i] = gauges[i];
66
- }
67
-
68
- return comptrollerProxy.vaultCallOnContract(
69
- minter,
70
- curveMinterMintManySelector,
71
- encodeArgs(['address[8]'], [gaugesFormatted]),
72
- );
73
- }
74
-
75
- export function vaultCallCurveMinterToggleApproveMint({
76
- comptrollerProxy,
77
- minter,
78
- account,
79
- }: {
80
- comptrollerProxy: ComptrollerLib;
81
- minter: AddressLike;
82
- account: AddressLike;
83
- }) {
84
- return comptrollerProxy.vaultCallOnContract(
85
- minter,
86
- curveMinterToggleApproveMintSelector,
87
- encodeArgs(['address'], [account]),
88
- );
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/types.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import '@enzymefinance/hardhat/types';
2
- import 'hardhat-deploy/dist/src/type-extensions';
package/src/whales.ts DELETED
@@ -1,82 +0,0 @@
1
- import { resolveAddress } from '@enzymefinance/ethers';
2
- import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
-
4
- /* eslint-disable sort-keys-fix/sort-keys-fix */
5
- const whales = {
6
- // primitives
7
- bat: '0x12274c71304bc0e6b38a56b94d2949b118feb838',
8
- bnb: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
9
- bnt: '0x7d1ed1601a12a172269436fa95fe156650603c1d',
10
- busd: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
11
- comp: '0x0f50d31b3eaefd65236dd3736b863cffa4c63c4e',
12
- crv: '0x4ce799e6eD8D64536b67dD428565d52A531B3640',
13
- dai: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
14
- knc: '0x09d51654bd9efbfcb56da3491989cc1444095fff',
15
- ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
16
- link: '0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6',
17
- mana: '0xefb94ac00f1cee8a89d5c3f49faa799da6f03024',
18
- mln: '0xd8f8a53945bcfbbc19da162aa405e662ef71c40d',
19
- ohm: '0x71a53aff36a699110d66d6bdfff2320caf8d2d59',
20
- rep: '0xc6a043b07d33b6f30d8cb501026c391cfd25abe1',
21
- ren: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
22
- susd: '0xa5f7a39e55d7878bc5bd754ee5d6bd7a7662355b',
23
- sohm: '0xf280f037cdbda99727ddf5dfede91e68fa78605c',
24
- uni: '0x47173b170c64d16393a52e6c480b3ad8c302ba1e',
25
- usdc: '0xae2d4617c862309a3d75a0ffb358c7a5009c673f',
26
- usdt: '0x5041ed759dd4afc3a72b8192c143f72f4724081a',
27
- weth: '0xe08A8b19e5722a201EaF20A6BC595eF655397bd5',
28
- zrx: '0x206376e8940e42538781cd94ef024df3c1e0fd43',
29
- // aTokens
30
- ausdc: '0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296',
31
- ausdt: '0x7d6149ad9a573a6e2ca6ebf7d4897c1b766841b4',
32
- // cTokens
33
- ccomp: '0xd74f186194ab9219fafac5c2fe4b3270169666db',
34
- cdai: '0xab4ce310054a11328685ece1043211b68ba5d082',
35
- ceth: '0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8',
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)
46
- seth: '0xc34a7c65aa08cb36744bda8eeec7b8e9891e147c',
47
- sxag: '0x40d68c490bf7262ec40048099aec23535f734be2',
48
- sxau: '0x92eb453b7b5b8d41edb44e2c8b8b53eb70a482c7',
49
- // misc
50
- lidoSteth: '0x31f644e2dd5d74f5c8d6d9de89dd517474d51800',
51
- ust: '0xf584f8728b874a6a5c7a8d4d387c9aae9172d621',
52
- // Curve steth pool related
53
- stecrv: '0x56c915758ad3f76fd287fff7563ee313142fb663',
54
- } as const;
55
- /* eslint-enable sort-keys-fix/sort-keys-fix */
56
-
57
- export type Whale = keyof typeof whales;
58
- export type WhaleSigners<T extends Partial<Whale> = Whale> = Record<T, SignerWithAddress>;
59
-
60
- export async function unlockWhale(token: Whale) {
61
- const address = resolveAddress(whales[token]);
62
- await provider.send('hardhat_impersonateAccount', [address]);
63
-
64
- return provider.getSignerWithAddress(address);
65
- }
66
-
67
- export async function unlockAllWhales() {
68
- const keys = Object.keys(whales) as Whale[];
69
- const signers = await Promise.all(keys.map(async (token) => unlockWhale(token)));
70
-
71
- return keys.reduce((carry, key, index) => {
72
- return { ...carry, [key]: signers[index] };
73
- }, {} as WhaleSigners);
74
- }
75
-
76
- export async function unlockWhales<T extends Whale>(...tokens: T[]) {
77
- const signers = await Promise.all(tokens.map(async (token) => unlockWhale(token)));
78
-
79
- return tokens.reduce((carry, key, index) => {
80
- return { ...carry, [key]: signers[index] };
81
- }, {} as WhaleSigners<T>);
82
- }
package/tsconfig.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "include": ["src"],
4
- "files": []
5
- }