@enzymefinance/testutils 4.0.0-next.0 → 4.0.0-next.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/declarations/src/assertions.d.ts +4 -4
  3. package/dist/declarations/src/deployment.d.ts +181 -82
  4. package/dist/declarations/src/gasRelayer.d.ts +56 -54
  5. package/dist/declarations/src/helpers.d.ts +16 -15
  6. package/dist/declarations/src/index.d.ts +6 -6
  7. package/dist/declarations/src/scaffolding/assets.d.ts +10 -10
  8. package/dist/declarations/src/scaffolding/chainlink.d.ts +3 -3
  9. package/dist/declarations/src/scaffolding/common.d.ts +7 -7
  10. package/dist/declarations/src/scaffolding/core.d.ts +17 -16
  11. package/dist/declarations/src/scaffolding/extensions/common.d.ts +11 -11
  12. package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +35 -0
  13. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +56 -59
  14. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +4 -2
  15. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +53 -20
  16. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +99 -0
  17. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +12 -12
  18. package/dist/declarations/src/scaffolding/extensions/index.d.ts +5 -5
  19. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +20 -19
  20. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +28 -28
  21. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +272 -271
  22. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +28 -28
  23. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +14 -12
  24. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +32 -32
  25. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +23 -22
  26. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +23 -0
  27. package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +29 -0
  28. package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +33 -25
  29. package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +15 -15
  30. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +46 -46
  31. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +15 -15
  32. package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +22 -22
  33. package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +12 -12
  34. package/dist/declarations/src/scaffolding/extensions/policies.d.ts +17 -17
  35. package/dist/declarations/src/scaffolding/index.d.ts +8 -8
  36. package/dist/declarations/src/scaffolding/setup.d.ts +77 -75
  37. package/dist/declarations/src/scaffolding/shares.d.ts +35 -35
  38. package/dist/declarations/src/scaffolding/vaultCalls.d.ts +32 -17
  39. package/dist/declarations/src/whales.d.ts +42 -44
  40. package/dist/enzymefinance-testutils.browser.cjs.js +1470 -697
  41. package/dist/enzymefinance-testutils.browser.esm.js +1257 -508
  42. package/dist/enzymefinance-testutils.cjs.dev.js +1470 -697
  43. package/dist/enzymefinance-testutils.cjs.prod.js +1470 -697
  44. package/dist/enzymefinance-testutils.esm.js +1257 -508
  45. package/package.json +6 -6
  46. package/src/assertions.ts +5 -2
  47. package/src/deployment.ts +202 -99
  48. package/src/gasRelayer.ts +17 -18
  49. package/src/helpers.ts +6 -4
  50. package/src/scaffolding/assets.ts +6 -5
  51. package/src/scaffolding/chainlink.ts +2 -2
  52. package/src/scaffolding/common.ts +1 -1
  53. package/src/scaffolding/core.ts +28 -12
  54. package/src/scaffolding/extensions/common.ts +4 -4
  55. package/src/scaffolding/extensions/external-positions/actions.ts +103 -0
  56. package/src/scaffolding/extensions/external-positions/compound.ts +69 -114
  57. package/src/scaffolding/extensions/external-positions/index.ts +2 -0
  58. package/src/scaffolding/extensions/external-positions/mocks.ts +132 -10
  59. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +290 -0
  60. package/src/scaffolding/extensions/fees.ts +1 -1
  61. package/src/scaffolding/extensions/integrations/aave.ts +6 -8
  62. package/src/scaffolding/extensions/integrations/compound.ts +10 -11
  63. package/src/scaffolding/extensions/integrations/curve.ts +72 -68
  64. package/src/scaffolding/extensions/integrations/idle.ts +9 -11
  65. package/src/scaffolding/extensions/integrations/index.ts +2 -0
  66. package/src/scaffolding/extensions/integrations/mock.ts +11 -13
  67. package/src/scaffolding/extensions/integrations/paraSwapV4.ts +16 -11
  68. package/src/scaffolding/extensions/integrations/paraSwapV5.ts +73 -0
  69. package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +117 -0
  70. package/src/scaffolding/extensions/integrations/synthetix.ts +45 -12
  71. package/src/scaffolding/extensions/integrations/trackedAssets.ts +3 -4
  72. package/src/scaffolding/extensions/integrations/uniswapV2.ts +31 -27
  73. package/src/scaffolding/extensions/integrations/uniswapV3.ts +9 -10
  74. package/src/scaffolding/extensions/integrations/yearn.ts +9 -11
  75. package/src/scaffolding/extensions/integrations/zeroExV2.ts +9 -7
  76. package/src/scaffolding/extensions/policies.ts +2 -1
  77. package/src/scaffolding/setup.ts +27 -19
  78. package/src/scaffolding/shares.ts +5 -4
  79. package/src/scaffolding/vaultCalls.ts +50 -3
  80. package/src/whales.ts +26 -17
  81. package/tsconfig.json +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enzymefinance/testutils",
