@enzymefinance/testutils 4.0.0-next.2 → 4.0.0-next.7

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 (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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enzymefinance/testutils",
3
- "version": "4.0.0-next.2",
3
+ "version": "4.0.0-next.7",
4
4
  "main": "dist/enzymefinance-testutils.cjs.js",
5
5
  "module": "dist/enzymefinance-testutils.esm.js",
6
6
  "browser": {
@@ -8,10 +8,10 @@
8
8
  "./dist/enzymefinance-testutils.esm.js": "./dist/enzymefinance-testutils.browser.esm.js"
9
9
  },
10
10
  "dependencies": {
11
- "@babel/runtime": "^7.15.4",
12
- "@enzymefinance/ethers": "^1.0.0",
13
- "@enzymefinance/hardhat": "^1.0.0",
14
- "@enzymefinance/protocol": "^4.0.0-next.2",
15
- "ethers": "^5.4.6"
11
+ "@babel/runtime": "^7.16.7",
12
+ "@enzymefinance/ethers": "^1.0.16",
13
+ "@enzymefinance/hardhat": "^1.0.16",
14
+ "@enzymefinance/protocol": "^4.0.0-next.7",
15
+ "ethers": "^5.5.4"
16
16
  }
17
17
  }
package/src/assertions.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { ContractReceipt, extractEvent } from '@enzymefinance/ethers';
2
- import { utils } from 'ethers';
1
+ import type { ContractReceipt } from '@enzymefinance/ethers';
2
+ import { extractEvent } from '@enzymefinance/ethers';
3
+ import type { utils } from 'ethers';
3
4
 
