@kamino-finance/klend-sdk 5.0.2 → 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/classes/obligation.d.ts.map +1 -1
- package/dist/classes/obligation.js +1 -2
- package/dist/classes/obligation.js.map +1 -1
- package/dist/classes/reserve.d.ts +0 -1
- package/dist/classes/reserve.d.ts.map +1 -1
- package/dist/classes/reserve.js +3 -7
- package/dist/classes/reserve.js.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.d.ts.map +1 -1
- package/dist/lending_operations/repay_with_collateral_operations.js +6 -0
- package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -1
- package/dist/leverage/calcs.d.ts +28 -1
- package/dist/leverage/calcs.d.ts.map +1 -1
- package/dist/leverage/calcs.js +204 -8
- package/dist/leverage/calcs.js.map +1 -1
- package/dist/leverage/index.d.ts +1 -0
- package/dist/leverage/index.d.ts.map +1 -1
- package/dist/leverage/index.js +1 -0
- package/dist/leverage/index.js.map +1 -1
- package/dist/leverage/operations.d.ts +14 -241
- package/dist/leverage/operations.d.ts.map +1 -1
- package/dist/leverage/operations.js +508 -776
- package/dist/leverage/operations.js.map +1 -1
- package/dist/leverage/types.d.ts +173 -0
- package/dist/leverage/types.d.ts.map +1 -0
- package/dist/leverage/types.js +3 -0
- package/dist/leverage/types.js.map +1 -0
- package/dist/leverage/utils.d.ts +5 -5
- package/dist/leverage/utils.d.ts.map +1 -1
- package/dist/leverage/utils.js +68 -33
- package/dist/leverage/utils.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +2 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/fuzz.d.ts +3 -0
- package/dist/utils/fuzz.d.ts.map +1 -0
- package/dist/utils/fuzz.js +11 -0
- package/dist/utils/fuzz.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/classes/obligation.ts +1 -2
- package/src/classes/reserve.ts +3 -16
- package/src/lending_operations/repay_with_collateral_operations.ts +2 -0
- package/src/leverage/calcs.ts +315 -8
- package/src/leverage/index.ts +1 -0
- package/src/leverage/operations.ts +1079 -1331
- package/src/leverage/types.ts +211 -0
- package/src/leverage/utils.ts +103 -64
- package/src/utils/constants.ts +2 -0
- package/src/utils/fuzz.ts +5 -0
- package/src/utils/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/leverage/utils.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/leverage/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,SAAwE,CAAC;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAA8B,CAAC;AACtE,eAAO,MAAM,OAAO,yBAAyB,CAAC;AAE9C,eAAO,MAAM,uBAAuB,SAAwC,CAAC;AAE7E,MAAM,MAAM,GAAG,GAAG,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzD,wBAAgB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,CAE9C;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,UAMlD;AAED,eAAO,MAAM,YAAY,0DAA0D,CAAC;AAEpF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,wBAAgB,YAAY,CAAC,GAAG,GAAE,cAAc,GAAG,SAA0B,aAM5E;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAwB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAsB,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAA+D,CAAC;AAE7F;;GAEG;AACH,eAAO,MAAM,iBAAiB,WAAgE,CAAC;AAE/F,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,SAAwE,CAAC;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAA8B,CAAC;AACtE,eAAO,MAAM,OAAO,yBAAyB,CAAC;AAE9C,eAAO,MAAM,uBAAuB,SAAwC,CAAC;AAE7E,MAAM,MAAM,GAAG,GAAG,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzD,wBAAgB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,CAE9C;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,UAMlD;AAED,eAAO,MAAM,YAAY,0DAA0D,CAAC;AAEpF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,wBAAgB,YAAY,CAAC,GAAG,GAAE,cAAc,GAAG,SAA0B,aAM5E;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAwB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAsB,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAA+D,CAAC;AAE7F,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;GAEG;AACH,eAAO,MAAM,iBAAiB,WAAgE,CAAC;AAE/F,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MAINNET_BETA_CHAIN_ID = exports.USDC_MAINNET_MINT = exports.WRAPPED_SOL_MINT = exports.MIN_AUTODELEVERAGE_BONUS_BPS = exports.SLOTS_PER_YEAR = exports.SLOTS_PER_DAY = exports.SLOTS_PER_HOUR = exports.SLOTS_PER_MINUTE = exports.SLOTS_PER_SECOND = exports.ONE_HUNDRED_PCT_IN_BPS = exports.CDN_ENDPOINT = exports.INITIAL_COLLATERAL_RATE = exports.U64_MAX = exports.DEFAULT_KLEND_PROGRAM_ID = exports.STAGING_PROGRAM_ID = void 0;
|
|
6
|
+
exports.MAINNET_BETA_CHAIN_ID = exports.USDC_MAINNET_MINT = exports.SOL_DECIMALS = exports.WRAPPED_SOL_MINT = exports.MIN_AUTODELEVERAGE_BONUS_BPS = exports.SLOTS_PER_YEAR = exports.SLOTS_PER_DAY = exports.SLOTS_PER_HOUR = exports.SLOTS_PER_MINUTE = exports.SLOTS_PER_SECOND = exports.ONE_HUNDRED_PCT_IN_BPS = exports.CDN_ENDPOINT = exports.INITIAL_COLLATERAL_RATE = exports.U64_MAX = exports.DEFAULT_KLEND_PROGRAM_ID = exports.STAGING_PROGRAM_ID = void 0;
|
|
7
7
|
exports.isENV = isENV;
|
|
8
8
|
exports.getApiEndpoint = getApiEndpoint;
|
|
9
9
|
exports.getProgramId = getProgramId;
|
|
@@ -68,6 +68,7 @@ exports.MIN_AUTODELEVERAGE_BONUS_BPS = 50;
|
|
|
68
68
|
* WSOL Mint
|
|
69
69
|
*/
|
|
70
70
|
exports.WRAPPED_SOL_MINT = new web3_js_1.PublicKey('So11111111111111111111111111111111111111112');
|
|
71
|
+
exports.SOL_DECIMALS = 9;
|
|
71
72
|
/**
|
|
72
73
|
* USDC Mint
|
|
73
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;;;;AAYA,sBAEC;AAED,wCAMC;AAMD,oCAMC;AAlCD,4DAAiC;AACjC,wDAAsD;AACtD,6CAA4C;AAE/B,QAAA,kBAAkB,GAAc,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC;AAC7F,QAAA,wBAAwB,GAAW,sBAAU,CAAC,QAAQ,EAAE,CAAC;AACzD,QAAA,OAAO,GAAG,sBAAsB,CAAC;AAC9C,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACtB,QAAA,uBAAuB,GAAG,IAAI,oBAAO,CAAC,wBAAwB,CAAC,CAAC;AAI7E,SAAgB,KAAK,CAAC,KAAU;IAC9B,OAAO,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,CAAC;AAChF,CAAC;AAED,SAAgB,cAAc,CAAC,SAAoB;IACjD,IAAI,SAAS,CAAC,MAAM,CAAC,sBAAU,CAAC,EAAE,CAAC;QACjC,OAAO,gDAAgD,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,6DAA6D,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7F,CAAC;AACH,CAAC;AAEY,QAAA,YAAY,GAAG,uDAAuD,CAAC;AAEvE,QAAA,sBAAsB,GAAG,MAAM,CAAC;AAE7C,SAAgB,YAAY,CAAC,MAAkC,cAAc;IAC3E,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;QAC3B,OAAO,sBAAU,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,0BAAkB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACU,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;GAGG;AACU,QAAA,gBAAgB,GAAG,wBAAgB,GAAG,EAAE,CAAC;AAEtD;;;GAGG;AACU,QAAA,cAAc,GAAG,wBAAgB,GAAG,EAAE,CAAC;AAEpD;;;GAGG;AACU,QAAA,aAAa,GAAG,sBAAc,GAAG,EAAE,CAAC;AAEjD;;;GAGG;AACU,QAAA,cAAc,GAAG,qBAAa,GAAG,GAAG,CAAC;AAElD;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACU,QAAA,gBAAgB,GAAG,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;;;;AAYA,sBAEC;AAED,wCAMC;AAMD,oCAMC;AAlCD,4DAAiC;AACjC,wDAAsD;AACtD,6CAA4C;AAE/B,QAAA,kBAAkB,GAAc,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC;AAC7F,QAAA,wBAAwB,GAAW,sBAAU,CAAC,QAAQ,EAAE,CAAC;AACzD,QAAA,OAAO,GAAG,sBAAsB,CAAC;AAC9C,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACtB,QAAA,uBAAuB,GAAG,IAAI,oBAAO,CAAC,wBAAwB,CAAC,CAAC;AAI7E,SAAgB,KAAK,CAAC,KAAU;IAC9B,OAAO,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,CAAC;AAChF,CAAC;AAED,SAAgB,cAAc,CAAC,SAAoB;IACjD,IAAI,SAAS,CAAC,MAAM,CAAC,sBAAU,CAAC,EAAE,CAAC;QACjC,OAAO,gDAAgD,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,6DAA6D,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7F,CAAC;AACH,CAAC;AAEY,QAAA,YAAY,GAAG,uDAAuD,CAAC;AAEvE,QAAA,sBAAsB,GAAG,MAAM,CAAC;AAE7C,SAAgB,YAAY,CAAC,MAAkC,cAAc;IAC3E,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;QAC3B,OAAO,sBAAU,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,0BAAkB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACU,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;GAGG;AACU,QAAA,gBAAgB,GAAG,wBAAgB,GAAG,EAAE,CAAC;AAEtD;;;GAGG;AACU,QAAA,cAAc,GAAG,wBAAgB,GAAG,EAAE,CAAC;AAEpD;;;GAGG;AACU,QAAA,aAAa,GAAG,sBAAc,GAAG,EAAE,CAAC;AAEjD;;;GAGG;AACU,QAAA,cAAc,GAAG,qBAAa,GAAG,GAAG,CAAC;AAElD;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACU,QAAA,gBAAgB,GAAG,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC;AAEhF,QAAA,YAAY,GAAG,CAAC,CAAC;AAE9B;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAI,mBAAS,CAAC,8CAA8C,CAAC,CAAC;AAElF,QAAA,qBAAqB,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../src/utils/fuzz.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,SAAS,WAE9E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fuzzyEqual = fuzzyEqual;
|
|
7
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
8
|
+
function fuzzyEqual(a, b, epsilon = 0.0001) {
|
|
9
|
+
return new decimal_js_1.default(a).sub(b).abs().lte(epsilon);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=fuzz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../src/utils/fuzz.ts"],"names":[],"mappings":";;;;;AAEA,gCAEC;AAJD,4DAAiC;AAEjC,SAAgB,UAAU,CAAC,CAAgB,EAAE,CAAgB,EAAE,OAAO,GAAG,MAAM;IAC7E,OAAO,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -28,4 +28,5 @@ __exportStar(require("./oracle"), exports);
|
|
|
28
28
|
__exportStar(require("./lookupTable"), exports);
|
|
29
29
|
__exportStar(require("./sendTransactionsUtils"), exports);
|
|
30
30
|
__exportStar(require("./managerTypes"), exports);
|
|
31
|
+
__exportStar(require("./fuzz"), exports);
|
|
31
32
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,8CAA4B;AAC5B,wCAAsB;AACtB,gDAA8B;AAC9B,mDAAiC;AACjC,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,2CAAyB;AACzB,2CAAyB;AACzB,gDAA8B;AAC9B,0DAAwC;AACxC,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,8CAA4B;AAC5B,wCAAsB;AACtB,gDAA8B;AAC9B,mDAAiC;AACjC,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,2CAAyB;AACzB,2CAAyB;AACzB,gDAA8B;AAC9B,0DAAwC;AACxC,iDAA+B;AAC/B,yCAAuB"}
|
package/package.json
CHANGED
|
@@ -366,7 +366,7 @@ export class KaminoObligation {
|
|
|
366
366
|
if (obligationDeposits[i].depositReserve.equals(changeReserve)) {
|
|
367
367
|
const coll: ObligationCollateralFields = { ...obligationDeposits[i] };
|
|
368
368
|
const exchangeRate = collateralExchangeRates.get(changeReserve)!;
|
|
369
|
-
const changeInCollateral = new Decimal(changeInLamports).mul(exchangeRate)
|
|
369
|
+
const changeInCollateral = new Decimal(changeInLamports).mul(exchangeRate);
|
|
370
370
|
const updatedDeposit = new Decimal(obligationDeposits[i].depositedAmount.toNumber()).add(changeInCollateral);
|
|
371
371
|
coll.depositedAmount = new BN(positiveOrZero(updatedDeposit).toString());
|
|
372
372
|
newDeposits.push(new ObligationCollateral(coll));
|
|
@@ -927,7 +927,6 @@ export class KaminoObligation {
|
|
|
927
927
|
if (elevationGroup === this.state.elevationGroup) {
|
|
928
928
|
return Decimal.min(maxBorrowAmount, liquidityAvailable);
|
|
929
929
|
} else {
|
|
930
|
-
// TODO: this is wrong, most liquidity caps are global, we should add up only the ones that are specific to this mode
|
|
931
930
|
const { amount: debtThisReserve } = this.borrows.get(reserve.address) || { amount: new Decimal(0) };
|
|
932
931
|
const liquidityAvailablePostMigration = Decimal.max(0, liquidityAvailable.minus(debtThisReserve));
|
|
933
932
|
return Decimal.min(maxBorrowAmount, liquidityAvailablePostMigration);
|
package/src/classes/reserve.ts
CHANGED
|
@@ -570,7 +570,7 @@ export class KaminoReserve {
|
|
|
570
570
|
return Decimal.max(new Decimal(0), maxBorrowAmount);
|
|
571
571
|
}
|
|
572
572
|
|
|
573
|
-
|
|
573
|
+
calcSimulatedBorrowAPR(
|
|
574
574
|
amount: Decimal,
|
|
575
575
|
action: ActionType,
|
|
576
576
|
slot: number,
|
|
@@ -580,20 +580,7 @@ export class KaminoReserve {
|
|
|
580
580
|
const slotAdjustmentFactor = this.slotAdjustmentFactor();
|
|
581
581
|
const newUtilization = this.calcSimulatedUtilizationRatio(amount, action, slot, referralFeeBps, outflowAmount);
|
|
582
582
|
const curve = truncateBorrowCurve(this.state.config.borrowRateCurve.points);
|
|
583
|
-
return getBorrowRate(newUtilization, curve) * slotAdjustmentFactor;
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
calcSimulatedBorrowAPR(
|
|
587
|
-
amount: Decimal,
|
|
588
|
-
action: ActionType,
|
|
589
|
-
slot: number,
|
|
590
|
-
referralFeeBps: number,
|
|
591
|
-
outflowAmount?: Decimal
|
|
592
|
-
) {
|
|
593
|
-
return (
|
|
594
|
-
this.calcSimulatedBorrowRate(amount, action, slot, referralFeeBps, outflowAmount) +
|
|
595
|
-
this.getFixedHostInterestRate().toNumber()
|
|
596
|
-
);
|
|
583
|
+
return getBorrowRate(newUtilization, curve) * slotAdjustmentFactor + this.getFixedHostInterestRate().toNumber();
|
|
597
584
|
}
|
|
598
585
|
|
|
599
586
|
calcSimulatedSupplyAPR(
|
|
@@ -604,7 +591,7 @@ export class KaminoReserve {
|
|
|
604
591
|
outflowAmount?: Decimal
|
|
605
592
|
) {
|
|
606
593
|
const newUtilization = this.calcSimulatedUtilizationRatio(amount, action, slot, referralFeeBps, outflowAmount);
|
|
607
|
-
const simulatedBorrowAPR = this.
|
|
594
|
+
const simulatedBorrowAPR = this.calcSimulatedBorrowAPR(amount, action, slot, referralFeeBps, outflowAmount);
|
|
608
595
|
const protocolTakeRatePct = 1 - this.state.config.protocolTakeRatePct / 100;
|
|
609
596
|
|
|
610
597
|
return newUtilization * simulatedBorrowAPR * protocolTakeRatePct;
|
|
@@ -107,6 +107,7 @@ export async function getRepayWithCollSwapInputs<QuoteResponse>({
|
|
|
107
107
|
inputAmountLamports: withdrawableCollLamports,
|
|
108
108
|
inputMint: collTokenMint,
|
|
109
109
|
outputMint: debtTokenMint,
|
|
110
|
+
amountDebtAtaBalance: new Decimal(0), // only used for kTokens
|
|
110
111
|
};
|
|
111
112
|
|
|
112
113
|
// Build the repay & withdraw collateral tx to get the number of accounts
|
|
@@ -143,6 +144,7 @@ export async function getRepayWithCollSwapInputs<QuoteResponse>({
|
|
|
143
144
|
inputAmountLamports: collSwapInLamports,
|
|
144
145
|
inputMint: collTokenMint,
|
|
145
146
|
outputMint: debtTokenMint,
|
|
147
|
+
amountDebtAtaBalance: new Decimal(0), // only used for kTokens
|
|
146
148
|
},
|
|
147
149
|
initialInputs: {
|
|
148
150
|
debtRepayAmountLamports: repayAmountLamports,
|
package/src/leverage/calcs.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { PublicKey } from '@solana/web3.js';
|
|
2
2
|
import Decimal from 'decimal.js';
|
|
3
|
-
import { Kamino, StrategyWithAddress, TokenAmounts } from '@kamino-finance/kliquidity-sdk';
|
|
3
|
+
import { collToLamportsDecimal, Kamino, StrategyWithAddress, TokenAmounts } from '@kamino-finance/kliquidity-sdk';
|
|
4
|
+
import { KaminoMarket, KaminoObligation, KaminoReserve } from '../classes';
|
|
5
|
+
import { getExpectedTokenBalanceAfterBorrow } from './utils';
|
|
6
|
+
import {
|
|
7
|
+
AdjustLeverageCalcsResult,
|
|
8
|
+
DepositLeverageCalcsResult,
|
|
9
|
+
PriceAinBProvider,
|
|
10
|
+
WithdrawLeverageCalcsResult,
|
|
11
|
+
} from './types';
|
|
12
|
+
import { fuzzyEqual } from '../utils';
|
|
4
13
|
|
|
5
14
|
export const toJson = (object: any): string => {
|
|
6
15
|
return JSON.stringify(object, null, 2);
|
|
@@ -126,9 +135,13 @@ export async function calculateMultiplyEffects(
|
|
|
126
135
|
isClosingPosition =
|
|
127
136
|
(withdrawModeEstimatedDepositTokenWithdrawn.gte(new Decimal(deposited)) ||
|
|
128
137
|
withdrawModeEstimatedBorrowTokenWithdrawn.gte(new Decimal(borrowed)) ||
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
138
|
+
fuzzyEqual(
|
|
139
|
+
withdrawModeEstimatedDepositTokenWithdrawn,
|
|
140
|
+
new Decimal(deposited),
|
|
141
|
+
closingPositionDiffTolerance
|
|
142
|
+
) ||
|
|
143
|
+
fuzzyEqual(withdrawModeEstimatedBorrowTokenWithdrawn, new Decimal(borrowed), closingPositionDiffTolerance)) &&
|
|
144
|
+
!fuzzyEqual(withdrawModeEstimatedDepositTokenWithdrawn, new Decimal(0), closingPositionDiffTolerance);
|
|
132
145
|
|
|
133
146
|
totalDeposited = isClosingPosition ? new Decimal(0) : deposited.sub(withdrawModeEstimatedDepositTokenWithdrawn);
|
|
134
147
|
totalBorrowed = isClosingPosition ? new Decimal(0) : borrowed.sub(withdrawModeEstimatedBorrowTokenWithdrawn);
|
|
@@ -270,10 +283,6 @@ export function calcWithdrawAmounts(params: WithdrawParams): WithdrawResult {
|
|
|
270
283
|
};
|
|
271
284
|
}
|
|
272
285
|
|
|
273
|
-
export const fuzzyEq = (a: Decimal.Value, b: Decimal.Value, epsilon = 0.0001) => {
|
|
274
|
-
return new Decimal(a).sub(b).abs().lte(epsilon);
|
|
275
|
-
};
|
|
276
|
-
|
|
277
286
|
interface UseEstimateAdjustAmountsProps {
|
|
278
287
|
targetLeverage: Decimal;
|
|
279
288
|
debtTokenMint: PublicKey;
|
|
@@ -463,3 +472,301 @@ export async function simulateMintKToken(
|
|
|
463
472
|
|
|
464
473
|
return [requiredA, requiredB, actualMint];
|
|
465
474
|
}
|
|
475
|
+
|
|
476
|
+
export const depositLeverageCalcs = (props: {
|
|
477
|
+
depositAmount: Decimal;
|
|
478
|
+
depositTokenIsCollToken: boolean;
|
|
479
|
+
depositTokenIsSol: boolean;
|
|
480
|
+
priceDebtToColl: Decimal;
|
|
481
|
+
targetLeverage: Decimal;
|
|
482
|
+
slippagePct: Decimal;
|
|
483
|
+
flashLoanFee: Decimal;
|
|
484
|
+
}): DepositLeverageCalcsResult => {
|
|
485
|
+
// Initialize local variables from the props object
|
|
486
|
+
const {
|
|
487
|
+
depositAmount,
|
|
488
|
+
depositTokenIsCollToken,
|
|
489
|
+
depositTokenIsSol,
|
|
490
|
+
priceDebtToColl,
|
|
491
|
+
targetLeverage,
|
|
492
|
+
slippagePct,
|
|
493
|
+
flashLoanFee,
|
|
494
|
+
} = props;
|
|
495
|
+
const slippage = slippagePct.div('100');
|
|
496
|
+
|
|
497
|
+
const initDepositInSol = depositTokenIsSol ? depositAmount : new Decimal(0);
|
|
498
|
+
|
|
499
|
+
// Core logic
|
|
500
|
+
if (depositTokenIsCollToken) {
|
|
501
|
+
const y = targetLeverage.mul(priceDebtToColl);
|
|
502
|
+
const x = flashLoanFee.add('1').mul(slippage.add('1')).div(priceDebtToColl);
|
|
503
|
+
const finalColl = depositAmount.mul(x).div(x.sub(targetLeverage.sub('1').div(y)));
|
|
504
|
+
const debt = finalColl.sub(depositAmount).mul(x);
|
|
505
|
+
const flashBorrowColl = finalColl.sub(depositAmount).mul(flashLoanFee.add('1'));
|
|
506
|
+
|
|
507
|
+
return {
|
|
508
|
+
flashBorrowInCollToken: flashBorrowColl,
|
|
509
|
+
initDepositInSol,
|
|
510
|
+
debtTokenToBorrow: debt,
|
|
511
|
+
collTokenToDeposit: finalColl,
|
|
512
|
+
swapDebtTokenIn: debt,
|
|
513
|
+
swapCollTokenExpectedOut: finalColl.sub(depositAmount),
|
|
514
|
+
flashBorrowInDebtTokenKtokenOnly: new Decimal(0),
|
|
515
|
+
singleSidedDepositKtokenOnly: new Decimal(0),
|
|
516
|
+
requiredCollateralKtokenOnly: new Decimal(0),
|
|
517
|
+
};
|
|
518
|
+
} else {
|
|
519
|
+
const y = targetLeverage.mul(priceDebtToColl);
|
|
520
|
+
const x = flashLoanFee.add('1').mul(slippage.add('1')).div(priceDebtToColl);
|
|
521
|
+
const finalColl = depositAmount.div(x.sub(targetLeverage.sub('1').div(y)));
|
|
522
|
+
const flashBorrowColl = finalColl.mul(flashLoanFee.add('1'));
|
|
523
|
+
const debt = targetLeverage.sub('1').mul(finalColl).div(y);
|
|
524
|
+
|
|
525
|
+
return {
|
|
526
|
+
flashBorrowInCollToken: flashBorrowColl,
|
|
527
|
+
initDepositInSol,
|
|
528
|
+
debtTokenToBorrow: debt,
|
|
529
|
+
collTokenToDeposit: finalColl,
|
|
530
|
+
swapDebtTokenIn: debt.add(depositAmount),
|
|
531
|
+
swapCollTokenExpectedOut: finalColl,
|
|
532
|
+
flashBorrowInDebtTokenKtokenOnly: new Decimal(0),
|
|
533
|
+
singleSidedDepositKtokenOnly: new Decimal(0),
|
|
534
|
+
requiredCollateralKtokenOnly: new Decimal(0),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
export const depositLeverageKtokenCalcs = async (props: {
|
|
540
|
+
kamino: Kamino;
|
|
541
|
+
strategy: StrategyWithAddress;
|
|
542
|
+
debtTokenMint: PublicKey;
|
|
543
|
+
depositAmount: Decimal;
|
|
544
|
+
depositTokenIsCollToken: boolean;
|
|
545
|
+
depositTokenIsSol: boolean;
|
|
546
|
+
priceDebtToColl: Decimal;
|
|
547
|
+
targetLeverage: Decimal;
|
|
548
|
+
slippagePct: Decimal;
|
|
549
|
+
flashLoanFee: Decimal;
|
|
550
|
+
priceAinB: PriceAinBProvider;
|
|
551
|
+
strategyHoldings?: TokenAmounts;
|
|
552
|
+
}): Promise<DepositLeverageCalcsResult> => {
|
|
553
|
+
const {
|
|
554
|
+
kamino,
|
|
555
|
+
strategy,
|
|
556
|
+
debtTokenMint,
|
|
557
|
+
depositAmount,
|
|
558
|
+
depositTokenIsCollToken,
|
|
559
|
+
depositTokenIsSol,
|
|
560
|
+
priceDebtToColl,
|
|
561
|
+
targetLeverage,
|
|
562
|
+
slippagePct,
|
|
563
|
+
flashLoanFee,
|
|
564
|
+
priceAinB,
|
|
565
|
+
strategyHoldings,
|
|
566
|
+
} = props;
|
|
567
|
+
const initDepositInSol = depositTokenIsSol ? depositAmount : new Decimal(0);
|
|
568
|
+
const slippage = slippagePct.div('100');
|
|
569
|
+
|
|
570
|
+
let flashBorrowInDebtToken: Decimal;
|
|
571
|
+
let collTokenToDeposit: Decimal;
|
|
572
|
+
let debtTokenToBorrow: Decimal;
|
|
573
|
+
|
|
574
|
+
if (depositTokenIsCollToken) {
|
|
575
|
+
const x = slippage.add('1').div(priceDebtToColl);
|
|
576
|
+
const y = flashLoanFee.add('1').mul(priceDebtToColl);
|
|
577
|
+
const z = targetLeverage.mul(y).div(targetLeverage.sub(1));
|
|
578
|
+
flashBorrowInDebtToken = depositAmount.div(z.minus(new Decimal(1).div(x)));
|
|
579
|
+
collTokenToDeposit = depositAmount.add(flashBorrowInDebtToken.div(x));
|
|
580
|
+
debtTokenToBorrow = flashBorrowInDebtToken.mul(new Decimal(1).add(flashLoanFee));
|
|
581
|
+
|
|
582
|
+
return {
|
|
583
|
+
flashBorrowInCollToken: new Decimal(0),
|
|
584
|
+
initDepositInSol,
|
|
585
|
+
collTokenToDeposit,
|
|
586
|
+
debtTokenToBorrow,
|
|
587
|
+
swapDebtTokenIn: new Decimal(0),
|
|
588
|
+
swapCollTokenExpectedOut: new Decimal(0),
|
|
589
|
+
flashBorrowInDebtTokenKtokenOnly: flashBorrowInDebtToken,
|
|
590
|
+
requiredCollateralKtokenOnly: collTokenToDeposit.sub(depositAmount), // Assuming netValue is requiredCollateral, adjust as needed
|
|
591
|
+
singleSidedDepositKtokenOnly: flashBorrowInDebtToken,
|
|
592
|
+
};
|
|
593
|
+
} else {
|
|
594
|
+
const y = targetLeverage.mul(priceDebtToColl);
|
|
595
|
+
// although we will only swap ~half of the debt token, we account for the slippage on the entire amount as we are working backwards from the minimum collateral and do not know the exact swap proportion in advance
|
|
596
|
+
// This also allows for some variation in the pool ratios between calculation + submitting the tx
|
|
597
|
+
const x = flashLoanFee.add('1').mul(slippage.add('1')).div(priceDebtToColl);
|
|
598
|
+
// Calculate the amount of collateral tokens we will deposit in order to achieve the desired leverage after swapping a portion of the debt token and flash loan fees
|
|
599
|
+
const finalColl = depositAmount.div(x.sub(targetLeverage.sub('1').div(y)));
|
|
600
|
+
// Calculate how many A and B tokens we will need to actually mint the desired amount of ktoken collateral
|
|
601
|
+
// The actual amount of ktokens received may be less than the finalColl due to smart proportional contract logic
|
|
602
|
+
// So we use the actualColl as the amount we will deposit
|
|
603
|
+
const [estimatedA, estimatedB, actualColl] = await simulateMintKToken(
|
|
604
|
+
kamino!,
|
|
605
|
+
strategy!,
|
|
606
|
+
finalColl,
|
|
607
|
+
strategyHoldings
|
|
608
|
+
);
|
|
609
|
+
const pxAinB = await priceAinB(strategy!.strategy.tokenAMint, strategy!.strategy.tokenBMint);
|
|
610
|
+
const isTokenADeposit = strategy.strategy.tokenAMint.equals(debtTokenMint);
|
|
611
|
+
// Calculate the amount we need to flash borrow by combining value of A and B into the debt token
|
|
612
|
+
const singleSidedDepositAmount = isTokenADeposit
|
|
613
|
+
? estimatedA.add(estimatedB.div(pxAinB))
|
|
614
|
+
: estimatedB.add(estimatedA.mul(pxAinB));
|
|
615
|
+
|
|
616
|
+
// Add slippage to the entire amount, add flash loan fee to part we will flash borrow
|
|
617
|
+
flashBorrowInDebtToken = singleSidedDepositAmount
|
|
618
|
+
.div(new Decimal('1').sub(slippage))
|
|
619
|
+
.sub(depositAmount)
|
|
620
|
+
.div(new Decimal('1').sub(flashLoanFee));
|
|
621
|
+
// Deposit the min ktoken amount we calculated at the beginning
|
|
622
|
+
// Any slippage will be left in the user's wallet as ktokens
|
|
623
|
+
collTokenToDeposit = actualColl;
|
|
624
|
+
debtTokenToBorrow = flashBorrowInDebtToken.div(new Decimal('1').sub(flashLoanFee));
|
|
625
|
+
// Add slippage to ensure we try to swap/deposit as much as possible after flash loan fees
|
|
626
|
+
const singleSidedDeposit = singleSidedDepositAmount.div(new Decimal('1').sub(slippage));
|
|
627
|
+
|
|
628
|
+
return {
|
|
629
|
+
flashBorrowInCollToken: new Decimal(0),
|
|
630
|
+
initDepositInSol,
|
|
631
|
+
collTokenToDeposit,
|
|
632
|
+
debtTokenToBorrow,
|
|
633
|
+
swapDebtTokenIn: new Decimal(0),
|
|
634
|
+
swapCollTokenExpectedOut: new Decimal(0),
|
|
635
|
+
flashBorrowInDebtTokenKtokenOnly: flashBorrowInDebtToken,
|
|
636
|
+
singleSidedDepositKtokenOnly: singleSidedDeposit,
|
|
637
|
+
requiredCollateralKtokenOnly: collTokenToDeposit, // Assuming collTokenToDeposit is requiredCollateral, adjust as needed
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
export function withdrawLeverageCalcs(
|
|
643
|
+
market: KaminoMarket,
|
|
644
|
+
collReserve: KaminoReserve,
|
|
645
|
+
debtReserve: KaminoReserve,
|
|
646
|
+
priceCollToDebt: Decimal,
|
|
647
|
+
withdrawAmount: Decimal,
|
|
648
|
+
deposited: Decimal,
|
|
649
|
+
borrowed: Decimal,
|
|
650
|
+
currentSlot: number,
|
|
651
|
+
isClosingPosition: boolean,
|
|
652
|
+
selectedTokenIsCollToken: boolean,
|
|
653
|
+
selectedTokenMint: PublicKey,
|
|
654
|
+
obligation: KaminoObligation,
|
|
655
|
+
flashLoanFee: Decimal,
|
|
656
|
+
slippagePct: Decimal
|
|
657
|
+
): WithdrawLeverageCalcsResult {
|
|
658
|
+
// 1. Calculate coll_amount and debt_amount to repay such that we maintain leverage and we withdraw to
|
|
659
|
+
// the wallet `amountInDepositTokenToWithdrawToWallet` amount of collateral token
|
|
660
|
+
// We need to withdraw withdrawAmountInDepositToken coll tokens
|
|
661
|
+
// and repay repayAmountInBorrowToken debt tokens
|
|
662
|
+
const { adjustDepositPosition: withdrawAmountCalculated, adjustBorrowPosition: initialRepayAmount } =
|
|
663
|
+
isClosingPosition
|
|
664
|
+
? { adjustDepositPosition: deposited, adjustBorrowPosition: borrowed }
|
|
665
|
+
: calcWithdrawAmounts({
|
|
666
|
+
collTokenMint: collReserve.getLiquidityMint(),
|
|
667
|
+
priceCollToDebt: new Decimal(priceCollToDebt),
|
|
668
|
+
currentDepositPosition: deposited,
|
|
669
|
+
currentBorrowPosition: borrowed,
|
|
670
|
+
withdrawAmount: new Decimal(withdrawAmount),
|
|
671
|
+
selectedTokenMint: selectedTokenMint,
|
|
672
|
+
});
|
|
673
|
+
|
|
674
|
+
// Add slippage for the accrued interest rate amount
|
|
675
|
+
const irSlippageBpsForDebt = obligation!
|
|
676
|
+
.estimateObligationInterestRate(market, debtReserve!, obligation?.state.borrows[0]!, currentSlot)
|
|
677
|
+
.toDecimalPlaces(debtReserve?.state.liquidity.mintDecimals.toNumber()!, Decimal.ROUND_CEIL);
|
|
678
|
+
// add 0.1 to irSlippageBpsForDebt because we don't want to estimate slightly less than SC and end up not reapying enough
|
|
679
|
+
const repayAmount = initialRepayAmount
|
|
680
|
+
.mul(irSlippageBpsForDebt.add('0.1').div('10_000').add('1'))
|
|
681
|
+
.toDecimalPlaces(debtReserve?.state.liquidity.mintDecimals.toNumber()!, Decimal.ROUND_CEIL);
|
|
682
|
+
|
|
683
|
+
// 6. Get swap ixns
|
|
684
|
+
// 5. Get swap estimations to understand how much we need to borrow from borrow reserve
|
|
685
|
+
// prevent withdrawing more then deposited if we close position
|
|
686
|
+
const depositTokenWithdrawAmount = !isClosingPosition
|
|
687
|
+
? withdrawAmountCalculated.mul(new Decimal(1).plus(flashLoanFee))
|
|
688
|
+
: withdrawAmountCalculated;
|
|
689
|
+
|
|
690
|
+
// We are swapping debt token
|
|
691
|
+
// When withdrawing coll, it means we just need to swap enough to pay for the flash borrow
|
|
692
|
+
const swapAmountIfWithdrawingColl = repayAmount
|
|
693
|
+
.mul(new Decimal(1).plus(flashLoanFee))
|
|
694
|
+
.mul(new Decimal(1).plus(slippagePct.div(100)))
|
|
695
|
+
.div(priceCollToDebt);
|
|
696
|
+
|
|
697
|
+
// When withdrawing debt, it means we need to swap just the collateral we are withdrwaing
|
|
698
|
+
// enough to cover the debt we are repaying, leaving the remaining in the wallet
|
|
699
|
+
const swapAmountIfWithdrawingDebt = withdrawAmountCalculated;
|
|
700
|
+
|
|
701
|
+
const collTokenSwapIn = selectedTokenIsCollToken ? swapAmountIfWithdrawingColl : swapAmountIfWithdrawingDebt;
|
|
702
|
+
const debtTokenExpectedSwapOut = collTokenSwapIn.mul(priceCollToDebt).div(new Decimal(1).add(slippagePct.div(100)));
|
|
703
|
+
|
|
704
|
+
return {
|
|
705
|
+
withdrawAmount: withdrawAmountCalculated,
|
|
706
|
+
repayAmount,
|
|
707
|
+
collTokenSwapIn,
|
|
708
|
+
debtTokenExpectedSwapOut,
|
|
709
|
+
depositTokenWithdrawAmount,
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
export async function adjustDepositLeverageCalcs(
|
|
714
|
+
market: KaminoMarket,
|
|
715
|
+
owner: PublicKey,
|
|
716
|
+
debtReserve: KaminoReserve,
|
|
717
|
+
adjustDepositPosition: Decimal,
|
|
718
|
+
adjustBorrowPosition: Decimal,
|
|
719
|
+
priceDebtToColl: Decimal,
|
|
720
|
+
flashLoanFee: Decimal,
|
|
721
|
+
slippagePct: Decimal,
|
|
722
|
+
collIsKtoken: boolean
|
|
723
|
+
): Promise<AdjustLeverageCalcsResult> {
|
|
724
|
+
// used if coll is Ktoken and we borrow debt token instead
|
|
725
|
+
const amountToFlashBorrowDebt = adjustDepositPosition
|
|
726
|
+
.div(priceDebtToColl)
|
|
727
|
+
.mul(new Decimal(new Decimal(1).add(slippagePct.div(100))))
|
|
728
|
+
.toDecimalPlaces(debtReserve!.stats.decimals, Decimal.ROUND_UP);
|
|
729
|
+
|
|
730
|
+
const borrowAmount = adjustDepositPosition
|
|
731
|
+
.mul(new Decimal(1).plus(flashLoanFee))
|
|
732
|
+
.mul(new Decimal(new Decimal(1).add(slippagePct.div(100))))
|
|
733
|
+
.div(priceDebtToColl);
|
|
734
|
+
|
|
735
|
+
const expectedDebtTokenAtaBalance = await getExpectedTokenBalanceAfterBorrow(
|
|
736
|
+
market.getConnection(),
|
|
737
|
+
debtReserve.getLiquidityMint(),
|
|
738
|
+
owner,
|
|
739
|
+
collToLamportsDecimal(!collIsKtoken ? borrowAmount : amountToFlashBorrowDebt, debtReserve!.stats.decimals).floor(),
|
|
740
|
+
debtReserve!.state.liquidity.mintDecimals.toNumber()
|
|
741
|
+
);
|
|
742
|
+
|
|
743
|
+
return {
|
|
744
|
+
adjustDepositPosition,
|
|
745
|
+
adjustBorrowPosition,
|
|
746
|
+
amountToFlashBorrowDebt,
|
|
747
|
+
borrowAmount,
|
|
748
|
+
expectedDebtTokenAtaBalance,
|
|
749
|
+
withdrawAmountWithSlippageAndFlashLoanFee: new Decimal(0),
|
|
750
|
+
};
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
export function adjustWithdrawLeverageCalcs(
|
|
754
|
+
adjustDepositPosition: Decimal,
|
|
755
|
+
adjustBorrowPosition: Decimal,
|
|
756
|
+
flashLoanFee: Decimal,
|
|
757
|
+
slippagePct: Decimal
|
|
758
|
+
): AdjustLeverageCalcsResult {
|
|
759
|
+
// used if coll is Ktoken and we borrow debt token instead
|
|
760
|
+
const withdrawAmountWithSlippageAndFlashLoanFee = Decimal.abs(adjustDepositPosition)
|
|
761
|
+
.mul(new Decimal(1).plus(flashLoanFee))
|
|
762
|
+
.mul(new Decimal(1).add(slippagePct.div(100)));
|
|
763
|
+
|
|
764
|
+
return {
|
|
765
|
+
adjustDepositPosition,
|
|
766
|
+
adjustBorrowPosition,
|
|
767
|
+
amountToFlashBorrowDebt: new Decimal(0),
|
|
768
|
+
borrowAmount: new Decimal(0),
|
|
769
|
+
expectedDebtTokenAtaBalance: new Decimal(0),
|
|
770
|
+
withdrawAmountWithSlippageAndFlashLoanFee,
|
|
771
|
+
};
|
|
772
|
+
}
|
package/src/leverage/index.ts
CHANGED