@sonarwatch/portfolio-plugins 0.8.86 → 0.8.87
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/CHANGELOG.md +17 -13
- package/package.json +2 -2
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/plugins/balancer/helpers/pools.js +21 -21
- package/src/plugins/kamino/constants.d.ts +6 -0
- package/src/plugins/kamino/constants.js +49 -1
- package/src/plugins/kamino/constants.js.map +1 -1
- package/src/plugins/kamino/depositsFetcher.d.ts +3 -0
- package/src/plugins/kamino/depositsFetcher.js +279 -0
- package/src/plugins/kamino/depositsFetcher.js.map +1 -0
- package/src/plugins/kamino/filters.d.ts +2 -0
- package/src/plugins/kamino/filters.js +17 -0
- package/src/plugins/kamino/filters.js.map +1 -0
- package/src/plugins/kamino/helpers/apr.d.ts +8 -0
- package/src/plugins/kamino/helpers/apr.js +96 -0
- package/src/plugins/kamino/helpers/apr.js.map +1 -0
- package/src/plugins/kamino/helpers/pdas.d.ts +4 -0
- package/src/plugins/kamino/helpers/pdas.js +39 -0
- package/src/plugins/kamino/helpers/pdas.js.map +1 -0
- package/src/plugins/kamino/{helpers.d.ts → helpers/vaults.d.ts} +4 -4
- package/src/plugins/kamino/{helpers.js → helpers/vaults.js} +2 -28
- package/src/plugins/kamino/helpers/vaults.js.map +1 -0
- package/src/plugins/kamino/index.js +4 -2
- package/src/plugins/kamino/index.js.map +1 -1
- package/src/plugins/kamino/poolsJob.js +6 -6
- package/src/plugins/kamino/poolsJob.js.map +1 -1
- package/src/plugins/kamino/reservesJob.d.ts +3 -0
- package/src/plugins/kamino/reservesJob.js +44 -0
- package/src/plugins/kamino/reservesJob.js.map +1 -0
- package/src/plugins/kamino/structs/klend.d.ts +219 -0
- package/src/plugins/kamino/structs/klend.js +197 -0
- package/src/plugins/kamino/structs/klend.js.map +1 -0
- package/src/plugins/kamino/{structs.js → structs/vaults.js} +2 -2
- package/src/plugins/kamino/structs/vaults.js.map +1 -0
- package/src/plugins/kamino/types.d.ts +77 -0
- package/src/plugins/kamino/types.js +3 -0
- package/src/plugins/kamino/types.js.map +1 -0
- package/src/plugins/orders/clobs-solana/MarketJobExecutorGenerator.js +1 -1
- package/src/plugins/orders/clobs-solana/MarketJobExecutorGenerator.js.map +1 -1
- package/src/plugins/sushiswap/helpers.js +24 -24
- package/src/plugins/uniswap-v2/helpers.js +22 -22
- package/src/utils/solana/filters.d.ts +2 -1
- package/src/utils/solana/filters.js +8 -2
- package/src/utils/solana/filters.js.map +1 -1
- package/src/plugins/kamino/helpers.js.map +0 -1
- package/src/plugins/kamino/structs.js.map +0 -1
- /package/src/plugins/kamino/{structs.d.ts → structs/vaults.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
@@ -2,22 +2,26 @@
|
|
2
2
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
4
4
|
|
5
|
-
## [0.8.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
## [0.8.85](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.84...plugins-0.8.85) (2023-11-20)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
## [0.8.84](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.83...plugins-0.8.84) (2023-11-20)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
## [0.8.83](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.82...plugins-0.8.83) (2023-11-19)
|
5
|
+
## [0.8.87](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.86...plugins-0.8.87) (2023-11-20)
|
18
6
|
|
19
7
|
|
20
8
|
|
9
|
+
## [0.8.86](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.85...plugins-0.8.86) (2023-11-20)
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
## [0.8.85](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.84...plugins-0.8.85) (2023-11-20)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
## [0.8.84](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.83...plugins-0.8.84) (2023-11-20)
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
## [0.8.83](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.82...plugins-0.8.83) (2023-11-19)
|
22
|
+
|
23
|
+
|
24
|
+
|
21
25
|
## [0.8.82](https://github.com/sonarwatch/portfolio/compare/plugins-0.8.81...plugins-0.8.82) (2023-11-17)
|
22
26
|
|
23
27
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sonarwatch/portfolio-plugins",
|
3
|
-
"version": "0.8.
|
3
|
+
"version": "0.8.87",
|
4
4
|
"type": "commonjs",
|
5
5
|
"generators": "./generators.json",
|
6
6
|
"dependencies": {
|
@@ -40,7 +40,7 @@
|
|
40
40
|
"web3-v1": "npm:web3@^1.5.0"
|
41
41
|
},
|
42
42
|
"peerDependencies": {
|
43
|
-
"@sonarwatch/portfolio-core": "0.8.
|
43
|
+
"@sonarwatch/portfolio-core": "0.8.87"
|
44
44
|
},
|
45
45
|
"main": "./src/index.js",
|
46
46
|
"types": "./src/index.d.ts"
|
package/src/index.js
CHANGED
package/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,wFAAqF;AACrF,sEAA8C;AAC9C,6CAI0B;AAC1B,yDAIgC;AAChC,iDAG4B;AAC5B,iDAI4B;AAC5B,2CAGyB;AACzB,6CAI0B;AAC1B,+CAI2B;AAC3B,yCAIwB;AACxB,+CAG2B;AAC3B,2CAIyB;AACzB,6CAI0B;AAC1B,2CAIyB;AACzB,6CAG0B;AAC1B,6CAI0B;AAC1B,yCAIwB;AACxB,2DAGiC;AACjC,6CAI0B;AAC1B,2CAIyB;AACzB,2CAIyB;AACzB,qDAA6D;AAC7D,qEAIsC;AACtC,uDAI+B;AAC/B,mDAG6B;AAC7B,qDAG8B;AAC9B,uDAG+B;AAC/B,2CAIyB;AACzB,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":"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"}
|
@@ -36,27 +36,27 @@ exports.getBalancerPoolsV2 = void 0;
|
|
36
36
|
const graphql_request_1 = __importStar(require("graphql-request"));
|
37
37
|
function getBalancerPoolsV2(url) {
|
38
38
|
return __awaiter(this, void 0, void 0, function* () {
|
39
|
-
const query = (0, graphql_request_1.gql) `
|
40
|
-
query pools {
|
41
|
-
pools(
|
42
|
-
first: 1000
|
43
|
-
orderBy: totalLiquidity
|
44
|
-
orderDirection: desc
|
45
|
-
where: { totalLiquidity_gt: "500" }
|
46
|
-
) {
|
47
|
-
id
|
48
|
-
address
|
49
|
-
symbol
|
50
|
-
totalLiquidity
|
51
|
-
totalShares
|
52
|
-
tokens {
|
53
|
-
balance
|
54
|
-
decimals
|
55
|
-
symbol
|
56
|
-
address
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
39
|
+
const query = (0, graphql_request_1.gql) `
|
40
|
+
query pools {
|
41
|
+
pools(
|
42
|
+
first: 1000
|
43
|
+
orderBy: totalLiquidity
|
44
|
+
orderDirection: desc
|
45
|
+
where: { totalLiquidity_gt: "500" }
|
46
|
+
) {
|
47
|
+
id
|
48
|
+
address
|
49
|
+
symbol
|
50
|
+
totalLiquidity
|
51
|
+
totalShares
|
52
|
+
tokens {
|
53
|
+
balance
|
54
|
+
decimals
|
55
|
+
symbol
|
56
|
+
address
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
60
|
`;
|
61
61
|
const res = yield (0, graphql_request_1.default)(url, query);
|
62
62
|
const pools = res.pools;
|
@@ -3,3 +3,9 @@ import { Platform } from '@sonarwatch/portfolio-core';
|
|
3
3
|
export declare const platformId = "kamino";
|
4
4
|
export declare const kaminoPlatform: Platform;
|
5
5
|
export declare const programId: PublicKey;
|
6
|
+
export declare const klendProgramId: PublicKey;
|
7
|
+
export declare const lendingMarket = "7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF";
|
8
|
+
export declare const multiplyPairs: string[][];
|
9
|
+
export declare const leveragePairs: string[][];
|
10
|
+
export declare const marketsKey = "markets";
|
11
|
+
export declare const reservesKey = "reserves";
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.programId = exports.kaminoPlatform = exports.platformId = void 0;
|
3
|
+
exports.reservesKey = exports.marketsKey = exports.leveragePairs = exports.multiplyPairs = exports.lendingMarket = exports.klendProgramId = exports.programId = exports.kaminoPlatform = exports.platformId = void 0;
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
5
5
|
exports.platformId = 'kamino';
|
6
6
|
exports.kaminoPlatform = {
|
@@ -11,4 +11,52 @@ exports.kaminoPlatform = {
|
|
11
11
|
defiLlamaId: 'parent#kamino-finance',
|
12
12
|
};
|
13
13
|
exports.programId = new web3_js_1.PublicKey('6LtLpnUFNByNXLyCoK9wA2MykKAmQNZKBdY8s47dehDc');
|
14
|
+
exports.klendProgramId = new web3_js_1.PublicKey('KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD');
|
15
|
+
exports.lendingMarket = '7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF';
|
16
|
+
exports.multiplyPairs = [
|
17
|
+
[
|
18
|
+
'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',
|
19
|
+
'So11111111111111111111111111111111111111112',
|
20
|
+
],
|
21
|
+
[
|
22
|
+
'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
|
23
|
+
'So11111111111111111111111111111111111111112',
|
24
|
+
],
|
25
|
+
[
|
26
|
+
'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1',
|
27
|
+
'So11111111111111111111111111111111111111112',
|
28
|
+
],
|
29
|
+
];
|
30
|
+
exports.leveragePairs = [
|
31
|
+
[
|
32
|
+
'6DNSN2BJsaPFdFFc1zP37kkeNe4Usc1Sqkzr9C9vPWcU',
|
33
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
34
|
+
],
|
35
|
+
[
|
36
|
+
'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
|
37
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
38
|
+
],
|
39
|
+
[
|
40
|
+
'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1',
|
41
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
42
|
+
],
|
43
|
+
[
|
44
|
+
'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',
|
45
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
46
|
+
],
|
47
|
+
[
|
48
|
+
'So11111111111111111111111111111111111111112',
|
49
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
50
|
+
],
|
51
|
+
[
|
52
|
+
'7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',
|
53
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
54
|
+
],
|
55
|
+
[
|
56
|
+
'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
57
|
+
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
58
|
+
],
|
59
|
+
];
|
60
|
+
exports.marketsKey = `markets`;
|
61
|
+
exports.reservesKey = `reserves`;
|
14
62
|
//# sourceMappingURL=constants.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/kamino/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAG/B,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,kBAAU;IACd,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,qCAAqC,kBAAU,MAAM;IAC5D,OAAO,EAAE,yBAAyB;IAClC,WAAW,EAAE,uBAAuB;CACrC,CAAC;AACW,QAAA,SAAS,GAAG,IAAI,mBAAS,CACpC,8CAA8C,CAC/C,CAAC"}
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/kamino/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAG/B,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,kBAAU;IACd,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,qCAAqC,kBAAU,MAAM;IAC5D,OAAO,EAAE,yBAAyB;IAClC,WAAW,EAAE,uBAAuB;CACrC,CAAC;AACW,QAAA,SAAS,GAAG,IAAI,mBAAS,CACpC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,mBAAS,CACzC,6CAA6C,CAC9C,CAAC;AACW,QAAA,aAAa,GAAG,8CAA8C,CAAC;AAC/D,QAAA,aAAa,GAAG;IAC3B;QACE,6CAA6C;QAC7C,6CAA6C;KAC9C;IACD;QACE,8CAA8C;QAC9C,6CAA6C;KAC9C;IACD;QACE,6CAA6C;QAC7C,6CAA6C;KAC9C;CACF,CAAC;AAEW,QAAA,aAAa,GAAG;IAC3B;QACE,8CAA8C;QAC9C,8CAA8C;KAC/C;IACD;QACE,8CAA8C;QAC9C,8CAA8C;KAC/C;IACD;QACE,6CAA6C;QAC7C,8CAA8C;KAC/C;IACD;QACE,6CAA6C;QAC7C,8CAA8C;KAC/C;IACD;QACE,6CAA6C;QAC7C,8CAA8C;KAC/C;IACD;QACE,8CAA8C;QAC9C,8CAA8C;KAC/C;IACD;QACE,8CAA8C;QAC9C,8CAA8C;KAC/C;CACF,CAAC;AACW,QAAA,UAAU,GAAG,SAAS,CAAC;AACvB,QAAA,WAAW,GAAG,UAAU,CAAC"}
|
@@ -0,0 +1,279 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
16
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
17
|
+
const constants_1 = require("./constants");
|
18
|
+
const clients_1 = require("../../utils/clients");
|
19
|
+
const klend_1 = require("./structs/klend");
|
20
|
+
const getParsedAccountInfo_1 = require("../../utils/solana/getParsedAccountInfo");
|
21
|
+
const tokenPriceToAssetToken_1 = __importDefault(require("../../utils/misc/tokenPriceToAssetToken"));
|
22
|
+
const solana_1 = require("../../utils/solana");
|
23
|
+
const pdas_1 = require("./helpers/pdas");
|
24
|
+
const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
|
25
|
+
const client = (0, clients_1.getClientSolana)();
|
26
|
+
const networkId = portfolio_core_1.NetworkId.solana;
|
27
|
+
const lendingAccount = yield (0, getParsedAccountInfo_1.getParsedAccountInfo)(client, klend_1.obligationStruct, (0, pdas_1.getLendingPda)(owner));
|
28
|
+
const multiplyAccounts = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, klend_1.obligationStruct, (0, pdas_1.getMultiplyPdas)(owner));
|
29
|
+
const leverageAccounts = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, klend_1.obligationStruct, (0, pdas_1.getLeveragePdas)(owner));
|
30
|
+
if (!lendingAccount && !multiplyAccounts && !leverageAccounts)
|
31
|
+
return [];
|
32
|
+
const reserves = yield cache.getItem(constants_1.reservesKey, {
|
33
|
+
prefix: constants_1.platformId,
|
34
|
+
networkId,
|
35
|
+
});
|
36
|
+
if (!reserves)
|
37
|
+
return [];
|
38
|
+
const tokenAddresses = Object.entries(reserves).map((entry) => reserves[entry[0]].liquidity.mintPubkey.toString());
|
39
|
+
const tokensPrices = yield cache.getTokenPrices(tokenAddresses, networkId);
|
40
|
+
const tokenPriceById = new Map();
|
41
|
+
tokensPrices.forEach((tP) => (tP ? tokenPriceById.set(tP.address, tP) : []));
|
42
|
+
const elements = [];
|
43
|
+
// *************
|
44
|
+
// KLend : https://app.kamino.finance/lending
|
45
|
+
// *************
|
46
|
+
if (lendingAccount) {
|
47
|
+
const borrowedAssets = [];
|
48
|
+
const borrowedYields = [];
|
49
|
+
const suppliedAssets = [];
|
50
|
+
const suppliedYields = [];
|
51
|
+
const rewardAssets = [];
|
52
|
+
const suppliedLtvs = [];
|
53
|
+
const borrowedWeights = [];
|
54
|
+
for (const deposit of lendingAccount.deposits) {
|
55
|
+
if (deposit.depositReserve.toString() ===
|
56
|
+
'11111111111111111111111111111111' ||
|
57
|
+
deposit.depositedAmount.isLessThanOrEqualTo(0))
|
58
|
+
continue;
|
59
|
+
const amountRaw = deposit.depositedAmount;
|
60
|
+
const reserve = reserves[deposit.depositReserve.toString()];
|
61
|
+
if (!reserve)
|
62
|
+
continue;
|
63
|
+
const mint = reserve.liquidity.mintPubkey;
|
64
|
+
const tokenPrice = tokenPriceById.get(mint);
|
65
|
+
const amount = amountRaw
|
66
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
67
|
+
.toNumber();
|
68
|
+
suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
69
|
+
suppliedLtvs.push(reserve.config.loanToValuePct / 100);
|
70
|
+
// suppliedYields.push([
|
71
|
+
// { apr: reserve.supplyApr, apy: aprToApy(reserve.supplyApr) },
|
72
|
+
// ]);
|
73
|
+
}
|
74
|
+
for (const borrow of lendingAccount.borrows) {
|
75
|
+
if (borrow.borrowReserve.toString() ===
|
76
|
+
'11111111111111111111111111111111' ||
|
77
|
+
borrow.borrowedAmountSf.isLessThanOrEqualTo(0))
|
78
|
+
continue;
|
79
|
+
const amountRaw = borrow.borrowedAmountSf.dividedBy(borrow.cumulativeBorrowRateBsf.value0);
|
80
|
+
const reserve = reserves[borrow.borrowReserve.toString()];
|
81
|
+
if (!reserve)
|
82
|
+
continue;
|
83
|
+
const mint = reserve.liquidity.mintPubkey;
|
84
|
+
const tokenPrice = tokenPriceById.get(mint);
|
85
|
+
const amount = amountRaw
|
86
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
87
|
+
.toNumber();
|
88
|
+
borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
89
|
+
borrowedWeights.push(Number(reserve.config.borrowFactorPct) / 100);
|
90
|
+
// borrowedYields.push([
|
91
|
+
// { apr: reserve.borrowApr, apy: aprToApy(reserve.borrowApr) },
|
92
|
+
// ]);
|
93
|
+
}
|
94
|
+
if (suppliedAssets.length !== 0 && borrowedAssets.length !== 0) {
|
95
|
+
const { borrowedValue, collateralRatio, suppliedValue, value, healthRatio, } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets, suppliedLtvs, borrowedWeights);
|
96
|
+
elements.push({
|
97
|
+
type: portfolio_core_1.PortfolioElementType.borrowlend,
|
98
|
+
networkId,
|
99
|
+
platformId: constants_1.platformId,
|
100
|
+
label: 'Lending',
|
101
|
+
value,
|
102
|
+
data: {
|
103
|
+
borrowedAssets,
|
104
|
+
borrowedValue,
|
105
|
+
borrowedYields,
|
106
|
+
suppliedAssets,
|
107
|
+
suppliedValue,
|
108
|
+
suppliedYields,
|
109
|
+
collateralRatio,
|
110
|
+
healthRatio,
|
111
|
+
rewardAssets,
|
112
|
+
value,
|
113
|
+
},
|
114
|
+
});
|
115
|
+
}
|
116
|
+
}
|
117
|
+
// ******
|
118
|
+
// Multiply : https://app.kamino.finance/lending/multiply
|
119
|
+
// ******
|
120
|
+
for (const multiplyAccount of multiplyAccounts) {
|
121
|
+
if (!multiplyAccount)
|
122
|
+
continue;
|
123
|
+
const borrowedAssets = [];
|
124
|
+
const borrowedYields = [];
|
125
|
+
const suppliedAssets = [];
|
126
|
+
const suppliedYields = [];
|
127
|
+
const rewardAssets = [];
|
128
|
+
const suppliedLtvs = [];
|
129
|
+
const borrowedWeights = [];
|
130
|
+
for (const deposit of multiplyAccount.deposits) {
|
131
|
+
if (deposit.depositReserve.toString() ===
|
132
|
+
'11111111111111111111111111111111' ||
|
133
|
+
deposit.depositedAmount.isLessThanOrEqualTo(0))
|
134
|
+
continue;
|
135
|
+
const amountRaw = deposit.depositedAmount;
|
136
|
+
const reserve = reserves[deposit.depositReserve.toString()];
|
137
|
+
if (!reserve)
|
138
|
+
continue;
|
139
|
+
const mint = reserve.liquidity.mintPubkey;
|
140
|
+
const tokenPrice = tokenPriceById.get(mint);
|
141
|
+
const amount = amountRaw
|
142
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
143
|
+
.toNumber();
|
144
|
+
suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
145
|
+
suppliedLtvs.push(reserve.config.loanToValuePct / 100);
|
146
|
+
// suppliedYields.push([
|
147
|
+
// { apr: reserve.supplyApr, apy: aprToApy(reserve.supplyApr) },
|
148
|
+
// ]);
|
149
|
+
}
|
150
|
+
for (const borrow of multiplyAccount.borrows) {
|
151
|
+
if (borrow.borrowReserve.toString() ===
|
152
|
+
'11111111111111111111111111111111' ||
|
153
|
+
borrow.borrowedAmountSf.isLessThanOrEqualTo(0))
|
154
|
+
continue;
|
155
|
+
const amountRaw = borrow.borrowedAmountSf.dividedBy(borrow.cumulativeBorrowRateBsf.value0);
|
156
|
+
const reserve = reserves[borrow.borrowReserve.toString()];
|
157
|
+
if (!reserve)
|
158
|
+
continue;
|
159
|
+
const mint = reserve.liquidity.mintPubkey;
|
160
|
+
const tokenPrice = tokenPriceById.get(mint);
|
161
|
+
const amount = amountRaw
|
162
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
163
|
+
.toNumber();
|
164
|
+
borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
165
|
+
borrowedWeights.push(Number(reserve.config.borrowFactorPct) / 100);
|
166
|
+
// borrowedYields.push([
|
167
|
+
// { apr: reserve.borrowApr, apy: aprToApy(reserve.borrowApr) },
|
168
|
+
// ]);
|
169
|
+
}
|
170
|
+
if (suppliedAssets.length !== 0 && borrowedAssets.length !== 0) {
|
171
|
+
const { borrowedValue, collateralRatio, suppliedValue, value, healthRatio, } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets, suppliedLtvs, borrowedWeights);
|
172
|
+
elements.push({
|
173
|
+
type: portfolio_core_1.PortfolioElementType.borrowlend,
|
174
|
+
networkId,
|
175
|
+
platformId: constants_1.platformId,
|
176
|
+
label: 'Lending',
|
177
|
+
name: 'Multiply',
|
178
|
+
value,
|
179
|
+
data: {
|
180
|
+
borrowedAssets,
|
181
|
+
borrowedValue,
|
182
|
+
borrowedYields,
|
183
|
+
suppliedAssets,
|
184
|
+
suppliedValue,
|
185
|
+
suppliedYields,
|
186
|
+
collateralRatio,
|
187
|
+
healthRatio: -healthRatio / 0.9,
|
188
|
+
rewardAssets,
|
189
|
+
value,
|
190
|
+
},
|
191
|
+
});
|
192
|
+
}
|
193
|
+
}
|
194
|
+
// ******
|
195
|
+
// Leverage : https://app.kamino.finance/lending/leverage
|
196
|
+
// ******
|
197
|
+
for (const leverageAccount of leverageAccounts) {
|
198
|
+
if (!leverageAccount)
|
199
|
+
continue;
|
200
|
+
const borrowedAssets = [];
|
201
|
+
const borrowedYields = [];
|
202
|
+
const suppliedAssets = [];
|
203
|
+
const suppliedYields = [];
|
204
|
+
const rewardAssets = [];
|
205
|
+
const suppliedLtvs = [];
|
206
|
+
const borrowedWeights = [];
|
207
|
+
for (const deposit of leverageAccount.deposits) {
|
208
|
+
if (deposit.depositReserve.toString() ===
|
209
|
+
'11111111111111111111111111111111' ||
|
210
|
+
deposit.depositedAmount.isLessThanOrEqualTo(0))
|
211
|
+
continue;
|
212
|
+
const amountRaw = deposit.depositedAmount;
|
213
|
+
const reserve = reserves[deposit.depositReserve.toString()];
|
214
|
+
if (!reserve)
|
215
|
+
continue;
|
216
|
+
const mint = reserve.liquidity.mintPubkey;
|
217
|
+
const tokenPrice = tokenPriceById.get(mint);
|
218
|
+
const amount = amountRaw
|
219
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
220
|
+
.toNumber();
|
221
|
+
suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
222
|
+
suppliedLtvs.push(reserve.config.loanToValuePct / 100);
|
223
|
+
// suppliedYields.push([
|
224
|
+
// { apr: reserve.supplyApr, apy: aprToApy(reserve.supplyApr) },
|
225
|
+
// ]);
|
226
|
+
}
|
227
|
+
for (const borrow of leverageAccount.borrows) {
|
228
|
+
if (borrow.borrowReserve.toString() ===
|
229
|
+
'11111111111111111111111111111111' ||
|
230
|
+
borrow.borrowedAmountSf.isLessThanOrEqualTo(0))
|
231
|
+
continue;
|
232
|
+
const amountRaw = borrow.borrowedAmountSf.dividedBy(borrow.cumulativeBorrowRateBsf.value0);
|
233
|
+
const reserve = reserves[borrow.borrowReserve.toString()];
|
234
|
+
if (!reserve)
|
235
|
+
continue;
|
236
|
+
const mint = reserve.liquidity.mintPubkey;
|
237
|
+
const tokenPrice = tokenPriceById.get(mint);
|
238
|
+
const amount = amountRaw
|
239
|
+
.dividedBy(new bignumber_js_1.default(10).pow(reserve.liquidity.mintDecimals))
|
240
|
+
.toNumber();
|
241
|
+
borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(mint, amount, networkId, tokenPrice));
|
242
|
+
borrowedWeights.push(Number(reserve.config.borrowFactorPct) / 100);
|
243
|
+
// borrowedYields.push([
|
244
|
+
// { apr: reserve.borrowApr, apy: aprToApy(reserve.borrowApr) },
|
245
|
+
// ]);
|
246
|
+
}
|
247
|
+
if (suppliedAssets.length !== 0 && borrowedAssets.length !== 0) {
|
248
|
+
const { borrowedValue, collateralRatio, suppliedValue, value, healthRatio, } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets, suppliedLtvs, borrowedWeights);
|
249
|
+
elements.push({
|
250
|
+
type: portfolio_core_1.PortfolioElementType.borrowlend,
|
251
|
+
networkId,
|
252
|
+
platformId: constants_1.platformId,
|
253
|
+
label: 'Lending',
|
254
|
+
name: 'Leverage',
|
255
|
+
value,
|
256
|
+
data: {
|
257
|
+
borrowedAssets,
|
258
|
+
borrowedValue,
|
259
|
+
borrowedYields,
|
260
|
+
suppliedAssets,
|
261
|
+
suppliedValue,
|
262
|
+
suppliedYields,
|
263
|
+
collateralRatio,
|
264
|
+
healthRatio: healthRatio / 0.9,
|
265
|
+
rewardAssets,
|
266
|
+
value,
|
267
|
+
},
|
268
|
+
});
|
269
|
+
}
|
270
|
+
}
|
271
|
+
return elements;
|
272
|
+
});
|
273
|
+
const fetcher = {
|
274
|
+
id: `${constants_1.platformId}-deposits`,
|
275
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
276
|
+
executor,
|
277
|
+
};
|
278
|
+
exports.default = fetcher;
|
279
|
+
//# sourceMappingURL=depositsFetcher.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"depositsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/kamino/depositsFetcher.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.obligationsFilter = void 0;
|
4
|
+
const klend_1 = require("./structs/klend");
|
5
|
+
const obligationsFilter = (owner) => [
|
6
|
+
{
|
7
|
+
memcmp: {
|
8
|
+
offset: 224,
|
9
|
+
bytes: owner,
|
10
|
+
},
|
11
|
+
},
|
12
|
+
{
|
13
|
+
dataSize: klend_1.obligationStruct.byteSize,
|
14
|
+
},
|
15
|
+
];
|
16
|
+
exports.obligationsFilter = obligationsFilter;
|
17
|
+
//# sourceMappingURL=filters.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/kamino/filters.ts"],"names":[],"mappings":";;;AACA,2CAAmD;AAE5C,MAAM,iBAAiB,GAAG,CAC/B,KAAa,EACe,EAAE,CAAC;IAC/B;QACE,MAAM,EAAE;YACN,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,KAAK;SACb;KACF;IACD;QACE,QAAQ,EAAE,wBAAgB,CAAC,QAAQ;KACpC;CACF,CAAC;AAZW,QAAA,iBAAiB,qBAY5B"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Reserve } from '../structs/klend';
|
2
|
+
export declare function calculateSupplyAPR(reserve: Reserve): number;
|
3
|
+
export declare function calculateBorrowAPR(reserve: Reserve): number;
|
4
|
+
export declare const interpolate: (x: number, x0: number, x1: number, y0: number, y1: number) => number;
|
5
|
+
export declare const getBorrowRate: (currentUtilization: number, curve: [
|
6
|
+
number,
|
7
|
+
number
|
8
|
+
][]) => number;
|
@@ -0,0 +1,96 @@
|
|
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.getBorrowRate = exports.interpolate = exports.calculateBorrowAPR = exports.calculateSupplyAPR = void 0;
|
7
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
8
|
+
function calculateUtilizationRatio(liquidity) {
|
9
|
+
const totalBorrows = getBorrowedAmount(liquidity);
|
10
|
+
const totalSupply = getTotalSupply(liquidity);
|
11
|
+
if (totalSupply.eq(0)) {
|
12
|
+
return 0;
|
13
|
+
}
|
14
|
+
return totalBorrows.dividedBy(totalSupply).toNumber();
|
15
|
+
}
|
16
|
+
function getBorrowedAmount(liquidity) {
|
17
|
+
return new decimal_js_1.default(liquidity.borrowedAmountSf.toString());
|
18
|
+
}
|
19
|
+
function getTotalSupply(liquidity) {
|
20
|
+
return getLiquidityAvailableAmount(liquidity)
|
21
|
+
.add(getBorrowedAmount(liquidity))
|
22
|
+
.sub(getAccumulatedProtocolFees(liquidity))
|
23
|
+
.sub(getAccumulatedReferrerFees(liquidity))
|
24
|
+
.sub(getPendingReferrerFees(liquidity));
|
25
|
+
}
|
26
|
+
function getLiquidityAvailableAmount(liquidity) {
|
27
|
+
return new decimal_js_1.default(liquidity.availableAmount.toString());
|
28
|
+
}
|
29
|
+
function getAccumulatedProtocolFees(liquidity) {
|
30
|
+
return new decimal_js_1.default(liquidity.accumulatedProtocolFeesSf.toString());
|
31
|
+
}
|
32
|
+
function getAccumulatedReferrerFees(liquidity) {
|
33
|
+
return new decimal_js_1.default(liquidity.accumulatedReferrerFeesSf.toString());
|
34
|
+
}
|
35
|
+
function getPendingReferrerFees(liquidity) {
|
36
|
+
return new decimal_js_1.default(liquidity.pendingReferrerFeesSf.toString());
|
37
|
+
}
|
38
|
+
function calculateSupplyAPR(reserve) {
|
39
|
+
const currentUtilization = calculateUtilizationRatio(reserve.liquidity);
|
40
|
+
const borrowAPR = calculateBorrowAPR(reserve);
|
41
|
+
return (currentUtilization * borrowAPR) / 100;
|
42
|
+
}
|
43
|
+
exports.calculateSupplyAPR = calculateSupplyAPR;
|
44
|
+
function calculateBorrowAPR(reserve) {
|
45
|
+
const currentUtilization = calculateUtilizationRatio(reserve.liquidity);
|
46
|
+
const curve = truncateBorrowCurve(reserve.config.borrowRateCurve.points);
|
47
|
+
return (0, exports.getBorrowRate)(currentUtilization, curve) / 100;
|
48
|
+
}
|
49
|
+
exports.calculateBorrowAPR = calculateBorrowAPR;
|
50
|
+
const truncateBorrowCurve = (points) => {
|
51
|
+
const curve = [];
|
52
|
+
for (const { utilizationRateBps, borrowRateBps } of points) {
|
53
|
+
curve.push([utilizationRateBps / 10000, borrowRateBps / 10000]);
|
54
|
+
if (utilizationRateBps === 10000) {
|
55
|
+
break;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
return curve;
|
59
|
+
};
|
60
|
+
const interpolate = (x, x0, x1, y0, y1) => {
|
61
|
+
if (x > x1) {
|
62
|
+
// throw 'Cannot do extrapolation';
|
63
|
+
}
|
64
|
+
return y0 + ((x - x0) * (y1 - y0)) / (x1 - x0);
|
65
|
+
};
|
66
|
+
exports.interpolate = interpolate;
|
67
|
+
const getBorrowRate = (currentUtilization, curve) => {
|
68
|
+
let [x0, y0, x1, y1] = [0, 0, 0, 0];
|
69
|
+
let currentUse = currentUtilization;
|
70
|
+
if (curve.length < 2) {
|
71
|
+
// throw 'Invalid borrow rate curve, only one point';
|
72
|
+
}
|
73
|
+
if (currentUtilization > 1) {
|
74
|
+
currentUse = 1;
|
75
|
+
}
|
76
|
+
for (let i = 1; i < curve.length; i++) {
|
77
|
+
const [pointUtilization, pointRate] = curve[i];
|
78
|
+
if (pointUtilization === currentUse) {
|
79
|
+
return pointRate;
|
80
|
+
}
|
81
|
+
if (currentUse <= pointUtilization) {
|
82
|
+
[x0, y0] = curve[i - 1];
|
83
|
+
[x1, y1] = curve[i];
|
84
|
+
break;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
if (x0 === 0 && y0 === 0 && x1 === 0 && y1 === 0) {
|
88
|
+
// throw 'Invalid borrow rate curve, could not identify the interpolation points.';
|
89
|
+
}
|
90
|
+
if (x0 >= x1 || y0 > y1) {
|
91
|
+
// throw 'Invalid borrow rate curve, curve is not uniformly increasing';
|
92
|
+
}
|
93
|
+
return (0, exports.interpolate)(currentUse, x0, x1, y0, y1);
|
94
|
+
};
|
95
|
+
exports.getBorrowRate = getBorrowRate;
|
96
|
+
//# sourceMappingURL=apr.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"apr.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/kamino/helpers/apr.ts"],"names":[],"mappings":"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"}
|