@enzymefinance/testutils 4.0.0 → 4.0.3
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/dist/index.d.ts +1566 -0
- package/dist/index.js +3375 -0
- package/dist/index.mjs +3375 -0
- package/package.json +74 -11
- package/CHANGELOG.md +0 -84
- package/dist/declarations/src/assertions.d.ts +0 -4
- package/dist/declarations/src/deployment.d.ts +0 -188
- package/dist/declarations/src/gasRelayer.d.ts +0 -56
- package/dist/declarations/src/helpers.d.ts +0 -16
- package/dist/declarations/src/index.d.ts +0 -6
- package/dist/declarations/src/scaffolding/assets.d.ts +0 -10
- package/dist/declarations/src/scaffolding/chainlink.d.ts +0 -3
- package/dist/declarations/src/scaffolding/common.d.ts +0 -7
- package/dist/declarations/src/scaffolding/core.d.ts +0 -16
- package/dist/declarations/src/scaffolding/extensions/common.d.ts +0 -11
- package/dist/declarations/src/scaffolding/extensions/external-positions/aave-debt.d.ts +0 -51
- package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +0 -36
- package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +0 -56
- package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +0 -5
- package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +0 -56
- package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +0 -100
- package/dist/declarations/src/scaffolding/extensions/fees.d.ts +0 -12
- package/dist/declarations/src/scaffolding/extensions/index.d.ts +0 -5
- package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +0 -20
- package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +0 -56
- package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +0 -106
- package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +0 -28
- package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +0 -14
- package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +0 -32
- package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +0 -17
- package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +0 -23
- package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +0 -29
- package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +0 -28
- package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +0 -15
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +0 -46
- package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +0 -15
- package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +0 -22
- package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +0 -12
- package/dist/declarations/src/scaffolding/extensions/policies.d.ts +0 -17
- package/dist/declarations/src/scaffolding/index.d.ts +0 -8
- package/dist/declarations/src/scaffolding/setup.d.ts +0 -77
- package/dist/declarations/src/scaffolding/shares.d.ts +0 -35
- package/dist/declarations/src/scaffolding/vaultCalls.d.ts +0 -32
- package/dist/declarations/src/whales.d.ts +0 -49
- package/dist/enzymefinance-testutils.browser.cjs.js +0 -4158
- package/dist/enzymefinance-testutils.browser.esm.js +0 -4028
- package/dist/enzymefinance-testutils.cjs.d.ts +0 -1
- package/dist/enzymefinance-testutils.cjs.dev.js +0 -4158
- package/dist/enzymefinance-testutils.cjs.js +0 -7
- package/dist/enzymefinance-testutils.cjs.prod.js +0 -4158
- package/dist/enzymefinance-testutils.esm.js +0 -4028
- package/src/assertions.ts +0 -23
- package/src/deployment.ts +0 -280
- package/src/gasRelayer.ts +0 -95
- package/src/helpers.ts +0 -39
- package/src/index.ts +0 -6
- package/src/scaffolding/assets.ts +0 -37
- package/src/scaffolding/chainlink.ts +0 -8
- package/src/scaffolding/common.ts +0 -11
- package/src/scaffolding/core.ts +0 -103
- package/src/scaffolding/extensions/common.ts +0 -30
- package/src/scaffolding/extensions/external-positions/aave-debt.ts +0 -179
- package/src/scaffolding/extensions/external-positions/actions.ts +0 -108
- package/src/scaffolding/extensions/external-positions/compound.ts +0 -190
- package/src/scaffolding/extensions/external-positions/index.ts +0 -5
- package/src/scaffolding/extensions/external-positions/mocks.ts +0 -191
- package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +0 -284
- package/src/scaffolding/extensions/fees.ts +0 -70
- package/src/scaffolding/extensions/index.ts +0 -5
- package/src/scaffolding/extensions/integrations/aave.ts +0 -78
- package/src/scaffolding/extensions/integrations/compound.ts +0 -255
- package/src/scaffolding/extensions/integrations/curve.ts +0 -354
- package/src/scaffolding/extensions/integrations/idle.ts +0 -104
- package/src/scaffolding/extensions/integrations/index.ts +0 -14
- package/src/scaffolding/extensions/integrations/mock.ts +0 -116
- package/src/scaffolding/extensions/integrations/olympusV2.ts +0 -71
- package/src/scaffolding/extensions/integrations/paraSwapV5.ts +0 -73
- package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +0 -117
- package/src/scaffolding/extensions/integrations/synthetix.ts +0 -111
- package/src/scaffolding/extensions/integrations/trackedAssets.ts +0 -48
- package/src/scaffolding/extensions/integrations/uniswapV2.ts +0 -175
- package/src/scaffolding/extensions/integrations/uniswapV3.ts +0 -55
- package/src/scaffolding/extensions/integrations/yearn.ts +0 -79
- package/src/scaffolding/extensions/integrations/zeroExV2.ts +0 -47
- package/src/scaffolding/extensions/policies.ts +0 -112
- package/src/scaffolding/index.ts +0 -8
- package/src/scaffolding/setup.ts +0 -243
- package/src/scaffolding/shares.ts +0 -80
- package/src/scaffolding/vaultCalls.ts +0 -105
- package/src/types.d.ts +0 -2
- package/src/whales.ts +0 -82
- package/tsconfig.json +0 -5
package/src/assertions.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { ContractReceipt } from '@enzymefinance/ethers';
|
|
2
|
-
import { extractEvent } from '@enzymefinance/ethers';
|
|
3
|
-
import type { utils } from 'ethers';
|
|
4
|
-
|
|
5
|
-
export function assertEvent<TResult = any>(
|
|
6
|
-
receipt: ContractReceipt<any>,
|
|
7
|
-
event: string | utils.EventFragment,
|
|
8
|
-
match?: TResult,
|
|
9
|
-
) {
|
|
10
|
-
const events = extractEvent(receipt, event);
|
|
11
|
-
expect(events.length).toBe(1);
|
|
12
|
-
expect(receipt).toHaveEmittedWith(event, match);
|
|
13
|
-
|
|
14
|
-
const args = events.shift()?.args;
|
|
15
|
-
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
17
|
-
return (args as unknown as typeof match)!;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function assertNoEvent(receipt: ContractReceipt<any>, event: string | utils.EventFragment) {
|
|
21
|
-
const events = extractEvent(receipt, event);
|
|
22
|
-
expect(events.length).toBe(0);
|
|
23
|
-
}
|
package/src/deployment.ts
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AaveAdapter,
|
|
3
|
-
AaveDebtPositionLib,
|
|
4
|
-
AaveDebtPositionParser,
|
|
5
|
-
AavePriceFeed,
|
|
6
|
-
AddressListRegistry,
|
|
7
|
-
AllowedAdapterIncomingAssetsPolicy,
|
|
8
|
-
AllowedAdaptersPolicy,
|
|
9
|
-
AllowedAssetsForRedemptionPolicy,
|
|
10
|
-
AllowedDepositRecipientsPolicy,
|
|
11
|
-
AllowedExternalPositionTypesPolicy,
|
|
12
|
-
AllowedSharesTransferRecipientsPolicy,
|
|
13
|
-
CompoundAdapter,
|
|
14
|
-
CompoundDebtPositionLib,
|
|
15
|
-
CompoundDebtPositionParser,
|
|
16
|
-
CompoundPriceFeed,
|
|
17
|
-
ComptrollerLib,
|
|
18
|
-
ConvexCurveLpStakingAdapter,
|
|
19
|
-
ConvexCurveLpStakingWrapperFactory,
|
|
20
|
-
ConvexCurveLpStakingWrapperPriceFeed,
|
|
21
|
-
CumulativeSlippageTolerancePolicy,
|
|
22
|
-
CurveExchangeAdapter,
|
|
23
|
-
CurveLiquidityAdapter,
|
|
24
|
-
CurvePriceFeed,
|
|
25
|
-
DepositWrapper,
|
|
26
|
-
Dispatcher,
|
|
27
|
-
EntranceRateBurnFee,
|
|
28
|
-
EntranceRateDirectFee,
|
|
29
|
-
ExitRateBurnFee,
|
|
30
|
-
ExitRateDirectFee,
|
|
31
|
-
ExternalPositionFactory,
|
|
32
|
-
ExternalPositionManager,
|
|
33
|
-
FeeManager,
|
|
34
|
-
FundDeployer,
|
|
35
|
-
FundValueCalculator,
|
|
36
|
-
FundValueCalculatorRouter,
|
|
37
|
-
FundValueCalculatorUsdWrapper,
|
|
38
|
-
FuseAdapter,
|
|
39
|
-
FusePriceFeed,
|
|
40
|
-
GasRelayPaymasterFactory,
|
|
41
|
-
IdleAdapter,
|
|
42
|
-
IdlePriceFeed,
|
|
43
|
-
IntegrationManager,
|
|
44
|
-
LidoStethPriceFeed,
|
|
45
|
-
ManagementFee,
|
|
46
|
-
MinAssetBalancesPostRedemptionPolicy,
|
|
47
|
-
MinMaxInvestmentPolicy,
|
|
48
|
-
OlympusV2Adapter,
|
|
49
|
-
OnlyRemoveDustExternalPositionPolicy,
|
|
50
|
-
OnlyUntrackDustOrPricelessAssetsPolicy,
|
|
51
|
-
ParaSwapV5Adapter,
|
|
52
|
-
PerformanceFee,
|
|
53
|
-
PolicyManager,
|
|
54
|
-
PoolTogetherV4Adapter,
|
|
55
|
-
PoolTogetherV4PriceFeed,
|
|
56
|
-
ProtocolFeeReserveLib,
|
|
57
|
-
ProtocolFeeTracker,
|
|
58
|
-
RevertingPriceFeed,
|
|
59
|
-
SynthetixAdapter,
|
|
60
|
-
UniswapV2ExchangeAdapter,
|
|
61
|
-
UniswapV2LiquidityAdapter,
|
|
62
|
-
UniswapV2PoolPriceFeed,
|
|
63
|
-
UniswapV3Adapter,
|
|
64
|
-
UnpermissionedActionsWrapper,
|
|
65
|
-
UsdEthSimulatedAggregator,
|
|
66
|
-
ValueInterpreter,
|
|
67
|
-
VaultLib,
|
|
68
|
-
YearnVaultV2Adapter,
|
|
69
|
-
YearnVaultV2PriceFeed,
|
|
70
|
-
ZeroExV2Adapter,
|
|
71
|
-
} from '@enzymefinance/protocol';
|
|
72
|
-
|
|
73
|
-
export async function getNamedSigner(name: string) {
|
|
74
|
-
const accounts = await hre.getNamedAccounts();
|
|
75
|
-
if (!accounts[name]) {
|
|
76
|
-
throw new Error(`Missing account with name ${name}`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return provider.getSignerWithAddress(accounts[name]);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export async function getUnnamedSigners() {
|
|
83
|
-
const accounts = await hre.getUnnamedAccounts();
|
|
84
|
-
|
|
85
|
-
return Promise.all(accounts.map((account) => provider.getSignerWithAddress(account)));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export async function deployProtocolFixture() {
|
|
89
|
-
const fixture = await hre.deployments.fixture();
|
|
90
|
-
const deployer = await getNamedSigner('deployer');
|
|
91
|
-
const accounts = await getUnnamedSigners();
|
|
92
|
-
const config = fixture['Config'].linkedData as DeploymentConfig;
|
|
93
|
-
|
|
94
|
-
// prettier-ignore
|
|
95
|
-
const deployment = {
|
|
96
|
-
aaveAdapter: new AaveAdapter(fixture['AaveAdapter'].address, deployer),
|
|
97
|
-
aaveDebtPositionLib: new AaveDebtPositionLib(fixture['AaveDebtPositionLib'].address, deployer),
|
|
98
|
-
aaveDebtPositionParser: new AaveDebtPositionParser(fixture['AaveDebtPositionParser'].address, deployer),
|
|
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),
|
|
108
|
-
compoundDebtPositionLib: new CompoundDebtPositionLib(fixture['CompoundDebtPositionLib'].address, deployer),
|
|
109
|
-
compoundDebtPositionParser: new CompoundDebtPositionParser(fixture['CompoundDebtPositionParser'].address, deployer),
|
|
110
|
-
compoundPriceFeed: new CompoundPriceFeed(fixture['CompoundPriceFeed'].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),
|
|
117
|
-
curveLiquidityAdapter: new CurveLiquidityAdapter(fixture['CurveLiquidityAdapter'].address, deployer),
|
|
118
|
-
curvePriceFeed: new CurvePriceFeed(fixture['CurvePriceFeed'].address, deployer),
|
|
119
|
-
depositWrapper: new DepositWrapper(fixture['DepositWrapper'].address, deployer),
|
|
120
|
-
dispatcher: new Dispatcher(fixture['Dispatcher'].address, deployer),
|
|
121
|
-
entranceRateBurnFee: new EntranceRateBurnFee(fixture['EntranceRateBurnFee'].address, deployer),
|
|
122
|
-
entranceRateDirectFee: new EntranceRateDirectFee(fixture['EntranceRateDirectFee'].address, deployer),
|
|
123
|
-
exitRateBurnFee: new ExitRateBurnFee(fixture['ExitRateBurnFee'].address, deployer),
|
|
124
|
-
exitRateDirectFee: new ExitRateDirectFee(fixture['ExitRateDirectFee'].address, deployer),
|
|
125
|
-
externalPositionFactory: new ExternalPositionFactory(fixture['ExternalPositionFactory'].address, deployer),
|
|
126
|
-
externalPositionManager: new ExternalPositionManager(fixture['ExternalPositionManager'].address, deployer),
|
|
127
|
-
feeManager: new FeeManager(fixture['FeeManager'].address, deployer),
|
|
128
|
-
fundDeployer: new FundDeployer(fixture['FundDeployer'].address, deployer),
|
|
129
|
-
fundValueCalculator: new FundValueCalculator(fixture['FundValueCalculator'].address, deployer),
|
|
130
|
-
fundValueCalculatorRouter: new FundValueCalculatorRouter(fixture['FundValueCalculatorRouter'].address, deployer),
|
|
131
|
-
fundValueCalculatorUsdWrapper: new FundValueCalculatorUsdWrapper(fixture['FundValueCalculatorUsdWrapper'].address, deployer),
|
|
132
|
-
fuseAdapter: new FuseAdapter(fixture['FuseAdapter'].address, deployer),
|
|
133
|
-
fusePriceFeed: new FusePriceFeed(fixture['FusePriceFeed'].address, deployer),
|
|
134
|
-
gasRelayPaymasterFactory: new GasRelayPaymasterFactory(fixture['GasRelayPaymasterFactory'].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),
|
|
139
|
-
managementFee: new ManagementFee(fixture['ManagementFee'].address, deployer),
|
|
140
|
-
minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
|
|
141
|
-
minMaxInvestmentPolicy: new MinMaxInvestmentPolicy(fixture['MinMaxInvestmentPolicy'].address, deployer),
|
|
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
|
-
paraSwapV5Adapter: new ParaSwapV5Adapter(fixture['ParaSwapV5Adapter'].address, deployer),
|
|
146
|
-
performanceFee: new PerformanceFee(fixture['PerformanceFee'].address, deployer),
|
|
147
|
-
policyManager: new PolicyManager(fixture['PolicyManager'].address, deployer),
|
|
148
|
-
poolTogetherV4Adapter: new PoolTogetherV4Adapter(fixture['PoolTogetherV4Adapter'].address, deployer),
|
|
149
|
-
poolTogetherV4PriceFeed: new PoolTogetherV4PriceFeed(fixture['PoolTogetherV4PriceFeed'].address, deployer),
|
|
150
|
-
protocolFeeReserveLib: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveLib'].address, deployer),
|
|
151
|
-
protocolFeeReserveProxy: new ProtocolFeeReserveLib(fixture['ProtocolFeeReserveProxy'].address, deployer),
|
|
152
|
-
protocolFeeTracker: new ProtocolFeeTracker(fixture['ProtocolFeeTracker'].address, deployer),
|
|
153
|
-
revertingPriceFeed: new RevertingPriceFeed(fixture['RevertingPriceFeed'].address, deployer),
|
|
154
|
-
synthetixAdapter: new SynthetixAdapter(fixture['SynthetixAdapter'].address, deployer),
|
|
155
|
-
uniswapV2ExchangeAdapter: new UniswapV2ExchangeAdapter(fixture['UniswapV2ExchangeAdapter'].address, deployer),
|
|
156
|
-
uniswapV2LiquidityAdapter: new UniswapV2LiquidityAdapter(fixture['UniswapV2LiquidityAdapter'].address, deployer),
|
|
157
|
-
uniswapV2PoolPriceFeed: new UniswapV2PoolPriceFeed(fixture['UniswapV2PoolPriceFeed'].address, deployer),
|
|
158
|
-
uniswapV3Adapter: new UniswapV3Adapter(fixture['UniswapV3Adapter'].address, deployer),
|
|
159
|
-
unpermissionedActionsWrapper: new UnpermissionedActionsWrapper(fixture['UnpermissionedActionsWrapper'].address, deployer),
|
|
160
|
-
usdEthSimulatedAggregator: new UsdEthSimulatedAggregator(fixture['UsdEthSimulatedAggregator'].address, deployer),
|
|
161
|
-
valueInterpreter: new ValueInterpreter(fixture['ValueInterpreter'].address, deployer),
|
|
162
|
-
vaultLib: new VaultLib(fixture['VaultLib'].address, deployer),
|
|
163
|
-
yearnVaultV2Adapter: new YearnVaultV2Adapter(fixture['YearnVaultV2Adapter'].address, deployer),
|
|
164
|
-
yearnVaultV2PriceFeed: new YearnVaultV2PriceFeed(fixture['YearnVaultV2PriceFeed'].address, deployer),
|
|
165
|
-
zeroExV2Adapter: new ZeroExV2Adapter(fixture['ZeroExV2Adapter'].address, deployer),
|
|
166
|
-
} as const;
|
|
167
|
-
|
|
168
|
-
return {
|
|
169
|
-
accounts,
|
|
170
|
-
config,
|
|
171
|
-
deployer,
|
|
172
|
-
deployment,
|
|
173
|
-
} as const;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
type Resolve<T extends () => any> = ReturnType<T> extends Promise<infer U> ? U : ReturnType<T>;
|
|
177
|
-
|
|
178
|
-
export type ProtocolDeployment = Resolve<typeof deployProtocolFixture>;
|
|
179
|
-
|
|
180
|
-
import type { ChainlinkRateAsset } from '@enzymefinance/protocol';
|
|
181
|
-
|
|
182
|
-
export interface DeploymentConfig {
|
|
183
|
-
feeBps: number;
|
|
184
|
-
feeToken: string;
|
|
185
|
-
feeTokenBurn: {
|
|
186
|
-
burnFromVault: boolean;
|
|
187
|
-
sendToProtocolFeeReserve: boolean;
|
|
188
|
-
externalBurnerAddress: string;
|
|
189
|
-
};
|
|
190
|
-
weth: string;
|
|
191
|
-
wrappedNativeAsset: string;
|
|
192
|
-
primitives: Record<string, string>;
|
|
193
|
-
gsn: {
|
|
194
|
-
relayHub: string;
|
|
195
|
-
relayWorker: string;
|
|
196
|
-
trustedForwarder: string;
|
|
197
|
-
};
|
|
198
|
-
chainlink: {
|
|
199
|
-
ethusd: string;
|
|
200
|
-
aggregators: Record<string, readonly [string, ChainlinkRateAsset]>;
|
|
201
|
-
};
|
|
202
|
-
synthetix: {
|
|
203
|
-
snx: string;
|
|
204
|
-
susd: string;
|
|
205
|
-
delegateApprovals: string;
|
|
206
|
-
originator: string;
|
|
207
|
-
redeemer: string;
|
|
208
|
-
trackingCode: string;
|
|
209
|
-
};
|
|
210
|
-
convex: {
|
|
211
|
-
booster: string;
|
|
212
|
-
crvToken: string;
|
|
213
|
-
cvxToken: string;
|
|
214
|
-
};
|
|
215
|
-
curve: {
|
|
216
|
-
addressProvider: string;
|
|
217
|
-
minter: string;
|
|
218
|
-
pools: Record<string, { pool: string; lpToken: string; liquidityGaugeToken: string; invariantProxyAsset: string }>;
|
|
219
|
-
};
|
|
220
|
-
aave: {
|
|
221
|
-
incentivesController: string;
|
|
222
|
-
lendingPoolAddressProvider: string;
|
|
223
|
-
protocolDataProvider: string;
|
|
224
|
-
atokens: Record<string, [string, string]>;
|
|
225
|
-
};
|
|
226
|
-
compound: {
|
|
227
|
-
ceth: string;
|
|
228
|
-
comptroller: string;
|
|
229
|
-
ctokens: Record<string, string>;
|
|
230
|
-
};
|
|
231
|
-
fuse: {
|
|
232
|
-
fetherTokens: Record<string, string>;
|
|
233
|
-
ftokens: Record<string, string>;
|
|
234
|
-
};
|
|
235
|
-
idle: {
|
|
236
|
-
bestYieldIdleDai: string;
|
|
237
|
-
bestYieldIdleUsdc: string;
|
|
238
|
-
bestYieldIdleUsdt: string;
|
|
239
|
-
bestYieldIdleSusd: string;
|
|
240
|
-
bestYieldIdleTusd: string;
|
|
241
|
-
bestYieldIdleWbtc: string;
|
|
242
|
-
riskAdjustedIdleDai: string;
|
|
243
|
-
riskAdjustedIdleUsdc: string;
|
|
244
|
-
riskAdjustedIdleUsdt: string;
|
|
245
|
-
};
|
|
246
|
-
lido: {
|
|
247
|
-
steth: string;
|
|
248
|
-
};
|
|
249
|
-
olympusV2: {
|
|
250
|
-
stakingContract: string;
|
|
251
|
-
};
|
|
252
|
-
paraSwapV5: {
|
|
253
|
-
augustusSwapper: string;
|
|
254
|
-
tokenTransferProxy: string;
|
|
255
|
-
};
|
|
256
|
-
poolTogetherV4: {
|
|
257
|
-
ptTokens: Record<string, [string, string]>;
|
|
258
|
-
};
|
|
259
|
-
positionsLimit: number;
|
|
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
|
-
}
|
package/src/gasRelayer.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
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
|
-
|
|
7
|
-
import { assertEvent } from './assertions';
|
|
8
|
-
|
|
9
|
-
export interface RelayTransactionOptions extends CreateSignedRelayRequestOptions {
|
|
10
|
-
relayHub: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export async function relayTransaction(options: RelayTransactionOptions) {
|
|
14
|
-
const signer = options.sendFunction.contract.signer;
|
|
15
|
-
if (!(signer && isTypedDataSigner(signer))) {
|
|
16
|
-
throw new Error('Missing or invalid signer');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const { relayData, relayRequest, signedRelayRequest } = await createSignedRelayRequest(options);
|
|
20
|
-
|
|
21
|
-
// NOTE: In the real implementation, we fetch these from the relayer.
|
|
22
|
-
const defaultGasLimit = 12450000;
|
|
23
|
-
const defaultMaxAcceptance = BigNumber.from(150000);
|
|
24
|
-
|
|
25
|
-
// NOTE: There is an inconsistency between how the typed data object shape and the relayCall argument.
|
|
26
|
-
const mergedRelayRequest = {
|
|
27
|
-
relayData,
|
|
28
|
-
request: relayRequest,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const relayHub = new IGsnRelayHub(options.relayHub, provider.getSigner(options.relayWorker));
|
|
32
|
-
|
|
33
|
-
return relayHub.relayCall
|
|
34
|
-
.args(defaultMaxAcceptance, mergedRelayRequest, signedRelayRequest, '0x', defaultGasLimit)
|
|
35
|
-
.gas(defaultGasLimit, relayData.gasPrice)
|
|
36
|
-
.send();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const relayed = utils.EventFragment.fromString(
|
|
40
|
-
'TransactionRelayed(address indexed relayManager, address indexed relayWorker, address indexed from, address to, address paymaster, bytes4 selector, uint8 status, uint256 charge)',
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const rejected = utils.EventFragment.fromString(
|
|
44
|
-
'TransactionRejectedByPaymaster(address indexed relayManager, address indexed paymaster, address indexed from, address to, address relayWorker, bytes4 selector, uint256 innerGasUsed, bytes reason)',
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
export function assertDidRelay(receipt: ContractReceipt<any>) {
|
|
48
|
-
return assertEvent(receipt, relayed, {
|
|
49
|
-
charge: expect.anything(),
|
|
50
|
-
from: expect.any(String),
|
|
51
|
-
paymaster: expect.any(String),
|
|
52
|
-
relayManager: expect.any(String),
|
|
53
|
-
relayWorker: expect.any(String),
|
|
54
|
-
selector: expect.any(String),
|
|
55
|
-
status: expect.anything(),
|
|
56
|
-
to: expect.any(String),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function assertDidRelaySuccessfully(receipt: ContractReceipt<any>) {
|
|
61
|
-
const result = assertDidRelay(receipt);
|
|
62
|
-
expect(result.status).toEqBigNumber(0);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function assertDidRelayWithError(receipt: ContractReceipt<any>) {
|
|
66
|
-
const result = assertDidRelay(receipt);
|
|
67
|
-
expect(result.status).toEqBigNumber(1);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function assertDidRelayWithCharge(
|
|
71
|
-
receipt: ContractReceipt<any>,
|
|
72
|
-
amount: BigNumberish,
|
|
73
|
-
tolerance?: BigNumberish,
|
|
74
|
-
) {
|
|
75
|
-
const result = assertDidRelay(receipt);
|
|
76
|
-
expect(result.charge).toBeAroundBigNumber(amount, tolerance);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function assertPaymasterDidReject(receipt: ContractReceipt<any>) {
|
|
80
|
-
return assertEvent(receipt, rejected, {
|
|
81
|
-
from: expect.any(String),
|
|
82
|
-
innerGasUsed: expect.anything(),
|
|
83
|
-
paymaster: expect.any(String),
|
|
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),
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export function assertPaymasterDidRejectForReason(receipt: ContractReceipt<any>, reason: string) {
|
|
93
|
-
const params = assertPaymasterDidReject(receipt);
|
|
94
|
-
expect(utils.toUtf8String('0x' + params.reason.substr(138))).toMatch(reason);
|
|
95
|
-
}
|
package/src/helpers.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
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';
|
|
5
|
-
|
|
6
|
-
export async function transactionTimestamp(receipt: ContractReceipt<any>) {
|
|
7
|
-
const block = await provider.getBlock(receipt.blockNumber);
|
|
8
|
-
|
|
9
|
-
return block.timestamp;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export async function calcMlnValueAndBurnAmountForSharesBuyback({
|
|
13
|
-
valueInterpreter,
|
|
14
|
-
mln,
|
|
15
|
-
denominationAsset,
|
|
16
|
-
sharesSupply,
|
|
17
|
-
gav,
|
|
18
|
-
buybackSharesAmount,
|
|
19
|
-
}: {
|
|
20
|
-
valueInterpreter: ValueInterpreter;
|
|
21
|
-
mln: AddressLike;
|
|
22
|
-
denominationAsset: AddressLike;
|
|
23
|
-
sharesSupply: BigNumberish;
|
|
24
|
-
gav: BigNumberish;
|
|
25
|
-
buybackSharesAmount: BigNumberish;
|
|
26
|
-
}) {
|
|
27
|
-
// Calculate expected mlnValue of shares to buyback
|
|
28
|
-
// TODO: calcGrossShareValue can also be a helper util
|
|
29
|
-
const grossShareValue = BigNumber.from(gav).mul(utils.parseEther('1')).div(sharesSupply);
|
|
30
|
-
const denominationAssetValueOfBuyback = grossShareValue.mul(buybackSharesAmount).div(utils.parseEther('1'));
|
|
31
|
-
const mlnValueOfBuyback = await valueInterpreter.calcCanonicalAssetValue
|
|
32
|
-
.args(denominationAsset, denominationAssetValueOfBuyback, mln)
|
|
33
|
-
.call();
|
|
34
|
-
|
|
35
|
-
// 50% discount
|
|
36
|
-
const mlnAmountToBurn = mlnValueOfBuyback.div(2);
|
|
37
|
-
|
|
38
|
-
return { mlnAmountToBurn, mlnValue: mlnValueOfBuyback };
|
|
39
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { SignerWithAddress } from '@enzymefinance/hardhat';
|
|
2
|
-
import type { ComptrollerLib, IntegrationManager, StandardToken } from '@enzymefinance/protocol';
|
|
3
|
-
import type { BigNumberish } from 'ethers';
|
|
4
|
-
|
|
5
|
-
import { addTrackedAssetsToVault } from './extensions/integrations/trackedAssets';
|
|
6
|
-
|
|
7
|
-
export async function addNewAssetsToFund({
|
|
8
|
-
signer,
|
|
9
|
-
comptrollerProxy,
|
|
10
|
-
integrationManager,
|
|
11
|
-
assets,
|
|
12
|
-
amounts = new Array(assets.length).fill(1),
|
|
13
|
-
}: {
|
|
14
|
-
signer: SignerWithAddress;
|
|
15
|
-
comptrollerProxy: ComptrollerLib;
|
|
16
|
-
integrationManager: IntegrationManager;
|
|
17
|
-
assets: StandardToken[];
|
|
18
|
-
amounts?: BigNumberish[];
|
|
19
|
-
}) {
|
|
20
|
-
// First, add tracked assets
|
|
21
|
-
const receipt = addTrackedAssetsToVault({
|
|
22
|
-
assets,
|
|
23
|
-
comptrollerProxy,
|
|
24
|
-
integrationManager,
|
|
25
|
-
signer,
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// Then seed the vault with balances as necessary
|
|
29
|
-
const vaultProxy = await comptrollerProxy.getVaultProxy();
|
|
30
|
-
for (const i in assets) {
|
|
31
|
-
if (amounts[i] > 0) {
|
|
32
|
-
await assets[i].transfer(vaultProxy, amounts[i]);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return receipt;
|
|
37
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { MockChainlinkPriceSource } from '@enzymefinance/protocol';
|
|
2
|
-
import type { BigNumberish } from 'ethers';
|
|
3
|
-
|
|
4
|
-
export async function updateChainlinkAggregator(aggregator: MockChainlinkPriceSource, price?: BigNumberish) {
|
|
5
|
-
const answer = price ?? (await aggregator.latestAnswer());
|
|
6
|
-
const block = await aggregator.provider.getBlock('latest');
|
|
7
|
-
await aggregator.setLatestAnswer(answer, block.timestamp);
|
|
8
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { AddressLike } from '@enzymefinance/ethers';
|
|
2
|
-
import { StandardToken } from '@enzymefinance/protocol';
|
|
3
|
-
import { utils } from 'ethers';
|
|
4
|
-
|
|
5
|
-
export async function getAssetBalances({ account, assets }: { account: AddressLike; assets: AddressLike[] }) {
|
|
6
|
-
return Promise.all(assets.map((asset) => new StandardToken(asset, provider).balanceOf(account)));
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export async function getAssetUnit(asset: StandardToken) {
|
|
10
|
-
return utils.parseUnits('1', await asset.decimals());
|
|
11
|
-
}
|
package/src/scaffolding/core.ts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import type { Dispatcher, GasRelayPaymasterFactory, ValueInterpreter } from '@enzymefinance/protocol';
|
|
2
|
-
import {
|
|
3
|
-
ComptrollerLib,
|
|
4
|
-
ExternalPositionManager,
|
|
5
|
-
FeeManager,
|
|
6
|
-
FundDeployer,
|
|
7
|
-
IntegrationManager,
|
|
8
|
-
PolicyManager,
|
|
9
|
-
ProtocolFeeTracker,
|
|
10
|
-
VaultLib,
|
|
11
|
-
} from '@enzymefinance/protocol';
|
|
12
|
-
import type { Signer } from 'ethers';
|
|
13
|
-
|
|
14
|
-
// TODO: Should refactor this function to take all deployment contracts and set up everything by default,
|
|
15
|
-
// unless overrides are passed-in
|
|
16
|
-
export async function createFundDeployer({
|
|
17
|
-
deployer,
|
|
18
|
-
externalPositionManager,
|
|
19
|
-
dispatcher,
|
|
20
|
-
gasRelayPaymasterFactory,
|
|
21
|
-
valueInterpreter,
|
|
22
|
-
vaultLib,
|
|
23
|
-
setOnDispatcher = true,
|
|
24
|
-
setReleaseLive = true,
|
|
25
|
-
}: {
|
|
26
|
-
deployer: Signer;
|
|
27
|
-
externalPositionManager: ExternalPositionManager;
|
|
28
|
-
dispatcher: Dispatcher;
|
|
29
|
-
feeManager: FeeManager;
|
|
30
|
-
gasRelayPaymasterFactory: GasRelayPaymasterFactory;
|
|
31
|
-
integrationManager: IntegrationManager;
|
|
32
|
-
policyManager: PolicyManager;
|
|
33
|
-
valueInterpreter: ValueInterpreter;
|
|
34
|
-
vaultLib: VaultLib;
|
|
35
|
-
setOnDispatcher?: boolean;
|
|
36
|
-
setReleaseLive?: boolean;
|
|
37
|
-
}) {
|
|
38
|
-
const mlnToken = await vaultLib.getMlnToken();
|
|
39
|
-
const wethToken = await vaultLib.getWethToken();
|
|
40
|
-
|
|
41
|
-
// TODO: Shortcut for now, can pass in param later
|
|
42
|
-
const protocolFeeReserve = await vaultLib.getProtocolFeeReserve();
|
|
43
|
-
|
|
44
|
-
const nextFundDeployer = await FundDeployer.deploy(deployer, dispatcher, gasRelayPaymasterFactory);
|
|
45
|
-
|
|
46
|
-
// Re-deploy extensions with new FundDeployer
|
|
47
|
-
const nextPolicyManager = await PolicyManager.deploy(deployer, nextFundDeployer, gasRelayPaymasterFactory);
|
|
48
|
-
const nextExternalPositionManager = await ExternalPositionManager.deploy(
|
|
49
|
-
deployer,
|
|
50
|
-
nextFundDeployer,
|
|
51
|
-
await externalPositionManager.getExternalPositionFactory(),
|
|
52
|
-
nextPolicyManager,
|
|
53
|
-
);
|
|
54
|
-
const nextFeeManager = await FeeManager.deploy(deployer, nextFundDeployer);
|
|
55
|
-
const nextIntegrationManager = await IntegrationManager.deploy(
|
|
56
|
-
deployer,
|
|
57
|
-
nextFundDeployer,
|
|
58
|
-
nextPolicyManager,
|
|
59
|
-
valueInterpreter,
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
const nextComptrollerLib = await ComptrollerLib.deploy(
|
|
63
|
-
deployer,
|
|
64
|
-
dispatcher,
|
|
65
|
-
protocolFeeReserve,
|
|
66
|
-
nextFundDeployer,
|
|
67
|
-
valueInterpreter,
|
|
68
|
-
nextExternalPositionManager,
|
|
69
|
-
nextFeeManager,
|
|
70
|
-
nextIntegrationManager,
|
|
71
|
-
nextPolicyManager,
|
|
72
|
-
gasRelayPaymasterFactory,
|
|
73
|
-
mlnToken,
|
|
74
|
-
wethToken,
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
await nextFundDeployer.setComptrollerLib(nextComptrollerLib);
|
|
78
|
-
|
|
79
|
-
const nextProtocolFeeTracker = await ProtocolFeeTracker.deploy(deployer, nextFundDeployer);
|
|
80
|
-
await nextFundDeployer.setProtocolFeeTracker(nextProtocolFeeTracker);
|
|
81
|
-
|
|
82
|
-
const nextVaultLib = await VaultLib.deploy(
|
|
83
|
-
deployer,
|
|
84
|
-
externalPositionManager,
|
|
85
|
-
await vaultLib.getGasRelayPaymasterFactory(),
|
|
86
|
-
await vaultLib.getProtocolFeeReserve(),
|
|
87
|
-
nextProtocolFeeTracker,
|
|
88
|
-
await vaultLib.getMlnToken(),
|
|
89
|
-
await vaultLib.getMlnBurner(),
|
|
90
|
-
await vaultLib.getWethToken(),
|
|
91
|
-
await vaultLib.getPositionsLimit(),
|
|
92
|
-
);
|
|
93
|
-
await nextFundDeployer.setVaultLib(nextVaultLib);
|
|
94
|
-
|
|
95
|
-
if (setReleaseLive) {
|
|
96
|
-
await nextFundDeployer.setReleaseLive();
|
|
97
|
-
}
|
|
98
|
-
if (setOnDispatcher) {
|
|
99
|
-
await dispatcher.setCurrentFundDeployer(nextFundDeployer);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return nextFundDeployer;
|
|
103
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
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
|
-
|
|
6
|
-
export async function callOnExtension({
|
|
7
|
-
comptrollerProxy,
|
|
8
|
-
extension,
|
|
9
|
-
actionId,
|
|
10
|
-
callArgs = '0x',
|
|
11
|
-
signer,
|
|
12
|
-
}: {
|
|
13
|
-
comptrollerProxy: ComptrollerLib;
|
|
14
|
-
extension: AddressLike;
|
|
15
|
-
actionId: BigNumberish;
|
|
16
|
-
callArgs?: BytesLike;
|
|
17
|
-
signer?: SignerWithAddress;
|
|
18
|
-
}) {
|
|
19
|
-
let callOnExtensionTx: any;
|
|
20
|
-
|
|
21
|
-
if (signer) {
|
|
22
|
-
callOnExtensionTx = comptrollerProxy.connect(signer).callOnExtension(extension, actionId, callArgs);
|
|
23
|
-
} else {
|
|
24
|
-
callOnExtensionTx = comptrollerProxy.callOnExtension(extension, actionId, callArgs);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
await expect(callOnExtensionTx).resolves.toBeReceipt();
|
|
28
|
-
|
|
29
|
-
return callOnExtensionTx;
|
|
30
|
-
}
|