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