@enzymefinance/testutils 4.0.0-next.7 → 4.0.2

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 +1553 -0
  2. package/dist/index.js +3352 -0
  3. package/dist/index.mjs +3352 -0
  4. package/package.json +74 -11
  5. package/CHANGELOG.md +0 -60
  6. package/dist/declarations/src/assertions.d.ts +0 -4
  7. package/dist/declarations/src/deployment.d.ts +0 -195
  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/actions.d.ts +0 -36
  17. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +0 -56
  18. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +0 -4
  19. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +0 -56
  20. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +0 -100
  21. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +0 -12
  22. package/dist/declarations/src/scaffolding/extensions/index.d.ts +0 -5
  23. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +0 -20
  24. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +0 -56
  25. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +0 -288
  26. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +0 -28
  27. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +0 -15
  28. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +0 -32
  29. package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +0 -17
  30. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +0 -23
  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 -4428
  46. package/dist/enzymefinance-testutils.browser.esm.js +0 -4281
  47. package/dist/enzymefinance-testutils.cjs.d.ts +0 -1
  48. package/dist/enzymefinance-testutils.cjs.dev.js +0 -4428
  49. package/dist/enzymefinance-testutils.cjs.js +0 -7
  50. package/dist/enzymefinance-testutils.cjs.prod.js +0 -4428
  51. package/dist/enzymefinance-testutils.esm.js +0 -4281
  52. package/src/assertions.ts +0 -23
  53. package/src/deployment.ts +0 -289
  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/actions.ts +0 -108
  63. package/src/scaffolding/extensions/external-positions/compound.ts +0 -190
  64. package/src/scaffolding/extensions/external-positions/index.ts +0 -4
  65. package/src/scaffolding/extensions/external-positions/mocks.ts +0 -191
  66. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +0 -284
  67. package/src/scaffolding/extensions/fees.ts +0 -70
  68. package/src/scaffolding/extensions/index.ts +0 -5
  69. package/src/scaffolding/extensions/integrations/aave.ts +0 -78
  70. package/src/scaffolding/extensions/integrations/compound.ts +0 -255
  71. package/src/scaffolding/extensions/integrations/curve.ts +0 -1029
  72. package/src/scaffolding/extensions/integrations/idle.ts +0 -104
  73. package/src/scaffolding/extensions/integrations/index.ts +0 -15
  74. package/src/scaffolding/extensions/integrations/mock.ts +0 -116
  75. package/src/scaffolding/extensions/integrations/olympusV2.ts +0 -71
  76. package/src/scaffolding/extensions/integrations/paraSwapV4.ts +0 -70
  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
