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

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 (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,