3
- "version": "4.0.0-next.0",
3
+ "version": "4.0.0-next.5",
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.3",
12
- "@enzymefinance/ethers": "^1.0.0",
13
- "@enzymefinance/hardhat": "^1.0.0",
14
- "@enzymefinance/protocol": "^4.0.0-next.0",
15
- "ethers": "^5.4.6"
11
+ "@babel/runtime": "^7.15.4",
12
+ "@enzymefinance/ethers": "^1.0.10",
13
+ "@enzymefinance/hardhat": "^1.0.11",
14
+ "@enzymefinance/protocol": "^4.0.0-next.5",
15
+ "ethers": "^5.5.1"
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,64 +1,74 @@
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
+ AssetFinalityResolver,
12
+ CompoundAdapter,
10
13
  CompoundDebtPositionLib,
11
14
  CompoundDebtPositionParser,
12
- CurvePriceFeed,
13
- IdlePriceFeed,
14
- LidoStethPriceFeed,
15
- RevertingPriceFeed,
16
- StakehoundEthPriceFeed,
17
- SynthetixPriceFeed,
18
- WdgldPriceFeed,
19
- YearnVaultV2PriceFeed,
20
- ValueInterpreter,
21
- UniswapV2PoolPriceFeed,
22
- IntegrationManager,
23
- AaveAdapter,
15
+ CompoundPriceFeed,
16
+ ComptrollerLib,
17
+ CumulativeSlippageTolerancePolicy,
18
+ CurveExchangeAdapter,
24
19
  CurveLiquidityAaveAdapter,
25
20
  CurveLiquidityEursAdapter,
26
21
  CurveLiquiditySethAdapter,
27
22
  CurveLiquidityStethAdapter,
28
- IdleAdapter,
29
- ParaSwapV4Adapter,
30
- SynthetixAdapter,
31
- YearnVaultV2Adapter,
32
- ZeroExV2Adapter,
33
- CompoundAdapter,
34
- ExternalPositionManager,
35
- UniswapV2Adapter,
36
- UniswapV3Adapter,
37
- CurveExchangeAdapter,
38
- FeeManager,
39
- ComptrollerLib,
23
+ CurvePriceFeed,
24
+ DepositWrapper,
25
+ Dispatcher,
40
26
  EntranceRateBurnFee,
41
27
  EntranceRateDirectFee,
42
28
  ExitRateBurnFee,
43
29
  ExitRateDirectFee,
30
+ ExternalPositionFactory,
31
+ ExternalPositionManager,
32
+ FeeManager,
33
+ FundDeployer,
34
+ FundValueCalculator,
35
+ FundValueCalculatorRouter,
36
+ FundValueCalculatorUsdWrapper,
37
+ GasRelayPaymasterFactory,
38
+ GuaranteedRedemptionPolicy,
39
+ IdleAdapter,
40
+ IdlePriceFeed,
41
+ IntegrationManager,
42
+ LidoStethPriceFeed,
44
43
  ManagementFee,
