@gearbox-protocol/sdk 4.1.4 → 4.1.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.
@@ -28,7 +28,6 @@ var import_v300 = require("../abi/v300.js");
28
28
  var import_sdk = require("../sdk/index.js");
29
29
  var import_abi = require("./abi.js");
30
30
  var import_createAnvilClient = require("./createAnvilClient.js");
31
- const DEFAULT_LEVERAGE = 4;
32
31
  class AccountOpener extends import_sdk.SDKConstruct {
33
32
  #service;
34
33
  #anvil;
@@ -165,12 +164,7 @@ class AccountOpener extends import_sdk.SDKConstruct {
165
164
  };
166
165
  }
167
166
  async prepareOpen(input) {
168
- const {
169
- creditManager,
170
- target,
171
- leverage = DEFAULT_LEVERAGE,
172
- slippage = 50
173
- } = input;
167
+ const { creditManager, target, slippage = 50 } = input;
174
168
  const borrower = await this.#getBorrower();
175
169
  const cm = this.sdk.marketRegister.findCreditManager(creditManager);
176
170
  const symbol = this.sdk.tokensMeta.symbol(target);
@@ -178,6 +172,8 @@ class AccountOpener extends import_sdk.SDKConstruct {
178
172
  creditManager: cm.name,
179
173
  target: symbol
180
174
  });
175
+ const leverage = this.#getLeverage(input);
176
+ logger?.debug(`using leverage ${leverage}`);
181
177
  const { minDebt, underlying } = cm.creditFacade;
182
178
  const expectedBalances = [];
183
179
  const leftoverBalances = [];
@@ -185,7 +181,7 @@ class AccountOpener extends import_sdk.SDKConstruct {
185
181
  const token = t;
186
182
  expectedBalances.push({
187
183
  token,
188
- balance: token === underlying ? BigInt(leverage) * minDebt : 1n
184
+ balance: token === underlying ? BigInt(leverage) * minDebt / import_sdk.PERCENTAGE_FACTOR : 1n
189
185
  });
190
186
  leftoverBalances.push({
191
187
  token,
@@ -201,18 +197,20 @@ class AccountOpener extends import_sdk.SDKConstruct {
201
197
  target
202
198
  });
203
199
  logger?.debug(strategy, "found open strategy");
204
- const debt = minDebt * BigInt(leverage - 1);
200
+ const debt = minDebt * (leverage - import_sdk.PERCENTAGE_FACTOR) / import_sdk.PERCENTAGE_FACTOR;
205
201
  const averageQuota = this.#getCollateralQuota(
206
202
  cm,
207
203
  target,
208
204
  strategy.amount,
209
- debt
205
+ debt,
206
+ logger
210
207
  );
211
208
  const minQuota = this.#getCollateralQuota(
212
209
  cm,
213
210
  target,
214
211
  strategy.minAmount,
215
- debt
212
+ debt,
213
+ logger
216
214
  );
217
215
  logger?.debug({ averageQuota, minQuota }, "calculated quotas");
218
216
  const { tx, calls } = await this.#service.openCA({
@@ -244,10 +242,11 @@ class AccountOpener extends import_sdk.SDKConstruct {
244
242
  async #depositIntoPools(targets) {
245
243
  this.#logger?.debug("checking and topping up pools if necessary");
246
244
  const minAvailableByPool = {};
247
- for (const { leverage = DEFAULT_LEVERAGE, creditManager } of targets) {
248
- const cm = this.sdk.marketRegister.findCreditManager(creditManager);
245
+ for (const t of targets) {
246
+ const leverage = this.#getLeverage(t);
247
+ const cm = this.sdk.marketRegister.findCreditManager(t.creditManager);
249
248
  const { minDebt } = cm.creditFacade;
250
- minAvailableByPool[cm.pool] = (minAvailableByPool[cm.pool] ?? 0n) + minDebt * BigInt(leverage - 1) * this.#poolDepositMultiplier / import_sdk.PERCENTAGE_FACTOR;
249
+ minAvailableByPool[cm.pool] = (minAvailableByPool[cm.pool] ?? 0n) + minDebt * (leverage - import_sdk.PERCENTAGE_FACTOR) / import_sdk.PERCENTAGE_FACTOR * this.#poolDepositMultiplier / import_sdk.PERCENTAGE_FACTOR;
251
250
  }
252
251
  let totalUSD = 0n;
253
252
  let deposits = [];
@@ -503,7 +502,7 @@ class AccountOpener extends import_sdk.SDKConstruct {
503
502
  });
504
503
  return acc;
505
504
  }
506
- #getCollateralQuota(cm, collateral, amount, debt) {
505
+ #getCollateralQuota(cm, collateral, amount, debt, logger) {
507
506
  const {
508
507
  underlying,
509
508
  creditManager: { liquidationThresholds }
@@ -524,6 +523,19 @@ class AccountOpener extends import_sdk.SDKConstruct {
524
523
  );
525
524
  }
