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