@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.
- package/CHANGELOG.md +33 -0
- package/dist/declarations/src/assertions.d.ts +4 -4
- package/dist/declarations/src/deployment.d.ts +181 -82
- package/dist/declarations/src/gasRelayer.d.ts +56 -54
- package/dist/declarations/src/helpers.d.ts +16 -15
- package/dist/declarations/src/index.d.ts +6 -6
- package/dist/declarations/src/scaffolding/assets.d.ts +10 -10
- package/dist/declarations/src/scaffolding/chainlink.d.ts +3 -3
- package/dist/declarations/src/scaffolding/common.d.ts +7 -7
- package/dist/declarations/src/scaffolding/core.d.ts +17 -16
- package/dist/declarations/src/scaffolding/extensions/common.d.ts +11 -11
- package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +35 -0
- package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +56 -59
- package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +4 -2
- package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +53 -20
- package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +99 -0
- package/dist/declarations/src/scaffolding/extensions/fees.d.ts +12 -12
- package/dist/declarations/src/scaffolding/extensions/index.d.ts +5 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +20 -19
- package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +28 -28
- package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +272 -271
- package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +28 -28
- package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +14 -12
- package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +32 -32
- package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV4.d.ts +23 -22
- 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 +33 -25
- package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +15 -15
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +46 -46
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +15 -15
- package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +22 -22
- package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +12 -12
- package/dist/declarations/src/scaffolding/extensions/policies.d.ts +17 -17
- package/dist/declarations/src/scaffolding/index.d.ts +8 -8
- package/dist/declarations/src/scaffolding/setup.d.ts +77 -75
- package/dist/declarations/src/scaffolding/shares.d.ts +35 -35
- package/dist/declarations/src/scaffolding/vaultCalls.d.ts +32 -17
- package/dist/declarations/src/whales.d.ts +42 -44
- package/dist/enzymefinance-testutils.browser.cjs.js +1470 -697
- package/dist/enzymefinance-testutils.browser.esm.js +1257 -508
- package/dist/enzymefinance-testutils.cjs.dev.js +1470 -697
- package/dist/enzymefinance-testutils.cjs.prod.js +1470 -697
- package/dist/enzymefinance-testutils.esm.js +1257 -508
- package/package.json +6 -6
- package/src/assertions.ts +5 -2
- package/src/deployment.ts +202 -99
- package/src/gasRelayer.ts +17 -18
- package/src/helpers.ts +6 -4
- package/src/scaffolding/assets.ts +6 -5
- package/src/scaffolding/chainlink.ts +2 -2
- package/src/scaffolding/common.ts +1 -1
- package/src/scaffolding/core.ts +28 -12
- package/src/scaffolding/extensions/common.ts +4 -4
- package/src/scaffolding/extensions/external-positions/actions.ts +103 -0
- package/src/scaffolding/extensions/external-positions/compound.ts +69 -114
- package/src/scaffolding/extensions/external-positions/index.ts +2 -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 +72 -68
- package/src/scaffolding/extensions/integrations/idle.ts +9 -11
- package/src/scaffolding/extensions/integrations/index.ts +2 -0
- package/src/scaffolding/extensions/integrations/mock.ts +11 -13
- 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 -19
- package/src/scaffolding/shares.ts +5 -4
- package/src/scaffolding/vaultCalls.ts +50 -3
- package/src/whales.ts +26 -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.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.
|
|
12
|
-
"@enzymefinance/ethers": "^1.0.
|
|
13
|
-
"@enzymefinance/hardhat": "^1.0.
|
|
14
|
-
"@enzymefinance/protocol": "^4.0.0-next.
|
|
15
|
-
"ethers": "^5.
|
|
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
|
|
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,64 +1,74 @@
|
|
|
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,
|
|
25
20
|
CurveLiquidityEursAdapter,
|
|
26
21
|
CurveLiquiditySethAdapter,
|
|
27
22
|
CurveLiquidityStethAdapter,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
46
|
-
DepositWrapper,
|
|
47
|
-
UnpermissionedActionsWrapper,
|
|
48
|
-
AllowedAdapterIncomingAssetsPolicy,
|
|
44
|
+
MinAssetBalancesPostRedemptionPolicy,
|
|
49
45
|
MinMaxInvestmentPolicy,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
OnlyRemoveDustExternalPositionPolicy,
|
|
47
|
+
OnlyUntrackDustOrPricelessAssetsPolicy,
|
|
48
|
+
ParaSwapV4Adapter,
|
|
49
|
+
ParaSwapV5Adapter,
|
|
50
|
+
PerformanceFee,
|
|
51
|
+
PolicyManager,
|
|
52
|
+
PoolTogetherV4Adapter,
|
|
53
|
+
PoolTogetherV4PriceFeed,
|
|
54
54
|
ProtocolFeeReserveLib,
|
|
55
55
|
ProtocolFeeTracker,
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
export
|
|
168
|
-
|
|
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 {
|
|
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({
|
|
@@ -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
|
-
|
|
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,
|
|
@@ -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,
|