@enzymefinance/testutils 4.0.0-next.5 → 4.0.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enzymefinance/testutils",
3
- "version": "4.0.0-next.5",
3
+ "version": "4.0.0-next.6",
4
4
  "main": "dist/enzymefinance-testutils.cjs.js",
5
5
  "module": "dist/enzymefinance-testutils.esm.js",
6
6
  "browser": {
@@ -9,9 +9,9 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "@babel/runtime": "^7.15.4",
12
- "@enzymefinance/ethers": "^1.0.10",
13
- "@enzymefinance/hardhat": "^1.0.11",
14
- "@enzymefinance/protocol": "^4.0.0-next.5",
15
- "ethers": "^5.5.1"
12
+ "@enzymefinance/ethers": "^1.0.11",
13
+ "@enzymefinance/hardhat": "^1.0.12",
14
+ "@enzymefinance/protocol": "^4.0.0-next.6",
15
+ "ethers": "^5.5.3"
16
16
  }
17
17
  }
package/src/deployment.ts CHANGED
@@ -17,6 +17,7 @@ import {
17
17
  CumulativeSlippageTolerancePolicy,
18
18
  CurveExchangeAdapter,
19
19
  CurveLiquidityAaveAdapter,
20
+ CurveLiquidityAdapter,
20
21
  CurveLiquidityEursAdapter,
21
22
  CurveLiquiditySethAdapter,
22
23
  CurveLiquidityStethAdapter,
@@ -43,6 +44,7 @@ import {
43
44
  ManagementFee,
44
45
  MinAssetBalancesPostRedemptionPolicy,
45
46
  MinMaxInvestmentPolicy,
47
+ OlympusV2Adapter,
46
48
  OnlyRemoveDustExternalPositionPolicy,
47
49
  OnlyUntrackDustOrPricelessAssetsPolicy,
48
50
  ParaSwapV4Adapter,
@@ -110,6 +112,7 @@ export async function deployProtocolFixture() {
110
112
  cumulativeSlippageTolerancePolicy: new CumulativeSlippageTolerancePolicy(fixture['CumulativeSlippageTolerancePolicy'].address, deployer),
111
113
  curveExchangeAdapter: new CurveExchangeAdapter(fixture['CurveExchangeAdapter'].address, deployer),
112
114
  curveLiquidityAaveAdapter: new CurveLiquidityAaveAdapter(fixture['CurveLiquidityAaveAdapter'].address, deployer),
115
+ curveLiquidityAdapter: new CurveLiquidityAdapter(fixture['CurveLiquidityAdapter'].address, deployer),
113
116
  curveLiquidityEursAdapter: new CurveLiquidityEursAdapter(fixture['CurveLiquidityEursAdapter'].address, deployer),
114
117
  curveLiquiditySethAdapter: new CurveLiquiditySethAdapter(fixture['CurveLiquiditySethAdapter'].address, deployer),
115
118
  curveLiquidityStethAdapter: new CurveLiquidityStethAdapter(fixture['CurveLiquidityStethAdapter'].address, deployer),
@@ -136,6 +139,7 @@ export async function deployProtocolFixture() {
136
139
  managementFee: new ManagementFee(fixture['ManagementFee'].address, deployer),
137
140
  minAssetBalancesPostRedemptionPolicy: new MinAssetBalancesPostRedemptionPolicy(fixture['MinAssetBalancesPostRedemptionPolicy'].address, deployer),
138
141
  minMaxInvestmentPolicy: new MinMaxInvestmentPolicy(fixture['MinMaxInvestmentPolicy'].address, deployer),
142
+ olympusV2Adapter: new OlympusV2Adapter(fixture['OlympusV2Adapter'].address, deployer),
139
143
  onlyRemoveDustExternalPositionPolicy: new OnlyRemoveDustExternalPositionPolicy(fixture['OnlyRemoveDustExternalPositionPolicy'].address, deployer),
140
144
  onlyUntrackDustOrPricelessAssetsPolicy: new OnlyUntrackDustOrPricelessAssetsPolicy(fixture['OnlyUntrackDustOrPricelessAssetsPolicy'].address, deployer),
141
145
  paraSwapV4Adapter: new ParaSwapV4Adapter(fixture['ParaSwapV4Adapter'].address, deployer),
@@ -179,6 +183,11 @@ import type { ChainlinkRateAsset } from '@enzymefinance/protocol';
179
183
 
180
184
  export interface DeploymentConfig {
181
185
  feeToken: string;
186
+ feeTokenBurn: {
187
+ burnFromVault: boolean;
188
+ sendToProtocolFeeReserve: boolean;
189
+ externalBurnerAddress: string;
190
+ };
182
191
  weth: string;
183
192
  wrappedNativeAsset: string;
184
193
  primitives: Record<string, string>;
@@ -230,6 +239,9 @@ export interface DeploymentConfig {
230
239
  lido: {
231
240
  steth: string;
232
241
  };
242
+ olympusV2: {
243
+ stakingContract: string;
244
+ };
233
245
  paraSwapV4: {
234
246
  augustusSwapper: string;
235
247
  tokenTransferProxy: string;
@@ -241,6 +253,7 @@ export interface DeploymentConfig {
241
253
  poolTogetherV4: {
242
254
  ptTokens: Record<string, [string, string]>;
243
255
  };
256
+ positionsLimit: number;
244
257
  stakehound: {
245
258
  steth: string;
246
259
  };
@@ -17,7 +17,7 @@ export async function addNewAssetsToFund({
17
17
  assets: StandardToken[];
18
18
  amounts?: BigNumberish[];
19
19
  }) {
20
- // First, add tracked assets while their balances are 0
20
+ // First, add tracked assets
21
21
  const receipt = addTrackedAssetsToVault({
22
22
  assets,
23
23
  comptrollerProxy,
@@ -94,7 +94,9 @@ export async function createFundDeployer({
94
94
  await vaultLib.getProtocolFeeReserve(),
95
95
  nextProtocolFeeTracker,
96
96
  await vaultLib.getMlnToken(),
97
+ await vaultLib.getMlnBurner(),
97
98
  await vaultLib.getWethToken(),
99
+ await vaultLib.getPositionsLimit(),
98
100
  );
99
101
  await nextFundDeployer.setVaultLib(nextVaultLib);
100
102
 
@@ -5,9 +5,11 @@ import type {
5
5
  ComptrollerLib,
6
6
  CurveExchangeAdapter,
7
7
  CurveLiquidityAaveAdapter,
8
+ CurveLiquidityAdapter,
8
9
  CurveLiquidityEursAdapter,
9
10
  CurveLiquiditySethAdapter,
10
11
  CurveLiquidityStethAdapter,
12
+ CurveRedeemType,
11
13
  IntegrationManager,
12
14
  StandardToken,
13
15
  } from '@enzymefinance/protocol';
@@ -20,18 +22,23 @@ import {
20
22
  curveAaveStakeArgs,
21
23
  curveAaveUnstakeAndRedeemArgs,
22
24
  curveAaveUnstakeArgs,
25
+ curveClaimRewardsArgs,
23
26
  curveEursLendAndStakeArgs,
24
27
  curveEursLendArgs,
25
28
  curveEursRedeemArgs,
26
29
  curveEursStakeArgs,
27
30
  curveEursUnstakeAndRedeemArgs,
28
31
  curveEursUnstakeArgs,
32
+ curveLendAndStakeArgs,
33
+ curveLendArgs,
34
+ curveRedeemArgs,
29
35
  curveSethLendAndStakeArgs,
30
36
  curveSethLendArgs,
31
37
  curveSethRedeemArgs,
32
38
  curveSethStakeArgs,
33
39
  curveSethUnstakeAndRedeemArgs,
34
40
  curveSethUnstakeArgs,
41
+ curveStakeArgs,
35
42
  curveStethLendAndStakeArgs,
36
43
  curveStethLendArgs,
37
44
  curveStethRedeemArgs,
@@ -39,6 +46,8 @@ import {
39
46
  curveStethUnstakeAndRedeemArgs,
40
47
  curveStethUnstakeArgs,
41
48
  curveTakeOrderArgs,
49
+ curveUnstakeAndRedeemArgs,
50
+ curveUnstakeArgs,
42
51
  IntegrationManagerActionId,
43
52
  lendAndStakeSelector,
44
53
  lendSelector,
@@ -48,7 +57,7 @@ import {
48
57
  unstakeAndRedeemSelector,
49
58
  unstakeSelector,
50
59
  } from '@enzymefinance/protocol';
51
- import type { BigNumberish } from 'ethers';
60
+ import type { BigNumberish, BytesLike } from 'ethers';
52
61
  import { BigNumber, constants, utils } from 'ethers';
53
62
 
54
63
  export interface CurveLiquidityGaugeV2 extends Contract<CurveLiquidityGaugeV2> {
@@ -61,6 +70,16 @@ export const CurveLiquidityGaugeV2 = contract<CurveLiquidityGaugeV2>()`
61
70
  function integrate_fraction(address) view returns (uint256)
62
71
  `;
63
72
 
73
+ export interface CurveRegistry extends Contract<CurveRegistry> {
74
+ get_coins: Call<(_pool: AddressLike) => AddressLike[], Contract<any>>;
75
+ get_lp_token: Call<(_pool: AddressLike) => AddressLike, Contract<any>>;
76
+ }
77
+
78
+ export const CurveRegistry = contract<CurveRegistry>()`
79
+ function get_coins(address) view returns (address[8])
80
+ function get_lp_token(address) view returns (address)
81
+ `;
82
+
64
83
  // prettier-ignore
65
84
  export interface CurveSwaps extends Contract<CurveSwaps> {
66
85
  get_best_rate: Call<(_from: AddressLike, to: AddressLike, amount: BigNumberish) => { bestPool: AddressLike, amountReceived: BigNumber }, CurveSwaps>
@@ -120,6 +139,248 @@ export async function curveTakeOrder({
120
139
  .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
121
140
  }
122
141
 
142
+ // combined liquidity
143
+
144
+ export function curveClaimRewards({
145
+ comptrollerProxy,
146
+ integrationManager,
147
+ fundOwner,
148
+ curveLiquidityAdapter,
149
+ gaugeToken,
150
+ }: {
151
+ comptrollerProxy: ComptrollerLib;
152
+ integrationManager: IntegrationManager;
153
+ fundOwner: SignerWithAddress;
154
+ curveLiquidityAdapter: CurveLiquidityAdapter;
155
+ gaugeToken: AddressLike;
156
+ }) {
157
+ const callArgs = callOnIntegrationArgs({
158
+ adapter: curveLiquidityAdapter,
159
+ encodedCallArgs: curveClaimRewardsArgs({ gaugeToken }),
160
+ selector: claimRewardsSelector,
161
+ });
162
+
163
+ return comptrollerProxy
164
+ .connect(fundOwner)
165
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
166
+ }
167
+
168
+ export async function curveLend({
169
+ comptrollerProxy,
170
+ integrationManager,
171
+ signer,
172
+ curveLiquidityAdapter,
173
+ pool,
174
+ orderedOutgoingAssetAmounts,
175
+ minIncomingLpTokenAmount = BigNumber.from(1),
176
+ useUnderlyings,
177
+ }: {
178
+ comptrollerProxy: ComptrollerLib;
179
+ integrationManager: IntegrationManager;
180
+ signer: SignerWithAddress;
181
+ curveLiquidityAdapter: CurveLiquidityAdapter;
182
+ pool: AddressLike;
183
+ orderedOutgoingAssetAmounts: BigNumberish[];
184
+ minIncomingLpTokenAmount?: BigNumberish;
185
+ useUnderlyings: boolean;
186
+ }) {
187
+ const callArgs = callOnIntegrationArgs({
188
+ adapter: curveLiquidityAdapter,
189
+ encodedCallArgs: curveLendArgs({
190
+ minIncomingLpTokenAmount,
191
+ orderedOutgoingAssetAmounts,
192
+ pool,
193
+ useUnderlyings,
194
+ }),
195
+ selector: lendSelector,
196
+ });
197
+
198
+ return comptrollerProxy
199
+ .connect(signer)
200
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
201
+ }
202
+
203
+ export async function curveLendAndStake({
204
+ comptrollerProxy,
205
+ integrationManager,
206
+ signer,
207
+ curveLiquidityAdapter,
208
+ pool,
209
+ orderedOutgoingAssetAmounts,
210
+ incomingGaugeToken,
211
+ minIncomingGaugeTokenAmount = BigNumber.from(1),
212
+ useUnderlyings,
213
+ }: {
214
+ comptrollerProxy: ComptrollerLib;
215
+ integrationManager: IntegrationManager;
216
+ signer: SignerWithAddress;
217
+ curveLiquidityAdapter: CurveLiquidityAdapter;
218
+ pool: AddressLike;
219
+ orderedOutgoingAssetAmounts: BigNumberish[];
220
+ incomingGaugeToken: AddressLike;
221
+ minIncomingGaugeTokenAmount?: BigNumberish;
222
+ useUnderlyings: boolean;
223
+ }) {
224
+ const callArgs = callOnIntegrationArgs({
225
+ adapter: curveLiquidityAdapter,
226
+ encodedCallArgs: curveLendAndStakeArgs({
227
+ incomingGaugeToken,
228
+ minIncomingGaugeTokenAmount,
229
+ orderedOutgoingAssetAmounts,
230
+ pool,
231
+ useUnderlyings,
232
+ }),
233
+ selector: lendAndStakeSelector,
234
+ });
235
+
236
+ return comptrollerProxy
237
+ .connect(signer)
238
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
239
+ }
240
+
241
+ export async function curveRedeem({
242
+ comptrollerProxy,
243
+ integrationManager,
244
+ signer,
245
+ curveLiquidityAdapter,
246
+ pool,
247
+ outgoingLpTokenAmount,
248
+ useUnderlyings,
249
+ redeemType,
250
+ incomingAssetData,
251
+ }: {
252
+ comptrollerProxy: ComptrollerLib;
253
+ integrationManager: IntegrationManager;
254
+ signer: SignerWithAddress;
255
+ curveLiquidityAdapter: CurveLiquidityAdapter;
256
+ pool: AddressLike;
257
+ outgoingLpTokenAmount: BigNumberish;
258
+ useUnderlyings: boolean;
259
+ redeemType: CurveRedeemType;
260
+ incomingAssetData: BytesLike;
261
+ }) {
262
+ const callArgs = callOnIntegrationArgs({
263
+ adapter: curveLiquidityAdapter,
264
+ encodedCallArgs: curveRedeemArgs({
265
+ incomingAssetData,
266
+ outgoingLpTokenAmount,
267
+ pool,
268
+ redeemType,
269
+ useUnderlyings,
270
+ }),
271
+ selector: redeemSelector,
272
+ });
273
+
274
+ return comptrollerProxy
275
+ .connect(signer)
276
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
277
+ }
278
+
279
+ export async function curveStake({
280
+ comptrollerProxy,
281
+ integrationManager,
282
+ signer,
283
+ curveLiquidityAdapter,
284
+ pool,
285
+ incomingGaugeToken,
286
+ amount,
287
+ }: {
288
+ comptrollerProxy: ComptrollerLib;
289
+ integrationManager: IntegrationManager;
290
+ signer: SignerWithAddress;
291
+ curveLiquidityAdapter: CurveLiquidityAdapter;
292
+ pool: AddressLike;
293
+ incomingGaugeToken: AddressLike;
294
+ amount: BigNumberish;
295
+ }) {
296
+ const callArgs = callOnIntegrationArgs({
297
+ adapter: curveLiquidityAdapter,
298
+ encodedCallArgs: curveStakeArgs({
299
+ amount,
300
+ incomingGaugeToken,
301
+ pool,
302
+ }),
303
+ selector: stakeSelector,
304
+ });
305
+
306
+ return comptrollerProxy
307
+ .connect(signer)
308
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
309
+ }
310
+
311
+ export async function curveUnstake({
312
+ comptrollerProxy,
313
+ integrationManager,
314
+ signer,
315
+ curveLiquidityAdapter,
316
+ pool,
317
+ outgoingGaugeToken,
318
+ amount,
319
+ }: {
320
+ comptrollerProxy: ComptrollerLib;
321
+ integrationManager: IntegrationManager;
322
+ signer: SignerWithAddress;
323
+ curveLiquidityAdapter: CurveLiquidityAdapter;
324
+ pool: AddressLike;
325
+ outgoingGaugeToken: AddressLike;
326
+ amount: BigNumberish;
327
+ }) {
328
+ const callArgs = callOnIntegrationArgs({
329
+ adapter: curveLiquidityAdapter,
330
+ encodedCallArgs: curveUnstakeArgs({
331
+ amount,
332
+ outgoingGaugeToken,
333
+ pool,
334
+ }),
335
+ selector: unstakeSelector,
336
+ });
337
+
338
+ return comptrollerProxy
339
+ .connect(signer)
340
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
341
+ }
342
+
343
+ export async function curveUnstakeAndRedeem({
344
+ comptrollerProxy,
345
+ integrationManager,
346
+ signer,
347
+ curveLiquidityAdapter,
348
+ pool,
349
+ outgoingGaugeToken,
350
+ outgoingGaugeTokenAmount,
351
+ useUnderlyings,
352
+ redeemType,
353
+ incomingAssetData,
354
+ }: {
355
+ comptrollerProxy: ComptrollerLib;
356
+ integrationManager: IntegrationManager;
357
+ signer: SignerWithAddress;
358
+ curveLiquidityAdapter: CurveLiquidityAdapter;
359
+ pool: AddressLike;
360
+ outgoingGaugeToken: StandardToken;
361
+ outgoingGaugeTokenAmount: BigNumberish;
362
+ useUnderlyings: boolean;
363
+ redeemType: CurveRedeemType;
364
+ incomingAssetData: BytesLike;
365
+ }) {
366
+ const callArgs = callOnIntegrationArgs({
367
+ adapter: curveLiquidityAdapter,
368
+ encodedCallArgs: curveUnstakeAndRedeemArgs({
369
+ incomingAssetData,
370
+ outgoingGaugeToken,
371
+ outgoingGaugeTokenAmount,
372
+ pool,
373
+ redeemType,
374
+ useUnderlyings,
375
+ }),
376
+ selector: unstakeAndRedeemSelector,
377
+ });
378
+
379
+ return comptrollerProxy
380
+ .connect(signer)
381
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
382
+ }
383
+
123
384
  // aave pool
124
385
 
125
386
  export function curveAaveClaimRewards({
@@ -3,6 +3,7 @@ export * from './compound';
3
3
  export * from './curve';
4
4
  export * from './idle';
5
5
  export * from './mock';
6
+ export * from './olympusV2';
6
7
  export * from './paraSwapV4';
7
8
  export * from './paraSwapV5';
8
9
  export * from './poolTogetherV4';
@@ -0,0 +1,71 @@
1
+ import type { SignerWithAddress } from '@enzymefinance/hardhat';
2
+ import type { ComptrollerLib, IntegrationManager, OlympusV2Adapter } from '@enzymefinance/protocol';
3
+ import {
4
+ callOnIntegrationArgs,
5
+ IntegrationManagerActionId,
6
+ olympusV2StakeArgs,
7
+ olympusV2UnstakeArgs,
8
+ stakeSelector,
9
+ unstakeSelector,
10
+ } from '@enzymefinance/protocol';
11
+ import type { BigNumberish } from 'ethers';
12
+
13
+ export async function olympusV2Stake({
14
+ comptrollerProxy,
15
+ integrationManager,
16
+ signer,
17
+ olympusV2Adapter,
18
+ amount,
19
+ }: {
20
+ comptrollerProxy: ComptrollerLib;
21
+ integrationManager: IntegrationManager;
22
+ signer: SignerWithAddress;
23
+ olympusV2Adapter: OlympusV2Adapter;
24
+ amount: BigNumberish;
25
+ }) {
26
+ const stakeArgs = olympusV2StakeArgs({
27
+ amount,
28
+ });
29
+
30
+ const callArgs = callOnIntegrationArgs({
31
+ adapter: olympusV2Adapter,
32
+ encodedCallArgs: stakeArgs,
33
+ selector: stakeSelector,
34
+ });
35
+
36
+ const stakeTx = comptrollerProxy
37
+ .connect(signer)
38
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
39
+
40
+ return stakeTx;
41
+ }
42
+
43
+ export async function olympusV2Unstake({
44
+ comptrollerProxy,
45
+ integrationManager,
46
+ signer,
47
+ olympusV2Adapter,
48
+ amount,
49
+ }: {
50
+ comptrollerProxy: ComptrollerLib;
51
+ integrationManager: IntegrationManager;
52
+ signer: SignerWithAddress;
53
+ olympusV2Adapter: OlympusV2Adapter;
54
+ amount: BigNumberish;
55
+ }) {
56
+ const unstakeArgs = olympusV2UnstakeArgs({
57
+ amount,
58
+ });
59
+
60
+ const callArgs = callOnIntegrationArgs({
61
+ adapter: olympusV2Adapter,
62
+ encodedCallArgs: unstakeArgs,
63
+ selector: unstakeSelector,
64
+ });
65
+
66
+ const unstakeTx = comptrollerProxy
67
+ .connect(signer)
68
+ .callOnExtension(integrationManager, IntegrationManagerActionId.CallOnIntegration, callArgs);
69
+
70
+ return unstakeTx;
71
+ }
package/src/whales.ts CHANGED
@@ -12,12 +12,15 @@ const whales = {
12
12
  crv: '0x4ce799e6eD8D64536b67dD428565d52A531B3640',
13
13
  dai: '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503',
14
14
  knc: '0x09d51654bd9efbfcb56da3491989cc1444095fff',
15
+ ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
15
16
  link: '0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6',
16
17
  mana: '0xefb94ac00f1cee8a89d5c3f49faa799da6f03024',
17
18
  mln: '0xd8f8a53945bcfbbc19da162aa405e662ef71c40d',
19
+ ohm: '0x71a53aff36a699110d66d6bdfff2320caf8d2d59',
18
20
  rep: '0xc6a043b07d33b6f30d8cb501026c391cfd25abe1',
19
21
  ren: '0xbe0eb53f46cd790cd13851d5eff43d12404d33e8',
20
22
  susd: '0xa5f7a39e55d7878bc5bd754ee5d6bd7a7662355b',
23
+ sohm: '0xf280f037cdbda99727ddf5dfede91e68fa78605c',
21
24
  uni: '0x47173b170c64d16393a52e6c480b3ad8c302ba1e',
22
25
  usdc: '0xae2d4617c862309a3d75a0ffb358c7a5009c673f',
23
26
  usdt: '0x5041ed759dd4afc3a72b8192c143f72f4724081a',
@@ -25,12 +28,13 @@ const whales = {
25
28
  zrx: '0x206376e8940e42538781cd94ef024df3c1e0fd43',
26
29
  // aTokens
27
30
  ausdc: '0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296',
31
+ ausdt: '0x7d6149ad9a573a6e2ca6ebf7d4897c1b766841b4',
28
32
  // cTokens
29
33
  ccomp: '0xd74f186194ab9219fafac5c2fe4b3270169666db',
30
34
  cdai: '0xab4ce310054a11328685ece1043211b68ba5d082',
31
35
  ceth: '0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8',
32
36
  cuni: '0x39d8014b4f40d2cbc441137011d32023f4f1fd87',
33
- cusdc: '0xb3bd459e0598dde1fe84b1d0a1430be175b5d5be',
37
+ cusdc: '0xe1ed4da4284924ddaf69983b4d813fb1be58c380',
34
38
  // ptTokens
35
39
  ptUsdc: '0xd18236cd213f39d078177b6f6908f0e44e88e4aa',
36
40
  // synths
@@ -40,8 +44,8 @@ const whales = {
40
44
  sxau: '0x92eb453b7b5b8d41edb44e2c8b8b53eb70a482c7',
41
45
  // misc
42
46
  lidoSteth: '0x31f644e2dd5d74f5c8d6d9de89dd517474d51800',
43
- ldo: '0x3dba737ccc50a32a1764b493285dd51c8af6c278',
44
47
  eurs: '0x98ed26de6451db36246672df78ae7c50f2c76f6d',
48
+ ust: '0xf584f8728b874a6a5c7a8d4d387c9aae9172d621',
45
49
  } as const;
46
50
  /* eslint-enable sort-keys-fix/sort-keys-fix */
47
51