45
- PerformanceFee,
46
- DepositWrapper,
47
- UnpermissionedActionsWrapper,
48
- AllowedAdapterIncomingAssetsPolicy,
44
+ MinAssetBalancesPostRedemptionPolicy,
49
45
  MinMaxInvestmentPolicy,
50
- AllowedDepositRecipientsPolicy,
51
- GuaranteedRedemptionPolicy,
52
- GlobalConfigLib,
53
- AssetFinalityResolver,
46
+ OnlyRemoveDustExternalPositionPolicy,
47
+ OnlyUntrackDustOrPricelessAssetsPolicy,
48
+ ParaSwapV4Adapter,
49
+ ParaSwapV5Adapter,
50
+ PerformanceFee,
51
+ PolicyManager,
52
+ PoolTogetherV4Adapter,
53
+ PoolTogetherV4PriceFeed,
54
54
  ProtocolFeeReserveLib,
55
55
  ProtocolFeeTracker,
56
- GasRelayPaymasterFactory,
57
- ExternalPositionFactory,
56
+ RevertingPriceFeed,
57
+ StakehoundEthPriceFeed,
58
+ SynthetixAdapter,
59
+ SynthetixPriceFeed,
60
+ UniswapV2ExchangeAdapter,
61
+ UniswapV2LiquidityAdapter,
62
+ UniswapV2PoolPriceFeed,
63
+ UniswapV3Adapter,
64
+ UnpermissionedActionsWrapper,
65
+ ValueInterpreter,
66
+ VaultLib,
67
+ YearnVaultV2Adapter,
68
+ YearnVaultV2PriceFeed,
69
+ ZeroExV2Adapter,
58
70
  } from '@enzymefinance/protocol';
59
71
 
