@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.
Files changed (92) hide show
  1. package/dist/index.d.ts +1566 -0
  2. package/dist/index.js +3375 -0
  3. package/dist/index.mjs +3375 -0
  4. package/package.json +74 -11
  5. package/CHANGELOG.md +0 -84
  6. package/dist/declarations/src/assertions.d.ts +0 -4
  7. package/dist/declarations/src/deployment.d.ts +0 -188
  8. package/dist/declarations/src/gasRelayer.d.ts +0 -56
  9. package/dist/declarations/src/helpers.d.ts +0 -16
  10. package/dist/declarations/src/index.d.ts +0 -6
  11. package/dist/declarations/src/scaffolding/assets.d.ts +0 -10
  12. package/dist/declarations/src/scaffolding/chainlink.d.ts +0 -3
  13. package/dist/declarations/src/scaffolding/common.d.ts +0 -7
  14. package/dist/declarations/src/scaffolding/core.d.ts +0 -16
  15. package/dist/declarations/src/scaffolding/extensions/common.d.ts +0 -11
  16. package/dist/declarations/src/scaffolding/extensions/external-positions/aave-debt.d.ts +0 -51
  17. package/dist/declarations/src/scaffolding/extensions/external-positions/actions.d.ts +0 -36
  18. package/dist/declarations/src/scaffolding/extensions/external-positions/compound.d.ts +0 -56
  19. package/dist/declarations/src/scaffolding/extensions/external-positions/index.d.ts +0 -5
  20. package/dist/declarations/src/scaffolding/extensions/external-positions/mocks.d.ts +0 -56
  21. package/dist/declarations/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.d.ts +0 -100
  22. package/dist/declarations/src/scaffolding/extensions/fees.d.ts +0 -12
  23. package/dist/declarations/src/scaffolding/extensions/index.d.ts +0 -5
  24. package/dist/declarations/src/scaffolding/extensions/integrations/aave.d.ts +0 -20
  25. package/dist/declarations/src/scaffolding/extensions/integrations/compound.d.ts +0 -56
  26. package/dist/declarations/src/scaffolding/extensions/integrations/curve.d.ts +0 -106
  27. package/dist/declarations/src/scaffolding/extensions/integrations/idle.d.ts +0 -28
  28. package/dist/declarations/src/scaffolding/extensions/integrations/index.d.ts +0 -14
  29. package/dist/declarations/src/scaffolding/extensions/integrations/mock.d.ts +0 -32
  30. package/dist/declarations/src/scaffolding/extensions/integrations/olympusV2.d.ts +0 -17
  31. package/dist/declarations/src/scaffolding/extensions/integrations/paraSwapV5.d.ts +0 -23
  32. package/dist/declarations/src/scaffolding/extensions/integrations/poolTogetherV4.d.ts +0 -29
  33. package/dist/declarations/src/scaffolding/extensions/integrations/synthetix.d.ts +0 -28
  34. package/dist/declarations/src/scaffolding/extensions/integrations/trackedAssets.d.ts +0 -15
  35. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV2.d.ts +0 -46
  36. package/dist/declarations/src/scaffolding/extensions/integrations/uniswapV3.d.ts +0 -15
  37. package/dist/declarations/src/scaffolding/extensions/integrations/yearn.d.ts +0 -22
  38. package/dist/declarations/src/scaffolding/extensions/integrations/zeroExV2.d.ts +0 -12
  39. package/dist/declarations/src/scaffolding/extensions/policies.d.ts +0 -17
  40. package/dist/declarations/src/scaffolding/index.d.ts +0 -8
  41. package/dist/declarations/src/scaffolding/setup.d.ts +0 -77
  42. package/dist/declarations/src/scaffolding/shares.d.ts +0 -35
  43. package/dist/declarations/src/scaffolding/vaultCalls.d.ts +0 -32
  44. package/dist/declarations/src/whales.d.ts +0 -49
  45. package/dist/enzymefinance-testutils.browser.cjs.js +0 -4158
  46. package/dist/enzymefinance-testutils.browser.esm.js +0 -4028
  47. package/dist/enzymefinance-testutils.cjs.d.ts +0 -1
  48. package/dist/enzymefinance-testutils.cjs.dev.js +0 -4158
  49. package/dist/enzymefinance-testutils.cjs.js +0 -7
  50. package/dist/enzymefinance-testutils.cjs.prod.js +0 -4158
  51. package/dist/enzymefinance-testutils.esm.js +0 -4028
  52. package/src/assertions.ts +0 -23
  53. package/src/deployment.ts +0 -280
  54. package/src/gasRelayer.ts +0 -95
  55. package/src/helpers.ts +0 -39
  56. package/src/index.ts +0 -6
  57. package/src/scaffolding/assets.ts +0 -37
  58. package/src/scaffolding/chainlink.ts +0 -8
  59. package/src/scaffolding/common.ts +0 -11
  60. package/src/scaffolding/core.ts +0 -103
  61. package/src/scaffolding/extensions/common.ts +0 -30
  62. package/src/scaffolding/extensions/external-positions/aave-debt.ts +0 -179
  63. package/src/scaffolding/extensions/external-positions/actions.ts +0 -108
  64. package/src/scaffolding/extensions/external-positions/compound.ts +0 -190
  65. package/src/scaffolding/extensions/external-positions/index.ts +0 -5
  66. package/src/scaffolding/extensions/external-positions/mocks.ts +0 -191
  67. package/src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts +0 -284
  68. package/src/scaffolding/extensions/fees.ts +0 -70
  69. package/src/scaffolding/extensions/index.ts +0 -5
  70. package/src/scaffolding/extensions/integrations/aave.ts +0 -78
  71. package/src/scaffolding/extensions/integrations/compound.ts +0 -255
  72. package/src/scaffolding/extensions/integrations/curve.ts +0 -354
  73. package/src/scaffolding/extensions/integrations/idle.ts +0 -104
  74. package/src/scaffolding/extensions/integrations/index.ts +0 -14
  75. package/src/scaffolding/extensions/integrations/mock.ts +0 -116
  76. package/src/scaffolding/extensions/integrations/olympusV2.ts +0 -71
  77. package/src/scaffolding/extensions/integrations/paraSwapV5.ts +0 -73
  78. package/src/scaffolding/extensions/integrations/poolTogetherV4.ts +0 -117
  79. package/src/scaffolding/extensions/integrations/synthetix.ts +0 -111
  80. package/src/scaffolding/extensions/integrations/trackedAssets.ts +0 -48
  81. package/src/scaffolding/extensions/integrations/uniswapV2.ts +0 -175
  82. package/src/scaffolding/extensions/integrations/uniswapV3.ts +0 -55
  83. package/src/scaffolding/extensions/integrations/yearn.ts +0 -79
  84. package/src/scaffolding/extensions/integrations/zeroExV2.ts +0 -47
  85. package/src/scaffolding/extensions/policies.ts +0 -112
  86. package/src/scaffolding/index.ts +0 -8
  87. package/src/scaffolding/setup.ts +0 -243
  88. package/src/scaffolding/shares.ts +0 -80
  89. package/src/scaffolding/vaultCalls.ts +0 -105
  90. package/src/types.d.ts +0 -2
  91. package/src/whales.ts +0 -82
  92. package/tsconfig.json +0 -5