4
5
  export function assertEvent<TResult = any>(
5
6
  receipt: ContractReceipt<any>,
@@ -11,6 +12,8 @@ export function assertEvent<TResult = any>(
11
12
  expect(receipt).toHaveEmittedWith(event, match);
12
13
 
13
14
  const args = events.shift()?.args;
15
+
16
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
14
17
  return (args as unknown as typeof match)!;
15
18
  }
16
19
 
package/src/deployment.ts CHANGED
@@ -1,74 +1,77 @@
1
- import { Contract } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
3
1
  import {
4
- Dispatcher,
5
- VaultLib,
6
- FundDeployer,
7
- PolicyManager,
2
+ AaveAdapter,
8
3
  AavePriceFeed,
9
- CompoundPriceFeed,
4
+ AddressListRegistry,
5
+ AllowedAdapterIncomingAssetsPolicy,
6
+ AllowedAdaptersPolicy,
7
+ AllowedAssetsForRedemptionPolicy,
8
+ AllowedDepositRecipientsPolicy,
9
+ AllowedExternalPositionTypesPolicy,
10
+ AllowedSharesTransferRecipientsPolicy,
11
+ CompoundAdapter,
10
12
  CompoundDebtPositionLib,
11
13
  CompoundDebtPositionParser,
12
- CurvePriceFeed,
13
- IdlePriceFeed,
14
- LidoStethPriceFeed,
15
- RevertingPriceFeed,
16
- StakehoundEthPriceFeed,
17
- SynthetixPriceFeed,
18
- YearnVaultV2PriceFeed,
19
- ValueInterpreter,
20
- UniswapV2PoolPriceFeed,
21
- IntegrationManager,
22
- AaveAdapter,
14
+ CompoundPriceFeed,
15
+ ComptrollerLib,
16
+ ConvexCurveLpStakingAdapter,
17
+ ConvexCurveLpStakingWrapperFactory,
18
+ ConvexCurveLpStakingWrapperPriceFeed,
19
+ CumulativeSlippageTolerancePolicy,
20
+ CurveExchangeAdapter,
23
21
  CurveLiquidityAaveAdapter,
24
- CurveLiquidityEursAdapter,
22
+ CurveLiquidityAdapter,
25
23
  CurveLiquiditySethAdapter,
26
24
  CurveLiquidityStethAdapter,
27
- IdleAdapter,
28
- ParaSwapV4Adapter,
29
- SynthetixAdapter,
30
- YearnVaultV2Adapter,
31
- ZeroExV2Adapter,
32
- CompoundAdapter,
33
- ExternalPositionManager,
34
- UniswapV2ExchangeAdapter,
35
- UniswapV2LiquidityAdapter,
36
- UniswapV3Adapter,
37
- CurveExchangeAdapter,
38
- FeeManager,
39
- ComptrollerLib,
25
+ CurvePriceFeed,
26
+ DepositWrapper,
27
+ Dispatcher,
40
28
  EntranceRateBurnFee,
41
29
  EntranceRateDirectFee,
42
30
  ExitRateBurnFee,
43
31
  ExitRateDirectFee,
44
- ManagementFee,
45
- PerformanceFee,
46
- DepositWrapper,
47
- UnpermissionedActionsWrapper,
48
- AllowedAdapterIncomingAssetsPolicy,
49
- MinMaxInvestmentPolicy,
50
- AllowedDepositRecipientsPolicy,
51
- GuaranteedRedemptionPolicy,
52
- AssetFinalityResolver,
53
- ProtocolFeeReserveLib,
54
- ProtocolFeeTracker,
55
- GasRelayPaymasterFactory,
56
32
  ExternalPositionFactory,
57
- AddressListRegistry,
58
- AllowedAdaptersPolicy,
59
- AllowedAssetsForRedemptionPolicy,
60
- AllowedExternalPositionTypesPolicy,
61
- AllowedSharesTransferRecipientsPolicy,
62
- CumulativeSlippageTolerancePolicy,
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,
63
47
  MinAssetBalancesPostRedemptionPolicy,
48
+ MinMaxInvestmentPolicy,
49
+ OlympusV2Adapter,
64
50
  OnlyRemoveDustExternalPositionPolicy,
65
51
  OnlyUntrackDustOrPricelessAssetsPolicy,
66
- FundValueCalculatorRouter,
67
- FundValueCalculator,
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,
68
73
  } from '@enzymefinance/protocol';
69
74
 
70
- import { DeploymentConfig } from '../../../deploy/utils/config';
71
-
72
75
  export async function getNamedSigner(name: string) {
73
76
  const accounts = await hre.getNamedAccounts();
74
77
  if (!accounts[name]) {
@@ -80,6 +83,7 @@ export async function getNamedSigner(name: string) {
80
83
 
81
84
  export async function getUnnamedSigners() {
82
85
  const accounts = await hre.getUnnamedAccounts();
86
+
83
87
  return Promise.all(accounts.map((account) => provider.getSignerWithAddress(account)));
84
88
  }
85
89
 
@@ -91,98 +95,195 @@ export async function deployProtocolFixture() {
91
95
 
92
96
  // prettier-ignore
93
97
  const deployment = {
94
- dispatcher: new Dispatcher(fixture['Dispatcher'].address, deployer),
95
- vaultLib: new VaultLib(fixture['VaultLib'].address, deployer),
96
- fundDeployer: new FundDeployer(fixture['FundDeployer'].address, deployer),
97
- policyManager: new PolicyManager(fixture['PolicyManager'].address, deployer),
98
+ aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
98
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),
99
108
  compoundDebtPositionLib: new CompoundDebtPositionLib(fixture['CompoundDebtPositionLib'].address, deployer),
100
109
  compoundDebtPositionParser: new CompoundDebtPositionParser(fixture['CompoundDebtPositionParser'].address, deployer),
101
110
  compoundPriceFeed: new CompoundPriceFeed(fixture['CompoundPriceFeed'].address, deployer),
102
- curvePriceFeed: new CurvePriceFeed(fixture['CurvePriceFeed'].address, deployer),
103
- idlePriceFeed: new IdlePriceFeed(fixture['IdlePriceFeed'].address, deployer),
104
- lidoStethPriceFeed: new LidoStethPriceFeed(fixture['LidoStethPriceFeed'].address, deployer),
105
- revertingPriceFeed: new RevertingPriceFeed(fixture['RevertingPriceFeed'].address, deployer),
106
- synthetixPriceFeed: new SynthetixPriceFeed(fixture['SynthetixPriceFeed'].address, deployer),
107
- stakehoundEthPriceFeed: new StakehoundEthPriceFeed(fixture['StakehoundEthPriceFeed'].address, deployer),
108
- yearnVaultV2PriceFeed: new YearnVaultV2PriceFeed(fixture['YearnVaultV2PriceFeed'].address, deployer),
109
- valueInterpreter: new ValueInterpreter(fixture['ValueInterpreter'].address, deployer),
110
- uniswapV2PoolPriceFeed: new UniswapV2PoolPriceFeed(fixture['UniswapV2PoolPriceFeed'].address, deployer),
111
- integrationManager: new IntegrationManager(fixture['IntegrationManager'].address, deployer),
112
- externalPositionManager: new ExternalPositionManager(fixture['ExternalPositionManager'].address, deployer),
113
- externalPositionFactory: new ExternalPositionFactory(fixture['ExternalPositionFactory'].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),
114
117
  curveLiquidityAaveAdapter: new CurveLiquidityAaveAdapter(fixture['CurveLiquidityAaveAdapter'].address, deployer),
115
- curveLiquidityEursAdapter: new CurveLiquidityEursAdapter(fixture['CurveLiquidityEursAdapter'].address, deployer),
118
+ curveLiquidityAdapter: new CurveLiquidityAdapter(fixture['CurveLiquidityAdapter'].address, deployer),
116
119
  curveLiquiditySethAdapter: new CurveLiquiditySethAdapter(fixture['CurveLiquiditySethAdapter'].address, deployer),
117
120
  curveLiquidityStethAdapter: new CurveLiquidityStethAdapter(fixture['CurveLiquidityStethAdapter'].address, deployer),
118
- aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
119
- idleAdapter: new IdleAdapter(fixture['IdleAdapter'].address, deployer),
120
- paraSwapV4Adapter: new ParaSwapV4Adapter(fixture['ParaSwapV4Adapter'].address, deployer),
121
- synthetixAdapter: new SynthetixAdapter(fixture['SynthetixAdapter'].address, deployer),
122
- yearnVaultV2Adapter: new YearnVaultV2Adapter(fixture['YearnVaultV2Adapter'].address, deployer),
123
- zeroExV2Adapter: new ZeroExV2Adapter(fixture['ZeroExV2Adapter'].address, deployer),
124
- compoundAdapter: new CompoundAdapter(fixture['CompoundAdapter'].address, deployer),
125
- uniswapV2ExchangeAdapter: new UniswapV2ExchangeAdapter(fixture['UniswapV2ExchangeAdapter'].address, deployer),
126
- uniswapV2LiquidityAdapter: new UniswapV2LiquidityAdapter(fixture['UniswapV2LiquidityAdapter'].address, deployer),
127
- uniswapV3Adapter: new UniswapV3Adapter(fixture['UniswapV3Adapter'].address, deployer),
128
- curveExchangeAdapter: new CurveExchangeAdapter(fixture['CurveExchangeAdapter'].address, deployer),
129
- feeManager: new FeeManager(fixture['FeeManager'].address, deployer),
130
- comptrollerLib: new ComptrollerLib(fixture['ComptrollerLib'].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),
131
124
  entranceRateBurnFee: new EntranceRateBurnFee(fixture['EntranceRateBurnFee'].address, deployer),
132
125
  entranceRateDirectFee: new EntranceRateDirectFee(fixture['EntranceRateDirectFee'].address, deployer),
133
126
  exitRateBurnFee: new ExitRateBurnFee(fixture['ExitRateBurnFee'].address, deployer),
134
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),
135
142
  managementFee: new ManagementFee(fixture['ManagementFee'].address, deployer),
136
- performanceFee: new PerformanceFee(fixture['PerformanceFee'].address, deployer),
137
- depositWrapper: new DepositWrapper(fixture['DepositWrapper'].address, deployer),
138
- unpermissionedActionsWrapper: new UnpermissionedActionsWrapper(fixture['UnpermissionedActionsWrapper'].address, deployer),
139
- allowedAdapterIncomingAssetsPolicy: new AllowedAdapterIncomingAssetsPolicy(fixture['AllowedAdapterIncomingAssetsPolicy'].address, deployer),
143
+ minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
140
144
  minMaxInvestmentPolicy: new MinMaxInvestmentPolicy(fixture['MinMaxInvestmentPolicy'].address, deployer),
141
- allowedDepositRecipientsPolicy: new AllowedDepositRecipientsPolicy(fixture['AllowedDepositRecipientsPolicy'].address, deployer),
142
- guaranteedRedemptionPolicy: new GuaranteedRedemptionPolicy(fixture['GuaranteedRedemptionPolicy'].address, deployer),
143
- assetFinalityResolver: new AssetFinalityResolver(fixture['AssetFinalityResolver'].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),
144
154
  protocolFeeReserveLib: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveLib'].address, deployer),
145
155
  protocolFeeReserveProxy: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveProxy'].address, deployer),
146
156
  protocolFeeTracker: new ProtocolFeeTracker(fixture['ProtocolFeeTracker'].address, deployer),
147
- gasRelayPaymasterFactory: new GasRelayPaymasterFactory(fixture['GasRelayPaymasterFactory'].address, deployer),
148
- addressListRegistry: new AddressListRegistry(fixture['AddressListRegistry'].address, deployer),
149
- allowedAdaptersPolicy: new AllowedAdaptersPolicy(fixture['AllowedAdaptersPolicy'].address, deployer),
150
- allowedAssetsForRedemptionPolicy: new AllowedAssetsForRedemptionPolicy(fixture['AllowedAssetsForRedemptionPolicy'].address, deployer),
151
- allowedExternalPositionTypesPolicy: new AllowedExternalPositionTypesPolicy(fixture['AllowedExternalPositionTypesPolicy'].address, deployer),
152
- allowedSharesTransferRecipientsPolicy: new AllowedSharesTransferRecipientsPolicy(fixture['AllowedSharesTransferRecipientsPolicy'].address, deployer),
153
- cumulativeSlippageTolerancePolicy: new CumulativeSlippageTolerancePolicy(fixture['CumulativeSlippageTolerancePolicy'].address, deployer),
154
- minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
155
- onlyRemoveDustExternalPositionPolicy: new OnlyRemoveDustExternalPositionPolicy(fixture['OnlyRemoveDustExternalPositionPolicy'].address, deployer),
156
- onlyUntrackDustOrPricelessAssetsPolicy: new OnlyUntrackDustOrPricelessAssetsPolicy(fixture['OnlyUntrackDustOrPricelessAssetsPolicy'].address, deployer),
157
- fundValueCalculatorRouter: new FundValueCalculatorRouter(fixture['FundValueCalculatorRouter'].address, deployer),
158
- fundValueCalculator: new FundValueCalculator(fixture['FundValueCalculator'].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),
159
170
  } as const;
160
171
 
161
172
  return {
162
- deployer,
163
- deployment,
164
173
  accounts,
165
174
  config,
175
+ deployer,
176
+ deployment,
166
177
  } as const;
167
178
  }
168
179
 
169
180
  type Resolve<T extends () => any> = ReturnType<T> extends Promise<infer U> ? U : ReturnType<T>;
170
- type ContractMap = Record<string, Contract>;
171
-
172
- export interface DeploymentFixtureWithoutConfig<T extends ContractMap> {
173
- deployer: SignerWithAddress;
174
- deployment: T;
175
- accounts: SignerWithAddress[];
176
- }
177
-
178
- export interface DeploymentFixtureWithConfig<T extends ContractMap> extends DeploymentFixtureWithoutConfig<T> {
179
- config: DeploymentConfig;
180
- }
181
181
 
182
182
  export type ProtocolDeployment = Resolve<typeof deployProtocolFixture>;
183
183
 
184
- // TODO: Remove this.
185
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
186
- export async function defaultTestDeployment(_: any): Promise<any> {
187
- throw new Error('Removed');
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
+ };
188
289
  }
package/src/gasRelayer.ts CHANGED
@@ -1,11 +1,9 @@
1
- import { BigNumber, BigNumberish, utils } from 'ethers';
2
- import { ContractReceipt } from '@enzymefinance/ethers';
3
- import {
4
- isTypedDataSigner,
5
- IGsnRelayHub,
6
- createSignedRelayRequest,
7
- CreateSignedRelayRequestOptions,
8
- } from '@enzymefinance/protocol';
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
+
9
7
  import { assertEvent } from './assertions';
10
8
 
11
9
  export interface RelayTransactionOptions extends CreateSignedRelayRequestOptions {
@@ -26,11 +24,12 @@ export async function relayTransaction(options: RelayTransactionOptions) {
26
24
 
27
25
  // NOTE: There is an inconsistency between how the typed data object shape and the relayCall argument.
28
26
  const mergedRelayRequest = {
29
- request: relayRequest,
30
27
  relayData,
28
+ request: relayRequest,
31
29
  };
32
30
 
33
31
  const relayHub = new IGsnRelayHub(options.relayHub, provider.getSigner(options.relayWorker));
32
+
34
33
  return relayHub.relayCall
35
34
  .args(defaultMaxAcceptance, mergedRelayRequest, signedRelayRequest, '0x', defaultGasLimit)
36
35
  .gas(defaultGasLimit, relayData.gasPrice)
@@ -47,14 +46,14 @@ const rejected = utils.EventFragment.fromString(
47
46
 
48
47
  export function assertDidRelay(receipt: ContractReceipt<any>) {
49
48
  return assertEvent(receipt, relayed, {
50
- relayManager: expect.any(String),
51
- relayWorker: expect.any(String),
49
+ charge: expect.anything(),
52
50
  from: expect.any(String),
53
- to: expect.any(String),
54
51
  paymaster: expect.any(String),
52
+ relayManager: expect.any(String),
53
+ relayWorker: expect.any(String),
55
54
  selector: expect.any(String),
56
55
  status: expect.anything(),
57
- charge: expect.anything(),
56
+ to: expect.any(String),
58
57
  });
59
58
  }
60
59
 
@@ -79,14 +78,14 @@ export function assertDidRelayWithCharge(
79
78
 
80
79
  export function assertPaymasterDidReject(receipt: ContractReceipt<any>) {
81
80
  return assertEvent(receipt, rejected, {
82
- relayManager: expect.any(String),
83
- paymaster: expect.any(String),
84
81
  from: expect.any(String),
85
- to: expect.any(String),
86
- relayWorker: expect.any(String),
87
- selector: expect.any(String),
88
82
  innerGasUsed: expect.anything(),
83
+ paymaster: expect.any(String),
89
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),
90
89
  });
91
90
  }
92
91
 
package/src/helpers.ts CHANGED
@@ -1,9 +1,11 @@
1
- import { AddressLike, ContractReceipt } from '@enzymefinance/ethers';
2
- import { BigNumber, BigNumberish, utils } from 'ethers';
3
- import { ValueInterpreter } from '@enzymefinance/protocol';
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';
4
5
 
5
6
  export async function transactionTimestamp(receipt: ContractReceipt<any>) {
6
7
  const block = await provider.getBlock(receipt.blockNumber);
8
+
7
9
  return block.timestamp;
8
10
  }
9
11
 
@@ -33,5 +35,5 @@ export async function calcMlnValueAndBurnAmountForSharesBuyback({
33
35
  // 50% discount
34
36
  const mlnAmountToBurn = mlnValueOfBuyback.div(2);
35
37
 
36
- return { mlnValue: mlnValueOfBuyback, mlnAmountToBurn };
38
+ return { mlnAmountToBurn, mlnValue: mlnValueOfBuyback };
37
39
  }
@@ -1,6 +1,7 @@
1
- import { SignerWithAddress } from '@enzymefinance/hardhat';
2
- import { ComptrollerLib, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
3
- import { BigNumberish } from 'ethers';
1
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
2
+ import type { ComptrollerLib, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
3
+ import type { BigNumberish } from 'ethers';
4
+
4
5
  import { addTrackedAssetsToVault } from './extensions/integrations/trackedAssets';
5
6
 
6
7
  export async function addNewAssetsToFund({
@@ -16,12 +17,12 @@ export async function addNewAssetsToFund({
16
17
  assets: StandardToken[];
17
18
  amounts?: BigNumberish[];
18
19
  }) {
19
- // First, add tracked assets while their balances are 0
20
+ // First, add tracked assets
20
21
  const receipt = addTrackedAssetsToVault({
21
- signer,
22
+ assets,
22
23
  comptrollerProxy,
23
24
  integrationManager,
24
- assets,
25
+ signer,
25
26
  });
26
27
 
27
28
  // Then seed the vault with balances as necessary
@@ -1,5 +1,5 @@
1
- import { BigNumberish } from 'ethers';
2
- import { MockChainlinkPriceSource } from '@enzymefinance/protocol';
1
+ import type { MockChainlinkPriceSource } from '@enzymefinance/protocol';
2
+ import type { BigNumberish } from 'ethers';
3
3
 
4
4
  export async function updateChainlinkAggregator(aggregator: MockChainlinkPriceSource, price?: BigNumberish) {
5
5
  const answer = price ?? (await aggregator.latestAnswer());
@@ -1,4 +1,4 @@
1
- import { AddressLike } from '@enzymefinance/ethers';
1
+ import type { AddressLike } from '@enzymefinance/ethers';
2
2
  import { StandardToken } from '@enzymefinance/protocol';
3
3
  import { utils } from 'ethers';
4
4
 
@@ -1,24 +1,20 @@
1
+ import type { Dispatcher, GasRelayPaymasterFactory, ValueInterpreter } from '@enzymefinance/protocol';
1
2
  import {
2
- AssetFinalityResolver,
3
3
  ComptrollerLib,
4
4
  ExternalPositionManager,
5
- Dispatcher,
6
5
  FeeManager,
7
6
  FundDeployer,
8
- GasRelayPaymasterFactory,
9
7
  IntegrationManager,
10
8
  PolicyManager,
11
9
  ProtocolFeeTracker,
12
- ValueInterpreter,
13
10
  VaultLib,
14
11
  } from '@enzymefinance/protocol';
15
- import { Signer } from 'ethers';
12
+ import type { Signer } from 'ethers';
16
13
 
17
14
  // TODO: Should refactor this function to take all deployment contracts and set up everything by default,
18
15
  // unless overrides are passed-in
19
16
  export async function createFundDeployer({
20
17
  deployer,
21
- assetFinalityResolver,
22
18
  externalPositionManager,
23
19
  dispatcher,
24
20
  gasRelayPaymasterFactory,
@@ -28,7 +24,6 @@ export async function createFundDeployer({
28
24
  setReleaseLive = true,
29
25
  }: {
30
26
  deployer: Signer;
31
- assetFinalityResolver: AssetFinalityResolver;
32
27
  externalPositionManager: ExternalPositionManager;
33
28
  dispatcher: Dispatcher;
34
29
  feeManager: FeeManager;
@@ -74,7 +69,6 @@ export async function createFundDeployer({
74
69
  nextFeeManager,
75
70
  nextIntegrationManager,
76
71
  nextPolicyManager,
77
- assetFinalityResolver,
78
72
  gasRelayPaymasterFactory,
79
73
  mlnToken,
80
74
  wethToken,
@@ -92,7 +86,9 @@ export async function createFundDeployer({
92
86
  await vaultLib.getProtocolFeeReserve(),
93
87
  nextProtocolFeeTracker,
94
88
  await vaultLib.getMlnToken(),
89
+ await vaultLib.getMlnBurner(),
95
90
  await vaultLib.getWethToken(),
91
+ await vaultLib.getPositionsLimit(),
96
92
  );
97
93
  await nextFundDeployer.setVaultLib(nextVaultLib);
98
94
 
@@ -1,7 +1,7 @@
1
- import { AddressLike } from '@enzymefinance/ethers';
2
- import { SignerWithAddress } from '@enzymefinance/hardhat';
3
- import { ComptrollerLib } from '@enzymefinance/protocol';
4
- import { BigNumberish, BytesLike } from 'ethers';
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
5
 
6
6
  export async function callOnExtension({
7
7
  comptrollerProxy,