60
- import { DeploymentConfig } from '../../../deploy/utils/config';
61
-
62
72
  export async function getNamedSigner(name: string) {
63
73
  const accounts = await hre.getNamedAccounts();
64
74
  if (!accounts[name]) {
@@ -70,6 +80,7 @@ export async function getNamedSigner(name: string) {
70
80
 
71
81
  export async function getUnnamedSigners() {
72
82
  const accounts = await hre.getUnnamedAccounts();
83
+
73
84
  return Promise.all(accounts.map((account) => provider.getSignerWithAddress(account)));
74
85
  }
75
86
 
@@ -81,89 +92,181 @@ export async function deployProtocolFixture() {
81
92
 
82
93
  // prettier-ignore
83
94
  const deployment = {
84
- dispatcher: new Dispatcher(fixture['Dispatcher'].address, deployer),
85
- vaultLib: new VaultLib(fixture['VaultLib'].address, deployer),
86
- fundDeployer: new FundDeployer(fixture['FundDeployer'].address, deployer),
87
- policyManager: new PolicyManager(fixture['PolicyManager'].address, deployer),
95
+ aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
88
96
  aavePriceFeed: new AavePriceFeed(fixture['AavePriceFeed'].address, deployer),
97
+ addressListRegistry: new AddressListRegistry(fixture['AddressListRegistry'].address, deployer),
98
+ allowedAdapterIncomingAssetsPolicy: new AllowedAdapterIncomingAssetsPolicy(fixture['AllowedAdapterIncomingAssetsPolicy'].address, deployer),
99
+ allowedAdaptersPolicy: new AllowedAdaptersPolicy(fixture['AllowedAdaptersPolicy'].address, deployer),
100
+ allowedAssetsForRedemptionPolicy: new AllowedAssetsForRedemptionPolicy(fixture['AllowedAssetsForRedemptionPolicy'].address, deployer),
101
+ allowedDepositRecipientsPolicy: new AllowedDepositRecipientsPolicy(fixture['AllowedDepositRecipientsPolicy'].address, deployer),
102
+ allowedExternalPositionTypesPolicy: new AllowedExternalPositionTypesPolicy(fixture['AllowedExternalPositionTypesPolicy'].address, deployer),
103
+ allowedSharesTransferRecipientsPolicy: new AllowedSharesTransferRecipientsPolicy(fixture['AllowedSharesTransferRecipientsPolicy'].address, deployer),
104
+ assetFinalityResolver: new AssetFinalityResolver(fixture['AssetFinalityResolver'].address, deployer),
105
+ compoundAdapter: new CompoundAdapter(fixture['CompoundAdapter'].address, deployer),
89
106
  compoundDebtPositionLib: new CompoundDebtPositionLib(fixture['CompoundDebtPositionLib'].address, deployer),
90
107
  compoundDebtPositionParser: new CompoundDebtPositionParser(fixture['CompoundDebtPositionParser'].address, deployer),
91
108
  compoundPriceFeed: new CompoundPriceFeed(fixture['CompoundPriceFeed'].address, deployer),
92
- curvePriceFeed: new CurvePriceFeed(fixture['CurvePriceFeed'].address, deployer),
93
- idlePriceFeed: new IdlePriceFeed(fixture['IdlePriceFeed'].address, deployer),
94
- lidoStethPriceFeed: new LidoStethPriceFeed(fixture['LidoStethPriceFeed'].address, deployer),
95
- revertingPriceFeed: new RevertingPriceFeed(fixture['RevertingPriceFeed'].address, deployer),
96
- synthetixPriceFeed: new SynthetixPriceFeed(fixture['SynthetixPriceFeed'].address, deployer),
97
- stakehoundEthPriceFeed: new StakehoundEthPriceFeed(fixture['StakehoundEthPriceFeed'].address, deployer),
98
- wdgldPriceFeed: new WdgldPriceFeed(fixture['WdgldPriceFeed'].address, deployer),
99
- yearnVaultV2PriceFeed: new YearnVaultV2PriceFeed(fixture['YearnVaultV2PriceFeed'].address, deployer),
100
- valueInterpreter: new ValueInterpreter(fixture['ValueInterpreter'].address, deployer),
101
- uniswapV2PoolPriceFeed: new UniswapV2PoolPriceFeed(fixture['UniswapV2PoolPriceFeed'].address, deployer),
102
- integrationManager: new IntegrationManager(fixture['IntegrationManager'].address, deployer),
103
- externalPositionManager: new ExternalPositionManager(fixture['ExternalPositionManager'].address, deployer),
104
- externalPositionFactory: new ExternalPositionFactory(fixture['ExternalPositionFactory'].address, deployer),
109
+ comptrollerLib: new ComptrollerLib(fixture['ComptrollerLib'].address, deployer),
110
+ cumulativeSlippageTolerancePolicy: new CumulativeSlippageTolerancePolicy(fixture['CumulativeSlippageTolerancePolicy'].address, deployer),
111
+ curveExchangeAdapter: new CurveExchangeAdapter(fixture['CurveExchangeAdapter'].address, deployer),
105
112
  curveLiquidityAaveAdapter: new CurveLiquidityAaveAdapter(fixture['CurveLiquidityAaveAdapter'].address, deployer),
106
113
  curveLiquidityEursAdapter: new CurveLiquidityEursAdapter(fixture['CurveLiquidityEursAdapter'].address, deployer),
107
114
  curveLiquiditySethAdapter: new CurveLiquiditySethAdapter(fixture['CurveLiquiditySethAdapter'].address, deployer),
108
115
  curveLiquidityStethAdapter: new CurveLiquidityStethAdapter(fixture['CurveLiquidityStethAdapter'].address, deployer),
109
- aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
110
- idleAdapter: new IdleAdapter(fixture['IdleAdapter'].address, deployer),
111
- paraSwapV4Adapter: new ParaSwapV4Adapter(fixture['ParaSwapV4Adapter'].address, deployer),
112
- synthetixAdapter: new SynthetixAdapter(fixture['SynthetixAdapter'].address, deployer),
113
- yearnVaultV2Adapter: new YearnVaultV2Adapter(fixture['YearnVaultV2Adapter'].address, deployer),
114
- zeroExV2Adapter: new ZeroExV2Adapter(fixture['ZeroExV2Adapter'].address, deployer),
115
- compoundAdapter: new CompoundAdapter(fixture['CompoundAdapter'].address, deployer),
116
- uniswapV2Adapter: new UniswapV2Adapter(fixture['UniswapV2Adapter'].address, deployer),
117
- uniswapV3Adapter: new UniswapV3Adapter(fixture['UniswapV3Adapter'].address, deployer),
118
- curveExchangeAdapter: new CurveExchangeAdapter(fixture['CurveExchangeAdapter'].address, deployer),
119
- feeManager: new FeeManager(fixture['FeeManager'].address, deployer),
120
- comptrollerLib: new ComptrollerLib(fixture['ComptrollerLib'].address, deployer),
116
+ curvePriceFeed: new CurvePriceFeed(fixture['CurvePriceFeed'].address, deployer),
117
+ depositWrapper: new DepositWrapper(fixture['DepositWrapper'].address, deployer),
118
+ dispatcher: new Dispatcher(fixture['Dispatcher'].address, deployer),
121
119
  entranceRateBurnFee: new EntranceRateBurnFee(fixture['EntranceRateBurnFee'].address, deployer),
122
120
  entranceRateDirectFee: new EntranceRateDirectFee(fixture['EntranceRateDirectFee'].address, deployer),
123
121
  exitRateBurnFee: new ExitRateBurnFee(fixture['ExitRateBurnFee'].address, deployer),
124
122
  exitRateDirectFee: new ExitRateDirectFee(fixture['ExitRateDirectFee'].address, deployer),
123
+ externalPositionFactory: new ExternalPositionFactory(fixture['ExternalPositionFactory'].address, deployer),
124
+ externalPositionManager: new ExternalPositionManager(fixture['ExternalPositionManager'].address, deployer),
125
+ feeManager: new FeeManager(fixture['FeeManager'].address, deployer),
126
+ fundDeployer: new FundDeployer(fixture['FundDeployer'].address, deployer),
127
+ fundValueCalculator: new FundValueCalculator(fixture['FundValueCalculator'].address, deployer),
128
+ fundValueCalculatorRouter: new FundValueCalculatorRouter(fixture['FundValueCalculatorRouter'].address, deployer),
129
+ fundValueCalculatorUsdWrapper: new FundValueCalculatorUsdWrapper(fixture['FundValueCalculatorUsdWrapper'].address, deployer),
130
+ gasRelayPaymasterFactory: new GasRelayPaymasterFactory(fixture['GasRelayPaymasterFactory'].address, deployer),
131
+ guaranteedRedemptionPolicy: new GuaranteedRedemptionPolicy(fixture['GuaranteedRedemptionPolicy'].address, deployer),
132
+ idleAdapter: new IdleAdapter(fixture['IdleAdapter'].address, deployer),
133
+ idlePriceFeed: new IdlePriceFeed(fixture['IdlePriceFeed'].address, deployer),
134
+ integrationManager: new IntegrationManager(fixture['IntegrationManager'].address, deployer),
135
+ lidoStethPriceFeed: new LidoStethPriceFeed(fixture['LidoStethPriceFeed'].address, deployer),
125
136
  managementFee: new ManagementFee(fixture['ManagementFee'].address, deployer),
126
- performanceFee: new PerformanceFee(fixture['PerformanceFee'].address, deployer),
127
- depositWrapper: new DepositWrapper(fixture['DepositWrapper'].address, deployer),
128
- unpermissionedActionsWrapper: new UnpermissionedActionsWrapper(fixture['UnpermissionedActionsWrapper'].address, deployer),
129
- allowedAdapterIncomingAssetsPolicy: new AllowedAdapterIncomingAssetsPolicy(fixture['AllowedAdapterIncomingAssetsPolicy'].address, deployer),
137
+ minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
130
138
  minMaxInvestmentPolicy: new MinMaxInvestmentPolicy(fixture['MinMaxInvestmentPolicy'].address, deployer),
131
- allowedDepositRecipientsPolicy: new AllowedDepositRecipientsPolicy(fixture['AllowedDepositRecipientsPolicy'].address, deployer),
132
- guaranteedRedemptionPolicy: new GuaranteedRedemptionPolicy(fixture['GuaranteedRedemptionPolicy'].address, deployer),
133
- globalConfigLib: new GlobalConfigLib(fixture['GlobalConfigLib'].address, deployer),
134
- globalConfigProxy: new GlobalConfigLib(fixture['GlobalConfigProxy'].address, deployer),
135
- assetFinalityResolver: new AssetFinalityResolver(fixture['AssetFinalityResolver'].address, deployer),
139
+ onlyRemoveDustExternalPositionPolicy: new OnlyRemoveDustExternalPositionPolicy(fixture['OnlyRemoveDustExternalPositionPolicy'].address, deployer),
140
+ onlyUntrackDustOrPricelessAssetsPolicy: new OnlyUntrackDustOrPricelessAssetsPolicy(fixture['OnlyUntrackDustOrPricelessAssetsPolicy'].address, deployer),
141
+ paraSwapV4Adapter: new ParaSwapV4Adapter(fixture['ParaSwapV4Adapter'].address, deployer),
142
+ paraSwapV5Adapter: new ParaSwapV5Adapter(fixture['ParaSwapV5Adapter'].address, deployer),
143
+ performanceFee: new PerformanceFee(fixture['PerformanceFee'].address, deployer),
144
+ policyManager: new PolicyManager(fixture['PolicyManager'].address, deployer),
145
+ poolTogetherV4Adapter: new PoolTogetherV4Adapter(fixture['PoolTogetherV4Adapter'].address, deployer),
146
+ poolTogetherV4PriceFeed: new PoolTogetherV4PriceFeed(fixture['PoolTogetherV4PriceFeed'].address, deployer),
136
147
  protocolFeeReserveLib: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveLib'].address, deployer),
137
148
  protocolFeeReserveProxy: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveProxy'].address, deployer),
138
149
  protocolFeeTracker: new ProtocolFeeTracker(fixture['ProtocolFeeTracker'].address, deployer),
139
- gasRelayPaymasterFactory: new GasRelayPaymasterFactory(fixture['GasRelayPaymasterFactory'].address, deployer),
150
+ revertingPriceFeed: new RevertingPriceFeed(fixture['RevertingPriceFeed'].address, deployer),
151
+ stakehoundEthPriceFeed: new StakehoundEthPriceFeed(fixture['StakehoundEthPriceFeed'].address, deployer),
152
+ synthetixAdapter: new SynthetixAdapter(fixture['SynthetixAdapter'].address, deployer),
153
+ synthetixPriceFeed: new SynthetixPriceFeed(fixture['SynthetixPriceFeed'].address, deployer),
154
+ uniswapV2ExchangeAdapter: new UniswapV2ExchangeAdapter(fixture['UniswapV2ExchangeAdapter'].address, deployer),
155
+ uniswapV2LiquidityAdapter: new UniswapV2LiquidityAdapter(fixture['UniswapV2LiquidityAdapter'].address, deployer),
156
+ uniswapV2PoolPriceFeed: new UniswapV2PoolPriceFeed(fixture['UniswapV2PoolPriceFeed'].address, deployer),
157
+ uniswapV3Adapter: new UniswapV3Adapter(fixture['UniswapV3Adapter'].address, deployer),
158
+ unpermissionedActionsWrapper: new UnpermissionedActionsWrapper(fixture['UnpermissionedActionsWrapper'].address, deployer),
159
+ valueInterpreter: new ValueInterpreter(fixture['ValueInterpreter'].address, deployer),
160
+ vaultLib: new VaultLib(fixture['VaultLib'].address, deployer),
161
+ yearnVaultV2Adapter: new YearnVaultV2Adapter(fixture['YearnVaultV2Adapter'].address, deployer),
162
+ yearnVaultV2PriceFeed: new YearnVaultV2PriceFeed(fixture['YearnVaultV2PriceFeed'].address, deployer),
163
+ zeroExV2Adapter: new ZeroExV2Adapter(fixture['ZeroExV2Adapter'].address, deployer),
140
164
  } as const;
141
165
 
142
166
  return {
143
- deployer,
144
- deployment,
145
167
  accounts,
146
168
  config,
169
+ deployer,
170
+ deployment,
147
171
  } as const;
148
172
  }
149
173
 
150
174
  type Resolve<T extends () => any> = ReturnType<T> extends Promise<infer U> ? U : ReturnType<T>;
151
- type ContractMap = Record<string, Contract>;
152
-
153
- export interface DeploymentFixtureWithoutConfig<T extends ContractMap> {
154
- deployer: SignerWithAddress;
155
- deployment: T;
156
- accounts: SignerWithAddress[];
157
- }
158
-
159
- export interface DeploymentFixtureWithConfig<T extends ContractMap> extends DeploymentFixtureWithoutConfig<T> {
160
- config: DeploymentConfig;
161
- }
162
175
 
163
176
  export type ProtocolDeployment = Resolve<typeof deployProtocolFixture>;
164
177
 
165
- // TODO: Remove this.
166
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
167
- export async function defaultTestDeployment(_: any): Promise<any> {
168
- throw new Error('Removed');
178
+ import type { ChainlinkRateAsset } from '@enzymefinance/protocol';
179
+
180
+ export interface DeploymentConfig {
181
+ feeToken: string;
182
+ weth: string;
183
+ wrappedNativeAsset: string;
184
+ primitives: Record<string, string>;
185
+ gsn: {
186
+ relayHub: string;
187
+ relayWorker: string;
188
+ trustedForwarder: string;
189
+ };
190
+ chainlink: {
191
+ ethusd: string;
192
+ aggregators: Record<string, readonly [string, ChainlinkRateAsset]>;
193
+ };
194
+ synthetix: {
195
+ snx: string;
196
+ susd: string;
197
+ synths: Record<string, string>;
198
+ addressResolver: string;
199
+ delegateApprovals: string;
200
+ originator: string;
201
+ redeemer: string;
202
+ trackingCode: string;
203
+ };
204
+ curve: {
205
+ addressProvider: string;
206
+ minter: string;
207
+ pools: Record<string, { pool: string; lpToken: string; liquidityGaugeToken: string; invariantProxyAsset: string }>;
208
+ };
209
+ aave: {
210
+ lendingPoolAddressProvider: string;
211
+ protocolDataProvider: string;
212
+ atokens: Record<string, [string, string]>;
213
+ };
214
+ compound: {
215
+ ceth: string;
216
+ comptroller: string;
217
+ ctokens: Record<string, string>;
218
+ };
219
+ idle: {
220
+ bestYieldIdleDai: string;
221
+ bestYieldIdleUsdc: string;
222
+ bestYieldIdleUsdt: string;
223
+ bestYieldIdleSusd: string;
224
+ bestYieldIdleTusd: string;
225
+ bestYieldIdleWbtc: string;
226
+ riskAdjustedIdleDai: string;
227
+ riskAdjustedIdleUsdc: string;
228
+ riskAdjustedIdleUsdt: string;
229
+ };
230
+ lido: {
231
+ steth: string;
232
+ };
233
+ paraSwapV4: {
234
+ augustusSwapper: string;
235
+ tokenTransferProxy: string;
236
+ };
237
+ paraSwapV5: {
238
+ augustusSwapper: string;
239
+ tokenTransferProxy: string;
240
+ };
241
+ poolTogetherV4: {
242
+ ptTokens: Record<string, [string, string]>;
243
+ };
244
+ stakehound: {
245
+ steth: string;
246
+ };
247
+ unsupportedAssets: Record<string, string>;
248
+ uniswap: {
249
+ factory: string;
250
+ router: string;
251
+ pools: Record<string, string>;
252
+ };
253
+ uniswapV3: {
254
+ router: string;
255
+ nonFungiblePositionManager: string;
256
+ };
257
+ yearn: {
258
+ vaultV2: {
259
+ registry: string;
260
+ yVaults: Record<string, string>;
261
+ };
262
+ };
263
+ zeroex: {
264
+ exchange: string;
265
+ allowedMakers: string[];
266
+ };
267
+ policies: {
268
+ guaranteedRedemption: {
269
+ redemptionWindowBuffer: number;
270
+ };
271
+ };
169
272
  }
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({
@@ -18,10 +19,10 @@ export async function addNewAssetsToFund({
18
19
  }) {
19
20
  // First, add tracked assets while their balances are 0
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,18 +1,20 @@
1
- import {
1
+ import type {
2
2
  AssetFinalityResolver,
3
+ Dispatcher,
4
+ GasRelayPaymasterFactory,
5
+ ValueInterpreter,
6
+ } from '@enzymefinance/protocol';
7
+ import {
3
8
  ComptrollerLib,
4
9
  ExternalPositionManager,
5
- Dispatcher,
6
10
  FeeManager,
7
11
  FundDeployer,
8
- GasRelayPaymasterFactory,
9
12
  IntegrationManager,
10
13
  PolicyManager,
11
14
  ProtocolFeeTracker,
12
- ValueInterpreter,
13
15
  VaultLib,
14
16
  } from '@enzymefinance/protocol';
15
- import { Signer } from 'ethers';
17
+ import type { Signer } from 'ethers';
16
18
 
17
19
  // TODO: Should refactor this function to take all deployment contracts and set up everything by default,
18
20
  // unless overrides are passed-in
@@ -21,10 +23,7 @@ export async function createFundDeployer({
21
23
  assetFinalityResolver,
22
24
  externalPositionManager,
23
25
  dispatcher,
24
- feeManager,
25
26
  gasRelayPaymasterFactory,
26
- integrationManager,
27
- policyManager,
28
27
  valueInterpreter,
29
28
  vaultLib,
30
29
  setOnDispatcher = true,
@@ -50,16 +49,33 @@ export async function createFundDeployer({
50
49
  const protocolFeeReserve = await vaultLib.getProtocolFeeReserve();
51
50
 
52
51
  const nextFundDeployer = await FundDeployer.deploy(deployer, dispatcher, gasRelayPaymasterFactory);
52
+
53
+ // Re-deploy extensions with new FundDeployer
54
+ const nextPolicyManager = await PolicyManager.deploy(deployer, nextFundDeployer, gasRelayPaymasterFactory);
55
+ const nextExternalPositionManager = await ExternalPositionManager.deploy(
56
+ deployer,
57
+ nextFundDeployer,
58
+ await externalPositionManager.getExternalPositionFactory(),
59
+ nextPolicyManager,
60
+ );
61
+ const nextFeeManager = await FeeManager.deploy(deployer, nextFundDeployer);
62
+ const nextIntegrationManager = await IntegrationManager.deploy(
63
+ deployer,
64
+ nextFundDeployer,
65
+ nextPolicyManager,
66
+ valueInterpreter,
67
+ );
68
+
53
69
  const nextComptrollerLib = await ComptrollerLib.deploy(
54
70
  deployer,
55
71
  dispatcher,
56
72
  protocolFeeReserve,
57
73
  nextFundDeployer,
58
74
  valueInterpreter,
59
- externalPositionManager,
60
- feeManager,
61
- integrationManager,
62
- policyManager,
75
+ nextExternalPositionManager,
76
+ nextFeeManager,
77
+ nextIntegrationManager,
78
+ nextPolicyManager,
63
79
  assetFinalityResolver,
64
80
  gasRelayPaymasterFactory,
65
81
  mlnToken,
@@ -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,