package/dist/index.js ADDED
@@ -0,0 +1,3375 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/accounts.ts
22
+ var _ethers = require('@enzymefinance/ethers');
23
+
24
+ // src/helpers.ts
25
+ var _protocol = require('@enzymefinance/protocol');
26
+ var _ethers3 = require('ethers');
27
+ var _merkletreejs = require('merkletreejs');
28
+ async function calcMlnValueAndBurnAmountForSharesBuyback({
29
+ valueInterpreter,
30
+ mln,
31
+ denominationAsset,
32
+ sharesSupply,
33
+ gav,
34
+ buybackSharesAmount
35
+ }) {
36
+ const grossShareValue = _ethers3.BigNumber.from(gav).mul(_ethers3.utils.parseEther("1")).div(sharesSupply);
37
+ const denominationAssetValueOfBuyback = grossShareValue.mul(buybackSharesAmount).div(_ethers3.utils.parseEther("1"));
38
+ const mlnValueOfBuyback = await valueInterpreter.calcCanonicalAssetValue.args(denominationAsset, denominationAssetValueOfBuyback, mln).call();
39
+ const mlnAmountToBurn = mlnValueOfBuyback.div(2);
40
+ return { mlnAmountToBurn, mlnValue: mlnValueOfBuyback };
41
+ }
42
+ function generateMerkleTreeForContractProof({
43
+ itemArrays,
44
+ itemTypes
45
+ }) {
46
+ const leaves = itemArrays.map((itemArray) => _ethers3.utils.solidityKeccak256(itemTypes, itemArray));
47
+ const tree = new (0, _merkletreejs.MerkleTree)(leaves, _ethers3.utils.keccak256, { sort: true });
48
+ const root = tree.getHexRoot();
49
+ return { leaves, root, tree };
50
+ }
51
+ async function sendEthBySelfDestruct({
52
+ signer,
53
+ recipient,
54
+ amount = _ethers3.utils.parseEther("1")
55
+ }) {
56
+ const selfDestructEthPayer = await _protocol.SelfDestructEthPayer.deploy(signer);
57
+ await selfDestructEthPayer.destructTo.args(recipient).value(amount).send();
58
+ }
59
+ async function transactionTimestamp(receipt) {
60
+ const block = await provider.getBlock(receipt.blockNumber);
61
+ return block.timestamp;
62
+ }
63
+
64
+ // src/accounts.ts
65
+ async function impersonateContractSigner({
66
+ contractAddress,
67
+ ethSeeder,
68
+ provider: provider2
69
+ }) {
70
+ await sendEthBySelfDestruct({ recipient: contractAddress, signer: ethSeeder });
71
+ return impersonateSigner({
72
+ provider: provider2,
73
+ signerAddress: contractAddress
74
+ });
75
+ }
76
+ async function impersonateSigner({
77
+ signerAddress,
78
+ provider: provider2
79
+ }) {
80
+ await provider2.send("hardhat_impersonateAccount", [signerAddress]);
81
+ return provider2.getSignerWithAddress(_ethers.resolveAddress.call(void 0, signerAddress));
82
+ }
83
+
84
+ // src/assertions.ts
85
+
86
+ function assertEvent(receipt, event, match) {
87
+ var _a;
88
+ const events = _ethers.extractEvent.call(void 0, receipt, event);
89
+ expect(events.length).toBe(1);
90
+ expect(receipt).toHaveEmittedWith(event, match);
91
+ const args = (_a = events.shift()) == null ? void 0 : _a.args;
92
+ return args;
93
+ }
94
+ function assertNoEvent(receipt, event) {
95
+ const events = _ethers.extractEvent.call(void 0, receipt, event);
96
+ expect(events.length).toBe(0);
97
+ }
98
+
99
+ // src/deployment.ts
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+ async function getNamedSigner(name) {
182
+ const accounts = await hre.getNamedAccounts();
183
+ if (!accounts[name]) {
184
+ throw new Error(`Missing account with name ${name}`);
185
+ }
186
+ return provider.getSignerWithAddress(accounts[name]);
187
+ }
188
+ async function getUnnamedSigners() {
189
+ const accounts = await hre.getUnnamedAccounts();
190
+ return Promise.all(accounts.map((account) => provider.getSignerWithAddress(account)));
191
+ }
192
+ async function deployProtocolFixture() {
193
+ const fixture = await hre.deployments.fixture();
194
+ const deployer = await getNamedSigner("deployer");
195
+ const accounts = await getUnnamedSigners();
196
+ const config = fixture.Config.linkedData;
197
+ const deployment = {
198
+ aaveAdapter: new (0, _protocol.AaveAdapter)(fixture.AaveAdapter.address, deployer),
199
+ aaveDebtPositionLib: new (0, _protocol.AaveDebtPositionLib)(fixture.AaveDebtPositionLib.address, deployer),
200
+ aaveDebtPositionParser: new (0, _protocol.AaveDebtPositionParser)(fixture.AaveDebtPositionParser.address, deployer),
201
+ aavePriceFeed: new (0, _protocol.AavePriceFeed)(fixture.AavePriceFeed.address, deployer),
202
+ addressListRegistry: new (0, _protocol.AddressListRegistry)(fixture.AddressListRegistry.address, deployer),
203
+ allowedAdapterIncomingAssetsPolicy: new (0, _protocol.AllowedAdapterIncomingAssetsPolicy)(fixture.AllowedAdapterIncomingAssetsPolicy.address, deployer),
204
+ allowedAdaptersPolicy: new (0, _protocol.AllowedAdaptersPolicy)(fixture.AllowedAdaptersPolicy.address, deployer),
205
+ allowedAssetsForRedemptionPolicy: new (0, _protocol.AllowedAssetsForRedemptionPolicy)(fixture.AllowedAssetsForRedemptionPolicy.address, deployer),
206
+ allowedDepositRecipientsPolicy: new (0, _protocol.AllowedDepositRecipientsPolicy)(fixture.AllowedDepositRecipientsPolicy.address, deployer),
207
+ allowedExternalPositionTypesPolicy: new (0, _protocol.AllowedExternalPositionTypesPolicy)(fixture.AllowedExternalPositionTypesPolicy.address, deployer),
208
+ allowedSharesTransferRecipientsPolicy: new (0, _protocol.AllowedSharesTransferRecipientsPolicy)(fixture.AllowedSharesTransferRecipientsPolicy.address, deployer),
209
+ compoundAdapter: new (0, _protocol.CompoundAdapter)(fixture.CompoundAdapter.address, deployer),
210
+ compoundDebtPositionLib: new (0, _protocol.CompoundDebtPositionLib)(fixture.CompoundDebtPositionLib.address, deployer),
211
+ compoundDebtPositionParser: new (0, _protocol.CompoundDebtPositionParser)(fixture.CompoundDebtPositionParser.address, deployer),
212
+ compoundPriceFeed: new (0, _protocol.CompoundPriceFeed)(fixture.CompoundPriceFeed.address, deployer),
213
+ comptrollerLib: new (0, _protocol.ComptrollerLib)(fixture.ComptrollerLib.address, deployer),
214
+ convexCurveLpStakingAdapter: new (0, _protocol.ConvexCurveLpStakingAdapter)(fixture.ConvexCurveLpStakingAdapter.address, deployer),
215
+ convexCurveLpStakingWrapperFactory: new (0, _protocol.ConvexCurveLpStakingWrapperFactory)(fixture.ConvexCurveLpStakingWrapperFactory.address, deployer),
216
+ convexCurveLpStakingWrapperPriceFeed: new (0, _protocol.ConvexCurveLpStakingWrapperPriceFeed)(fixture.ConvexCurveLpStakingWrapperPriceFeed.address, deployer),
217
+ convexVotingPositionLib: new (0, _protocol.ConvexVotingPositionLib)(fixture.ConvexVotingPositionLib.address, deployer),
218
+ convexVotingPositionParser: new (0, _protocol.ConvexVotingPositionParser)(fixture.ConvexVotingPositionParser.address, deployer),
219
+ cumulativeSlippageTolerancePolicy: new (0, _protocol.CumulativeSlippageTolerancePolicy)(fixture.CumulativeSlippageTolerancePolicy.address, deployer),
220
+ curveExchangeAdapter: new (0, _protocol.CurveExchangeAdapter)(fixture.CurveExchangeAdapter.address, deployer),
221
+ curveLiquidityAdapter: new (0, _protocol.CurveLiquidityAdapter)(fixture.CurveLiquidityAdapter.address, deployer),
222
+ curvePriceFeed: new (0, _protocol.CurvePriceFeed)(fixture.CurvePriceFeed.address, deployer),
223
+ depositWrapper: new (0, _protocol.DepositWrapper)(fixture.DepositWrapper.address, deployer),
224
+ dispatcher: new (0, _protocol.Dispatcher)(fixture.Dispatcher.address, deployer),
225
+ entranceRateBurnFee: new (0, _protocol.EntranceRateBurnFee)(fixture.EntranceRateBurnFee.address, deployer),
226
+ entranceRateDirectFee: new (0, _protocol.EntranceRateDirectFee)(fixture.EntranceRateDirectFee.address, deployer),
227
+ exitRateBurnFee: new (0, _protocol.ExitRateBurnFee)(fixture.ExitRateBurnFee.address, deployer),
228
+ exitRateDirectFee: new (0, _protocol.ExitRateDirectFee)(fixture.ExitRateDirectFee.address, deployer),
229
+ externalPositionFactory: new (0, _protocol.ExternalPositionFactory)(fixture.ExternalPositionFactory.address, deployer),
230
+ externalPositionManager: new (0, _protocol.ExternalPositionManager)(fixture.ExternalPositionManager.address, deployer),
231
+ feeManager: new (0, _protocol.FeeManager)(fixture.FeeManager.address, deployer),
232
+ fundDeployer: new (0, _protocol.FundDeployer)(fixture.FundDeployer.address, deployer),
233
+ fundValueCalculator: new (0, _protocol.FundValueCalculator)(fixture.FundValueCalculator.address, deployer),
234
+ fundValueCalculatorRouter: new (0, _protocol.FundValueCalculatorRouter)(fixture.FundValueCalculatorRouter.address, deployer),
235
+ fundValueCalculatorUsdWrapper: new (0, _protocol.FundValueCalculatorUsdWrapper)(fixture.FundValueCalculatorUsdWrapper.address, deployer),
236
+ fuseAdapter: new (0, _protocol.FuseAdapter)(fixture.FuseAdapter.address, deployer),
237
+ fusePriceFeed: new (0, _protocol.FusePriceFeed)(fixture.FusePriceFeed.address, deployer),
238
+ gasRelayPaymasterFactory: new (0, _protocol.GasRelayPaymasterFactory)(fixture.GasRelayPaymasterFactory.address, deployer),
239
+ globalConfigLib: new (0, _protocol.GlobalConfigLib)(fixture.GlobalConfigLib.address, deployer),
240
+ globalConfigProxy: new (0, _protocol.GlobalConfigLib)(fixture.GlobalConfigProxy.address, deployer),
241
+ idleAdapter: new (0, _protocol.IdleAdapter)(fixture.IdleAdapter.address, deployer),
242
+ idlePriceFeed: new (0, _protocol.IdlePriceFeed)(fixture.IdlePriceFeed.address, deployer),
243
+ integrationManager: new (0, _protocol.IntegrationManager)(fixture.IntegrationManager.address, deployer),
244
+ lidoStethPriceFeed: new (0, _protocol.LidoStethPriceFeed)(fixture.LidoStethPriceFeed.address, deployer),
245
+ liquityDebtPositionLib: new (0, _protocol.LiquityDebtPositionLib)(fixture.LiquityDebtPositionLib.address, deployer),
246
+ liquityDebtPositionParser: new (0, _protocol.LiquityDebtPositionParser)(fixture.LiquityDebtPositionParser.address, deployer),
247
+ managementFee: new (0, _protocol.ManagementFee)(fixture.ManagementFee.address, deployer),
248
+ manualValueOracleFactory: new (0, _protocol.ManualValueOracleFactory)(fixture.ManualValueOracleFactory.address, deployer),
249
+ mapleLiquidityPositionLib: new (0, _protocol.MapleLiquidityPositionLib)(fixture.MapleLiquidityPositionLib.address, deployer),
250
+ mapleLiquidityPositionParser: new (0, _protocol.MapleLiquidityPositionParser)(fixture.MapleLiquidityPositionParser.address, deployer),
251
+ minAssetBalancesPostRedemptionPolicy: new (0, _protocol.MinAssetBalancesPostRedemptionPolicy)(fixture.MinAssetBalancesPostRedemptionPolicy.address, deployer),
252
+ minMaxInvestmentPolicy: new (0, _protocol.MinMaxInvestmentPolicy)(fixture.MinMaxInvestmentPolicy.address, deployer),
253
+ olympusV2Adapter: new (0, _protocol.OlympusV2Adapter)(fixture.OlympusV2Adapter.address, deployer),
254
+ onlyRemoveDustExternalPositionPolicy: new (0, _protocol.OnlyRemoveDustExternalPositionPolicy)(fixture.OnlyRemoveDustExternalPositionPolicy.address, deployer),
255
+ onlyUntrackDustOrPricelessAssetsPolicy: new (0, _protocol.OnlyUntrackDustOrPricelessAssetsPolicy)(fixture.OnlyUntrackDustOrPricelessAssetsPolicy.address, deployer),
256
+ paraSwapV5Adapter: new (0, _protocol.ParaSwapV5Adapter)(fixture.ParaSwapV5Adapter.address, deployer),
257
+ performanceFee: new (0, _protocol.PerformanceFee)(fixture.PerformanceFee.address, deployer),
258
+ policyManager: new (0, _protocol.PolicyManager)(fixture.PolicyManager.address, deployer),
259
+ poolTogetherV4Adapter: new (0, _protocol.PoolTogetherV4Adapter)(fixture.PoolTogetherV4Adapter.address, deployer),
260
+ poolTogetherV4PriceFeed: new (0, _protocol.PoolTogetherV4PriceFeed)(fixture.PoolTogetherV4PriceFeed.address, deployer),
261
+ protocolFeeReserveLib: new (0, _protocol.ProtocolFeeReserveLib)(fixture.ProtocolFeeReserveLib.address, deployer),
262
+ protocolFeeReserveProxy: new (0, _protocol.ProtocolFeeReserveLib)(fixture.ProtocolFeeReserveProxy.address, deployer),
263
+ protocolFeeTracker: new (0, _protocol.ProtocolFeeTracker)(fixture.ProtocolFeeTracker.address, deployer),
264
+ revertingPriceFeed: new (0, _protocol.RevertingPriceFeed)(fixture.RevertingPriceFeed.address, deployer),
265
+ sharesSplitterFactory: new (0, _protocol.SharesSplitterFactory)(fixture.SharesSplitterFactory.address, deployer),
266
+ synthetixAdapter: new (0, _protocol.SynthetixAdapter)(fixture.SynthetixAdapter.address, deployer),
267
+ uintListRegistry: new (0, _protocol.UintListRegistry)(fixture.UintListRegistry.address, deployer),
268
+ uniswapV2ExchangeAdapter: new (0, _protocol.UniswapV2ExchangeAdapter)(fixture.UniswapV2ExchangeAdapter.address, deployer),
269
+ uniswapV2LiquidityAdapter: new (0, _protocol.UniswapV2LiquidityAdapter)(fixture.UniswapV2LiquidityAdapter.address, deployer),
270
+ uniswapV2PoolPriceFeed: new (0, _protocol.UniswapV2PoolPriceFeed)(fixture.UniswapV2PoolPriceFeed.address, deployer),
271
+ uniswapV3Adapter: new (0, _protocol.UniswapV3Adapter)(fixture.UniswapV3Adapter.address, deployer),
272
+ unpermissionedActionsWrapper: new (0, _protocol.UnpermissionedActionsWrapper)(fixture.UnpermissionedActionsWrapper.address, deployer),
273
+ usdEthSimulatedAggregator: new (0, _protocol.UsdEthSimulatedAggregator)(fixture.UsdEthSimulatedAggregator.address, deployer),
274
+ valueInterpreter: new (0, _protocol.ValueInterpreter)(fixture.ValueInterpreter.address, deployer),
275
+ vaultLib: new (0, _protocol.VaultLib)(fixture.VaultLib.address, deployer),
276
+ yearnVaultV2Adapter: new (0, _protocol.YearnVaultV2Adapter)(fixture.YearnVaultV2Adapter.address, deployer),
277
+ yearnVaultV2PriceFeed: new (0, _protocol.YearnVaultV2PriceFeed)(fixture.YearnVaultV2PriceFeed.address, deployer),
278
+ zeroExV2Adapter: new (0, _protocol.ZeroExV2Adapter)(fixture.ZeroExV2Adapter.address, deployer)
279
+ };
280
+ return {
281
+ accounts,
282
+ config,
283
+ deployer,
284
+ deployment
285
+ };
286
+ }
287
+
288
+ // src/gasRelayer.ts
289
+
290
+
291
+ async function relayTransaction(options) {
292
+ const signer = options.sendFunction.contract.signer;
293
+ if (!(signer && _protocol.isTypedDataSigner.call(void 0, signer))) {
294
+ throw new Error("Missing or invalid signer");
295
+ }
296
+ const { relayData, relayRequest, signedRelayRequest } = await _protocol.createSignedRelayRequest.call(void 0, options);
297
+ const defaultGasLimit = 1245e4;
298
+ const defaultMaxAcceptance = _ethers3.BigNumber.from(15e4);
299
+ const mergedRelayRequest = {
300
+ relayData,
301
+ request: relayRequest
302
+ };
303
+ const relayHub = new (0, _protocol.IGsnRelayHub)(options.relayHub, provider.getSigner(options.relayWorker));
304
+ return relayHub.relayCall.args(defaultMaxAcceptance, mergedRelayRequest, signedRelayRequest, "0x", defaultGasLimit).gas(defaultGasLimit, relayData.gasPrice).send();
305
+ }
306
+ var relayed = _ethers3.utils.EventFragment.fromString("TransactionRelayed(address indexed relayManager, address indexed relayWorker, address indexed from, address to, address paymaster, bytes4 selector, uint8 status, uint256 charge)");
307
+ var rejected = _ethers3.utils.EventFragment.fromString("TransactionRejectedByPaymaster(address indexed relayManager, address indexed paymaster, address indexed from, address to, address relayWorker, bytes4 selector, uint256 innerGasUsed, bytes reason)");
308
+ function assertDidRelay(receipt) {
309
+ return assertEvent(receipt, relayed, {
310
+ charge: expect.anything(),
311
+ from: expect.any(String),
312
+ paymaster: expect.any(String),
313
+ relayManager: expect.any(String),
314
+ relayWorker: expect.any(String),
315
+ selector: expect.any(String),
316
+ status: expect.anything(),
317
+ to: expect.any(String)
318
+ });
319
+ }
320
+ function assertDidRelaySuccessfully(receipt) {
321
+ const result = assertDidRelay(receipt);
322
+ expect(result.status).toEqBigNumber(0);
323
+ }
324
+ function assertDidRelayWithError(receipt) {
325
+ const result = assertDidRelay(receipt);
326
+ expect(result.status).toEqBigNumber(1);
327
+ }
328
+ function assertDidRelayWithCharge(receipt, amount, tolerance) {
329
+ const result = assertDidRelay(receipt);
330
+ expect(result.charge).toBeAroundBigNumber(amount, tolerance);
331
+ }
332
+ function assertPaymasterDidReject(receipt) {
333
+ return assertEvent(receipt, rejected, {
334
+ from: expect.any(String),
335
+ innerGasUsed: expect.anything(),
336
+ paymaster: expect.any(String),
337
+ reason: expect.any(String),
338
+ relayManager: expect.any(String),
339
+ relayWorker: expect.any(String),
340
+ selector: expect.any(String),
341
+ to: expect.any(String)
342
+ });
343
+ }
344
+ function assertPaymasterDidRejectForReason(receipt, reason) {
345
+ const params = assertPaymasterDidReject(receipt);
346
+ expect(_ethers3.utils.toUtf8String(`0x${params.reason.substr(138)}`)).toMatch(reason);
347
+ }
348
+
349
+ // src/scaffolding/extensions/integrations/trackedAssets.ts
350
+
351
+
352
+
353
+
354
+
355
+ function addTrackedAssetsToVault({
356
+ signer,
357
+ comptrollerProxy,
358
+ integrationManager,
359
+ assets
360
+ }) {
361
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.AddTrackedAssetsToVault, _protocol.addTrackedAssetsToVaultArgs.call(void 0, { assets }));
362
+ }
363
+ function removeTrackedAssetsFromVault({
364
+ signer,
365
+ comptrollerProxy,
366
+ integrationManager,
367
+ assets
368
+ }) {
369
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.RemoveTrackedAssetsFromVault, _protocol.removeTrackedAssetsFromVaultArgs.call(void 0, { assets }));
370
+ }
371
+
372
+ // src/scaffolding/assets.ts
373
+ async function addNewAssetsToFund({
374
+ signer,
375
+ comptrollerProxy,
376
+ integrationManager,
377
+ assets,
378
+ amounts = new Array(assets.length).fill(1)
379
+ }) {
380
+ const receipt = addTrackedAssetsToVault({
381
+ assets,
382
+ comptrollerProxy,
383
+ integrationManager,
384
+ signer
385
+ });
386
+ const vaultProxy = await comptrollerProxy.getVaultProxy();
387
+ for (const i in assets) {
388
+ if (amounts[i] > 0) {
389
+ await assets[i].transfer(vaultProxy, amounts[i]);
390
+ }
391
+ }
392
+ return receipt;
393
+ }
394
+
395
+ // src/scaffolding/chainlink.ts
396
+ async function updateChainlinkAggregator(aggregator, price) {
397
+ const answer = price != null ? price : await aggregator.latestAnswer();
398
+ const block = await aggregator.provider.getBlock("latest");
399
+ await aggregator.setLatestAnswer(answer, block.timestamp);
400
+ }
401
+
402
+ // src/scaffolding/common.ts
403
+
404
+
405
+ async function getAssetBalances({ account, assets }) {
406
+ return Promise.all(assets.map((asset) => new (0, _protocol.StandardToken)(asset, provider).balanceOf(account)));
407
+ }
408
+ async function getAssetUnit(asset) {
409
+ return _ethers3.utils.parseUnits("1", await asset.decimals());
410
+ }
411
+
412
+ // src/scaffolding/core.ts
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+ async function createFundDeployer({
424
+ deployer,
425
+ externalPositionManager,
426
+ dispatcher,
427
+ gasRelayPaymasterFactory,
428
+ valueInterpreter,
429
+ vaultLib,
430
+ setOnDispatcher = true,
431
+ setReleaseLive = true
432
+ }) {
433
+ const mlnToken = await vaultLib.getMlnToken();
434
+ const wethToken = await vaultLib.getWethToken();
435
+ const protocolFeeReserve = await vaultLib.getProtocolFeeReserve();
436
+ const nextFundDeployer = await _protocol.FundDeployer.deploy(deployer, dispatcher, gasRelayPaymasterFactory);
437
+ const nextPolicyManager = await _protocol.PolicyManager.deploy(deployer, nextFundDeployer, gasRelayPaymasterFactory);
438
+ const nextExternalPositionManager = await _protocol.ExternalPositionManager.deploy(deployer, nextFundDeployer, await externalPositionManager.getExternalPositionFactory(), nextPolicyManager);
439
+ const nextFeeManager = await _protocol.FeeManager.deploy(deployer, nextFundDeployer);
440
+ const nextIntegrationManager = await _protocol.IntegrationManager.deploy(deployer, nextFundDeployer, nextPolicyManager, valueInterpreter);
441
+ const nextComptrollerLib = await _protocol.ComptrollerLib.deploy(deployer, dispatcher, protocolFeeReserve, nextFundDeployer, valueInterpreter, nextExternalPositionManager, nextFeeManager, nextIntegrationManager, nextPolicyManager, gasRelayPaymasterFactory, mlnToken, wethToken);
442
+ await nextFundDeployer.setComptrollerLib(nextComptrollerLib);
443
+ const nextProtocolFeeTracker = await _protocol.ProtocolFeeTracker.deploy(deployer, nextFundDeployer);
444
+ await nextFundDeployer.setProtocolFeeTracker(nextProtocolFeeTracker);
445
+ const nextVaultLib = await _protocol.VaultLib.deploy(deployer, externalPositionManager, await vaultLib.getGasRelayPaymasterFactory(), await vaultLib.getProtocolFeeReserve(), nextProtocolFeeTracker, await vaultLib.getMlnToken(), await vaultLib.getMlnBurner(), await vaultLib.getWethToken(), await vaultLib.getPositionsLimit());
446
+ await nextFundDeployer.setVaultLib(nextVaultLib);
447
+ if (setReleaseLive) {
448
+ await nextFundDeployer.setReleaseLive();
449
+ }
450
+ if (setOnDispatcher) {
451
+ await dispatcher.setCurrentFundDeployer(nextFundDeployer);
452
+ }
453
+ return nextFundDeployer;
454
+ }
455
+
456
+ // src/scaffolding/extensions/common.ts
457
+ async function callOnExtension({
458
+ comptrollerProxy,
459
+ extension,
460
+ actionId,
461
+ callArgs = "0x",
462
+ signer
463
+ }) {
464
+ let callOnExtensionTx;
465
+ if (signer) {
466
+ callOnExtensionTx = comptrollerProxy.connect(signer).callOnExtension(extension, actionId, callArgs);
467
+ } else {
468
+ callOnExtensionTx = comptrollerProxy.callOnExtension(extension, actionId, callArgs);
469
+ }
470
+ await expect(callOnExtensionTx).resolves.toBeReceipt();
471
+ return callOnExtensionTx;
472
+ }
473
+
474
+ // src/scaffolding/extensions/external-positions/aave-debt.ts
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+ // src/scaffolding/extensions/external-positions/actions.ts
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+ async function callOnExternalPosition({
496
+ signer,
497
+ comptrollerProxy,
498
+ externalPositionManager,
499
+ externalPositionProxy,
500
+ actionId,
501
+ actionArgs
502
+ }) {
503
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
504
+ actionArgs,
505
+ actionId,
506
+ externalPositionProxy
507
+ });
508
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
509
+ }
510
+ async function createExternalPosition({
511
+ signer,
512
+ comptrollerProxy,
513
+ externalPositionManager,
514
+ externalPositionTypeId,
515
+ initializationData = "0x",
516
+ callOnExternalPositionData = "0x"
517
+ }) {
518
+ const receipt = await comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CreateExternalPosition, _protocol.encodeArgs.call(void 0, ["uint256", "bytes", "bytes"], [externalPositionTypeId, initializationData, callOnExternalPositionData]));
519
+ const event = _ethers.extractEvent.call(void 0, receipt, externalPositionManager.abi.getEvent("ExternalPositionDeployedForFund"));
520
+ const externalPositionProxy = new (0, _protocol.IExternalPositionProxy)(event[0].args.externalPosition, signer);
521
+ return { externalPositionProxy, receipt };
522
+ }
523
+ async function reactivateExternalPosition({
524
+ signer,
525
+ comptrollerProxy,
526
+ externalPositionManager,
527
+ externalPositionProxy
528
+ }) {
529
+ const callArgs = _protocol.externalPositionReactivateArgs.call(void 0, { externalPositionProxy });
530
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.ReactivateExternalPosition, callArgs);
531
+ }
532
+ async function removeExternalPosition({
533
+ signer,
534
+ comptrollerProxy,
535
+ externalPositionManager,
536
+ externalPositionProxy
537
+ }) {
538
+ const callArgs = _protocol.externalPositionRemoveArgs.call(void 0, { externalPositionProxy });
539
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.RemoveExternalPosition, callArgs);
540
+ }
541
+
542
+ // src/scaffolding/extensions/external-positions/aave-debt.ts
543
+ async function aaveDebtPositionAddCollateral({
544
+ comptrollerProxy,
545
+ externalPositionManager,
546
+ signer,
547
+ aTokens,
548
+ amounts,
549
+ externalPositionProxy
550
+ }) {
551
+ const actionArgs = _protocol.aaveDebtPositionAddCollateralArgs.call(void 0, {
552
+ aTokens,
553
+ amounts
554
+ });
555
+ return callOnExternalPosition({
556
+ actionArgs,
557
+ actionId: _protocol.AaveDebtPositionActionId.AddCollateralAssets,
558
+ comptrollerProxy,
559
+ externalPositionManager,
560
+ externalPositionProxy,
561
+ signer
562
+ });
563
+ }
564
+ async function aaveDebtPositionBorrow({
565
+ comptrollerProxy,
566
+ externalPositionManager,
567
+ signer,
568
+ tokens,
569
+ amounts,
570
+ externalPositionProxy
571
+ }) {
572
+ const actionArgs = _protocol.aaveDebtPositionBorrowArgs.call(void 0, {
573
+ amounts,
574
+ tokens
575
+ });
576
+ return callOnExternalPosition({
577
+ actionArgs,
578
+ actionId: _protocol.AaveDebtPositionActionId.BorrowAsset,
579
+ comptrollerProxy,
580
+ externalPositionManager,
581
+ externalPositionProxy,
582
+ signer
583
+ });
584
+ }
585
+ async function aaveDebtPositionClaimRewards({
586
+ comptrollerProxy,
587
+ externalPositionManager,
588
+ signer,
589
+ assets,
590
+ externalPositionProxy
591
+ }) {
592
+ const actionArgs = _protocol.aaveDebtPositionClaimRewardsArgs.call(void 0, {
593
+ assets
594
+ });
595
+ return callOnExternalPosition({
596
+ actionArgs,
597
+ actionId: _protocol.AaveDebtPositionActionId.ClaimRewards,
598
+ comptrollerProxy,
599
+ externalPositionManager,
600
+ externalPositionProxy,
601
+ signer
602
+ });
603
+ }
604
+ async function aaveDebtPositionRemoveCollateral({
605
+ comptrollerProxy,
606
+ externalPositionManager,
607
+ signer,
608
+ aTokens,
609
+ amounts,
610
+ externalPositionProxy
611
+ }) {
612
+ const actionArgs = _protocol.aaveDebtPositionRemoveCollateralArgs.call(void 0, {
613
+ aTokens,
614
+ amounts
615
+ });
616
+ return callOnExternalPosition({
617
+ actionArgs,
618
+ actionId: _protocol.AaveDebtPositionActionId.RemoveCollateralAssets,
619
+ comptrollerProxy,
620
+ externalPositionManager,
621
+ externalPositionProxy,
622
+ signer
623
+ });
624
+ }
625
+ async function aaveDebtPositionRepayBorrow({
626
+ comptrollerProxy,
627
+ externalPositionManager,
628
+ signer,
629
+ tokens,
630
+ amounts,
631
+ externalPositionProxy
632
+ }) {
633
+ const actionArgs = _protocol.aaveDebtPositionRepayBorrowArgs.call(void 0, {
634
+ amounts,
635
+ tokens
636
+ });
637
+ return callOnExternalPosition({
638
+ actionArgs,
639
+ actionId: _protocol.AaveDebtPositionActionId.RepayBorrowedAssets,
640
+ comptrollerProxy,
641
+ externalPositionManager,
642
+ externalPositionProxy,
643
+ signer
644
+ });
645
+ }
646
+ async function createAaveDebtPosition({
647
+ signer,
648
+ comptrollerProxy,
649
+ externalPositionManager
650
+ }) {
651
+ return createExternalPosition({
652
+ comptrollerProxy,
653
+ externalPositionManager,
654
+ externalPositionTypeId: _protocol.ExternalPositionType.AaveDebtPosition,
655
+ signer
656
+ });
657
+ }
658
+
659
+ // src/scaffolding/extensions/external-positions/compound.ts
660
+
661
+
662
+
663
+
664
+
665
+
666
+ async function compoundDebtPositionAddCollateral({
667
+ comptrollerProxy,
668
+ externalPositionManager,
669
+ fundOwner,
670
+ assets,
671
+ amounts,
672
+ externalPositionProxy,
673
+ cTokens
674
+ }) {
675
+ const actionArgs = _protocol.compoundExternalPositionActionArgs.call(void 0, {
676
+ amounts,
677
+ assets,
678
+ data: _protocol.encodeArgs.call(void 0, ["address[]"], [cTokens])
679
+ });
680
+ return callOnExternalPosition({
681
+ actionArgs,
682
+ actionId: _protocol.CompoundDebtPositionActionId.AddCollateralAssets,
683
+ comptrollerProxy,
684
+ externalPositionManager,
685
+ externalPositionProxy,
686
+ signer: fundOwner
687
+ });
688
+ }
689
+ async function compoundDebtPositionBorrow({
690
+ comptrollerProxy,
691
+ externalPositionManager,
692
+ fundOwner,
693
+ externalPositionProxy,
694
+ assets,
695
+ amounts,
696
+ cTokens
697
+ }) {
698
+ const actionArgs = _protocol.compoundExternalPositionActionArgs.call(void 0, {
699
+ amounts,
700
+ assets,
701
+ data: _protocol.encodeArgs.call(void 0, ["address[]"], [cTokens])
702
+ });
703
+ return callOnExternalPosition({
704
+ actionArgs,
705
+ actionId: _protocol.CompoundDebtPositionActionId.BorrowAsset,
706
+ comptrollerProxy,
707
+ externalPositionManager,
708
+ externalPositionProxy,
709
+ signer: fundOwner
710
+ });
711
+ }
712
+ async function compoundDebtPositionClaimComp({
713
+ comptrollerProxy,
714
+ externalPositionManager,
715
+ fundOwner,
716
+ externalPositionProxy
717
+ }) {
718
+ const actionArgs = _protocol.compoundExternalPositionActionArgs.call(void 0, {
719
+ amounts: [],
720
+ assets: [],
721
+ data: "0x"
722
+ });
723
+ return callOnExternalPosition({
724
+ actionArgs,
725
+ actionId: _protocol.CompoundDebtPositionActionId.ClaimComp,
726
+ comptrollerProxy,
727
+ externalPositionManager,
728
+ externalPositionProxy,
729
+ signer: fundOwner
730
+ });
731
+ }
732
+ async function compoundDebtPositionRemoveCollateral({
733
+ comptrollerProxy,
734
+ externalPositionManager,
735
+ fundOwner,
736
+ assets,
737
+ amounts,
738
+ externalPositionProxy,
739
+ cTokens
740
+ }) {
741
+ const actionArgs = _protocol.compoundExternalPositionActionArgs.call(void 0, {
742
+ amounts,
743
+ assets,
744
+ data: _protocol.encodeArgs.call(void 0, ["address[]"], [cTokens])
745
+ });
746
+ return callOnExternalPosition({
747
+ actionArgs,
748
+ actionId: _protocol.CompoundDebtPositionActionId.RemoveCollateralAssets,
749
+ comptrollerProxy,
750
+ externalPositionManager,
751
+ externalPositionProxy,
752
+ signer: fundOwner
753
+ });
754
+ }
755
+ async function compoundDebtPositionRepayBorrow({
756
+ comptrollerProxy,
757
+ externalPositionManager,
758
+ fundOwner,
759
+ assets,
760
+ amounts,
761
+ externalPositionProxy,
762
+ cTokens
763
+ }) {
764
+ const actionArgs = _protocol.compoundExternalPositionActionArgs.call(void 0, {
765
+ amounts,
766
+ assets,
767
+ data: _protocol.encodeArgs.call(void 0, ["address[]"], [cTokens])
768
+ });
769
+ return callOnExternalPosition({
770
+ actionArgs,
771
+ actionId: _protocol.CompoundDebtPositionActionId.RepayBorrowedAssets,
772
+ comptrollerProxy,
773
+ externalPositionManager,
774
+ externalPositionProxy,
775
+ signer: fundOwner
776
+ });
777
+ }
778
+ async function createCompoundDebtPosition({
779
+ signer,
780
+ comptrollerProxy,
781
+ externalPositionManager
782
+ }) {
783
+ return createExternalPosition({
784
+ comptrollerProxy,
785
+ externalPositionManager,
786
+ externalPositionTypeId: _protocol.ExternalPositionType.CompoundDebtPosition,
787
+ signer
788
+ });
789
+ }
790
+
791
+ // src/scaffolding/extensions/external-positions/convex-voting.ts
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+ function createConvexVotingPosition({
801
+ signer,
802
+ comptrollerProxy,
803
+ externalPositionManager
804
+ }) {
805
+ return createExternalPosition({
806
+ comptrollerProxy,
807
+ externalPositionManager,
808
+ externalPositionTypeId: _protocol.ExternalPositionType.ConvexVotingPosition,
809
+ signer
810
+ });
811
+ }
812
+ function convexVotingPositionClaimRewards({
813
+ comptrollerProxy,
814
+ externalPositionManager,
815
+ signer,
816
+ externalPositionProxy,
817
+ claimLockerRewards,
818
+ extraRewardTokens,
819
+ votiumClaims,
820
+ unstakeCvxCrv,
821
+ allTokensToTransfer
822
+ }) {
823
+ const actionArgs = _protocol.convexVotingPositionClaimRewardsArgs.call(void 0, {
824
+ allTokensToTransfer,
825
+ claimLockerRewards,
826
+ extraRewardTokens,
827
+ unstakeCvxCrv,
828
+ votiumClaims
829
+ });
830
+ return callOnExternalPosition({
831
+ actionArgs,
832
+ actionId: _protocol.ConvexVotingPositionActionId.ClaimRewards,
833
+ comptrollerProxy,
834
+ externalPositionManager,
835
+ externalPositionProxy,
836
+ signer
837
+ });
838
+ }
839
+ function convexVotingPositionDelegate({
840
+ comptrollerProxy,
841
+ externalPositionManager,
842
+ signer,
843
+ externalPositionProxy,
844
+ delegatee
845
+ }) {
846
+ const actionArgs = _protocol.convexVotingPositionDelegateArgs.call(void 0, {
847
+ delegatee
848
+ });
849
+ return callOnExternalPosition({
850
+ actionArgs,
851
+ actionId: _protocol.ConvexVotingPositionActionId.Delegate,
852
+ comptrollerProxy,
853
+ externalPositionManager,
854
+ externalPositionProxy,
855
+ signer
856
+ });
857
+ }
858
+ function convexVotingPositionLock({
859
+ comptrollerProxy,
860
+ externalPositionManager,
861
+ signer,
862
+ externalPositionProxy,
863
+ amount,
864
+ spendRatio = _ethers3.BigNumber.from(0)
865
+ }) {
866
+ const actionArgs = _protocol.convexVotingPositionLockArgs.call(void 0, {
867
+ amount,
868
+ spendRatio
869
+ });
870
+ return callOnExternalPosition({
871
+ actionArgs,
872
+ actionId: _protocol.ConvexVotingPositionActionId.Lock,
873
+ comptrollerProxy,
874
+ externalPositionManager,
875
+ externalPositionProxy,
876
+ signer
877
+ });
878
+ }
879
+ function convexVotingPositionRelock({
880
+ comptrollerProxy,
881
+ externalPositionManager,
882
+ signer,
883
+ externalPositionProxy
884
+ }) {
885
+ return callOnExternalPosition({
886
+ actionArgs: "0x",
887
+ actionId: _protocol.ConvexVotingPositionActionId.Relock,
888
+ comptrollerProxy,
889
+ externalPositionManager,
890
+ externalPositionProxy,
891
+ signer
892
+ });
893
+ }
894
+ function convexVotingPositionWithdraw({
895
+ comptrollerProxy,
896
+ externalPositionManager,
897
+ signer,
898
+ externalPositionProxy
899
+ }) {
900
+ return callOnExternalPosition({
901
+ actionArgs: "0x",
902
+ actionId: _protocol.ConvexVotingPositionActionId.Withdraw,
903
+ comptrollerProxy,
904
+ externalPositionManager,
905
+ externalPositionProxy,
906
+ signer
907
+ });
908
+ }
909
+
910
+ // src/scaffolding/extensions/external-positions/liquity-debt.ts
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+ var ILiquityTroveManager = _ethers.contract.call(void 0, )`
923
+ function getBorrowingFee(uint256) external returns (uint256)
924
+ `;
925
+ var ILiquityHintHelper = _ethers.contract.call(void 0, )`
926
+ function getApproxHint(uint256, uint256, uint256) external returns (address, uint256, uint256)
927
+ `;
928
+ var ILiquitySortedTroves = _ethers.contract.call(void 0, )`
929
+ function findInsertPosition(uint256, address, address) external view returns (address, address)
930
+ `;
931
+ async function createLiquityDebtPosition({
932
+ signer,
933
+ comptrollerProxy,
934
+ externalPositionManager
935
+ }) {
936
+ return createExternalPosition({
937
+ comptrollerProxy,
938
+ externalPositionManager,
939
+ externalPositionTypeId: _protocol.ExternalPositionType.LiquityDebtPosition,
940
+ signer
941
+ });
942
+ }
943
+ async function liquityCalcHints({
944
+ collateralAmount,
945
+ debtAmount,
946
+ numTrials = _ethers3.BigNumber.from("100"),
947
+ liquitySortedTroves,
948
+ liquityHintHelper,
949
+ inputRandomSeed = _ethers3.BigNumber.from("4")
950
+ }) {
951
+ const nicr = collateralAmount.mul(_ethers3.utils.parseEther("100")).div(debtAmount);
952
+ const approxHint = await liquityHintHelper.getApproxHint.args(nicr, numTrials, inputRandomSeed).call();
953
+ const [upperHint, lowerHint] = await liquitySortedTroves.findInsertPosition.args(nicr, approxHint[0], approxHint[0]).call();
954
+ return { lowerHint, upperHint };
955
+ }
956
+ async function liquityDebtPositionAddCollateral({
957
+ comptrollerProxy,
958
+ externalPositionManager,
959
+ signer,
960
+ collateralAmount,
961
+ upperHint,
962
+ lowerHint,
963
+ externalPositionProxy
964
+ }) {
965
+ const actionArgs = _protocol.liquityDebtPositionAddCollateralArgs.call(void 0, {
966
+ collateralAmount,
967
+ lowerHint,
968
+ upperHint
969
+ });
970
+ return callOnExternalPosition({
971
+ actionArgs,
972
+ actionId: _protocol.LiquityDebtPositionActionId.AddCollateral,
973
+ comptrollerProxy,
974
+ externalPositionManager,
975
+ externalPositionProxy,
976
+ signer
977
+ });
978
+ }
979
+ async function liquityDebtPositionBorrow({
980
+ comptrollerProxy,
981
+ externalPositionManager,
982
+ signer,
983
+ maxFeePercentage,
984
+ lusdAmount,
985
+ upperHint,
986
+ lowerHint,
987
+ externalPositionProxy
988
+ }) {
989
+ const actionArgs = _protocol.liquityDebtPositionBorrowArgs.call(void 0, {
990
+ lowerHint,
991
+ lusdAmount,
992
+ maxFeePercentage,
993
+ upperHint
994
+ });
995
+ return callOnExternalPosition({
996
+ actionArgs,
997
+ actionId: _protocol.LiquityDebtPositionActionId.Borrow,
998
+ comptrollerProxy,
999
+ externalPositionManager,
1000
+ externalPositionProxy,
1001
+ signer
1002
+ });
1003
+ }
1004
+ async function liquityDebtPositionCloseTrove({
1005
+ comptrollerProxy,
1006
+ externalPositionManager,
1007
+ signer,
1008
+ externalPositionProxy
1009
+ }) {
1010
+ const actionArgs = "0x";
1011
+ return callOnExternalPosition({
1012
+ actionArgs,
1013
+ actionId: _protocol.LiquityDebtPositionActionId.CloseTrove,
1014
+ comptrollerProxy,
1015
+ externalPositionManager,
1016
+ externalPositionProxy,
1017
+ signer
1018
+ });
1019
+ }
1020
+ async function liquityDebtPositionOpenTrove({
1021
+ comptrollerProxy,
1022
+ externalPositionManager,
1023
+ signer,
1024
+ maxFeePercentage,
1025
+ collateralAmount,
1026
+ lusdAmount,
1027
+ upperHint,
1028
+ lowerHint,
1029
+ externalPositionProxy
1030
+ }) {
1031
+ const actionArgs = _protocol.liquityDebtPositionOpenTroveArgs.call(void 0, {
1032
+ collateralAmount,
1033
+ lowerHint,
1034
+ lusdAmount,
1035
+ maxFeePercentage,
1036
+ upperHint
1037
+ });
1038
+ return callOnExternalPosition({
1039
+ actionArgs,
1040
+ actionId: _protocol.LiquityDebtPositionActionId.OpenTrove,
1041
+ comptrollerProxy,
1042
+ externalPositionManager,
1043
+ externalPositionProxy,
1044
+ signer
1045
+ });
1046
+ }
1047
+ async function liquityDebtPositionRemoveCollateral({
1048
+ comptrollerProxy,
1049
+ externalPositionManager,
1050
+ signer,
1051
+ collateralAmount,
1052
+ upperHint,
1053
+ lowerHint,
1054
+ externalPositionProxy
1055
+ }) {
1056
+ const actionArgs = _protocol.liquityDebtPositionRemoveCollateralArgs.call(void 0, {
1057
+ collateralAmount,
1058
+ lowerHint,
1059
+ upperHint
1060
+ });
1061
+ return callOnExternalPosition({
1062
+ actionArgs,
1063
+ actionId: _protocol.LiquityDebtPositionActionId.RemoveCollateral,
1064
+ comptrollerProxy,
1065
+ externalPositionManager,
1066
+ externalPositionProxy,
1067
+ signer
1068
+ });
1069
+ }
1070
+ async function liquityDebtPositionRepay({
1071
+ comptrollerProxy,
1072
+ externalPositionManager,
1073
+ signer,
1074
+ lusdAmount,
1075
+ upperHint,
1076
+ lowerHint,
1077
+ externalPositionProxy
1078
+ }) {
1079
+ const actionArgs = _protocol.liquityDebtPositionRepayBorrowArgs.call(void 0, {
1080
+ lowerHint,
1081
+ lusdAmount,
1082
+ upperHint
1083
+ });
1084
+ return callOnExternalPosition({
1085
+ actionArgs,
1086
+ actionId: _protocol.LiquityDebtPositionActionId.Repay,
1087
+ comptrollerProxy,
1088
+ externalPositionManager,
1089
+ externalPositionProxy,
1090
+ signer
1091
+ });
1092
+ }
1093
+
1094
+ // src/scaffolding/extensions/external-positions/maple-liquidity.ts
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+ async function createMapleLiquidityPosition({
1109
+ signer,
1110
+ comptrollerProxy,
1111
+ externalPositionManager
1112
+ }) {
1113
+ return createExternalPosition({
1114
+ comptrollerProxy,
1115
+ externalPositionManager,
1116
+ externalPositionTypeId: _protocol.ExternalPositionType.MapleLiquidityPosition,
1117
+ signer
1118
+ });
1119
+ }
1120
+ async function mapleLiquidityPositionClaimInterest({
1121
+ comptrollerProxy,
1122
+ externalPositionManager,
1123
+ signer,
1124
+ pool,
1125
+ externalPositionProxy
1126
+ }) {
1127
+ const actionArgs = _protocol.mapleLiquidityPositionClaimInterestArgs.call(void 0, {
1128
+ pool
1129
+ });
1130
+ return callOnExternalPosition({
1131
+ actionArgs,
1132
+ actionId: _protocol.MapleLiquidityPositionActionId.ClaimInterest,
1133
+ comptrollerProxy,
1134
+ externalPositionManager,
1135
+ externalPositionProxy,
1136
+ signer
1137
+ });
1138
+ }
1139
+ async function mapleLiquidityPositionClaimRewards({
1140
+ comptrollerProxy,
1141
+ externalPositionManager,
1142
+ signer,
1143
+ rewardsContract,
1144
+ externalPositionProxy
1145
+ }) {
1146
+ const actionArgs = _protocol.mapleLiquidityPositionClaimRewardsArgs.call(void 0, {
1147
+ rewardsContract
1148
+ });
1149
+ return callOnExternalPosition({
1150
+ actionArgs,
1151
+ actionId: _protocol.MapleLiquidityPositionActionId.ClaimRewards,
1152
+ comptrollerProxy,
1153
+ externalPositionManager,
1154
+ externalPositionProxy,
1155
+ signer
1156
+ });
1157
+ }
1158
+ async function mapleLiquidityPositionIntendToRedeem({
1159
+ comptrollerProxy,
1160
+ externalPositionManager,
1161
+ signer,
1162
+ pool,
1163
+ externalPositionProxy
1164
+ }) {
1165
+ const actionArgs = _protocol.mapleLiquidityPositionIntendToRedeemArgs.call(void 0, {
1166
+ pool
1167
+ });
1168
+ return callOnExternalPosition({
1169
+ actionArgs,
1170
+ actionId: _protocol.MapleLiquidityPositionActionId.IntendToRedeem,
1171
+ comptrollerProxy,
1172
+ externalPositionManager,
1173
+ externalPositionProxy,
1174
+ signer
1175
+ });
1176
+ }
1177
+ async function mapleLiquidityPositionLend({
1178
+ comptrollerProxy,
1179
+ externalPositionManager,
1180
+ signer,
1181
+ liquidityAssetAmount,
1182
+ pool,
1183
+ externalPositionProxy
1184
+ }) {
1185
+ const actionArgs = _protocol.mapleLiquidityPositionLendArgs.call(void 0, {
1186
+ liquidityAssetAmount,
1187
+ pool
1188
+ });
1189
+ return callOnExternalPosition({
1190
+ actionArgs,
1191
+ actionId: _protocol.MapleLiquidityPositionActionId.Lend,
1192
+ comptrollerProxy,
1193
+ externalPositionManager,
1194
+ externalPositionProxy,
1195
+ signer
1196
+ });
1197
+ }
1198
+ async function mapleLiquidityPositionLendAndStake({
1199
+ comptrollerProxy,
1200
+ externalPositionManager,
1201
+ signer,
1202
+ liquidityAssetAmount,
1203
+ pool,
1204
+ rewardsContract,
1205
+ externalPositionProxy
1206
+ }) {
1207
+ const actionArgs = _protocol.mapleLiquidityPositionLendAndStakeArgs.call(void 0, {
1208
+ liquidityAssetAmount,
1209
+ pool,
1210
+ rewardsContract
1211
+ });
1212
+ return callOnExternalPosition({
1213
+ actionArgs,
1214
+ actionId: _protocol.MapleLiquidityPositionActionId.LendAndStake,
1215
+ comptrollerProxy,
1216
+ externalPositionManager,
1217
+ externalPositionProxy,
1218
+ signer
1219
+ });
1220
+ }
1221
+ async function mapleLiquidityPositionRedeem({
1222
+ comptrollerProxy,
1223
+ externalPositionManager,
1224
+ signer,
1225
+ liquidityAssetAmount,
1226
+ pool,
1227
+ externalPositionProxy
1228
+ }) {
1229
+ const actionArgs = _protocol.mapleLiquidityPositionRedeemArgs.call(void 0, {
1230
+ liquidityAssetAmount,
1231
+ pool
1232
+ });
1233
+ return callOnExternalPosition({
1234
+ actionArgs,
1235
+ actionId: _protocol.MapleLiquidityPositionActionId.Redeem,
1236
+ comptrollerProxy,
1237
+ externalPositionManager,
1238
+ externalPositionProxy,
1239
+ signer
1240
+ });
1241
+ }
1242
+ async function mapleLiquidityPositionStake({
1243
+ comptrollerProxy,
1244
+ externalPositionManager,
1245
+ signer,
1246
+ poolTokenAmount,
1247
+ pool,
1248
+ rewardsContract,
1249
+ externalPositionProxy
1250
+ }) {
1251
+ const actionArgs = _protocol.mapleLiquidityPositionStakeArgs.call(void 0, {
1252
+ pool,
1253
+ poolTokenAmount,
1254
+ rewardsContract
1255
+ });
1256
+ return callOnExternalPosition({
1257
+ actionArgs,
1258
+ actionId: _protocol.MapleLiquidityPositionActionId.Stake,
1259
+ comptrollerProxy,
1260
+ externalPositionManager,
1261
+ externalPositionProxy,
1262
+ signer
1263
+ });
1264
+ }
1265
+ async function mapleLiquidityPositionUnstake({
1266
+ comptrollerProxy,
1267
+ externalPositionManager,
1268
+ signer,
1269
+ poolTokenAmount,
1270
+ rewardsContract,
1271
+ externalPositionProxy
1272
+ }) {
1273
+ const actionArgs = _protocol.mapleLiquidityPositionUnstakeArgs.call(void 0, {
1274
+ poolTokenAmount,
1275
+ rewardsContract
1276
+ });
1277
+ return callOnExternalPosition({
1278
+ actionArgs,
1279
+ actionId: _protocol.MapleLiquidityPositionActionId.Unstake,
1280
+ comptrollerProxy,
1281
+ externalPositionManager,
1282
+ externalPositionProxy,
1283
+ signer
1284
+ });
1285
+ }
1286
+ async function mapleLiquidityPositionUnstakeAndRedeem({
1287
+ comptrollerProxy,
1288
+ externalPositionManager,
1289
+ signer,
1290
+ pool,
1291
+ poolTokenAmount,
1292
+ rewardsContract,
1293
+ externalPositionProxy
1294
+ }) {
1295
+ const actionArgs = _protocol.mapleLiquidityPositionUnstakeAndRedeemArgs.call(void 0, {
1296
+ pool,
1297
+ poolTokenAmount,
1298
+ rewardsContract
1299
+ });
1300
+ return callOnExternalPosition({
1301
+ actionArgs,
1302
+ actionId: _protocol.MapleLiquidityPositionActionId.UnstakeAndRedeem,
1303
+ comptrollerProxy,
1304
+ externalPositionManager,
1305
+ externalPositionProxy,
1306
+ signer
1307
+ });
1308
+ }
1309
+
1310
+ // src/scaffolding/extensions/external-positions/mocks.ts
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+ async function createMockExternalPosition({
1319
+ comptrollerProxy,
1320
+ externalPositionManager,
1321
+ externalPositionFactory,
1322
+ defaultActionAssetsToTransfer,
1323
+ defaultActionAmountsToTransfer,
1324
+ defaultActionAssetsToReceive,
1325
+ fundOwner,
1326
+ deployer
1327
+ }) {
1328
+ const vaultProxy = new (0, _protocol.VaultLib)(await comptrollerProxy.getVaultProxy(), deployer);
1329
+ const typeId = await externalPositionFactory.getPositionTypeCounter();
1330
+ await externalPositionFactory.addNewPositionTypes(["TEST"]);
1331
+ const mockGenericExternalPositionLib = await _protocol.MockGenericExternalPositionLib.deploy(deployer);
1332
+ const mockExternalPositionParser = await _protocol.MockGenericExternalPositionParser.deploy(deployer);
1333
+ mockExternalPositionParser.setAssetsForAction(0, defaultActionAssetsToTransfer, defaultActionAmountsToTransfer, defaultActionAssetsToReceive);
1334
+ await externalPositionManager.updateExternalPositionTypesInfo([typeId], [mockGenericExternalPositionLib], [mockExternalPositionParser]);
1335
+ const receipt = await createExternalPosition({
1336
+ comptrollerProxy,
1337
+ externalPositionManager,
1338
+ externalPositionTypeId: typeId,
1339
+ signer: fundOwner
1340
+ });
1341
+ const externalPositionProxy = (await vaultProxy.getActiveExternalPositions())[0];
1342
+ return {
1343
+ externalPositionProxy,
1344
+ mockExternalPositionParser,
1345
+ mockGenericExternalPositionLib,
1346
+ receipt,
1347
+ typeId
1348
+ };
1349
+ }
1350
+ async function mockExternalPositionAddDebtAssets({
1351
+ signer,
1352
+ comptrollerProxy,
1353
+ externalPositionManager,
1354
+ externalPositionProxy,
1355
+ assets,
1356
+ amounts
1357
+ }) {
1358
+ const actionArgs = _protocol.mockGenericExternalPositionActionArgs.call(void 0, {
1359
+ amounts,
1360
+ assets
1361
+ });
1362
+ return callOnExternalPosition({
1363
+ actionArgs,
1364
+ actionId: _protocol.MockGenericExternalPositionActionId.AddDebtAssets,
1365
+ comptrollerProxy,
1366
+ externalPositionManager,
1367
+ externalPositionProxy,
1368
+ signer
1369
+ });
1370
+ }
1371
+ async function mockExternalPositionAddManagedAssets({
1372
+ signer,
1373
+ comptrollerProxy,
1374
+ externalPositionManager,
1375
+ externalPositionProxy,
1376
+ assets,
1377
+ amounts
1378
+ }) {
1379
+ const actionArgs = _protocol.mockGenericExternalPositionActionArgs.call(void 0, {
1380
+ amounts,
1381
+ assets
1382
+ });
1383
+ return callOnExternalPosition({
1384
+ actionArgs,
1385
+ actionId: _protocol.MockGenericExternalPositionActionId.AddManagedAssets,
1386
+ comptrollerProxy,
1387
+ externalPositionManager,
1388
+ externalPositionProxy,
1389
+ signer
1390
+ });
1391
+ }
1392
+ async function mockExternalPositionRemoveDebtAssets({
1393
+ signer,
1394
+ comptrollerProxy,
1395
+ externalPositionManager,
1396
+ externalPositionProxy,
1397
+ assets,
1398
+ amounts
1399
+ }) {
1400
+ const actionArgs = _protocol.mockGenericExternalPositionActionArgs.call(void 0, {
1401
+ amounts,
1402
+ assets
1403
+ });
1404
+ return callOnExternalPosition({
1405
+ actionArgs,
1406
+ actionId: _protocol.MockGenericExternalPositionActionId.RemoveDebtAssets,
1407
+ comptrollerProxy,
1408
+ externalPositionManager,
1409
+ externalPositionProxy,
1410
+ signer
1411
+ });
1412
+ }
1413
+ async function mockExternalPositionRemoveManagedAssets({
1414
+ signer,
1415
+ comptrollerProxy,
1416
+ externalPositionManager,
1417
+ externalPositionProxy,
1418
+ assets,
1419
+ amounts
1420
+ }) {
1421
+ const actionArgs = _protocol.mockGenericExternalPositionActionArgs.call(void 0, {
1422
+ amounts,
1423
+ assets
1424
+ });
1425
+ return callOnExternalPosition({
1426
+ actionArgs,
1427
+ actionId: _protocol.MockGenericExternalPositionActionId.RemoveManagedAssets,
1428
+ comptrollerProxy,
1429
+ externalPositionManager,
1430
+ externalPositionProxy,
1431
+ signer
1432
+ });
1433
+ }
1434
+
1435
+ // src/scaffolding/extensions/external-positions/the-graph-delegation.ts
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+ async function theGraphDelegationPositionDelegate({
1444
+ comptrollerProxy,
1445
+ externalPositionManager,
1446
+ signer,
1447
+ indexer,
1448
+ tokens,
1449
+ externalPositionProxy
1450
+ }) {
1451
+ const actionArgs = _protocol.theGraphDelegationPositionDelegateArgs.call(void 0, {
1452
+ indexer,
1453
+ tokens
1454
+ });
1455
+ return callOnExternalPosition({
1456
+ actionArgs,
1457
+ actionId: _protocol.TheGraphDelegationPositionActionId.Delegate,
1458
+ comptrollerProxy,
1459
+ externalPositionManager,
1460
+ externalPositionProxy,
1461
+ signer
1462
+ });
1463
+ }
1464
+ async function theGraphDelegationPositionUndelegate({
1465
+ comptrollerProxy,
1466
+ externalPositionManager,
1467
+ signer,
1468
+ indexer,
1469
+ shares,
1470
+ externalPositionProxy
1471
+ }) {
1472
+ const actionArgs = _protocol.theGraphDelegationPositionUndelegateArgs.call(void 0, {
1473
+ indexer,
1474
+ shares
1475
+ });
1476
+ return callOnExternalPosition({
1477
+ actionArgs,
1478
+ actionId: _protocol.TheGraphDelegationPositionActionId.Undelegate,
1479
+ comptrollerProxy,
1480
+ externalPositionManager,
1481
+ externalPositionProxy,
1482
+ signer
1483
+ });
1484
+ }
1485
+ async function theGraphDelegationPositionWithdraw({
1486
+ comptrollerProxy,
1487
+ externalPositionManager,
1488
+ signer,
1489
+ indexer,
1490
+ nextIndexer,
1491
+ externalPositionProxy
1492
+ }) {
1493
+ const actionArgs = _protocol.theGraphDelegationPositionWithdrawArgs.call(void 0, {
1494
+ indexer,
1495
+ nextIndexer
1496
+ });
1497
+ return callOnExternalPosition({
1498
+ actionArgs,
1499
+ actionId: _protocol.TheGraphDelegationPositionActionId.Withdraw,
1500
+ comptrollerProxy,
1501
+ externalPositionManager,
1502
+ externalPositionProxy,
1503
+ signer
1504
+ });
1505
+ }
1506
+ async function createTheGraphDelegationPosition({
1507
+ signer,
1508
+ comptrollerProxy,
1509
+ externalPositionManager
1510
+ }) {
1511
+ return createExternalPosition({
1512
+ comptrollerProxy,
1513
+ externalPositionManager,
1514
+ externalPositionTypeId: _protocol.ExternalPositionType.TheGraphDelegationPosition,
1515
+ signer
1516
+ });
1517
+ }
1518
+
1519
+ // src/scaffolding/extensions/external-positions/uniswap-v3-liquidity.ts
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+ var UniswapV3FeeAmount = /* @__PURE__ */ ((UniswapV3FeeAmount2) => {
1534
+ UniswapV3FeeAmount2[UniswapV3FeeAmount2["LOW"] = 500] = "LOW";
1535
+ UniswapV3FeeAmount2[UniswapV3FeeAmount2["MEDIUM"] = 3e3] = "MEDIUM";
1536
+ UniswapV3FeeAmount2[UniswapV3FeeAmount2["HIGH"] = 1e4] = "HIGH";
1537
+ return UniswapV3FeeAmount2;
1538
+ })(UniswapV3FeeAmount || {});
1539
+ var uniswapV3LiquidityPositionGetMinTick = (tickSpacing) => Math.ceil(-887272 / tickSpacing) * tickSpacing;
1540
+ var uniswapV3LiquidityPositionGetMaxTick = (tickSpacing) => Math.floor(887272 / tickSpacing) * tickSpacing;
1541
+ var IUniswapV3NonFungibleTokenManager = _ethers.contract.call(void 0, )`
1542
+ function positions(uint256 tokenId) view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
1543
+ `;
1544
+ async function createUniswapV3LiquidityPosition({
1545
+ signer,
1546
+ comptrollerProxy,
1547
+ externalPositionManager,
1548
+ callOnExternalPositionData = "0x"
1549
+ }) {
1550
+ const { externalPositionProxy: externalPositionProxyContract, receipt } = await createExternalPosition({
1551
+ callOnExternalPositionData,
1552
+ comptrollerProxy,
1553
+ externalPositionManager,
1554
+ externalPositionTypeId: _protocol.ExternalPositionType.UniswapV3LiquidityPosition,
1555
+ signer
1556
+ });
1557
+ return { externalPositionProxyAddress: externalPositionProxyContract.address, receipt };
1558
+ }
1559
+ async function uniswapV3LiquidityPositionAddLiquidity({
1560
+ signer,
1561
+ comptrollerProxy,
1562
+ externalPositionManager,
1563
+ externalPositionProxy,
1564
+ nftId,
1565
+ amount0Desired,
1566
+ amount1Desired,
1567
+ amount0Min = 0,
1568
+ amount1Min = 0
1569
+ }) {
1570
+ const actionArgs = _protocol.uniswapV3LiquidityPositionAddLiquidityArgs.call(void 0, {
1571
+ amount0Desired,
1572
+ amount0Min,
1573
+ amount1Desired,
1574
+ amount1Min,
1575
+ nftId
1576
+ });
1577
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
1578
+ actionArgs,
1579
+ actionId: _protocol.UniswapV3LiquidityPositionActionId.AddLiquidity,
1580
+ externalPositionProxy
1581
+ });
1582
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
1583
+ }
1584
+ async function uniswapV3LiquidityPositionCollect({
1585
+ signer,
1586
+ comptrollerProxy,
1587
+ externalPositionManager,
1588
+ externalPositionProxy,
1589
+ nftId
1590
+ }) {
1591
+ const actionArgs = _protocol.uniswapV3LiquidityPositionCollectArgs.call(void 0, {
1592
+ nftId
1593
+ });
1594
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
1595
+ actionArgs,
1596
+ actionId: _protocol.UniswapV3LiquidityPositionActionId.Collect,
1597
+ externalPositionProxy
1598
+ });
1599
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
1600
+ }
1601
+ async function uniswapV3LiquidityPositionMint({
1602
+ signer,
1603
+ comptrollerProxy,
1604
+ externalPositionManager,
1605
+ externalPositionProxy,
1606
+ token0,
1607
+ token1,
1608
+ fee,
1609
+ tickLower,
1610
+ tickUpper,
1611
+ amount0Desired,
1612
+ amount1Desired,
1613
+ amount0Min = 0,
1614
+ amount1Min = 0
1615
+ }) {
1616
+ const actionArgs = _protocol.uniswapV3LiquidityPositionMintArgs.call(void 0, {
1617
+ amount0Desired,
1618
+ amount0Min,
1619
+ amount1Desired,
1620
+ amount1Min,
1621
+ fee,
1622
+ tickLower,
1623
+ tickUpper,
1624
+ token0,
1625
+ token1
1626
+ });
1627
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
1628
+ actionArgs,
1629
+ actionId: _protocol.UniswapV3LiquidityPositionActionId.Mint,
1630
+ externalPositionProxy
1631
+ });
1632
+ const receipt = await comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
1633
+ const externalPosition = new (0, _protocol.UniswapV3LiquidityPositionLib)(externalPositionProxy, provider);
1634
+ const nftId = _ethers.extractEvent.call(void 0, receipt, externalPosition.abi.getEvent("NFTPositionAdded"))[0].args.tokenId;
1635
+ return { nftId, receipt };
1636
+ }
1637
+ async function uniswapV3LiquidityPositionPurge({
1638
+ signer,
1639
+ comptrollerProxy,
1640
+ externalPositionManager,
1641
+ externalPositionProxy,
1642
+ nftId,
1643
+ liquidity,
1644
+ amount0Min = 0,
1645
+ amount1Min = 0
1646
+ }) {
1647
+ const actionArgs = _protocol.uniswapV3LiquidityPositionPurgeArgs.call(void 0, {
1648
+ amount0Min,
1649
+ amount1Min,
1650
+ liquidity,
1651
+ nftId
1652
+ });
1653
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
1654
+ actionArgs,
1655
+ actionId: _protocol.UniswapV3LiquidityPositionActionId.Purge,
1656
+ externalPositionProxy
1657
+ });
1658
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
1659
+ }
1660
+ async function uniswapV3LiquidityPositionRemoveLiquidity({
1661
+ signer,
1662
+ comptrollerProxy,
1663
+ externalPositionManager,
1664
+ externalPositionProxy,
1665
+ nftId,
1666
+ liquidity,
1667
+ amount0Min = 0,
1668
+ amount1Min = 0
1669
+ }) {
1670
+ const actionArgs = _protocol.uniswapV3LiquidityPositionRemoveLiquidityArgs.call(void 0, {
1671
+ amount0Min,
1672
+ amount1Min,
1673
+ liquidity,
1674
+ nftId
1675
+ });
1676
+ const callArgs = _protocol.callOnExternalPositionArgs.call(void 0, {
1677
+ actionArgs,
1678
+ actionId: _protocol.UniswapV3LiquidityPositionActionId.RemoveLiquidity,
1679
+ externalPositionProxy
1680
+ });
1681
+ return comptrollerProxy.connect(signer).callOnExtension(externalPositionManager, _protocol.ExternalPositionManagerActionId.CallOnExternalPosition, callArgs);
1682
+ }
1683
+ function uniswapV3OrderTokenPair({ tokenA, tokenB }) {
1684
+ const tokenAAddress = _ethers.resolveAddress.call(void 0, tokenA);
1685
+ const tokenBAddress = _ethers.resolveAddress.call(void 0, tokenB);
1686
+ return tokenAAddress < tokenBAddress ? { token0: tokenAAddress, token1: tokenBAddress } : { token0: tokenBAddress, token1: tokenAAddress };
1687
+ }
1688
+
1689
+ // src/scaffolding/extensions/fees.ts
1690
+
1691
+
1692
+ async function generateFeeManagerConfigWithMockFees({ deployer }) {
1693
+ const fees = await generateMockFees({
1694
+ deployer
1695
+ });
1696
+ const feeManagerSettingsData = [_ethers3.utils.randomBytes(10), "0x", _ethers3.utils.randomBytes(2)];
1697
+ return _protocol.feeManagerConfigArgs.call(void 0, {
1698
+ fees: Object.values(fees),
1699
+ settings: feeManagerSettingsData
1700
+ });
1701
+ }
1702
+ async function generateMockFees({ deployer }) {
1703
+ const mockContinuousFeeSettleOnly = await _protocol.IFee.mock(deployer);
1704
+ const mockContinuousFeeWithGavAndUpdates = await _protocol.IFee.mock(deployer);
1705
+ const mockPostBuySharesFee = await _protocol.IFee.mock(deployer);
1706
+ await Promise.all([
1707
+ mockContinuousFeeSettleOnly.getRecipientForFund.returns(_ethers3.constants.AddressZero),
1708
+ mockContinuousFeeSettleOnly.settle.returns(_protocol.FeeSettlementType.None, _ethers3.constants.AddressZero, 0),
1709
+ mockContinuousFeeSettleOnly.payout.returns(false),
1710
+ mockContinuousFeeSettleOnly.addFundSettings.returns(void 0),
1711
+ mockContinuousFeeSettleOnly.activateForFund.returns(void 0),
1712
+ mockContinuousFeeSettleOnly.update.returns(void 0),
1713
+ mockContinuousFeeSettleOnly.settlesOnHook.returns(false, false),
1714
+ mockContinuousFeeSettleOnly.settlesOnHook.given(_protocol.FeeHook.Continuous).returns(true, false),
1715
+ mockContinuousFeeSettleOnly.settlesOnHook.given(_protocol.FeeHook.PreBuyShares).returns(true, false),
1716
+ mockContinuousFeeSettleOnly.settlesOnHook.given(_protocol.FeeHook.PreRedeemShares).returns(true, false),
1717
+ mockContinuousFeeSettleOnly.updatesOnHook.returns(false, false),
1718
+ mockContinuousFeeWithGavAndUpdates.getRecipientForFund.returns(_ethers3.constants.AddressZero),
1719
+ mockContinuousFeeWithGavAndUpdates.settle.returns(_protocol.FeeSettlementType.None, _ethers3.constants.AddressZero, 0),
1720
+ mockContinuousFeeWithGavAndUpdates.payout.returns(false),
1721
+ mockContinuousFeeWithGavAndUpdates.addFundSettings.returns(void 0),
1722
+ mockContinuousFeeWithGavAndUpdates.activateForFund.returns(void 0),
1723
+ mockContinuousFeeWithGavAndUpdates.update.returns(void 0),
1724
+ mockContinuousFeeWithGavAndUpdates.settlesOnHook.returns(false, false),
1725
+ mockContinuousFeeWithGavAndUpdates.settlesOnHook.given(_protocol.FeeHook.Continuous).returns(true, true),
1726
+ mockContinuousFeeWithGavAndUpdates.settlesOnHook.given(_protocol.FeeHook.PreBuyShares).returns(true, true),
1727
+ mockContinuousFeeWithGavAndUpdates.settlesOnHook.given(_protocol.FeeHook.PreRedeemShares).returns(true, true),
1728
+ mockContinuousFeeWithGavAndUpdates.updatesOnHook.returns(false, false),
1729
+ mockContinuousFeeWithGavAndUpdates.updatesOnHook.given(_protocol.FeeHook.Continuous).returns(true, true),
1730
+ mockContinuousFeeWithGavAndUpdates.updatesOnHook.given(_protocol.FeeHook.PostBuyShares).returns(true, true),
1731
+ mockContinuousFeeWithGavAndUpdates.updatesOnHook.given(_protocol.FeeHook.PreRedeemShares).returns(true, true),
1732
+ mockPostBuySharesFee.getRecipientForFund.returns(_ethers3.constants.AddressZero),
1733
+ mockPostBuySharesFee.settle.returns(_protocol.FeeSettlementType.None, _ethers3.constants.AddressZero, 0),
1734
+ mockPostBuySharesFee.payout.returns(false),
1735
+ mockPostBuySharesFee.addFundSettings.returns(void 0),
1736
+ mockPostBuySharesFee.activateForFund.returns(void 0),
1737
+ mockPostBuySharesFee.update.returns(void 0),
1738
+ mockPostBuySharesFee.settlesOnHook.returns(false, false),
1739
+ mockPostBuySharesFee.settlesOnHook.given(_protocol.FeeHook.PostBuyShares).returns(true, false),
1740
+ mockPostBuySharesFee.updatesOnHook.returns(false, false)
1741
+ ]);
1742
+ return {
1743
+ mockContinuousFeeSettleOnly,
1744
+ mockContinuousFeeWithGavAndUpdates,
1745
+ mockPostBuySharesFee
1746
+ };
1747
+ }
1748
+
1749
+ // src/scaffolding/extensions/integrations/aave.ts
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+ async function aaveLend({
1760
+ comptrollerProxy,
1761
+ integrationManager,
1762
+ fundOwner,
1763
+ aaveAdapter,
1764
+ aToken,
1765
+ amount = _ethers3.utils.parseEther("1")
1766
+ }) {
1767
+ const lendArgs = _protocol.aaveLendArgs.call(void 0, {
1768
+ aToken,
1769
+ amount
1770
+ });
1771
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
1772
+ adapter: aaveAdapter,
1773
+ encodedCallArgs: lendArgs,
1774
+ selector: _protocol.lendSelector
1775
+ });
1776
+ const lendTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
1777
+ return lendTx;
1778
+ }
1779
+ async function aaveRedeem({
1780
+ comptrollerProxy,
1781
+ integrationManager,
1782
+ fundOwner,
1783
+ aaveAdapter,
1784
+ aToken,
1785
+ amount = _ethers3.utils.parseEther("1")
1786
+ }) {
1787
+ const redeemArgs = _protocol.aaveRedeemArgs.call(void 0, {
1788
+ aToken,
1789
+ amount
1790
+ });
1791
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
1792
+ adapter: aaveAdapter,
1793
+ encodedCallArgs: redeemArgs,
1794
+ selector: _protocol.redeemSelector
1795
+ });
1796
+ const redeemTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
1797
+ return redeemTx;
1798
+ }
1799
+
1800
+ // src/scaffolding/extensions/integrations/compound.ts
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+ var ICompoundComptroller = _ethers.contract.call(void 0, )`
1814
+ function claimComp(address)
1815
+ `;
1816
+ async function assertCompoundLend({
1817
+ tokenWhale,
1818
+ comptrollerProxy,
1819
+ vaultProxy,
1820
+ integrationManager,
1821
+ fundOwner,
1822
+ compoundAdapter,
1823
+ tokenAmount = _ethers3.utils.parseEther("1"),
1824
+ cToken,
1825
+ compoundPriceFeed
1826
+ }) {
1827
+ const token = new (0, _protocol.StandardToken)(await compoundPriceFeed.getTokenFromCToken.args(cToken).call(), tokenWhale);
1828
+ await token.connect(tokenWhale).transfer(vaultProxy, tokenAmount);
1829
+ const rateBefore = await cToken.exchangeRateStored.call();
1830
+ const minIncomingCTokenAmount = tokenAmount.mul(_ethers3.utils.parseEther("1")).div(rateBefore).mul(_ethers3.BigNumber.from("999")).div(_ethers3.BigNumber.from("1000"));
1831
+ const [preTxIncomingAssetBalance, preTxOutgoingAssetBalance] = await getAssetBalances({
1832
+ account: vaultProxy,
1833
+ assets: [cToken, token]
1834
+ });
1835
+ const lendReceipt = await compoundLend({
1836
+ cToken,
1837
+ cTokenAmount: minIncomingCTokenAmount,
1838
+ compoundAdapter,
1839
+ comptrollerProxy,
1840
+ fundOwner,
1841
+ integrationManager,
1842
+ tokenAmount
1843
+ });
1844
+ const rate = await cToken.exchangeRateStored();
1845
+ const [postTxIncomingAssetBalance, postTxOutgoingAssetBalance] = await getAssetBalances({
1846
+ account: vaultProxy,
1847
+ assets: [cToken, token]
1848
+ });
1849
+ const expectedCTokenAmount = tokenAmount.mul(_ethers3.utils.parseEther("1")).div(rate);
1850
+ expect(postTxIncomingAssetBalance).toEqBigNumber(preTxIncomingAssetBalance.add(expectedCTokenAmount));
1851
+ expect(postTxOutgoingAssetBalance).toEqBigNumber(preTxOutgoingAssetBalance.sub(tokenAmount));
1852
+ return lendReceipt;
1853
+ }
1854
+ async function assertCompoundRedeem({
1855
+ comptrollerProxy,
1856
+ vaultProxy,
1857
+ integrationManager,
1858
+ fundOwner,
1859
+ compoundAdapter,
1860
+ cToken,
1861
+ compoundPriceFeed
1862
+ }) {
1863
+ const cTokenAmount = _ethers3.utils.parseUnits("1", await cToken.decimals());
1864
+ await cToken.transfer(vaultProxy, cTokenAmount);
1865
+ const token = new (0, _protocol.StandardToken)(await compoundPriceFeed.getTokenFromCToken.args(cToken).call(), provider);
1866
+ const [preTxIncomingAssetBalance, preTxOutgoingAssetBalance] = await getAssetBalances({
1867
+ account: vaultProxy,
1868
+ assets: [token, cToken]
1869
+ });
1870
+ const rateBefore = await cToken.exchangeRateStored();
1871
+ const minIncomingTokenAmount = cTokenAmount.mul(rateBefore).div(_ethers3.utils.parseEther("1"));
1872
+ const redeemReceipt = await compoundRedeem({
1873
+ cToken,
1874
+ cTokenAmount,
1875
+ compoundAdapter,
1876
+ comptrollerProxy,
1877
+ fundOwner,
1878
+ integrationManager,
1879
+ tokenAmount: minIncomingTokenAmount,
1880
+ vaultProxy
1881
+ });
1882
+ const [postTxIncomingAssetBalance, postTxOutgoingAssetBalance] = await getAssetBalances({
1883
+ account: vaultProxy,
1884
+ assets: [token, cToken]
1885
+ });
1886
+ const rate = await cToken.exchangeRateStored();
1887
+ const expectedTokenAmount = cTokenAmount.mul(rate).div(_ethers3.utils.parseEther("1"));
1888
+ expect(postTxIncomingAssetBalance).toEqBigNumber(preTxIncomingAssetBalance.add(expectedTokenAmount));
1889
+ expect(postTxOutgoingAssetBalance).toEqBigNumber(preTxOutgoingAssetBalance.sub(cTokenAmount));
1890
+ return redeemReceipt;
1891
+ }
1892
+ async function compoundClaim({
1893
+ comptrollerProxy,
1894
+ integrationManager,
1895
+ fundOwner,
1896
+ compoundAdapter,
1897
+ compoundComptroller,
1898
+ cTokens
1899
+ }) {
1900
+ const claimArgs = _protocol.compoundClaimRewardsArgs.call(void 0, {
1901
+ cTokens,
1902
+ compoundComptroller
1903
+ });
1904
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
1905
+ adapter: compoundAdapter,
1906
+ encodedCallArgs: claimArgs,
1907
+ selector: _protocol.claimRewardsSelector
1908
+ });
1909
+ const claimRewardsTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
1910
+ return claimRewardsTx;
1911
+ }
1912
+ async function compoundLend({
1913
+ comptrollerProxy,
1914
+ integrationManager,
1915
+ fundOwner,
1916
+ compoundAdapter,
1917
+ cToken,
1918
+ tokenAmount = _ethers3.utils.parseEther("1"),
1919
+ cTokenAmount = _ethers3.utils.parseEther("1")
1920
+ }) {
1921
+ const lendArgs = _protocol.compoundArgs.call(void 0, {
1922
+ cToken,
1923
+ minIncomingAssetAmount: cTokenAmount,
1924
+ outgoingAssetAmount: tokenAmount
1925
+ });
1926
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
1927
+ adapter: compoundAdapter,
1928
+ encodedCallArgs: lendArgs,
1929
+ selector: _protocol.lendSelector
1930
+ });
1931
+ const lendTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
1932
+ return lendTx;
1933
+ }
1934
+ async function compoundRedeem({
1935
+ comptrollerProxy,
1936
+ integrationManager,
1937
+ fundOwner,
1938
+ compoundAdapter,
1939
+ cToken,
1940
+ tokenAmount = _ethers3.utils.parseEther("1"),
1941
+ cTokenAmount = _ethers3.utils.parseEther("1")
1942
+ }) {
1943
+ const redeemArgs = _protocol.compoundArgs.call(void 0, {
1944
+ cToken: _ethers.resolveAddress.call(void 0, cToken),
1945
+ minIncomingAssetAmount: tokenAmount,
1946
+ outgoingAssetAmount: cTokenAmount
1947
+ });
1948
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
1949
+ adapter: compoundAdapter,
1950
+ encodedCallArgs: redeemArgs,
1951
+ selector: _protocol.redeemSelector
1952
+ });
1953
+ const redeemTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
1954
+ return redeemTx;
1955
+ }
1956
+
1957
+ // src/scaffolding/extensions/integrations/curve.ts
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+ var CurveLiquidityGaugeV2 = _ethers.contract.call(void 0, )`
1981
+ function claim_rewards(address)
1982
+ function integrate_fraction(address) view returns (uint256)
1983
+ `;
1984
+ var CurveRegistry = _ethers.contract.call(void 0, )`
1985
+ function get_coins(address) view returns (address[8])
1986
+ function get_lp_token(address) view returns (address)
1987
+ `;
1988
+ var CurveSwaps = _ethers.contract.call(void 0, )`
1989
+ function get_best_rate(address _from, address to, uint256 amount) view returns (address bestPool, uint256 amountReceived)
1990
+ `;
1991
+ var CurveMinter = _ethers.contract.call(void 0, )`
1992
+ function mint_for(address,address)
1993
+ `;
1994
+ async function curveTakeOrder({
1995
+ comptrollerProxy,
1996
+ integrationManager,
1997
+ fundOwner,
1998
+ curveExchangeAdapter,
1999
+ pool,
2000
+ outgoingAsset,
2001
+ outgoingAssetAmount = _ethers3.utils.parseEther("1"),
2002
+ incomingAsset,
2003
+ minIncomingAssetAmount = _ethers3.utils.parseEther("1")
2004
+ }) {
2005
+ const takeOrderArgs = _protocol.curveTakeOrderArgs.call(void 0, {
2006
+ incomingAsset,
2007
+ minIncomingAssetAmount,
2008
+ outgoingAsset,
2009
+ outgoingAssetAmount,
2010
+ pool
2011
+ });
2012
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2013
+ adapter: curveExchangeAdapter,
2014
+ encodedCallArgs: takeOrderArgs,
2015
+ selector: _protocol.takeOrderSelector
2016
+ });
2017
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2018
+ }
2019
+ function curveClaimRewards({
2020
+ comptrollerProxy,
2021
+ integrationManager,
2022
+ fundOwner,
2023
+ curveLiquidityAdapter,
2024
+ stakingToken
2025
+ }) {
2026
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2027
+ adapter: curveLiquidityAdapter,
2028
+ encodedCallArgs: _protocol.curveClaimRewardsArgs.call(void 0, { stakingToken }),
2029
+ selector: _protocol.claimRewardsSelector
2030
+ });
2031
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2032
+ }
2033
+ async function curveLend({
2034
+ comptrollerProxy,
2035
+ integrationManager,
2036
+ signer,
2037
+ curveLiquidityAdapter,
2038
+ pool,
2039
+ orderedOutgoingAssetAmounts,
2040
+ minIncomingLpTokenAmount = _ethers3.BigNumber.from(1),
2041
+ useUnderlyings
2042
+ }) {
2043
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2044
+ adapter: curveLiquidityAdapter,
2045
+ encodedCallArgs: _protocol.curveLendArgs.call(void 0, {
2046
+ minIncomingLpTokenAmount,
2047
+ orderedOutgoingAssetAmounts,
2048
+ pool,
2049
+ useUnderlyings
2050
+ }),
2051
+ selector: _protocol.lendSelector
2052
+ });
2053
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2054
+ }
2055
+ async function curveLendAndStake({
2056
+ comptrollerProxy,
2057
+ integrationManager,
2058
+ signer,
2059
+ curveLiquidityAdapter,
2060
+ pool,
2061
+ orderedOutgoingAssetAmounts,
2062
+ incomingStakingToken,
2063
+ minIncomingStakingTokenAmount = _ethers3.BigNumber.from(1),
2064
+ useUnderlyings
2065
+ }) {
2066
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2067
+ adapter: curveLiquidityAdapter,
2068
+ encodedCallArgs: _protocol.curveLendAndStakeArgs.call(void 0, {
2069
+ incomingStakingToken,
2070
+ minIncomingStakingTokenAmount,
2071
+ orderedOutgoingAssetAmounts,
2072
+ pool,
2073
+ useUnderlyings
2074
+ }),
2075
+ selector: _protocol.lendAndStakeSelector
2076
+ });
2077
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2078
+ }
2079
+ async function curveRedeem({
2080
+ comptrollerProxy,
2081
+ integrationManager,
2082
+ signer,
2083
+ curveLiquidityAdapter,
2084
+ pool,
2085
+ outgoingLpTokenAmount,
2086
+ useUnderlyings,
2087
+ redeemType,
2088
+ incomingAssetData
2089
+ }) {
2090
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2091
+ adapter: curveLiquidityAdapter,
2092
+ encodedCallArgs: _protocol.curveRedeemArgs.call(void 0, {
2093
+ incomingAssetData,
2094
+ outgoingLpTokenAmount,
2095
+ pool,
2096
+ redeemType,
2097
+ useUnderlyings
2098
+ }),
2099
+ selector: _protocol.redeemSelector
2100
+ });
2101
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2102
+ }
2103
+ async function curveStake({
2104
+ comptrollerProxy,
2105
+ integrationManager,
2106
+ signer,
2107
+ curveLiquidityAdapter,
2108
+ pool,
2109
+ incomingStakingToken,
2110
+ amount
2111
+ }) {
2112
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2113
+ adapter: curveLiquidityAdapter,
2114
+ encodedCallArgs: _protocol.curveStakeArgs.call(void 0, {
2115
+ amount,
2116
+ incomingStakingToken,
2117
+ pool
2118
+ }),
2119
+ selector: _protocol.stakeSelector
2120
+ });
2121
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2122
+ }
2123
+ async function curveUnstake({
2124
+ comptrollerProxy,
2125
+ integrationManager,
2126
+ signer,
2127
+ curveLiquidityAdapter,
2128
+ pool,
2129
+ outgoingStakingToken,
2130
+ amount
2131
+ }) {
2132
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2133
+ adapter: curveLiquidityAdapter,
2134
+ encodedCallArgs: _protocol.curveUnstakeArgs.call(void 0, {
2135
+ amount,
2136
+ outgoingStakingToken,
2137
+ pool
2138
+ }),
2139
+ selector: _protocol.unstakeSelector
2140
+ });
2141
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2142
+ }
2143
+ async function curveUnstakeAndRedeem({
2144
+ comptrollerProxy,
2145
+ integrationManager,
2146
+ signer,
2147
+ curveLiquidityAdapter,
2148
+ pool,
2149
+ outgoingStakingToken,
2150
+ outgoingStakingTokenAmount,
2151
+ useUnderlyings,
2152
+ redeemType,
2153
+ incomingAssetData
2154
+ }) {
2155
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2156
+ adapter: curveLiquidityAdapter,
2157
+ encodedCallArgs: _protocol.curveUnstakeAndRedeemArgs.call(void 0, {
2158
+ incomingAssetData,
2159
+ outgoingStakingToken,
2160
+ outgoingStakingTokenAmount,
2161
+ pool,
2162
+ redeemType,
2163
+ useUnderlyings
2164
+ }),
2165
+ selector: _protocol.unstakeAndRedeemSelector
2166
+ });
2167
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2168
+ }
2169
+
2170
+ // src/scaffolding/extensions/integrations/idle.ts
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+ async function idleClaimRewards({
2183
+ comptrollerProxy,
2184
+ integrationManager,
2185
+ fundOwner,
2186
+ idleAdapter,
2187
+ idleToken
2188
+ }) {
2189
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2190
+ adapter: idleAdapter,
2191
+ encodedCallArgs: _protocol.idleClaimRewardsArgs.call(void 0, {
2192
+ idleToken
2193
+ }),
2194
+ selector: _protocol.claimRewardsSelector
2195
+ });
2196
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2197
+ }
2198
+ async function idleLend({
2199
+ comptrollerProxy,
2200
+ integrationManager,
2201
+ fundOwner,
2202
+ idleAdapter,
2203
+ idleToken,
2204
+ outgoingUnderlyingAmount,
2205
+ minIncomingIdleTokenAmount = _ethers3.BigNumber.from(1)
2206
+ }) {
2207
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2208
+ adapter: idleAdapter,
2209
+ encodedCallArgs: _protocol.idleLendArgs.call(void 0, {
2210
+ idleToken,
2211
+ minIncomingIdleTokenAmount,
2212
+ outgoingUnderlyingAmount
2213
+ }),
2214
+ selector: _protocol.lendSelector
2215
+ });
2216
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2217
+ }
2218
+ async function idleRedeem({
2219
+ comptrollerProxy,
2220
+ integrationManager,
2221
+ fundOwner,
2222
+ idleAdapter,
2223
+ idleToken,
2224
+ outgoingIdleTokenAmount,
2225
+ minIncomingUnderlyingAmount = _ethers3.BigNumber.from(1)
2226
+ }) {
2227
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2228
+ adapter: idleAdapter,
2229
+ encodedCallArgs: _protocol.idleRedeemArgs.call(void 0, {
2230
+ idleToken,
2231
+ minIncomingUnderlyingAmount,
2232
+ outgoingIdleTokenAmount
2233
+ }),
2234
+ selector: _protocol.redeemSelector
2235
+ });
2236
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2237
+ }
2238
+
2239
+ // src/scaffolding/extensions/integrations/mock.ts
2240
+
2241
+
2242
+ var mockGenericRemoveOnlySelector = _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("removeOnly(address,bytes,bytes)"));
2243
+ var mockGenericSwapASelector = _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("swapA(address,bytes,bytes)"));
2244
+ var mockGenericSwapBSelector = _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("swapB(address,bytes,bytes)"));
2245
+ var mockGenericSwapDirectFromVaultSelector = _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("swapDirectFromVault(address,bytes,bytes)"));
2246
+ var mockGenericSwapViaApprovalSelector = _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("swapViaApproval(address,bytes,bytes)"));
2247
+ function mockGenericSwapArgs({
2248
+ spendAssets = [],
2249
+ actualSpendAssetAmounts = [],
2250
+ maxSpendAssetAmounts = actualSpendAssetAmounts,
2251
+ incomingAssets = [],
2252
+ actualIncomingAssetAmounts = [],
2253
+ minIncomingAssetAmounts = actualIncomingAssetAmounts
2254
+ }) {
2255
+ return _protocol.encodeArgs.call(void 0, ["address[]", "uint256[]", "uint256[]", "address[]", "uint256[]", "uint256[]"], [
2256
+ spendAssets,
2257
+ maxSpendAssetAmounts,
2258
+ actualSpendAssetAmounts,
2259
+ incomingAssets,
2260
+ minIncomingAssetAmounts,
2261
+ actualIncomingAssetAmounts
2262
+ ]);
2263
+ }
2264
+ async function mockGenericSwap({
2265
+ comptrollerProxy,
2266
+ vaultProxy,
2267
+ integrationManager,
2268
+ fundOwner,
2269
+ mockGenericAdapter,
2270
+ selector = mockGenericSwapASelector,
2271
+ spendAssets = [],
2272
+ actualSpendAssetAmounts = [],
2273
+ maxSpendAssetAmounts = actualSpendAssetAmounts,
2274
+ incomingAssets = [],
2275
+ actualIncomingAssetAmounts = [],
2276
+ minIncomingAssetAmounts = actualIncomingAssetAmounts,
2277
+ seedFund = false
2278
+ }) {
2279
+ if (seedFund) {
2280
+ for (const key in spendAssets) {
2281
+ await spendAssets[key].transfer(vaultProxy, maxSpendAssetAmounts[key]);
2282
+ }
2283
+ }
2284
+ const swapArgs = mockGenericSwapArgs({
2285
+ actualIncomingAssetAmounts,
2286
+ actualSpendAssetAmounts,
2287
+ incomingAssets,
2288
+ maxSpendAssetAmounts,
2289
+ minIncomingAssetAmounts,
2290
+ spendAssets
2291
+ });
2292
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2293
+ adapter: mockGenericAdapter,
2294
+ encodedCallArgs: swapArgs,
2295
+ selector
2296
+ });
2297
+ const swapTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2298
+ await expect(swapTx).resolves.toBeReceipt();
2299
+ return swapTx;
2300
+ }
2301
+
2302
+ // src/scaffolding/extensions/integrations/olympusV2.ts
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+ async function olympusV2Stake({
2312
+ comptrollerProxy,
2313
+ integrationManager,
2314
+ signer,
2315
+ olympusV2Adapter,
2316
+ amount
2317
+ }) {
2318
+ const stakeArgs = _protocol.olympusV2StakeArgs.call(void 0, {
2319
+ amount
2320
+ });
2321
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2322
+ adapter: olympusV2Adapter,
2323
+ encodedCallArgs: stakeArgs,
2324
+ selector: _protocol.stakeSelector
2325
+ });
2326
+ const stakeTx = comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2327
+ return stakeTx;
2328
+ }
2329
+ async function olympusV2Unstake({
2330
+ comptrollerProxy,
2331
+ integrationManager,
2332
+ signer,
2333
+ olympusV2Adapter,
2334
+ amount
2335
+ }) {
2336
+ const unstakeArgs = _protocol.olympusV2UnstakeArgs.call(void 0, {
2337
+ amount
2338
+ });
2339
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2340
+ adapter: olympusV2Adapter,
2341
+ encodedCallArgs: unstakeArgs,
2342
+ selector: _protocol.unstakeSelector
2343
+ });
2344
+ const unstakeTx = comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2345
+ return unstakeTx;
2346
+ }
2347
+
2348
+ // src/scaffolding/extensions/integrations/paraSwapV5.ts
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+ function paraSwapV5GenerateDummyPaths({ toTokens }) {
2357
+ return toTokens.map((toToken) => {
2358
+ return {
2359
+ adapters: [],
2360
+ to: toToken,
2361
+ totalNetworkFee: 0
2362
+ };
2363
+ });
2364
+ }
2365
+ async function paraSwapV5TakeOrder({
2366
+ comptrollerProxy,
2367
+ integrationManager,
2368
+ fundOwner,
2369
+ paraSwapV5Adapter,
2370
+ outgoingAsset,
2371
+ outgoingAssetAmount,
2372
+ minIncomingAssetAmount = 1,
2373
+ expectedIncomingAssetAmount = minIncomingAssetAmount,
2374
+ uuid = _ethers3.utils.randomBytes(16),
2375
+ paths
2376
+ }) {
2377
+ const takeOrderArgs = _protocol.paraSwapV5TakeOrderArgs.call(void 0, {
2378
+ expectedIncomingAssetAmount,
2379
+ minIncomingAssetAmount,
2380
+ outgoingAsset,
2381
+ outgoingAssetAmount,
2382
+ paths,
2383
+ uuid
2384
+ });
2385
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2386
+ adapter: paraSwapV5Adapter,
2387
+ encodedCallArgs: takeOrderArgs,
2388
+ selector: _protocol.takeOrderSelector
2389
+ });
2390
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2391
+ }
2392
+
2393
+ // src/scaffolding/extensions/integrations/poolTogetherV4.ts
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+ async function poolTogetherV4Lend({
2406
+ comptrollerProxy,
2407
+ integrationManager,
2408
+ fundOwner,
2409
+ poolTogetherV4Adapter,
2410
+ ptToken,
2411
+ amount = _ethers3.utils.parseEther("1")
2412
+ }) {
2413
+ const lendArgs = _protocol.poolTogetherV4LendArgs.call(void 0, {
2414
+ amount,
2415
+ ptToken
2416
+ });
2417
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2418
+ adapter: poolTogetherV4Adapter,
2419
+ encodedCallArgs: lendArgs,
2420
+ selector: _protocol.lendSelector
2421
+ });
2422
+ const lendTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2423
+ return lendTx;
2424
+ }
2425
+ async function poolTogetherV4Redeem({
2426
+ comptrollerProxy,
2427
+ integrationManager,
2428
+ fundOwner,
2429
+ poolTogetherV4Adapter,
2430
+ ptToken,
2431
+ amount = _ethers3.utils.parseEther("1")
2432
+ }) {
2433
+ const redeemArgs = _protocol.poolTogetherV4RedeemArgs.call(void 0, {
2434
+ amount,
2435
+ ptToken
2436
+ });
2437
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2438
+ adapter: poolTogetherV4Adapter,
2439
+ encodedCallArgs: redeemArgs,
2440
+ selector: _protocol.redeemSelector
2441
+ });
2442
+ const redeemTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2443
+ return redeemTx;
2444
+ }
2445
+ async function poolTogetherV4ClaimRewards({
2446
+ comptrollerProxy,
2447
+ integrationManager,
2448
+ fundOwner,
2449
+ poolTogetherV4Adapter,
2450
+ prizeDistributor,
2451
+ drawIds,
2452
+ winningPicks
2453
+ }) {
2454
+ const claimRewardsArgs = _protocol.poolTogetherV4ClaimRewardsArgs.call(void 0, {
2455
+ drawIds,
2456
+ prizeDistributor,
2457
+ winningPicks
2458
+ });
2459
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2460
+ adapter: poolTogetherV4Adapter,
2461
+ encodedCallArgs: claimRewardsArgs,
2462
+ selector: _protocol.claimRewardsSelector
2463
+ });
2464
+ const claimTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2465
+ return claimTx;
2466
+ }
2467
+
2468
+ // src/scaffolding/extensions/integrations/synthetix.ts
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+ async function synthetixAssignExchangeDelegate({
2481
+ comptrollerProxy,
2482
+ synthetixDelegateApprovals,
2483
+ fundOwner,
2484
+ delegate
2485
+ }) {
2486
+ await comptrollerProxy.connect(fundOwner).vaultCallOnContract(synthetixDelegateApprovals, _protocol.synthetixAssignExchangeDelegateSelector, _protocol.encodeArgs.call(void 0, ["address"], [delegate]));
2487
+ }
2488
+ async function synthetixRedeem({
2489
+ comptrollerProxy,
2490
+ integrationManager,
2491
+ signer,
2492
+ synthetixAdapter,
2493
+ synths
2494
+ }) {
2495
+ const redeemArgs = _protocol.synthetixRedeemArgs.call(void 0, {
2496
+ synths
2497
+ });
2498
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2499
+ adapter: synthetixAdapter,
2500
+ encodedCallArgs: redeemArgs,
2501
+ selector: _protocol.redeemSelector
2502
+ });
2503
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2504
+ }
2505
+ async function synthetixTakeOrder({
2506
+ comptrollerProxy,
2507
+ vaultProxy,
2508
+ integrationManager,
2509
+ fundOwner,
2510
+ synthetixAdapter,
2511
+ outgoingAsset,
2512
+ outgoingAssetAmount = _ethers3.utils.parseEther("1"),
2513
+ minIncomingSusdAmount = _ethers3.utils.parseEther("1"),
2514
+ seedFund = false
2515
+ }) {
2516
+ if (seedFund) {
2517
+ await outgoingAsset.transfer(vaultProxy, outgoingAssetAmount);
2518
+ }
2519
+ const takeOrderArgs = _protocol.synthetixTakeOrderArgs.call(void 0, {
2520
+ minIncomingSusdAmount,
2521
+ outgoingAsset,
2522
+ outgoingAssetAmount
2523
+ });
2524
+ const callArgs = await _protocol.callOnIntegrationArgs.call(void 0, {
2525
+ adapter: synthetixAdapter,
2526
+ encodedCallArgs: takeOrderArgs,
2527
+ selector: _protocol.takeOrderSelector
2528
+ });
2529
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2530
+ }
2531
+
2532
+ // src/scaffolding/extensions/integrations/uniswapV2.ts
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+ var UniswapV2Factory = _ethers.contract.call(void 0, )`
2545
+ function createPair(address,address) returns (address)
2546
+ function getPair(address,address) view returns (address)
2547
+ `;
2548
+ async function uniswapV2Lend({
2549
+ comptrollerProxy,
2550
+ vaultProxy,
2551
+ integrationManager,
2552
+ fundOwner,
2553
+ uniswapV2LiquidityAdapter,
2554
+ tokenA,
2555
+ tokenB,
2556
+ amountADesired,
2557
+ amountBDesired,
2558
+ amountAMin,
2559
+ amountBMin,
2560
+ minPoolTokenAmount,
2561
+ seedFund = false
2562
+ }) {
2563
+ if (seedFund) {
2564
+ await tokenA.transfer(vaultProxy, amountADesired);
2565
+ await tokenB.transfer(vaultProxy, amountBDesired);
2566
+ }
2567
+ const lendArgs = _protocol.uniswapV2LendArgs.call(void 0, {
2568
+ amountADesired,
2569
+ amountAMin,
2570
+ amountBDesired,
2571
+ amountBMin,
2572
+ minPoolTokenAmount,
2573
+ tokenA,
2574
+ tokenB
2575
+ });
2576
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2577
+ adapter: uniswapV2LiquidityAdapter,
2578
+ encodedCallArgs: lendArgs,
2579
+ selector: _protocol.lendSelector
2580
+ });
2581
+ const lendTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2582
+ await expect(lendTx).resolves.toBeReceipt();
2583
+ return lendTx;
2584
+ }
2585
+ async function uniswapV2Redeem({
2586
+ comptrollerProxy,
2587
+ integrationManager,
2588
+ fundOwner,
2589
+ uniswapV2LiquidityAdapter,
2590
+ poolTokenAmount,
2591
+ tokenA,
2592
+ tokenB,
2593
+ amountAMin,
2594
+ amountBMin
2595
+ }) {
2596
+ const redeemArgs = _protocol.uniswapV2RedeemArgs.call(void 0, {
2597
+ amountAMin,
2598
+ amountBMin,
2599
+ poolTokenAmount,
2600
+ tokenA,
2601
+ tokenB
2602
+ });
2603
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2604
+ adapter: uniswapV2LiquidityAdapter,
2605
+ encodedCallArgs: redeemArgs,
2606
+ selector: _protocol.redeemSelector
2607
+ });
2608
+ const redeemTx = comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2609
+ await expect(redeemTx).resolves.toBeReceipt();
2610
+ return redeemTx;
2611
+ }
2612
+ async function uniswapV2TakeOrder({
2613
+ comptrollerProxy,
2614
+ vaultProxy,
2615
+ integrationManager,
2616
+ fundOwner,
2617
+ uniswapV2ExchangeAdapter,
2618
+ path,
2619
+ outgoingAssetAmount,
2620
+ minIncomingAssetAmount,
2621
+ seedFund = false
2622
+ }) {
2623
+ if (seedFund) {
2624
+ await path[0].transfer(vaultProxy, outgoingAssetAmount);
2625
+ }
2626
+ const takeOrderArgs = _protocol.uniswapV2TakeOrderArgs.call(void 0, {
2627
+ minIncomingAssetAmount,
2628
+ outgoingAssetAmount,
2629
+ path
2630
+ });
2631
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2632
+ adapter: uniswapV2ExchangeAdapter,
2633
+ encodedCallArgs: takeOrderArgs,
2634
+ selector: _protocol.takeOrderSelector
2635
+ });
2636
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2637
+ }
2638
+
2639
+ // src/scaffolding/extensions/integrations/uniswapV3.ts
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+ async function uniswapV3TakeOrder({
2647
+ comptrollerProxy,
2648
+ integrationManager,
2649
+ fundOwner,
2650
+ uniswapV3Adapter,
2651
+ pathAddresses,
2652
+ pathFees,
2653
+ outgoingAssetAmount,
2654
+ minIncomingAssetAmount = 1,
2655
+ seedFund = false
2656
+ }) {
2657
+ if (seedFund) {
2658
+ const vaultProxy = await comptrollerProxy.getVaultProxy();
2659
+ await pathAddresses[0].transfer(vaultProxy, outgoingAssetAmount);
2660
+ }
2661
+ const takeOrderArgs = _protocol.uniswapV3TakeOrderArgs.call(void 0, {
2662
+ minIncomingAssetAmount,
2663
+ outgoingAssetAmount,
2664
+ pathAddresses,
2665
+ pathFees
2666
+ });
2667
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2668
+ adapter: uniswapV3Adapter,
2669
+ encodedCallArgs: takeOrderArgs,
2670
+ selector: _protocol.takeOrderSelector
2671
+ });
2672
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2673
+ }
2674
+
2675
+ // src/scaffolding/extensions/integrations/yearn.ts
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+ async function yearnVaultV2Lend({
2686
+ signer,
2687
+ comptrollerProxy,
2688
+ integrationManager,
2689
+ yearnVaultV2Adapter,
2690
+ yVault,
2691
+ outgoingUnderlyingAmount,
2692
+ minIncomingYVaultSharesAmount = _ethers3.BigNumber.from(1)
2693
+ }) {
2694
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2695
+ adapter: yearnVaultV2Adapter,
2696
+ encodedCallArgs: _protocol.yearnVaultV2LendArgs.call(void 0, {
2697
+ minIncomingYVaultSharesAmount,
2698
+ outgoingUnderlyingAmount,
2699
+ yVault
2700
+ }),
2701
+ selector: _protocol.lendSelector
2702
+ });
2703
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2704
+ }
2705
+ async function yearnVaultV2Redeem({
2706
+ signer,
2707
+ comptrollerProxy,
2708
+ integrationManager,
2709
+ yearnVaultV2Adapter,
2710
+ yVault,
2711
+ maxOutgoingYVaultSharesAmount,
2712
+ minIncomingUnderlyingAmount = _ethers3.BigNumber.from(1),
2713
+ slippageToleranceBps = 1
2714
+ }) {
2715
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2716
+ adapter: yearnVaultV2Adapter,
2717
+ encodedCallArgs: _protocol.yearnVaultV2RedeemArgs.call(void 0, {
2718
+ maxOutgoingYVaultSharesAmount,
2719
+ minIncomingUnderlyingAmount,
2720
+ slippageToleranceBps,
2721
+ yVault
2722
+ }),
2723
+ selector: _protocol.redeemSelector
2724
+ });
2725
+ return comptrollerProxy.connect(signer).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2726
+ }
2727
+
2728
+ // src/scaffolding/extensions/integrations/zeroExV2.ts
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+ async function zeroExV2TakeOrder({
2736
+ comptrollerProxy,
2737
+ integrationManager,
2738
+ fundOwner,
2739
+ zeroExV2Adapter,
2740
+ signedOrder,
2741
+ takerAssetFillAmount
2742
+ }) {
2743
+ const takeOrderArgs = _protocol.zeroExV2TakeOrderArgs.call(void 0, {
2744
+ signedOrder,
2745
+ takerAssetFillAmount
2746
+ });
2747
+ const callArgs = _protocol.callOnIntegrationArgs.call(void 0, {
2748
+ adapter: zeroExV2Adapter,
2749
+ encodedCallArgs: takeOrderArgs,
2750
+ selector: _protocol.takeOrderSelector
2751
+ });
2752
+ return comptrollerProxy.connect(fundOwner).callOnExtension(integrationManager, _protocol.IntegrationManagerActionId.CallOnIntegration, callArgs);
2753
+ }
2754
+
2755
+ // src/scaffolding/extensions/policies.ts
2756
+
2757
+
2758
+ async function generatePolicyManagerConfigWithMockPolicies({ deployer }) {
2759
+ const policies = Object.values(await generateMockPolicies({
2760
+ deployer
2761
+ }));
2762
+ const policiesSettingsData = [...new Array(policies.length - 1).fill(_ethers3.constants.HashZero), _ethers3.utils.randomBytes(10)];
2763
+ return _protocol.policyManagerConfigArgs.call(void 0, {
2764
+ policies,
2765
+ settings: policiesSettingsData
2766
+ });
2767
+ }
2768
+ async function generateMockPolicies({ deployer }) {
2769
+ const mockAddTrackedAssetsPolicy = await _protocol.IPolicy.mock(deployer);
2770
+ const mockCreateExternalPositionPolicy = await _protocol.IPolicy.mock(deployer);
2771
+ const mockPostBuySharesPolicy = await _protocol.IPolicy.mock(deployer);
2772
+ const mockPostCallOnExternalPositionPolicy = await _protocol.IPolicy.mock(deployer);
2773
+ const mockPostCoIPolicy = await _protocol.IPolicy.mock(deployer);
2774
+ const mockRedeemSharesForSpecificAssetsPolicy = await _protocol.IPolicy.mock(deployer);
2775
+ const mockPreTransferSharesPolicy = await _protocol.IPolicy.mock(deployer);
2776
+ const mockRemoveExternalPositionPolicy = await _protocol.IPolicy.mock(deployer);
2777
+ await Promise.all([
2778
+ mockAddTrackedAssetsPolicy.identifier.returns(`MOCK_ADD_TRACKED_ASSETS`),
2779
+ mockAddTrackedAssetsPolicy.addFundSettings.returns(void 0),
2780
+ mockAddTrackedAssetsPolicy.activateForFund.returns(void 0),
2781
+ mockAddTrackedAssetsPolicy.canDisable.returns(false),
2782
+ mockAddTrackedAssetsPolicy.validateRule.returns(true),
2783
+ mockAddTrackedAssetsPolicy.implementedHooks.returns([_protocol.PolicyHook.AddTrackedAssets]),
2784
+ mockAddTrackedAssetsPolicy.updateFundSettings.returns(void 0),
2785
+ mockCreateExternalPositionPolicy.identifier.returns(`MOCK_CREATE_EXTERNAL_POSITION`),
2786
+ mockCreateExternalPositionPolicy.addFundSettings.returns(void 0),
2787
+ mockCreateExternalPositionPolicy.activateForFund.returns(void 0),
2788
+ mockCreateExternalPositionPolicy.canDisable.returns(false),
2789
+ mockCreateExternalPositionPolicy.validateRule.returns(true),
2790
+ mockCreateExternalPositionPolicy.implementedHooks.returns([_protocol.PolicyHook.CreateExternalPosition]),
2791
+ mockCreateExternalPositionPolicy.updateFundSettings.returns(void 0),
2792
+ mockPostBuySharesPolicy.identifier.returns(`MOCK_POST_BUY_SHARES`),
2793
+ mockPostBuySharesPolicy.addFundSettings.returns(void 0),
2794
+ mockPostBuySharesPolicy.activateForFund.returns(void 0),
2795
+ mockPostBuySharesPolicy.canDisable.returns(false),
2796
+ mockPostBuySharesPolicy.validateRule.returns(true),
2797
+ mockPostBuySharesPolicy.implementedHooks.returns([_protocol.PolicyHook.PostBuyShares]),
2798
+ mockPostBuySharesPolicy.updateFundSettings.returns(void 0),
2799
+ mockPostCallOnExternalPositionPolicy.identifier.returns(`MOCK_POST_CALL_ON_EXTERNAL_POSITION`),
2800
+ mockPostCallOnExternalPositionPolicy.addFundSettings.returns(void 0),
2801
+ mockPostCallOnExternalPositionPolicy.activateForFund.returns(void 0),
2802
+ mockPostCallOnExternalPositionPolicy.canDisable.returns(false),
2803
+ mockPostCallOnExternalPositionPolicy.validateRule.returns(true),
2804
+ mockPostCallOnExternalPositionPolicy.implementedHooks.returns([_protocol.PolicyHook.PostCallOnExternalPosition]),
2805
+ mockPostCallOnExternalPositionPolicy.updateFundSettings.returns(void 0),
2806
+ mockPostCoIPolicy.identifier.returns(`MOCK_POST_CALL_ON_INTEGRATION`),
2807
+ mockPostCoIPolicy.addFundSettings.returns(void 0),
2808
+ mockPostCoIPolicy.activateForFund.returns(void 0),
2809
+ mockPostCoIPolicy.canDisable.returns(false),
2810
+ mockPostCoIPolicy.validateRule.returns(true),
2811
+ mockPostCoIPolicy.implementedHooks.returns([_protocol.PolicyHook.PostCallOnIntegration]),
2812
+ mockPostCoIPolicy.updateFundSettings.returns(void 0),
2813
+ mockPreTransferSharesPolicy.identifier.returns(`MOCK_PRE_TRANSFER_SHARES`),
2814
+ mockPreTransferSharesPolicy.addFundSettings.returns(void 0),
2815
+ mockPreTransferSharesPolicy.activateForFund.returns(void 0),
2816
+ mockPreTransferSharesPolicy.canDisable.returns(false),
2817
+ mockPreTransferSharesPolicy.validateRule.returns(true),
2818
+ mockPreTransferSharesPolicy.implementedHooks.returns([_protocol.PolicyHook.PreTransferShares]),
2819
+ mockPreTransferSharesPolicy.updateFundSettings.returns(void 0),
2820
+ mockRedeemSharesForSpecificAssetsPolicy.identifier.returns(`MOCK_REDEEM_SHARES_FOR_SPECIFIC_ASSETS`),
2821
+ mockRedeemSharesForSpecificAssetsPolicy.addFundSettings.returns(void 0),
2822
+ mockRedeemSharesForSpecificAssetsPolicy.activateForFund.returns(void 0),
2823
+ mockRedeemSharesForSpecificAssetsPolicy.canDisable.returns(false),
2824
+ mockRedeemSharesForSpecificAssetsPolicy.validateRule.returns(true),
2825
+ mockRedeemSharesForSpecificAssetsPolicy.implementedHooks.returns([_protocol.PolicyHook.RedeemSharesForSpecificAssets]),
2826
+ mockRedeemSharesForSpecificAssetsPolicy.updateFundSettings.returns(void 0),
2827
+ mockRemoveExternalPositionPolicy.identifier.returns(`MOCK_REMOVE_EXTERNAL_POSITION`),
2828
+ mockRemoveExternalPositionPolicy.addFundSettings.returns(void 0),
2829
+ mockRemoveExternalPositionPolicy.activateForFund.returns(void 0),
2830
+ mockRemoveExternalPositionPolicy.canDisable.returns(false),
2831
+ mockRemoveExternalPositionPolicy.validateRule.returns(true),
2832
+ mockRemoveExternalPositionPolicy.implementedHooks.returns([_protocol.PolicyHook.RedeemSharesForSpecificAssets]),
2833
+ mockRemoveExternalPositionPolicy.updateFundSettings.returns(void 0)
2834
+ ]);
2835
+ return {
2836
+ mockAddTrackedAssetsPolicy,
2837
+ mockCreateExternalPositionPolicy,
2838
+ mockPostBuySharesPolicy,
2839
+ mockPostCallOnExternalPositionPolicy,
2840
+ mockPostCoIPolicy,
2841
+ mockPreTransferSharesPolicy,
2842
+ mockRedeemSharesForSpecificAssetsPolicy,
2843
+ mockRemoveExternalPositionPolicy
2844
+ };
2845
+ }
2846
+
2847
+ // src/scaffolding/external-interfaces.ts
2848
+
2849
+ var IConvexBaseRewardPool = _ethers.contract.call(void 0, )`
2850
+ function stakeFor(address, uint256) returns (bool)
2851
+ `;
2852
+ var IConvexCrvDepositor = _ethers.contract.call(void 0, )`
2853
+ function deposit(uint256, bool)
2854
+ `;
2855
+ var IConvexCvxLocker = _ethers.contract.call(void 0, )`
2856
+ function balanceOf(address) view returns (uint256)
2857
+ function checkpointEpoch()
2858
+ function getReward(address, bool)
2859
+ function lockedBalanceOf(address) view returns (uint256)
2860
+ `;
2861
+ var IConvexVlCvxExtraRewardDistribution = _ethers.contract.call(void 0, )`
2862
+ function claimableRewards(address, address) view returns (uint256)
2863
+ function addReward(address, uint256)
2864
+ `;
2865
+ var ISnapshotDelegateRegistry = _ethers.contract.call(void 0, )`
2866
+ function delegation(address, bytes32) view returns (address)
2867
+ `;
2868
+ var IVotiumMultiMerkleStash = _ethers.contract.call(void 0, )`
2869
+ function owner() view returns (address)
2870
+ function updateMerkleRoot(address, bytes32)
2871
+ `;
2872
+
2873
+ // src/scaffolding/persistent/manual-value-oracle.ts
2874
+
2875
+ async function deployManualValueOracle({
2876
+ signer,
2877
+ manualValueOracleFactory,
2878
+ owner,
2879
+ updater,
2880
+ description = ""
2881
+ }) {
2882
+ const receipt = await manualValueOracleFactory.connect(signer).deploy(owner, updater, description);
2883
+ const proxyDeployedArgs = assertEvent(receipt, "ProxyDeployed", {
2884
+ caller: signer,
2885
+ proxy: expect.any(String)
2886
+ });
2887
+ const proxy = new (0, _protocol.ManualValueOracleLib)(proxyDeployedArgs.proxy, provider);
2888
+ return { proxy, receipt };
2889
+ }
2890
+
2891
+ // src/scaffolding/persistent/shares-splitter.ts
2892
+
2893
+ async function deploySharesSplitter({
2894
+ signer,
2895
+ sharesSplitterFactory,
2896
+ splitUsers,
2897
+ splitPercentages
2898
+ }) {
2899
+ const receipt = await sharesSplitterFactory.connect(signer).deploy(splitUsers, splitPercentages);
2900
+ const proxyDeployedArgs = assertEvent(receipt, "ProxyDeployed", {
2901
+ caller: signer,
2902
+ proxy: expect.any(String)
2903
+ });
2904
+ const sharesSplitterProxy = new (0, _protocol.SharesSplitterLib)(proxyDeployedArgs.proxy, provider);
2905
+ return { receipt, sharesSplitterProxy };
2906
+ }
2907
+
2908
+ // src/scaffolding/setup.ts
2909
+
2910
+
2911
+
2912
+
2913
+
2914
+
2915
+
2916
+
2917
+
2918
+
2919
+
2920
+ // src/scaffolding/shares.ts
2921
+
2922
+ async function buyShares(options) {
2923
+ return (await buySharesFunction(options)).send();
2924
+ }
2925
+ async function buySharesFunction({
2926
+ comptrollerProxy,
2927
+ denominationAsset,
2928
+ buyer,
2929
+ investmentAmount,
2930
+ minSharesQuantity = 1,
2931
+ seedBuyer = false
2932
+ }) {
2933
+ if (investmentAmount == null) {
2934
+ investmentAmount = _ethers3.utils.parseUnits("1", await denominationAsset.decimals());
2935
+ }
2936
+ if (seedBuyer) {
2937
+ await denominationAsset.transfer(buyer, investmentAmount);
2938
+ }
2939
+ await denominationAsset.connect(buyer).approve(comptrollerProxy, investmentAmount);
2940
+ return comptrollerProxy.connect(buyer).buyShares.args(investmentAmount, minSharesQuantity).ref;
2941
+ }
2942
+ async function redeemSharesForSpecificAssets({
2943
+ comptrollerProxy,
2944
+ signer,
2945
+ recipient = signer,
2946
+ quantity = _ethers3.constants.MaxUint256,
2947
+ payoutAssets,
2948
+ payoutAssetPercentages
2949
+ }) {
2950
+ return comptrollerProxy.connect(signer).redeemSharesForSpecificAssets(recipient, quantity, payoutAssets, payoutAssetPercentages);
2951
+ }
2952
+ async function redeemSharesInKind({
2953
+ comptrollerProxy,
2954
+ signer,
2955
+ recipient = signer,
2956
+ quantity = _ethers3.constants.MaxUint256,
2957
+ additionalAssets = [],
2958
+ assetsToSkip = []
2959
+ }) {
2960
+ return comptrollerProxy.connect(signer).redeemSharesInKind(recipient, quantity, additionalAssets, assetsToSkip);
2961
+ }
2962
+
2963
+ // src/scaffolding/setup.ts
2964
+ async function createComptrollerProxy({
2965
+ signer,
2966
+ comptrollerLib,
2967
+ denominationAsset,
2968
+ sharesActionTimelock = 0
2969
+ }) {
2970
+ const constructData = _protocol.encodeFunctionData.call(void 0, comptrollerLib.init.fragment, [denominationAsset, sharesActionTimelock]);
2971
+ const comptrollerProxyContract = await _protocol.ComptrollerProxy.deploy(signer, constructData, comptrollerLib);
2972
+ return {
2973
+ comptrollerProxy: new (0, _protocol.ComptrollerLib)(comptrollerProxyContract, signer),
2974
+ receipt: comptrollerProxyContract.deployment
2975
+ };
2976
+ }
2977
+ async function createMigrationRequest({
2978
+ signer,
2979
+ fundDeployer,
2980
+ vaultProxy,
2981
+ denominationAsset,
2982
+ sharesActionTimelock = 0,
2983
+ feeManagerConfigData = "0x",
2984
+ policyManagerConfigData = "0x",
2985
+ bypassPrevReleaseFailure = false
2986
+ }) {
2987
+ const receipt = await fundDeployer.connect(signer).createMigrationRequest(vaultProxy, denominationAsset, sharesActionTimelock, feeManagerConfigData, policyManagerConfigData, bypassPrevReleaseFailure);
2988
+ const comptrollerDeployedArgs = assertEvent(receipt, "ComptrollerProxyDeployed", {
2989
+ comptrollerProxy: expect.any(String),
2990
+ creator: signer,
2991
+ denominationAsset,
2992
+ sharesActionTimelock: _ethers3.BigNumber.from(sharesActionTimelock)
2993
+ });
2994
+ return {
2995
+ comptrollerProxy: new (0, _protocol.ComptrollerLib)(comptrollerDeployedArgs.comptrollerProxy, signer),
2996
+ receipt
2997
+ };
2998
+ }
2999
+ async function createNewFund({
3000
+ signer,
3001
+ fundDeployer,
3002
+ denominationAsset,
3003
+ sharesActionTimelock = 0,
3004
+ fundOwner = _ethers.randomAddress.call(void 0, ),
3005
+ fundName = "My Fund",
3006
+ fundSymbol = "",
3007
+ feeManagerConfig = "0x",
3008
+ policyManagerConfig = "0x",
3009
+ investment
3010
+ }) {
3011
+ const receipt = await fundDeployer.connect(signer).createNewFund(fundOwner, fundName, fundSymbol, denominationAsset, sharesActionTimelock, feeManagerConfig, policyManagerConfig);
3012
+ const comptrollerDeployedArgs = assertEvent(receipt, "ComptrollerProxyDeployed", {
3013
+ comptrollerProxy: expect.any(String),
3014
+ creator: signer,
3015
+ denominationAsset,
3016
+ sharesActionTimelock: _ethers3.BigNumber.from(sharesActionTimelock)
3017
+ });
3018
+ const comptrollerProxy = new (0, _protocol.ComptrollerLib)(comptrollerDeployedArgs.comptrollerProxy, signer);
3019
+ const newFundDeployedArgs = assertEvent(receipt, "NewFundCreated", {
3020
+ comptrollerProxy,
3021
+ creator: signer,
3022
+ vaultProxy: expect.any(String)
3023
+ });
3024
+ const vaultProxy = new (0, _protocol.VaultLib)(newFundDeployedArgs.vaultProxy, signer);
3025
+ if (investment != null) {
3026
+ await buyShares(__spreadValues({
3027
+ comptrollerProxy,
3028
+ denominationAsset
3029
+ }, investment));
3030
+ }
3031
+ return {
3032
+ comptrollerProxy,
3033
+ receipt,
3034
+ vaultProxy
3035
+ };
3036
+ }
3037
+ async function createReconfigurationRequest({
3038
+ signer,
3039
+ fundDeployer,
3040
+ vaultProxy,
3041
+ denominationAsset,
3042
+ sharesActionTimelock = 0,
3043
+ feeManagerConfigData = "0x",
3044
+ policyManagerConfigData = "0x"
3045
+ }) {
3046
+ const receipt = await fundDeployer.connect(signer).createReconfigurationRequest(vaultProxy, denominationAsset, sharesActionTimelock, feeManagerConfigData, policyManagerConfigData);
3047
+ const comptrollerDeployedArgs = assertEvent(receipt, "ComptrollerProxyDeployed", {
3048
+ comptrollerProxy: expect.any(String),
3049
+ creator: signer,
3050
+ denominationAsset,
3051
+ sharesActionTimelock: _ethers3.BigNumber.from(sharesActionTimelock)
3052
+ });
3053
+ return {
3054
+ comptrollerProxy: new (0, _protocol.ComptrollerLib)(comptrollerDeployedArgs.comptrollerProxy, signer),
3055
+ receipt
3056
+ };
3057
+ }
3058
+ async function createVaultProxy({
3059
+ signer,
3060
+ vaultLib,
3061
+ fundOwner,
3062
+ fundAccessor,
3063
+ fundName = "My Fund"
3064
+ }) {
3065
+ const constructData = _protocol.encodeFunctionData.call(void 0, vaultLib.init.fragment, [fundOwner, fundAccessor, fundName]);
3066
+ const vaultProxyContract = await _protocol.VaultProxy.deploy(signer, constructData, vaultLib);
3067
+ return new (0, _protocol.VaultLib)(vaultProxyContract, fundAccessor);
3068
+ }
3069
+ async function setupGasRelayerPaymaster({
3070
+ signer,
3071
+ vaultProxy,
3072
+ fundAccessor,
3073
+ weth,
3074
+ startingBalance = _ethers3.utils.parseUnits("10", 18)
3075
+ }) {
3076
+ await weth.transfer(vaultProxy, startingBalance);
3077
+ const comptrollerProxy = new (0, _protocol.ComptrollerLib)(fundAccessor, signer);
3078
+ const receipt = await comptrollerProxy.deployGasRelayPaymaster();
3079
+ const eventArgs = assertEvent(receipt, "GasRelayPaymasterSet", {
3080
+ gasRelayPaymaster: expect.any(String)
3081
+ });
3082
+ return new (0, _protocol.GasRelayPaymasterLib)(eventArgs.gasRelayPaymaster, signer);
3083
+ }
3084
+
3085
+ // src/scaffolding/vaultCalls.ts
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+
3094
+
3095
+ async function vaultCallCreateNewList({
3096
+ addressListRegistry,
3097
+ comptrollerProxy,
3098
+ items,
3099
+ owner,
3100
+ signer,
3101
+ updateType
3102
+ }) {
3103
+ await comptrollerProxy.connect(signer).vaultCallOnContract(addressListRegistry.address, _protocol.addressListRegistryCreateListSelector, _protocol.encodeArgs.call(void 0, ["address", "uint8", "address[]"], [owner, updateType, items]));
3104
+ const listCount = await addressListRegistry.getListCount();
3105
+ return listCount.sub(1);
3106
+ }
3107
+ function vaultCallCurveMinterMint({
3108
+ comptrollerProxy,
3109
+ minter,
3110
+ gauge
3111
+ }) {
3112
+ return comptrollerProxy.vaultCallOnContract(minter, _protocol.curveMinterMintSelector, _protocol.encodeArgs.call(void 0, ["address"], [gauge]));
3113
+ }
3114
+ function vaultCallCurveMinterMintMany({
3115
+ comptrollerProxy,
3116
+ minter,
3117
+ gauges
3118
+ }) {
3119
+ const gaugesFormatted = new Array(8).fill(_ethers3.constants.AddressZero);
3120
+ for (const i in gauges) {
3121
+ gaugesFormatted[i] = gauges[i];
3122
+ }
3123
+ return comptrollerProxy.vaultCallOnContract(minter, _protocol.curveMinterMintManySelector, _protocol.encodeArgs.call(void 0, ["address[8]"], [gaugesFormatted]));
3124
+ }
3125
+ function vaultCallCurveMinterToggleApproveMint({
3126
+ comptrollerProxy,
3127
+ minter,
3128
+ account
3129
+ }) {
3130
+ return comptrollerProxy.vaultCallOnContract(minter, _protocol.curveMinterToggleApproveMintSelector, _protocol.encodeArgs.call(void 0, ["address"], [account]));
3131
+ }
3132
+ function vaultCallStartAssetBypassTimelock({
3133
+ comptrollerProxy,
3134
+ contract: contract7,
3135
+ asset
3136
+ }) {
3137
+ return comptrollerProxy.vaultCallOnContract(contract7, _protocol.sighash.call(void 0, _ethers3.utils.FunctionFragment.fromString("startAssetBypassTimelock(address)")), _protocol.encodeArgs.call(void 0, ["address"], [asset]));
3138
+ }
3139
+
3140
+ // src/whales.ts
3141
+
3142
+ var whales = {
3143
+ bat: "0x12274c71304bc0e6b38a56b94d2949b118feb838",
3144
+ bnb: "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8",
3145
+ bnt: "0x7d1ed1601a12a172269436fa95fe156650603c1d",
3146
+ busd: "0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503",
3147
+ comp: "0x0f50d31b3eaefd65236dd3736b863cffa4c63c4e",
3148
+ crv: "0xf89501b77b2fa6329f94f5a05fe84cebb5c8b1a0",
3149
+ dai: "0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503",
3150
+ grt: "0xf977814e90da44bfa03b6295a0616a897441acec",
3151
+ knc: "0x09d51654bd9efbfcb56da3491989cc1444095fff",
3152
+ ldo: "0x3dba737ccc50a32a1764b493285dd51c8af6c278",
3153
+ link: "0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6",
3154
+ lusd: "0x24cbbef882a77c5aaa9abd6558e68b4c648453c5",
3155
+ mana: "0xefb94ac00f1cee8a89d5c3f49faa799da6f03024",
3156
+ mln: "0xd8f8a53945bcfbbc19da162aa405e662ef71c40d",
3157
+ ohm: "0x2cfcbd233268c302996c767347eb45bec36fb08d",
3158
+ rep: "0xc6a043b07d33b6f30d8cb501026c391cfd25abe1",
3159
+ ren: "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8",
3160
+ susd: "0xa5f7a39e55d7878bc5bd754ee5d6bd7a7662355b",
3161
+ sohm: "0x3d5c83351c872fdf07da498c84ca3275222f284c",
3162
+ uni: "0x47173b170c64d16393a52e6c480b3ad8c302ba1e",
3163
+ usdc: "0xae2d4617c862309a3d75a0ffb358c7a5009c673f",
3164
+ usdt: "0x5041ed759dd4afc3a72b8192c143f72f4724081a",
3165
+ weth: "0xe08A8b19e5722a201EaF20A6BC595eF655397bd5",
3166
+ zrx: "0x206376e8940e42538781cd94ef024df3c1e0fd43",
3167
+ ausdc: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
3168
+ ausdt: "0x7d6149ad9a573a6e2ca6ebf7d4897c1b766841b4",
3169
+ ccomp: "0xd74f186194ab9219fafac5c2fe4b3270169666db",
3170
+ cdai: "0x22fa8cc33a42320385cbd3690ed60a021891cb32",
3171
+ ceth: "0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8",
3172
+ cuni: "0x39d8014b4f40d2cbc441137011d32023f4f1fd87",
3173
+ cusdc: "0xb3bd459e0598dde1fe84b1d0a1430be175b5d5be",
3174
+ fdai7: "0xa993d62492f41703f6185881eae755b0966ea5b0",
3175
+ feth7: "0x05f284897641661fee9f1c1413a4f599a43a746f",
3176
+ fdai8: "0xd6bf9d9079139dbb3a4fdb84b07efc75ea77838f",
3177
+ ftribe8: "0xdb5ac83c137321da29a59a7592232bc4ed461730",
3178
+ ptUsdc: "0x8904ffc6aa039db5941de11309a42372f3f7d2fd",
3179
+ seth: "0xc34a7c65aa08cb36744bda8eeec7b8e9891e147c",
3180
+ sxag: "0x40d68c490bf7262ec40048099aec23535f734be2",
3181
+ sxau: "0x92eb453b7b5b8d41edb44e2c8b8b53eb70a482c7",
3182
+ cvx: "0x0aca67fa70b142a3b9bf2ed89a81b40ff85dacdc",
3183
+ lidoSteth: "0x06920c9fc643de77b99cb7670a944ad31eaaa260",
3184
+ ust: "0x738cf6903e6c4e699d1c2dd9ab8b67fcdb3121ea",
3185
+ stecrv: "0x56c915758ad3f76fd287fff7563ee313142fb663"
3186
+ };
3187
+ async function unlockWhale(token) {
3188
+ const address = _ethers.resolveAddress.call(void 0, whales[token]);
3189
+ await provider.send("hardhat_impersonateAccount", [address]);
3190
+ return provider.getSignerWithAddress(address);
3191
+ }
3192
+ async function unlockAllWhales() {
3193
+ const keys = Object.keys(whales);
3194
+ const signers = await Promise.all(keys.map(async (token) => unlockWhale(token)));
3195
+ const initial = {};
3196
+ return keys.reduce((carry, key, index) => {
3197
+ return __spreadProps(__spreadValues({}, carry), { [key]: signers[index] });
3198
+ }, initial);
3199
+ }
3200
+ async function unlockWhales(...tokens) {
3201
+ const signers = await Promise.all(tokens.map(async (token) => unlockWhale(token)));
3202
+ const initial = {};
3203
+ return tokens.reduce((carry, key, index) => {
3204
+ return __spreadProps(__spreadValues({}, carry), { [key]: signers[index] });
3205
+ }, initial);
3206
+ }
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+
3228
+
3229
+
3230
+
3231
+
3232
+
3233
+
3234
+
3235
+
3236
+
3237
+
3238
+
3239
+
3240
+
3241
+
3242
+
3243
+
3244
+
3245
+
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+
3256
+
3257
+
3258
+
3259
+
3260
+
3261
+
3262
+
3263
+
3264
+
3265
+
3266
+
3267
+
3268
+
3269
+
3270
+
3271
+
3272
+
3273
+
3274
+
3275
+
3276
+
3277
+
3278
+
3279
+
3280
+
3281
+
3282
+
3283
+
3284
+
3285
+
3286
+
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+
3295
+
3296
+
3297
+
3298
+
3299
+
3300
+
3301
+
3302
+
3303
+
3304
+
3305
+
3306
+
3307
+
3308
+
3309
+
3310
+
3311
+
3312
+
3313
+
3314
+
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+
3355
+
3356
+
3357
+
3358
+
3359
+
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+ exports.CurveLiquidityGaugeV2 = CurveLiquidityGaugeV2; exports.CurveMinter = CurveMinter; exports.CurveRegistry = CurveRegistry; exports.CurveSwaps = CurveSwaps; exports.ICompoundComptroller = ICompoundComptroller; exports.IConvexBaseRewardPool = IConvexBaseRewardPool; exports.IConvexCrvDepositor = IConvexCrvDepositor; exports.IConvexCvxLocker = IConvexCvxLocker; exports.IConvexVlCvxExtraRewardDistribution = IConvexVlCvxExtraRewardDistribution; exports.ILiquityHintHelper = ILiquityHintHelper; exports.ILiquitySortedTroves = ILiquitySortedTroves; exports.ILiquityTroveManager = ILiquityTroveManager; exports.ISnapshotDelegateRegistry = ISnapshotDelegateRegistry; exports.IUniswapV3NonFungibleTokenManager = IUniswapV3NonFungibleTokenManager; exports.IVotiumMultiMerkleStash = IVotiumMultiMerkleStash; exports.UniswapV2Factory = UniswapV2Factory; exports.UniswapV3FeeAmount = UniswapV3FeeAmount; exports.aaveDebtPositionAddCollateral = aaveDebtPositionAddCollateral; exports.aaveDebtPositionBorrow = aaveDebtPositionBorrow; exports.aaveDebtPositionClaimRewards = aaveDebtPositionClaimRewards; exports.aaveDebtPositionRemoveCollateral = aaveDebtPositionRemoveCollateral; exports.aaveDebtPositionRepayBorrow = aaveDebtPositionRepayBorrow; exports.aaveLend = aaveLend; exports.aaveRedeem = aaveRedeem; exports.addNewAssetsToFund = addNewAssetsToFund; exports.addTrackedAssetsToVault = addTrackedAssetsToVault; exports.assertCompoundLend = assertCompoundLend; exports.assertCompoundRedeem = assertCompoundRedeem; exports.assertDidRelay = assertDidRelay; exports.assertDidRelaySuccessfully = assertDidRelaySuccessfully; exports.assertDidRelayWithCharge = assertDidRelayWithCharge; exports.assertDidRelayWithError = assertDidRelayWithError; exports.assertEvent = assertEvent; exports.assertNoEvent = assertNoEvent; exports.assertPaymasterDidReject = assertPaymasterDidReject; exports.assertPaymasterDidRejectForReason = assertPaymasterDidRejectForReason; exports.buyShares = buyShares; exports.buySharesFunction = buySharesFunction; exports.calcMlnValueAndBurnAmountForSharesBuyback = calcMlnValueAndBurnAmountForSharesBuyback; exports.callOnExtension = callOnExtension; exports.callOnExternalPosition = callOnExternalPosition; exports.compoundClaim = compoundClaim; exports.compoundDebtPositionAddCollateral = compoundDebtPositionAddCollateral; exports.compoundDebtPositionBorrow = compoundDebtPositionBorrow; exports.compoundDebtPositionClaimComp = compoundDebtPositionClaimComp; exports.compoundDebtPositionRemoveCollateral = compoundDebtPositionRemoveCollateral; exports.compoundDebtPositionRepayBorrow = compoundDebtPositionRepayBorrow; exports.compoundLend = compoundLend; exports.compoundRedeem = compoundRedeem; exports.convexVotingPositionClaimRewards = convexVotingPositionClaimRewards; exports.convexVotingPositionDelegate = convexVotingPositionDelegate; exports.convexVotingPositionLock = convexVotingPositionLock; exports.convexVotingPositionRelock = convexVotingPositionRelock; exports.convexVotingPositionWithdraw = convexVotingPositionWithdraw; exports.createAaveDebtPosition = createAaveDebtPosition; exports.createCompoundDebtPosition = createCompoundDebtPosition; exports.createComptrollerProxy = createComptrollerProxy; exports.createConvexVotingPosition = createConvexVotingPosition; exports.createExternalPosition = createExternalPosition; exports.createFundDeployer = createFundDeployer; exports.createLiquityDebtPosition = createLiquityDebtPosition; exports.createMapleLiquidityPosition = createMapleLiquidityPosition; exports.createMigrationRequest = createMigrationRequest; exports.createMockExternalPosition = createMockExternalPosition; exports.createNewFund = createNewFund; exports.createReconfigurationRequest = createReconfigurationRequest; exports.createTheGraphDelegationPosition = createTheGraphDelegationPosition; exports.createUniswapV3LiquidityPosition = createUniswapV3LiquidityPosition; exports.createVaultProxy = createVaultProxy; exports.curveClaimRewards = curveClaimRewards; exports.curveLend = curveLend; exports.curveLendAndStake = curveLendAndStake; exports.curveRedeem = curveRedeem; exports.curveStake = curveStake; exports.curveTakeOrder = curveTakeOrder; exports.curveUnstake = curveUnstake; exports.curveUnstakeAndRedeem = curveUnstakeAndRedeem; exports.deployManualValueOracle = deployManualValueOracle; exports.deployProtocolFixture = deployProtocolFixture; exports.deploySharesSplitter = deploySharesSplitter; exports.generateFeeManagerConfigWithMockFees = generateFeeManagerConfigWithMockFees; exports.generateMerkleTreeForContractProof = generateMerkleTreeForContractProof; exports.generateMockFees = generateMockFees; exports.generateMockPolicies = generateMockPolicies; exports.generatePolicyManagerConfigWithMockPolicies = generatePolicyManagerConfigWithMockPolicies; exports.getAssetBalances = getAssetBalances; exports.getAssetUnit = getAssetUnit; exports.getNamedSigner = getNamedSigner; exports.getUnnamedSigners = getUnnamedSigners; exports.idleClaimRewards = idleClaimRewards; exports.idleLend = idleLend; exports.idleRedeem = idleRedeem; exports.impersonateContractSigner = impersonateContractSigner; exports.impersonateSigner = impersonateSigner; exports.liquityCalcHints = liquityCalcHints; exports.liquityDebtPositionAddCollateral = liquityDebtPositionAddCollateral; exports.liquityDebtPositionBorrow = liquityDebtPositionBorrow; exports.liquityDebtPositionCloseTrove = liquityDebtPositionCloseTrove; exports.liquityDebtPositionOpenTrove = liquityDebtPositionOpenTrove; exports.liquityDebtPositionRemoveCollateral = liquityDebtPositionRemoveCollateral; exports.liquityDebtPositionRepay = liquityDebtPositionRepay; exports.mapleLiquidityPositionClaimInterest = mapleLiquidityPositionClaimInterest; exports.mapleLiquidityPositionClaimRewards = mapleLiquidityPositionClaimRewards; exports.mapleLiquidityPositionIntendToRedeem = mapleLiquidityPositionIntendToRedeem; exports.mapleLiquidityPositionLend = mapleLiquidityPositionLend; exports.mapleLiquidityPositionLendAndStake = mapleLiquidityPositionLendAndStake; exports.mapleLiquidityPositionRedeem = mapleLiquidityPositionRedeem; exports.mapleLiquidityPositionStake = mapleLiquidityPositionStake; exports.mapleLiquidityPositionUnstake = mapleLiquidityPositionUnstake; exports.mapleLiquidityPositionUnstakeAndRedeem = mapleLiquidityPositionUnstakeAndRedeem; exports.mockExternalPositionAddDebtAssets = mockExternalPositionAddDebtAssets; exports.mockExternalPositionAddManagedAssets = mockExternalPositionAddManagedAssets; exports.mockExternalPositionRemoveDebtAssets = mockExternalPositionRemoveDebtAssets; exports.mockExternalPositionRemoveManagedAssets = mockExternalPositionRemoveManagedAssets; exports.mockGenericRemoveOnlySelector = mockGenericRemoveOnlySelector; exports.mockGenericSwap = mockGenericSwap; exports.mockGenericSwapASelector = mockGenericSwapASelector; exports.mockGenericSwapArgs = mockGenericSwapArgs; exports.mockGenericSwapBSelector = mockGenericSwapBSelector; exports.mockGenericSwapDirectFromVaultSelector = mockGenericSwapDirectFromVaultSelector; exports.mockGenericSwapViaApprovalSelector = mockGenericSwapViaApprovalSelector; exports.olympusV2Stake = olympusV2Stake; exports.olympusV2Unstake = olympusV2Unstake; exports.paraSwapV5GenerateDummyPaths = paraSwapV5GenerateDummyPaths; exports.paraSwapV5TakeOrder = paraSwapV5TakeOrder; exports.poolTogetherV4ClaimRewards = poolTogetherV4ClaimRewards; exports.poolTogetherV4Lend = poolTogetherV4Lend; exports.poolTogetherV4Redeem = poolTogetherV4Redeem; exports.reactivateExternalPosition = reactivateExternalPosition; exports.redeemSharesForSpecificAssets = redeemSharesForSpecificAssets; exports.redeemSharesInKind = redeemSharesInKind; exports.relayTransaction = relayTransaction; exports.removeExternalPosition = removeExternalPosition; exports.removeTrackedAssetsFromVault = removeTrackedAssetsFromVault; exports.sendEthBySelfDestruct = sendEthBySelfDestruct; exports.setupGasRelayerPaymaster = setupGasRelayerPaymaster; exports.synthetixAssignExchangeDelegate = synthetixAssignExchangeDelegate; exports.synthetixRedeem = synthetixRedeem; exports.synthetixTakeOrder = synthetixTakeOrder; exports.theGraphDelegationPositionDelegate = theGraphDelegationPositionDelegate; exports.theGraphDelegationPositionUndelegate = theGraphDelegationPositionUndelegate; exports.theGraphDelegationPositionWithdraw = theGraphDelegationPositionWithdraw; exports.transactionTimestamp = transactionTimestamp; exports.uniswapV2Lend = uniswapV2Lend; exports.uniswapV2Redeem = uniswapV2Redeem; exports.uniswapV2TakeOrder = uniswapV2TakeOrder; exports.uniswapV3LiquidityPositionAddLiquidity = uniswapV3LiquidityPositionAddLiquidity; exports.uniswapV3LiquidityPositionCollect = uniswapV3LiquidityPositionCollect; exports.uniswapV3LiquidityPositionGetMaxTick = uniswapV3LiquidityPositionGetMaxTick; exports.uniswapV3LiquidityPositionGetMinTick = uniswapV3LiquidityPositionGetMinTick; exports.uniswapV3LiquidityPositionMint = uniswapV3LiquidityPositionMint; exports.uniswapV3LiquidityPositionPurge = uniswapV3LiquidityPositionPurge; exports.uniswapV3LiquidityPositionRemoveLiquidity = uniswapV3LiquidityPositionRemoveLiquidity; exports.uniswapV3OrderTokenPair = uniswapV3OrderTokenPair; exports.uniswapV3TakeOrder = uniswapV3TakeOrder; exports.unlockAllWhales = unlockAllWhales; exports.unlockWhale = unlockWhale; exports.unlockWhales = unlockWhales; exports.updateChainlinkAggregator = updateChainlinkAggregator; exports.vaultCallCreateNewList = vaultCallCreateNewList; exports.vaultCallCurveMinterMint = vaultCallCurveMinterMint; exports.vaultCallCurveMinterMintMany = vaultCallCurveMinterMintMany; exports.vaultCallCurveMinterToggleApproveMint = vaultCallCurveMinterToggleApproveMint; exports.vaultCallStartAssetBypassTimelock = vaultCallStartAssetBypassTimelock; exports.yearnVaultV2Lend = yearnVaultV2Lend; exports.yearnVaultV2Redeem = yearnVaultV2Redeem; exports.zeroExV2TakeOrder = zeroExV2TakeOrder;