@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 *
|
|
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
|
|
248
|
-
const
|
|
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 *
|
|
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 *
|
|
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
|
|
234
|
-
const
|
|
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 *
|
|
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",
|