526
525
  const desiredQuota = this.#calcQuota(amount, debt, collateralLT);
526
+ logger?.debug(
527
+ {
528
+ desiredQuota: this.sdk.tokensMeta.formatBN(underlying, desiredQuota),
529
+ availableQuota: this.sdk.tokensMeta.formatBN(
530
+ underlying,
531
+ availableQuota
532
+ ),
533
+ amount: this.sdk.tokensMeta.formatBN(underlying, amount),
534
+ debt: this.sdk.tokensMeta.formatBN(underlying, debt),
535
+ lt: Number(collateralLT)
536
+ },
537
+ "calculated quota"
538
+ );
527
539
  return [
528
540
  {
529
541
  token: collateral,
@@ -537,6 +549,20 @@ class AccountOpener extends import_sdk.SDKConstruct {
537
549
  quota = quota * (import_sdk.PERCENTAGE_FACTOR + 500n) / import_sdk.PERCENTAGE_FACTOR;
538
550
  return quota / import_sdk.PERCENTAGE_FACTOR * import_sdk.PERCENTAGE_FACTOR;
539
551
  }
552
+ /**
553
+ * Returns leverage in percentage factor format
554
+ * @param param0
555
+ * @returns
556
+ */
557
+ #getLeverage({ creditManager, target, leverage }) {
558
+ if (leverage) {
559
+ return BigInt(leverage) * import_sdk.PERCENTAGE_FACTOR;
560
+ }
561
+ const cm = this.sdk.marketRegister.findCreditManager(creditManager);
562
+ const lt = BigInt(cm.creditManager.liquidationThresholds.mustGet(target));
563
+ const d = 50n;
564
+ return import_sdk.PERCENTAGE_FACTOR * (1n + (lt - d) / (import_sdk.PERCENTAGE_FACTOR - lt));
565
+ }
540
566
  get faucet() {
541
567
  if (!this.#faucet) {
542
568
  throw new Error("faucet not found");
@@ -211,6 +211,9 @@ const chains = {
211
211
  defaultMarketConfigurators: {
212
212
  "0x5BCF14d8470e1a6110916371aacC8E1C947A7D9d": "Chaos Labs"
213
213
  },
214
+ testMarketConfigurators: {
215
+ "0x19037a281025b83fa37e3264b77af523ff87a3a4": "Chaos Labs"
216
+ },
214
217
  isPublic: false,
215
218
  wellKnownToken: {
216
219
  address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
@@ -14,7 +14,6 @@ import {
14
14
  } from "../sdk/index.js";
15
15
  import { iDegenNftv2Abi } from "./abi.js";
16
16
  import { createAnvilClient } from "./createAnvilClient.js";
17
- const DEFAULT_LEVERAGE = 4;
18
17
  class AccountOpener extends SDKConstruct {
19
18
  #service;
20
19
  #anvil;
@@ -151,12 +150,7 @@ class AccountOpener extends SDKConstruct {
151
150
  };
152
151
  }
153
152
  async prepareOpen(input) {
154
- const {
155
- creditManager,
156
- target,
157
- leverage = DEFAULT_LEVERAGE,
158
- slippage = 50
159
- } = input;
153
+ const { creditManager, target, slippage = 50 } = input;
160
154
  const borrower = await this.#getBorrower();
161
155
  const cm = this.sdk.marketRegister.findCreditManager(creditManager);
162
156
  const symbol = this.sdk.tokensMeta.symbol(target);
@@ -164,6 +158,8 @@ class AccountOpener extends SDKConstruct {
164
158
  creditManager: cm.name,
165
159
  target: symbol
166
160
  });
161
+ const leverage = this.#getLeverage(input);
162
+ logger?.debug(`using leverage ${leverage}`);
167
163
  const { minDebt, underlying } = cm.creditFacade;
168
164
  const expectedBalances = [];
169
165
  const leftoverBalances = [];
@@ -171,7 +167,7 @@ class AccountOpener extends SDKConstruct {
171
167
  const token = t;
172
168
  expectedBalances.push({
173
169
  token,
174
- balance: token === underlying ? BigInt(leverage) * minDebt : 1n
170
+ balance: token === underlying ? BigInt(leverage) * minDebt / PERCENTAGE_FACTOR : 1n
175
171
  });
176
172
  leftoverBalances.push({
177
173
  token,
@@ -187,18 +183,20 @@ class AccountOpener extends SDKConstruct {
187
183
  target
188
184
  });
189
185
  logger?.debug(strategy, "found open strategy");
190
- const debt = minDebt * BigInt(leverage - 1);
186
+ const debt = minDebt * (leverage - PERCENTAGE_FACTOR) / PERCENTAGE_FACTOR;
191
187
  const averageQuota = this.#getCollateralQuota(
192
188
  cm,
193
189
  target,
194
190
  strategy.amount,
195
- debt
191
+ debt,
192
+ logger
196
193
  );
197
194
  const minQuota = this.#getCollateralQuota(
198
195
  cm,
199
196
  target,
200
197
  strategy.minAmount,
201
- debt
198
+ debt,
199
+ logger
202
200
  );
203
201
  logger?.debug({ averageQuota, minQuota }, "calculated quotas");
204
202
  const { tx, calls } = await this.#service.openCA({
@@ -230,10 +228,11 @@ class AccountOpener extends SDKConstruct {
230
228
  async #depositIntoPools(targets) {
231
229
  this.#logger?.debug("checking and topping up pools if necessary");
232
230
  const minAvailableByPool = {};
233
- for (const { leverage = DEFAULT_LEVERAGE, creditManager } of targets) {
234
- const cm = this.sdk.marketRegister.findCreditManager(creditManager);
231
+ for (const t of targets) {
232
+ const leverage = this.#getLeverage(t);
233
+ const cm = this.sdk.marketRegister.findCreditManager(t.creditManager);
235
234
  const { minDebt } = cm.creditFacade;
236
- minAvailableByPool[cm.pool] = (minAvailableByPool[cm.pool] ?? 0n) + minDebt * BigInt(leverage - 1) * this.#poolDepositMultiplier / PERCENTAGE_FACTOR;
235
+ minAvailableByPool[cm.pool] = (minAvailableByPool[cm.pool] ?? 0n) + minDebt * (leverage - PERCENTAGE_FACTOR) / PERCENTAGE_FACTOR * this.#poolDepositMultiplier / PERCENTAGE_FACTOR;
237
236
  }
238
237
  let totalUSD = 0n;
239
238
  let deposits = [];
@@ -489,7 +488,7 @@ class AccountOpener extends SDKConstruct {
489
488
  });
490
489
  return acc;
491
490
  }
492
- #getCollateralQuota(cm, collateral, amount, debt) {
491
+ #getCollateralQuota(cm, collateral, amount, debt, logger) {
493
492
  const {
494
493
  underlying,
495
494
  creditManager: { liquidationThresholds }
@@ -510,6 +509,19 @@ class AccountOpener extends SDKConstruct {
510
509
  );
511
510
  }
512
511
  const desiredQuota = this.#calcQuota(amount, debt, collateralLT);
512
+ logger?.debug(
513
+ {
514
+ desiredQuota: this.sdk.tokensMeta.formatBN(underlying, desiredQuota),
515
+ availableQuota: this.sdk.tokensMeta.formatBN(
516
+ underlying,
517
+ availableQuota
518
+ ),
519
+ amount: this.sdk.tokensMeta.formatBN(underlying, amount),
520
+ debt: this.sdk.tokensMeta.formatBN(underlying, debt),
521
+ lt: Number(collateralLT)
522
+ },
523
+ "calculated quota"
524
+ );
513
525
  return [
514
526
  {
515
527
  token: collateral,
@@ -523,6 +535,20 @@ class AccountOpener extends SDKConstruct {
523
535
  quota = quota * (PERCENTAGE_FACTOR + 500n) / PERCENTAGE_FACTOR;
524
536
  return quota / PERCENTAGE_FACTOR * PERCENTAGE_FACTOR;
525
537
  }
538
+ /**
539
+ * Returns leverage in percentage factor format
540
+ * @param param0
541
+ * @returns
542
+ */
543
+ #getLeverage({ creditManager, target, leverage }) {
544
+ if (leverage) {
545
+ return BigInt(leverage) * PERCENTAGE_FACTOR;
546
+ }
547
+ const cm = this.sdk.marketRegister.findCreditManager(creditManager);
548
+ const lt = BigInt(cm.creditManager.liquidationThresholds.mustGet(target));
549
+ const d = 50n;
550
+ return PERCENTAGE_FACTOR * (1n + (lt - d) / (PERCENTAGE_FACTOR - lt));
551
+ }
526
552
  get faucet() {
527
553
  if (!this.#faucet) {
528
554
  throw new Error("faucet not found");
@@ -194,6 +194,9 @@ const chains = {
194
194
  defaultMarketConfigurators: {
195
195
  "0x5BCF14d8470e1a6110916371aacC8E1C947A7D9d": "Chaos Labs"
196
196
  },
197
+ testMarketConfigurators: {
198
+ "0x19037a281025b83fa37e3264b77af523ff87a3a4": "Chaos Labs"
199
+ },
197
200
  isPublic: false,
198
201
  wellKnownToken: {
199
202
  address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "4.1.4",
3
+ "version": "4.1.6",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",