package/src/assertions.ts DELETED
@@ -1,23 +0,0 @@
1
- import type { ContractReceipt } from '@enzymefinance/ethers';
2
- import { extractEvent } from '@enzymefinance/ethers';
3
- import type { utils } from 'ethers';
4
-
5
- export function assertEvent<TResult = any>(
6
- receipt: ContractReceipt<any>,
7
- event: string | utils.EventFragment,
8
- match?: TResult,
9
- ) {
10
- const events = extractEvent(receipt, event);
11
- expect(events.length).toBe(1);
12
- expect(receipt).toHaveEmittedWith(event, match);
13
-
14
- const args = events.shift()?.args;
15
-
16
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
17
- return (args as unknown as typeof match)!;
18
- }
19
-
20
- export function assertNoEvent(receipt: ContractReceipt<any>, event: string | utils.EventFragment) {
21
- const events = extractEvent(receipt, event);
22
- expect(events.length).toBe(0);
23
- }
package/src/deployment.ts DELETED
@@ -1,289 +0,0 @@
1
- import {
2
- AaveAdapter,
3
- AavePriceFeed,
4
- AddressListRegistry,
5
- AllowedAdapterIncomingAssetsPolicy,
6
- AllowedAdaptersPolicy,
7
- AllowedAssetsForRedemptionPolicy,
8
- AllowedDepositRecipientsPolicy,
9
- AllowedExternalPositionTypesPolicy,
10
- AllowedSharesTransferRecipientsPolicy,
11
- CompoundAdapter,
12
- CompoundDebtPositionLib,
13
- CompoundDebtPositionParser,
14
- CompoundPriceFeed,
15
- ComptrollerLib,
16
- ConvexCurveLpStakingAdapter,
17
- ConvexCurveLpStakingWrapperFactory,
18
- ConvexCurveLpStakingWrapperPriceFeed,
19
- CumulativeSlippageTolerancePolicy,
20
- CurveExchangeAdapter,
21
- CurveLiquidityAaveAdapter,
22
- CurveLiquidityAdapter,
23
- CurveLiquiditySethAdapter,
24
- CurveLiquidityStethAdapter,
25
- CurvePriceFeed,
26
- DepositWrapper,
27
- Dispatcher,
28
- EntranceRateBurnFee,
29
- EntranceRateDirectFee,
30
- ExitRateBurnFee,
31
- ExitRateDirectFee,
32
- ExternalPositionFactory,
33
- ExternalPositionManager,
34
- FeeManager,
35
- FundDeployer,
36
- FundValueCalculator,
37
- FundValueCalculatorRouter,
38
- FundValueCalculatorUsdWrapper,
39
- FuseAdapter,
40
- FusePriceFeed,
41
- GasRelayPaymasterFactory,
42
- IdleAdapter,
43
- IdlePriceFeed,
44
- IntegrationManager,
45
- LidoStethPriceFeed,
46
- ManagementFee,
47
- MinAssetBalancesPostRedemptionPolicy,
48
- MinMaxInvestmentPolicy,
49
- OlympusV2Adapter,
50
- OnlyRemoveDustExternalPositionPolicy,
51
- OnlyUntrackDustOrPricelessAssetsPolicy,
52
- ParaSwapV4Adapter,
53
- ParaSwapV5Adapter,
54
- PerformanceFee,
55
- PolicyManager,
56
- PoolTogetherV4Adapter,
57
- PoolTogetherV4PriceFeed,
58
- ProtocolFeeReserveLib,
59
- ProtocolFeeTracker,
60
- RevertingPriceFeed,
61
- StakehoundEthPriceFeed,
62
- SynthetixAdapter,
63
- UniswapV2ExchangeAdapter,
64
- UniswapV2LiquidityAdapter,
65
- UniswapV2PoolPriceFeed,
66
- UniswapV3Adapter,
67
- UnpermissionedActionsWrapper,
68
- ValueInterpreter,
69
- VaultLib,
70
- YearnVaultV2Adapter,
71
- YearnVaultV2PriceFeed,
72
- ZeroExV2Adapter,
73
- } from '@enzymefinance/protocol';
74
-
75
- export async function getNamedSigner(name: string) {
76
- const accounts = await hre.getNamedAccounts();
77
- if (!accounts[name]) {
78
- throw new Error(`Missing account with name ${name}`);
79
- }
80
-
81
- return provider.getSignerWithAddress(accounts[name]);
82
- }
83
-
84
- export async function getUnnamedSigners() {
85
- const accounts = await hre.getUnnamedAccounts();
86
-
87
- return Promise.all(accounts.map((account) => provider.getSignerWithAddress(account)));
88
- }
89
-
90
- export async function deployProtocolFixture() {
91
- const fixture = await hre.deployments.fixture();
92
- const deployer = await getNamedSigner('deployer');
93
- const accounts = await getUnnamedSigners();
94
- const config = fixture['Config'].linkedData as DeploymentConfig;
95
-
96
- // prettier-ignore
97
- const deployment = {
98
- aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
99
- aavePriceFeed: new AavePriceFeed(fixture['AavePriceFeed'].address, deployer),
100
- addressListRegistry: new AddressListRegistry(fixture['AddressListRegistry'].address, deployer),
101
- allowedAdapterIncomingAssetsPolicy: new AllowedAdapterIncomingAssetsPolicy(fixture['AllowedAdapterIncomingAssetsPolicy'].address, deployer),
102
- allowedAdaptersPolicy: new AllowedAdaptersPolicy(fixture['AllowedAdaptersPolicy'].address, deployer),
103
- allowedAssetsForRedemptionPolicy: new AllowedAssetsForRedemptionPolicy(fixture['AllowedAssetsForRedemptionPolicy'].address, deployer),
104
- allowedDepositRecipientsPolicy: new AllowedDepositRecipientsPolicy(fixture['AllowedDepositRecipientsPolicy'].address, deployer),
105
- allowedExternalPositionTypesPolicy: new AllowedExternalPositionTypesPolicy(fixture['AllowedExternalPositionTypesPolicy'].address, deployer),
106
- allowedSharesTransferRecipientsPolicy: new AllowedSharesTransferRecipientsPolicy(fixture['AllowedSharesTransferRecipientsPolicy'].address, deployer),
107
- compoundAdapter: new CompoundAdapter(fixture['CompoundAdapter'].address, deployer),
108
- compoundDebtPositionLib: new CompoundDebtPositionLib(fixture['CompoundDebtPositionLib'].address, deployer),
109
- compoundDebtPositionParser: new CompoundDebtPositionParser(fixture['CompoundDebtPositionParser'].address, deployer),
110
- compoundPriceFeed: new CompoundPriceFeed(fixture['CompoundPriceFeed'].address, deployer),
111
- comptrollerLib: new ComptrollerLib(fixture['ComptrollerLib'].address, deployer),
112
- convexCurveLpStakingAdapter: new ConvexCurveLpStakingAdapter(fixture['ConvexCurveLpStakingAdapter'].address, deployer),
113
- convexCurveLpStakingWrapperFactory: new ConvexCurveLpStakingWrapperFactory(fixture['ConvexCurveLpStakingWrapperFactory'].address, deployer),
114
- convexCurveLpStakingWrapperPriceFeed: new ConvexCurveLpStakingWrapperPriceFeed(fixture['ConvexCurveLpStakingWrapperPriceFeed'].address, deployer),
115
- cumulativeSlippageTolerancePolicy: new CumulativeSlippageTolerancePolicy(fixture['CumulativeSlippageTolerancePolicy'].address, deployer),
116
- curveExchangeAdapter: new CurveExchangeAdapter(fixture['CurveExchangeAdapter'].address, deployer),
117
- curveLiquidityAaveAdapter: new CurveLiquidityAaveAdapter(fixture['CurveLiquidityAaveAdapter'].address, deployer),
118
- curveLiquidityAdapter: new CurveLiquidityAdapter(fixture['CurveLiquidityAdapter'].address, deployer),
119
- curveLiquiditySethAdapter: new CurveLiquiditySethAdapter(fixture['CurveLiquiditySethAdapter'].address, deployer),
120
- curveLiquidityStethAdapter: new CurveLiquidityStethAdapter(fixture['CurveLiquidityStethAdapter'].address, deployer),
121
- curvePriceFeed: new CurvePriceFeed(fixture['CurvePriceFeed'].address, deployer),
122
- depositWrapper: new DepositWrapper(fixture['DepositWrapper'].address, deployer),
123
- dispatcher: new Dispatcher(fixture['Dispatcher'].address, deployer),
124
- entranceRateBurnFee: new EntranceRateBurnFee(fixture['EntranceRateBurnFee'].address, deployer),
125
- entranceRateDirectFee: new EntranceRateDirectFee(fixture['EntranceRateDirectFee'].address, deployer),
126
- exitRateBurnFee: new ExitRateBurnFee(fixture['ExitRateBurnFee'].address, deployer),
127
- exitRateDirectFee: new ExitRateDirectFee(fixture['ExitRateDirectFee'].address, deployer),
128
- externalPositionFactory: new ExternalPositionFactory(fixture['ExternalPositionFactory'].address, deployer),
129
- externalPositionManager: new ExternalPositionManager(fixture['ExternalPositionManager'].address, deployer),
130
- feeManager: new FeeManager(fixture['FeeManager'].address, deployer),
131
- fundDeployer: new FundDeployer(fixture['FundDeployer'].address, deployer),
132
- fundValueCalculator: new FundValueCalculator(fixture['FundValueCalculator'].address, deployer),
133
- fundValueCalculatorRouter: new FundValueCalculatorRouter(fixture['FundValueCalculatorRouter'].address, deployer),
134
- fundValueCalculatorUsdWrapper: new FundValueCalculatorUsdWrapper(fixture['FundValueCalculatorUsdWrapper'].address, deployer),
135
- fuseAdapter: new FuseAdapter(fixture['FuseAdapter'].address, deployer),
136
- fusePriceFeed: new FusePriceFeed(fixture['FusePriceFeed'].address, deployer),
137
- gasRelayPaymasterFactory: new GasRelayPaymasterFactory(fixture['GasRelayPaymasterFactory'].address, deployer),
138
- idleAdapter: new IdleAdapter(fixture['IdleAdapter'].address, deployer),
139
- idlePriceFeed: new IdlePriceFeed(fixture['IdlePriceFeed'].address, deployer),
140
- integrationManager: new IntegrationManager(fixture['IntegrationManager'].address, deployer),
141
- lidoStethPriceFeed: new LidoStethPriceFeed(fixture['LidoStethPriceFeed'].address, deployer),
142
- managementFee: new ManagementFee(fixture['ManagementFee'].address, deployer),
143
- minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
144
- minMaxInvestmentPolicy: new MinMaxInvestmentPolicy(fixture['MinMaxInvestmentPolicy'].address, deployer),
145
- olympusV2Adapter: new OlympusV2Adapter(fixture['OlympusV2Adapter'].address, deployer),
146
- onlyRemoveDustExternalPositionPolicy: new OnlyRemoveDustExternalPositionPolicy(fixture['OnlyRemoveDustExternalPositionPolicy'].address, deployer),
147
- onlyUntrackDustOrPricelessAssetsPolicy: new OnlyUntrackDustOrPricelessAssetsPolicy(fixture['OnlyUntrackDustOrPricelessAssetsPolicy'].address, deployer),
148
- paraSwapV4Adapter: new ParaSwapV4Adapter(fixture['ParaSwapV4Adapter'].address, deployer),
149
- paraSwapV5Adapter: new ParaSwapV5Adapter(fixture['ParaSwapV5Adapter'].address, deployer),
150
- performanceFee: new PerformanceFee(fixture['PerformanceFee'].address, deployer),
151
- policyManager: new PolicyManager(fixture['PolicyManager'].address, deployer),
152
- poolTogetherV4Adapter: new PoolTogetherV4Adapter(fixture['PoolTogetherV4Adapter'].address, deployer),
153
- poolTogetherV4PriceFeed: new PoolTogetherV4PriceFeed(fixture['PoolTogetherV4PriceFeed'].address, deployer),
154
- protocolFeeReserveLib: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveLib'].address, deployer),
155
- protocolFeeReserveProxy: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveProxy'].address, deployer),
156
- protocolFeeTracker: new ProtocolFeeTracker(fixture['ProtocolFeeTracker'].address, deployer),
157
- revertingPriceFeed: new RevertingPriceFeed(fixture['RevertingPriceFeed'].address, deployer),
158
- stakehoundEthPriceFeed: new StakehoundEthPriceFeed(fixture['StakehoundEthPriceFeed'].address, deployer),
159
- synthetixAdapter: new SynthetixAdapter(fixture['SynthetixAdapter'].address, deployer),
160
- uniswapV2ExchangeAdapter: new UniswapV2ExchangeAdapter(fixture['UniswapV2ExchangeAdapter'].address, deployer),
161
- uniswapV2LiquidityAdapter: new UniswapV2LiquidityAdapter(fixture['UniswapV2LiquidityAdapter'].address, deployer),
162
- uniswapV2PoolPriceFeed: new UniswapV2PoolPriceFeed(fixture['UniswapV2PoolPriceFeed'].address, deployer),
163
- uniswapV3Adapter: new UniswapV3Adapter(fixture['UniswapV3Adapter'].address, deployer),
164
- unpermissionedActionsWrapper: new UnpermissionedActionsWrapper(fixture['UnpermissionedActionsWrapper'].address, deployer),
165
- valueInterpreter: new ValueInterpreter(fixture['ValueInterpreter'].address, deployer),
166
- vaultLib: new VaultLib(fixture['VaultLib'].address, deployer),
167
- yearnVaultV2Adapter: new YearnVaultV2Adapter(fixture['YearnVaultV2Adapter'].address, deployer),
168
- yearnVaultV2PriceFeed: new YearnVaultV2PriceFeed(fixture['YearnVaultV2PriceFeed'].address, deployer),
169
- zeroExV2Adapter: new ZeroExV2Adapter(fixture['ZeroExV2Adapter'].address, deployer),
170
- } as const;
171
-
172
- return {
173
- accounts,
174
- config,
175
- deployer,
176
- deployment,
177
- } as const;
178
- }
179
-
180
- type Resolve<T extends () => any> = ReturnType<T> extends Promise<infer U> ? U : ReturnType<T>;
181
-
182
- export type ProtocolDeployment = Resolve<typeof deployProtocolFixture>;
183
-
184
- import type { ChainlinkRateAsset } from '@enzymefinance/protocol';
185
-
186
- export interface DeploymentConfig {
187
- feeToken: string;
188
- feeTokenBurn: {
189
- burnFromVault: boolean;
190
- sendToProtocolFeeReserve: boolean;
191
- externalBurnerAddress: string;
192
- };
193
- weth: string;
194
- wrappedNativeAsset: string;
195
- primitives: Record<string, string>;
196
- gsn: {
197
- relayHub: string;
198
- relayWorker: string;
199
- trustedForwarder: string;
200
- };
201
- chainlink: {
202
- ethusd: string;
203
- aggregators: Record<string, readonly [string, ChainlinkRateAsset]>;
204
- };
205
- synthetix: {
206
- snx: string;
207
- susd: string;
208
- delegateApprovals: string;
209
- originator: string;
210
- redeemer: string;
211
- trackingCode: string;
212
- };
213
- convex: {
214
- booster: string;
215
- crvToken: string;
216
- cvxToken: string;
217
- };
218
- curve: {
219
- addressProvider: string;
220
- minter: string;
221
- pools: Record<string, { pool: string; lpToken: string; liquidityGaugeToken: string; invariantProxyAsset: string }>;
222
- };
223
- aave: {
224
- lendingPoolAddressProvider: string;
225
- protocolDataProvider: string;
226
- atokens: Record<string, [string, string]>;
227
- };
228
- compound: {
229
- ceth: string;
230
- comptroller: string;
231
- ctokens: Record<string, string>;
232
- };
233
- fuse: {
234
- fetherTokens: Record<string, string>;
235
- ftokens: Record<string, string>;
236
- };
237
- idle: {
238
- bestYieldIdleDai: string;
239
- bestYieldIdleUsdc: string;
240
- bestYieldIdleUsdt: string;
241
- bestYieldIdleSusd: string;
242
- bestYieldIdleTusd: string;
243
- bestYieldIdleWbtc: string;
244
- riskAdjustedIdleDai: string;
245
- riskAdjustedIdleUsdc: string;
246
- riskAdjustedIdleUsdt: string;
247
- };
248
- lido: {
249
- steth: string;
250
- };
251
- olympusV2: {
252
- stakingContract: string;
253
- };
254
- paraSwapV4: {
255
- augustusSwapper: string;
256
- tokenTransferProxy: string;
257
- };
258
- paraSwapV5: {
259
- augustusSwapper: string;
260
- tokenTransferProxy: string;
261
- };
262
- poolTogetherV4: {
263
- ptTokens: Record<string, [string, string]>;
264
- };
265
- positionsLimit: number;
266
- stakehound: {
267
- steth: string;
268
- };
269
- unsupportedAssets: Record<string, string>;
270
- uniswap: {
271
- factory: string;
272
- router: string;
273
- pools: Record<string, string>;
274
- };
275
- uniswapV3: {
276
- router: string;
277
- nonFungiblePositionManager: string;
278
- };
279
- yearn: {
280
- vaultV2: {
281
- registry: string;
282
- yVaults: Record<string, string>;
283
- };
284
- };
285
- zeroex: {
286
- exchange: string;
287
- allowedMakers: string[];
288
- };
289
- }
package/src/gasRelayer.ts DELETED
@@ -1,95 +0,0 @@
1
- import type { ContractReceipt } from '@enzymefinance/ethers';
2
- import type { CreateSignedRelayRequestOptions } from '@enzymefinance/protocol';
3
- import { createSignedRelayRequest, IGsnRelayHub, isTypedDataSigner } from '@enzymefinance/protocol';
4
- import type { BigNumberish } from 'ethers';
5
- import { BigNumber, utils } from 'ethers';
6
-
7
- import { assertEvent } from './assertions';
8
-
9
- export interface RelayTransactionOptions extends CreateSignedRelayRequestOptions {
10
- relayHub: string;
11
- }
12
-
13
- export async function relayTransaction(options: RelayTransactionOptions) {
14
- const signer = options.sendFunction.contract.signer;
15
- if (!(signer && isTypedDataSigner(signer))) {
16
- throw new Error('Missing or invalid signer');
17
- }
18
-
19
- const { relayData, relayRequest, signedRelayRequest } = await createSignedRelayRequest(options);
20
-
21
- // NOTE: In the real implementation, we fetch these from the relayer.
22
- const defaultGasLimit = 12450000;
23
- const defaultMaxAcceptance = BigNumber.from(150000);
24
-
25
- // NOTE: There is an inconsistency between how the typed data object shape and the relayCall argument.
26
- const mergedRelayRequest = {
27
- relayData,
28
- request: relayRequest,
29
- };
30
-
31
- const relayHub = new IGsnRelayHub(options.relayHub, provider.getSigner(options.relayWorker));
32
-
33
- return relayHub.relayCall
34
- .args(defaultMaxAcceptance, mergedRelayRequest, signedRelayRequest, '0x', defaultGasLimit)
35
- .gas(defaultGasLimit, relayData.gasPrice)
36
- .send();
37
- }
38
-
39
- const relayed = utils.EventFragment.fromString(
40
- 'TransactionRelayed(address indexed relayManager, address indexed relayWorker, address indexed from, address to, address paymaster, bytes4 selector, uint8 status, uint256 charge)',
41
- );
42
-
43
- const rejected = utils.EventFragment.fromString(
44
- 'TransactionRejectedByPaymaster(address indexed relayManager, address indexed paymaster, address indexed from, address to, address relayWorker, bytes4 selector, uint256 innerGasUsed, bytes reason)',
45
- );
46
-
47
- export function assertDidRelay(receipt: ContractReceipt<any>) {
48
- return assertEvent(receipt, relayed, {
49
- charge: expect.anything(),
50
- from: expect.any(String),
51
- paymaster: expect.any(String),
52
- relayManager: expect.any(String),
53
- relayWorker: expect.any(String),
54
- selector: expect.any(String),
55
- status: expect.anything(),
56
- to: expect.any(String),
57
- });
58
- }
59
-
60
- export function assertDidRelaySuccessfully(receipt: ContractReceipt<any>) {
61
- const result = assertDidRelay(receipt);
62
- expect(result.status).toEqBigNumber(0);
63
- }
64
-
65
- export function assertDidRelayWithError(receipt: ContractReceipt<any>) {
66
- const result = assertDidRelay(receipt);
67
- expect(result.status).toEqBigNumber(1);
68
- }
69
-
70
- export function assertDidRelayWithCharge(
71
- receipt: ContractReceipt<any>,
72
- amount: BigNumberish,
73
- tolerance?: BigNumberish,
74
- ) {
75
- const result = assertDidRelay(receipt);
76
- expect(result.charge).toBeAroundBigNumber(amount, tolerance);
77
- }
78
-
79
- export function assertPaymasterDidReject(receipt: ContractReceipt<any>) {
80
- return assertEvent(receipt, rejected, {
81
- from: expect.any(String),
82
- innerGasUsed: expect.anything(),
83
- paymaster: expect.any(String),
84
- reason: expect.any(String),
85
- relayManager: expect.any(String),
86
- relayWorker: expect.any(String),
87
- selector: expect.any(String),
88
- to: expect.any(String),
89
- });
90
- }
91
-
92
- export function assertPaymasterDidRejectForReason(receipt: ContractReceipt<any>, reason: string) {
93
- const params = assertPaymasterDidReject(receipt);
94
- expect(utils.toUtf8String('0x' + params.reason.substr(138))).toMatch(reason);
95
- }
package/src/helpers.ts DELETED
@@ -1,39 +0,0 @@
1
- import type { AddressLike, ContractReceipt } from '@enzymefinance/ethers';
2
- import type { ValueInterpreter } from '@enzymefinance/protocol';
3
- import type { BigNumberish } from 'ethers';
4
- import { BigNumber, utils } from 'ethers';
5
-
6
- export async function transactionTimestamp(receipt: ContractReceipt<any>) {
7
- const block = await provider.getBlock(receipt.blockNumber);
8
-
9
- return block.timestamp;
10
- }
11
-
12
- export async function calcMlnValueAndBurnAmountForSharesBuyback({
13
- valueInterpreter,
14
- mln,
15
- denominationAsset,
16
- sharesSupply,
17
- gav,
18
- buybackSharesAmount,
19
- }: {
20
- valueInterpreter: ValueInterpreter;
21
- mln: AddressLike;
22
- denominationAsset: AddressLike;
23
- sharesSupply: BigNumberish;
24
- gav: BigNumberish;
25
- buybackSharesAmount: BigNumberish;
26
- }) {
27
- // Calculate expected mlnValue of shares to buyback
28
- // TODO: calcGrossShareValue can also be a helper util
29
- const grossShareValue = BigNumber.from(gav).mul(utils.parseEther('1')).div(sharesSupply);
30
- const denominationAssetValueOfBuyback = grossShareValue.mul(buybackSharesAmount).div(utils.parseEther('1'));
31
- const mlnValueOfBuyback = await valueInterpreter.calcCanonicalAssetValue
32
- .args(denominationAsset, denominationAssetValueOfBuyback, mln)
33
- .call();
34
-
35
- // 50% discount
36
- const mlnAmountToBurn = mlnValueOfBuyback.div(2);
37
-
38
- return { mlnAmountToBurn, mlnValue: mlnValueOfBuyback };
39
- }
package/src/index.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './deployment';
2
- export * from './scaffolding';
3
- export * from './assertions';
4
- export * from './helpers';
5
- export * from './whales';
6
- export * from './gasRelayer';
@@ -1,37 +0,0 @@
1
- import type { SignerWithAddress } from '@enzymefinance/hardhat';
2
- import type { ComptrollerLib, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
3
- import type { BigNumberish } from 'ethers';
4
-
5
- import { addTrackedAssetsToVault } from './extensions/integrations/trackedAssets';
6
-
7
- export async function addNewAssetsToFund({
8
- signer,
9
- comptrollerProxy,
10
- integrationManager,
11
- assets,
12
- amounts = new Array(assets.length).fill(1),
13
- }: {
14
- signer: SignerWithAddress;
15
- comptrollerProxy: ComptrollerLib;
16
- integrationManager: IntegrationManager;
17
- assets: StandardToken[];
18
- amounts?: BigNumberish[];
19
- }) {
20
- // First, add tracked assets
21
- const receipt = addTrackedAssetsToVault({
22
- assets,
23
- comptrollerProxy,
24
- integrationManager,
25
- signer,
26
- });
27
-
28
- // Then seed the vault with balances as necessary
29
- const vaultProxy = await comptrollerProxy.getVaultProxy();
30
- for (const i in assets) {
31
- if (amounts[i] > 0) {
32
- await assets[i].transfer(vaultProxy, amounts[i]);
33
- }
34
- }
35
-
36
- return receipt;
37
- }
@@ -1,8 +0,0 @@
1
- import type { MockChainlinkPriceSource } from '@enzymefinance/protocol';
2
- import type { BigNumberish } from 'ethers';
3
-
4
- export async function updateChainlinkAggregator(aggregator: MockChainlinkPriceSource, price?: BigNumberish) {
5
- const answer = price ?? (await aggregator.latestAnswer());
6
- const block = await aggregator.provider.getBlock('latest');
7
- await aggregator.setLatestAnswer(answer, block.timestamp);
8
- }
@@ -1,11 +0,0 @@
1
- import type { AddressLike } from '@enzymefinance/ethers';
2
- import { StandardToken } from '@enzymefinance/protocol';
3
- import { utils } from 'ethers';
4
-
5
- export async function getAssetBalances({ account, assets }: { account: AddressLike; assets: AddressLike[] }) {
6
- return Promise.all(assets.map((asset) => new StandardToken(asset, provider).balanceOf(account)));
7
- }
8
-
9
- export async function getAssetUnit(asset: StandardToken) {
10
- return utils.parseUnits('1', await asset.decimals());
11
- }
@@ -1,103 +0,0 @@
1
- import type { Dispatcher, GasRelayPaymasterFactory, ValueInterpreter } from '@enzymefinance/protocol';
2
- import {
3
- ComptrollerLib,
4
- ExternalPositionManager,
5
- FeeManager,
6
- FundDeployer,
7
- IntegrationManager,
8
- PolicyManager,
9
- ProtocolFeeTracker,
10
- VaultLib,
11
- } from '@enzymefinance/protocol';
12
- import type { Signer } from 'ethers';
13
-
14
- // TODO: Should refactor this function to take all deployment contracts and set up everything by default,
15
- // unless overrides are passed-in
16
- export async function createFundDeployer({
17
- deployer,
18
- externalPositionManager,
19
- dispatcher,
20
- gasRelayPaymasterFactory,
21
- valueInterpreter,
22
- vaultLib,
23
- setOnDispatcher = true,
24
- setReleaseLive = true,
25
- }: {
26
- deployer: Signer;
27
- externalPositionManager: ExternalPositionManager;
28
- dispatcher: Dispatcher;
29
- feeManager: FeeManager;
30
- gasRelayPaymasterFactory: GasRelayPaymasterFactory;
31
- integrationManager: IntegrationManager;
32
- policyManager: PolicyManager;
33
- valueInterpreter: ValueInterpreter;
34
- vaultLib: VaultLib;
35
- setOnDispatcher?: boolean;
36
- setReleaseLive?: boolean;
37
- }) {
38
- const mlnToken = await vaultLib.getMlnToken();
39
- const wethToken = await vaultLib.getWethToken();
40
-
41
- // TODO: Shortcut for now, can pass in param later
42
- const protocolFeeReserve = await vaultLib.getProtocolFeeReserve();
43
-
44
- const nextFundDeployer = await FundDeployer.deploy(deployer, dispatcher, gasRelayPaymasterFactory);
45
-
46
- // Re-deploy extensions with new FundDeployer
47
- const nextPolicyManager = await PolicyManager.deploy(deployer, nextFundDeployer, gasRelayPaymasterFactory);
48
- const nextExternalPositionManager = await ExternalPositionManager.deploy(
49
- deployer,
50
- nextFundDeployer,
51
- await externalPositionManager.getExternalPositionFactory(),
52
- nextPolicyManager,
53
- );
54
- const nextFeeManager = await FeeManager.deploy(deployer, nextFundDeployer);
55
- const nextIntegrationManager = await IntegrationManager.deploy(
56
- deployer,
57
- nextFundDeployer,
58
- nextPolicyManager,
59
- valueInterpreter,
60
- );
61
-
62
- const nextComptrollerLib = await ComptrollerLib.deploy(
63
- deployer,
64
- dispatcher,
65
- protocolFeeReserve,
66
- nextFundDeployer,
67
- valueInterpreter,
68
- nextExternalPositionManager,
69
- nextFeeManager,
70
- nextIntegrationManager,
71
- nextPolicyManager,
72
- gasRelayPaymasterFactory,
73
- mlnToken,
74
- wethToken,
75
- );
76
-
77
- await nextFundDeployer.setComptrollerLib(nextComptrollerLib);
78
-
79
- const nextProtocolFeeTracker = await ProtocolFeeTracker.deploy(deployer, nextFundDeployer);
80
- await nextFundDeployer.setProtocolFeeTracker(nextProtocolFeeTracker);
81
-
82
- const nextVaultLib = await VaultLib.deploy(
83
- deployer,
84
- externalPositionManager,
85
- await vaultLib.getGasRelayPaymasterFactory(),
86
- await vaultLib.getProtocolFeeReserve(),
87
- nextProtocolFeeTracker,
88
- await vaultLib.getMlnToken(),
89
- await vaultLib.getMlnBurner(),
90
- await vaultLib.getWethToken(),
91
- await vaultLib.getPositionsLimit(),
92
- );
93
- await nextFundDeployer.setVaultLib(nextVaultLib);
94
-
95
- if (setReleaseLive) {
96
- await nextFundDeployer.setReleaseLive();
97
- }
98
- if (setOnDispatcher) {
99
- await dispatcher.setCurrentFundDeployer(nextFundDeployer);
100
- }
101
-
102
- return nextFundDeployer;
103
- }
@@ -1,30 +0,0 @@
1
- import type { AddressLike } from '@enzymefinance/ethers';
2
- import type { SignerWithAddress } from '@enzymefinance/hardhat';
3
- import type { ComptrollerLib } from '@enzymefinance/protocol';
4
- import type { BigNumberish, BytesLike } from 'ethers';
5
-
6
- export async function callOnExtension({
7
- comptrollerProxy,
8
- extension,
9
- actionId,
10
- callArgs = '0x',
11
- signer,
12
- }: {
13
- comptrollerProxy: ComptrollerLib;
14
- extension: AddressLike;
15
- actionId: BigNumberish;
16
- callArgs?: BytesLike;
17
- signer?: SignerWithAddress;
18
- }) {
19
- let callOnExtensionTx: any;
20
-
21
- if (signer) {
22
- callOnExtensionTx = comptrollerProxy.connect(signer).callOnExtension(extension, actionId, callArgs);
23
- } else {
24
- callOnExtensionTx = comptrollerProxy.callOnExtension(extension, actionId, callArgs);
25
- }
26
-
27
- await expect(callOnExtensionTx).resolves.toBeReceipt();
28
-
29
- return callOnExtensionTx;
30
- }