@sonarwatch/portfolio-plugins 0.4.31 → 0.4.33

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 CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.4.33](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.32...plugins-0.4.33) (2023-07-13)
6
+
7
+
8
+
9
+ ## [0.4.32](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.31...plugins-0.4.32) (2023-07-13)
10
+
11
+
12
+
5
13
  ## [0.4.31](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.30...plugins-0.4.31) (2023-07-13)
6
14
 
7
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonarwatch/portfolio-plugins",
3
- "version": "0.4.31",
3
+ "version": "0.4.33",
4
4
  "type": "commonjs",
5
5
  "generators": "./generators.json",
6
6
  "dependencies": {
@@ -22,7 +22,7 @@
22
22
  "viem": "^1.2.9"
23
23
  },
24
24
  "peerDependencies": {
25
- "@sonarwatch/portfolio-core": "0.4.31"
25
+ "@sonarwatch/portfolio-core": "0.4.33"
26
26
  },
27
27
  "main": "./src/index.js",
28
28
  "types": "./src/index.d.ts"
package/src/index.js CHANGED
@@ -32,6 +32,7 @@ const tokens_1 = require("./plugins/tokens");
32
32
  const marinade_1 = require("./plugins/marinade");
33
33
  const marginfi_1 = require("./plugins/marginfi");
34
34
  const raydium_1 = require("./plugins/raydium");
35
+ const solend_1 = require("./plugins/solend");
35
36
  const thala_1 = require("./plugins/thala");
36
37
  const tensor_1 = require("./plugins/tensor");
37
38
  const foo_1 = require("./plugins/foo");
@@ -39,19 +40,21 @@ const getFetchersByAddressSystem_1 = require("./utils/misc/getFetchersByAddressS
39
40
  __exportStar(require("./platforms"), exports);
40
41
  exports.platforms = Object.values(platformsObj);
41
42
  exports.jobs = [
43
+ ...tokens_1.jobs,
42
44
  ...thala_1.jobs,
43
45
  ...foo_1.jobs,
44
46
  ...marginfi_1.jobs,
45
47
  ...raydium_1.jobs,
46
- ...tokens_1.jobs,
48
+ ...solend_1.jobs,
47
49
  ];
48
50
  exports.fetchers = [
51
+ ...tokens_1.fetchers,
49
52
  ...foo_1.fetchers,
50
53
  ...tensor_1.fetchers,
51
54
  ...marginfi_1.fetchers,
52
55
  ...marinade_1.fetchers,
56
+ ...solend_1.fetchers,
53
57
  ...thala_1.fetchers,
54
- ...tokens_1.fetchers,
55
58
  ];
56
59
  exports.fetchersByAddressSystem = (0, getFetchersByAddressSystem_1.getFetchersByAddressSystem)(exports.fetchers);
57
60
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0DAA4C;AAC5C,6CAG0B;AAC1B,iDAAkE;AAClE,iDAG4B;AAC5B,+CAG2B;AAC3B,2CAA+E;AAC/E,6CAA8D;AAC9D,uCAAyE;AACzE,wFAAqF;AAErF,8CAA4B;AACf,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExC,QAAA,IAAI,GAAU;IACzB,GAAG,YAAS;IACZ,GAAG,UAAO;IACV,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,aAAU;CACd,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,GAAG,cAAW;IACd,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,gBAAa;IAChB,GAAG,iBAAc;CAClB,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,uDAA0B,EAAC,gBAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0DAA4C;AAC5C,6CAG0B;AAC1B,iDAAkE;AAClE,iDAG4B;AAC5B,+CAAwD;AACxD,6CAG0B;AAC1B,2CAA+E;AAC/E,6CAA8D;AAC9D,uCAAyE;AACzE,wFAAqF;AAErF,8CAA4B;AACf,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExC,QAAA,IAAI,GAAU;IACzB,GAAG,aAAU;IACb,GAAG,YAAS;IACZ,GAAG,UAAO;IACV,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,aAAU;CACd,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,GAAG,iBAAc;IACjB,GAAG,cAAW;IACd,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,iBAAc;IACjB,GAAG,gBAAa;CACjB,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,uDAA0B,EAAC,gBAAQ,CAAC,CAAC"}
@@ -6,3 +6,5 @@ export declare const walletTokensPlatform: Platform;
6
6
  export declare const marginfiPlatform: Platform;
7
7
  export declare const tensorPlatform: Platform;
8
8
  export declare const thalaPlatform: Platform;
9
+ export declare const raydiumPlatform: Platform;
10
+ export declare const solendPlatform: Platform;
package/src/platforms.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.thalaPlatform = exports.tensorPlatform = exports.marginfiPlatform = exports.walletTokensPlatform = exports.walletNftsPlatform = exports.aavePlatform = exports.marinadePlatform = void 0;
3
+ exports.solendPlatform = exports.raydiumPlatform = exports.thalaPlatform = exports.tensorPlatform = exports.marginfiPlatform = exports.walletTokensPlatform = exports.walletNftsPlatform = exports.aavePlatform = exports.marinadePlatform = void 0;
4
4
  exports.marinadePlatform = {
5
5
  id: 'marinade',
6
6
  name: 'Marinade',
@@ -36,4 +36,14 @@ exports.thalaPlatform = {
36
36
  name: 'Thala',
37
37
  image: 'https://beta.sonar.watch/img/platforms/thala.png',
38
38
  };
39
+ exports.raydiumPlatform = {
40
+ id: 'raydium',
41
+ name: 'Raydium',
42
+ image: 'https://beta.sonar.watch/img/platforms/raydium.png',
43
+ };
44
+ exports.solendPlatform = {
45
+ id: 'solend',
46
+ name: 'Solend',
47
+ image: 'https://beta.sonar.watch/img/platforms/solend.png',
48
+ };
39
49
  //# sourceMappingURL=platforms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../../../packages/plugins/src/platforms.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,YAAY,GAAa;IACpC,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,iDAAiD;CACzD,CAAC;AACW,QAAA,kBAAkB,GAAa;IAC1C,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,wDAAwD;CAChE,CAAC;AACW,QAAA,oBAAoB,GAAa;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,0DAA0D;CAClE,CAAC;AACW,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mDAAmD;CAC3D,CAAC;AACW,QAAA,aAAa,GAAa;IACrC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,kDAAkD;CAC1D,CAAC"}
1
+ {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../../../packages/plugins/src/platforms.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,YAAY,GAAa;IACpC,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,iDAAiD;CACzD,CAAC;AACW,QAAA,kBAAkB,GAAa;IAC1C,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,wDAAwD;CAChE,CAAC;AACW,QAAA,oBAAoB,GAAa;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,0DAA0D;CAClE,CAAC;AACW,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mDAAmD;CAC3D,CAAC;AACW,QAAA,aAAa,GAAa;IACrC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,kDAAkD;CAC1D,CAAC;AACW,QAAA,eAAe,GAAa;IACvC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,oDAAoD;CAC5D,CAAC;AACW,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mDAAmD;CAC3D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ export declare const platformId = "solend";
3
+ export declare const marketsPrefix: string;
4
+ export declare const reservesPrefix: string;
5
+ export declare const pid: PublicKey;
6
+ export declare const marketsEndpoint = "https://api.solend.fi/v1/markets/configs";
7
+ export declare const reserveEndpoint = "https://api.solend.fi/v1/reserves/?ids=";
8
+ export declare const wadsDecimal = 18;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wadsDecimal = exports.reserveEndpoint = exports.marketsEndpoint = exports.pid = exports.reservesPrefix = exports.marketsPrefix = exports.platformId = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ exports.platformId = 'solend';
6
+ exports.marketsPrefix = `${exports.platformId}-markets`;
7
+ exports.reservesPrefix = `${exports.platformId}-reserves`;
8
+ exports.pid = new web3_js_1.PublicKey('So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo');
9
+ exports.marketsEndpoint = 'https://api.solend.fi/v1/markets/configs';
10
+ exports.reserveEndpoint = 'https://api.solend.fi/v1/reserves/?ids=';
11
+ exports.wadsDecimal = 18;
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE/B,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,aAAa,GAAG,GAAG,kBAAU,UAAU,CAAC;AACxC,QAAA,cAAc,GAAG,GAAG,kBAAU,WAAW,CAAC;AAE1C,QAAA,GAAG,GAAG,IAAI,mBAAS,CAAC,6CAA6C,CAAC,CAAC;AACnE,QAAA,eAAe,GAAG,0CAA0C,CAAC;AAC7D,QAAA,eAAe,GAAG,yCAAyC,CAAC;AAC5D,QAAA,WAAW,GAAG,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ export declare const upperFirst: (string: string) => string;
3
+ export declare function getObligationSeed(marketAddress: string, accountId: number): string;
4
+ export declare const parseDataflat: (dataFlat: Buffer, depositsLen: number, borrowsLen: number) => {
5
+ deposits: import("./structs").ObligationCollateral[];
6
+ depositsMap: Map<string, import("./structs").ObligationCollateral>;
7
+ borrows: import("./structs").ObligationLiquidity[];
8
+ borrowsMap: Map<string, import("./structs").ObligationLiquidity>;
9
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDataflat = exports.getObligationSeed = exports.upperFirst = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const structs_1 = require("./structs");
6
+ const upperFirst = (string) => string ? string.charAt(0).toUpperCase() + string.slice(1) : '';
7
+ exports.upperFirst = upperFirst;
8
+ function getObligationSeed(marketAddress, accountId) {
9
+ if (accountId === 0)
10
+ return marketAddress.slice(0, 32);
11
+ // <first 25 char of lending market address> + <7 chars: 0000001 - 9999999>
12
+ return marketAddress.slice(0, 25) + `0000000${accountId}`.slice(-7);
13
+ }
14
+ exports.getObligationSeed = getObligationSeed;
15
+ const parseDataflat = (dataFlat, depositsLen, borrowsLen) => {
16
+ const obligationCollateralArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationCollateralStruct, depositsLen);
17
+ const deposits = obligationCollateralArray.read(dataFlat, 0);
18
+ const depositsMap = new Map(deposits.map((i) => [i.depositReserve.toString(), i]));
19
+ const obligationLiquidityArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationLiquidityStruct, borrowsLen);
20
+ const borrows = obligationLiquidityArray.read(dataFlat, obligationCollateralArray.byteSize);
21
+ const borrowsMap = new Map(borrows.map((i) => [i.borrowReserve.toString(), i]));
22
+ return {
23
+ deposits,
24
+ depositsMap,
25
+ borrows,
26
+ borrowsMap,
27
+ };
28
+ };
29
+ exports.parseDataflat = parseDataflat;
30
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/helpers.ts"],"names":[],"mappings":";;;AAAA,oDAAkE;AAClE,uCAGmB;AAEZ,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAC3C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AADpD,QAAA,UAAU,cAC0C;AAEjE,SAAgB,iBAAiB,CAAC,aAAqB,EAAE,SAAiB;IACxE,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,2EAA2E;IAC3E,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAJD,8CAIC;AAEM,MAAM,aAAa,GAAG,CAC3B,QAAgB,EAChB,WAAmB,EACnB,UAAkB,EAClB,EAAE;IACF,MAAM,yBAAyB,GAAG,IAAA,4BAAqB,EACrD,oCAA0B,EAC1B,WAAW,CACZ,CAAC;IACF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CACtD,CAAC;IAEF,MAAM,wBAAwB,GAAG,IAAA,4BAAqB,EACpD,mCAAyB,EACzB,UAAU,CACX,CAAC;IACF,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAC3C,QAAQ,EACR,yBAAyB,CAAC,QAAQ,CACnC,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CACpD,CAAC;IACF,OAAO;QACL,QAAQ;QACR,WAAW;QACX,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,aAAa,iBA+BxB"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher, Job } from '@sonarwatch/portfolio-core';
2
+ export declare const jobs: Job[];
3
+ export declare const fetchers: Fetcher[];
@@ -0,0 +1,12 @@
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.fetchers = exports.jobs = void 0;
7
+ const reservesJob_1 = __importDefault(require("./reservesJob"));
8
+ const marketsJob_1 = __importDefault(require("./marketsJob"));
9
+ const obligationsFetcher_1 = __importDefault(require("./obligationsFetcher"));
10
+ exports.jobs = [reservesJob_1.default, marketsJob_1.default];
11
+ exports.fetchers = [obligationsFetcher_1.default];
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/index.ts"],"names":[],"mappings":";;;;;;AACA,gEAAwC;AACxC,8DAAsC;AACtC,8EAAqD;AAExC,QAAA,IAAI,GAAU,CAAC,qBAAW,EAAE,oBAAU,CAAC,CAAC;AACxC,QAAA,QAAQ,GAAc,CAAC,4BAAiB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,34 @@
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 axios_1 = __importDefault(require("axios"));
17
+ const constants_1 = require("./constants");
18
+ const helpers_1 = require("./helpers");
19
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const marketsInfoRes = yield axios_1.default.get(constants_1.marketsEndpoint);
21
+ const marketsInfo = marketsInfoRes.data;
22
+ for (const marketInfo of marketsInfo) {
23
+ yield cache.setItem(marketInfo.address, Object.assign(Object.assign({}, marketInfo), { name: (0, helpers_1.upperFirst)(marketInfo.name) }), {
24
+ prefix: constants_1.marketsPrefix,
25
+ networkId: portfolio_core_1.NetworkId.solana,
26
+ });
27
+ }
28
+ });
29
+ const job = {
30
+ id: `${constants_1.platformId}-markets`,
31
+ executor,
32
+ };
33
+ exports.default = job;
34
+ //# sourceMappingURL=marketsJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketsJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/marketsJob.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,+DAAgF;AAChF,kDAA6C;AAC7C,2CAIqB;AAErB,uCAAuC;AAEvC,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,cAAc,GAAgC,MAAM,eAAK,CAAC,GAAG,CACjE,2BAAe,CAChB,CAAC;IACF,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC;IACxC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,MAAM,KAAK,CAAC,OAAO,CACjB,UAAU,CAAC,OAAO,kCAEb,UAAU,KACb,IAAI,EAAE,IAAA,oBAAU,EAAC,UAAU,CAAC,IAAI,CAAC,KAEnC;YACE,MAAM,EAAN,yBAAM;YACN,SAAS,EAAE,0BAAS,CAAC,MAAM;SAC5B,CACF,CAAC;KACH;AACH,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,UAAU;IAC3B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '@sonarwatch/portfolio-core';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,153 @@
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 js_1 = require("@metaplex-foundation/js");
17
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
18
+ const constants_1 = require("./constants");
19
+ const helpers_1 = require("./helpers");
20
+ const solana_1 = require("../../utils/solana");
21
+ const clients_1 = require("../../utils/clients");
22
+ const structs_1 = require("./structs");
23
+ const tokenPriceToAssetToken_1 = __importDefault(require("../../utils/misc/tokenPriceToAssetToken"));
24
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const client = (0, clients_1.getClientSolana)();
26
+ const obligationAddresses = [];
27
+ const markets = yield cache.getItems({
28
+ prefix: constants_1.marketsPrefix,
29
+ networkId: portfolio_core_1.NetworkId.solana,
30
+ });
31
+ for (const marketInfo of markets.values()) {
32
+ const seeds = [
33
+ (0, helpers_1.getObligationSeed)(marketInfo.address, 0),
34
+ (0, helpers_1.getObligationSeed)(marketInfo.address, 1),
35
+ (0, helpers_1.getObligationSeed)(marketInfo.address, 2),
36
+ ];
37
+ for (let i = 0; i < seeds.length; i++) {
38
+ const seed = seeds[i];
39
+ const obligationAddress = yield js_1.PublicKey.createWithSeed(new js_1.PublicKey(owner), seed, constants_1.pid);
40
+ obligationAddresses.push(obligationAddress);
41
+ }
42
+ }
43
+ const obligations = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, structs_1.obligationStruct, obligationAddresses);
44
+ const elements = [];
45
+ for (let i = 0; i < obligations.length; i += 1) {
46
+ const obligation = obligations[i];
47
+ if (!obligation)
48
+ continue;
49
+ const market = yield cache.getItem(obligation.lendingMarket.toString(), {
50
+ prefix: constants_1.marketsPrefix,
51
+ networkId: portfolio_core_1.NetworkId.solana,
52
+ });
53
+ if (!market)
54
+ continue;
55
+ const { depositsMap, borrowsMap } = (0, helpers_1.parseDataflat)(obligation.dataFlat, obligation.depositsLen, obligation.borrowsLen);
56
+ if (depositsMap.size === 0 && borrowsMap.size === 0)
57
+ continue;
58
+ const borrowedAssets = [];
59
+ const borrowedYields = [];
60
+ const suppliedAssets = [];
61
+ const suppliedYields = [];
62
+ const rewardAssets = [];
63
+ for (let j = 0; j < market.reserves.length; j += 1) {
64
+ const { address: reserveAddress } = market.reserves[j];
65
+ const reserveInfo = yield cache.getItem(reserveAddress, {
66
+ prefix: constants_1.reservesPrefix,
67
+ networkId: portfolio_core_1.NetworkId.solana,
68
+ });
69
+ if (!reserveInfo)
70
+ continue;
71
+ const { reserve } = reserveInfo;
72
+ const { liquidity, collateral } = reserve;
73
+ const lMint = liquidity.mintPubkey;
74
+ const lTokenPrice = yield cache.getTokenPrice(lMint, portfolio_core_1.NetworkId.solana);
75
+ if (!lTokenPrice)
76
+ continue;
77
+ const decimals = liquidity.mintDecimals;
78
+ const reserveBorrowAmount = new bignumber_js_1.default(liquidity.borrowedAmountWads)
79
+ .dividedBy(Math.pow(10, (constants_1.wadsDecimal + decimals)))
80
+ .toNumber();
81
+ const reserveAvailableAmount = new bignumber_js_1.default(liquidity.availableAmount)
82
+ .dividedBy(Math.pow(10, decimals))
83
+ .toNumber();
84
+ const collateralSupply = new bignumber_js_1.default(collateral.mintTotalSupply)
85
+ .dividedBy(Math.pow(10, decimals))
86
+ .toNumber();
87
+ const reserveDepositAmount = reserveBorrowAmount + reserveAvailableAmount;
88
+ // Deposit
89
+ const deposit = depositsMap.get(reserveAddress);
90
+ if (deposit) {
91
+ const suppliedAmount = deposit.depositedAmount
92
+ .div(Math.pow(10, decimals))
93
+ .times(reserveDepositAmount / collateralSupply)
94
+ .toNumber();
95
+ const apy = +reserveInfo.rates.supplyInterest / 100;
96
+ const cSuppliedYields = [
97
+ {
98
+ apr: (0, portfolio_core_1.apyToApr)(apy),
99
+ apy,
100
+ },
101
+ ];
102
+ suppliedYields.push(cSuppliedYields);
103
+ suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, suppliedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
104
+ }
105
+ // Borrow
106
+ const borrow = borrowsMap.get(reserveAddress);
107
+ if (borrow) {
108
+ const borrowedAmount = borrow.borrowedAmountWads
109
+ .times(new bignumber_js_1.default(liquidity.cumulativeBorrowRateWads))
110
+ .div(borrow.cumulativeBorrowRateWads)
111
+ .dividedBy(new bignumber_js_1.default(Math.pow(10, (constants_1.wadsDecimal + decimals))))
112
+ .toNumber();
113
+ const apy = +reserveInfo.rates.borrowInterest / 100;
114
+ const cBorrowedYields = [
115
+ {
116
+ apr: (0, portfolio_core_1.apyToApr)(apy),
117
+ apy,
118
+ },
119
+ ];
120
+ borrowedYields.push(cBorrowedYields);
121
+ borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, borrowedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
122
+ }
123
+ }
124
+ const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
125
+ elements.push({
126
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
127
+ networkId: portfolio_core_1.NetworkId.solana,
128
+ platformId: constants_1.platformId,
129
+ label: 'Lending',
130
+ value,
131
+ // name: market.name,
132
+ data: {
133
+ borrowedAssets,
134
+ borrowedValue,
135
+ borrowedYields,
136
+ suppliedAssets,
137
+ suppliedValue,
138
+ suppliedYields,
139
+ collateralRatio,
140
+ rewardAssets,
141
+ value,
142
+ },
143
+ });
144
+ }
145
+ return elements;
146
+ });
147
+ const fetcher = {
148
+ id: `${constants_1.platformId}-obligations`,
149
+ networkId: portfolio_core_1.NetworkId.solana,
150
+ executor,
151
+ };
152
+ exports.default = fetcher;
153
+ //# sourceMappingURL=obligationsFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obligationsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/obligationsFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,46 @@
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 axios_1 = __importDefault(require("axios"));
16
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
17
+ const constants_1 = require("./constants");
18
+ const sleep_1 = __importDefault(require("../../utils/misc/sleep"));
19
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const markets = yield cache.getItems({ prefix: constants_1.marketsPrefix });
21
+ const reservesAddressesByMarket = markets.map((m) => m.reserves.map((r) => r.address));
22
+ for (let i = 0; i < reservesAddressesByMarket.length; i += 1) {
23
+ const reservesAddresses = reservesAddressesByMarket[i];
24
+ const reservesInfoRes = yield axios_1.default
25
+ .get(`${constants_1.reserveEndpoint}${reservesAddresses.join(',')}`)
26
+ .catch(() => {
27
+ //
28
+ });
29
+ if (!reservesInfoRes)
30
+ continue;
31
+ for (let j = 0; j < reservesInfoRes.data.results.length; j += 1) {
32
+ const reserveInfo = reservesInfoRes.data.results[j];
33
+ yield cache.setItem(reservesAddresses[j], reserveInfo, {
34
+ prefix: constants_1.reservesPrefix,
35
+ networkId: portfolio_core_1.NetworkId.solana,
36
+ });
37
+ }
38
+ yield (0, sleep_1.default)(200);
39
+ }
40
+ });
41
+ const job = {
42
+ id: `${constants_1.platformId}-reserves`,
43
+ executor,
44
+ };
45
+ exports.default = job;
46
+ //# sourceMappingURL=reservesJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservesJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/reservesJob.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kDAA6C;AAC7C,+DAAgF;AAChF,2CAKqB;AAErB,mEAA2C;AAE3C,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAa,EAAE,MAAM,EAAE,yBAAa,EAAE,CAAC,CAAC;IAC5E,MAAM,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACjC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC5D,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,eAAe,GACnB,MAAM,eAAK;aACR,GAAG,CAAC,GAAG,2BAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aACvD,KAAK,CAAC,GAAG,EAAE;YACV,EAAE;QACJ,CAAC,CAAC,CAAC;QACP,IAAI,CAAC,eAAe;YAAE,SAAS;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/D,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;gBACrD,MAAM,EAAN,0BAAM;gBACN,SAAS,EAAE,0BAAS,CAAC,MAAM;aAC5B,CAAC,CAAC;SACJ;QACD,MAAM,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC;KAClB;AACH,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,WAAW;IAC5B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,87 @@
1
+ /// <reference types="node" />
2
+ import { BeetStruct } from '@metaplex-foundation/beet';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ import BigNumber from 'bignumber.js';
5
+ export type Fees = {
6
+ borrowFeeWad: BigNumber;
7
+ flashLoanFeeWad: BigNumber;
8
+ hostFeePercentage: number;
9
+ };
10
+ export declare const feesStruct: BeetStruct<Fees, Partial<Fees>>;
11
+ export type ReserveConfig = {
12
+ optimalUtilizationRate: number;
13
+ loanToValueRatio: number;
14
+ liquidationBonus: number;
15
+ liquidationThreshold: number;
16
+ minBorrowRate: number;
17
+ optimalBorrowRate: number;
18
+ maxBorrowRate: number;
19
+ fees: Fees;
20
+ depositLimit: BigNumber;
21
+ borrowLimit: BigNumber;
22
+ feeReceiver: PublicKey;
23
+ };
24
+ export declare const reserveConfigStruct: BeetStruct<ReserveConfig, Partial<ReserveConfig>>;
25
+ export type Collateral = {
26
+ mintPubkey: PublicKey;
27
+ mintTotalSupply: BigNumber;
28
+ supplyPubkey: PublicKey;
29
+ };
30
+ export declare const collateralStruct: BeetStruct<Collateral, Partial<Collateral>>;
31
+ export type Liquidity = {
32
+ mintPubkey: PublicKey;
33
+ mintDecimals: number;
34
+ supplyPubkey: PublicKey;
35
+ pythOracle: PublicKey;
36
+ switchboardOracle: PublicKey;
37
+ availableAmount: BigNumber;
38
+ borrowedAmountWads: BigNumber;
39
+ cumulativeBorrowRateWads: BigNumber;
40
+ marketPrice: BigNumber;
41
+ };
42
+ export declare const liquidityStruct: BeetStruct<Liquidity, Partial<Liquidity>>;
43
+ export type LastUpdate = {
44
+ slot: BigNumber;
45
+ stale: number;
46
+ };
47
+ export declare const lastUpdateStruct: BeetStruct<LastUpdate, Partial<LastUpdate>>;
48
+ export type ReserveAccount = {
49
+ version: number;
50
+ lastUpdate: LastUpdate;
51
+ lendingMarket: PublicKey;
52
+ liquidity: Liquidity;
53
+ collateral: Collateral;
54
+ config: ReserveConfig;
55
+ padding: Buffer;
56
+ };
57
+ export declare const reserveAccountStruct: BeetStruct<ReserveAccount, Partial<ReserveAccount>>;
58
+ export type Obligation = {
59
+ version: number;
60
+ lastUpdate: LastUpdate;
61
+ lendingMarket: PublicKey;
62
+ owner: PublicKey;
63
+ depositedValue: BigNumber;
64
+ borrowedValue: BigNumber;
65
+ allowedBorrowValue: BigNumber;
66
+ unhealthyBorrowValue: BigNumber;
67
+ padding: Buffer;
68
+ depositsLen: number;
69
+ borrowsLen: number;
70
+ dataFlat: Buffer;
71
+ };
72
+ export declare const obligationStruct: BeetStruct<Obligation, Partial<Obligation>>;
73
+ export type ObligationCollateral = {
74
+ depositReserve: PublicKey;
75
+ depositedAmount: BigNumber;
76
+ marketValue: BigNumber;
77
+ padding: Buffer;
78
+ };
79
+ export declare const obligationCollateralStruct: BeetStruct<ObligationCollateral, Partial<ObligationCollateral>>;
80
+ export type ObligationLiquidity = {
81
+ borrowReserve: PublicKey;
82
+ cumulativeBorrowRateWads: BigNumber;
83
+ borrowedAmountWads: BigNumber;
84
+ marketValue: BigNumber;
85
+ padding: Buffer;
86
+ };
87
+ export declare const obligationLiquidityStruct: BeetStruct<ObligationLiquidity, Partial<ObligationLiquidity>>;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveAccountStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const solana_1 = require("../../utils/solana");
7
+ exports.feesStruct = new beet_1.BeetStruct([
8
+ ['borrowFeeWad', solana_1.u64],
9
+ ['flashLoanFeeWad', solana_1.u64],
10
+ ['hostFeePercentage', beet_1.u8],
11
+ ], (args) => args);
12
+ exports.reserveConfigStruct = new beet_1.BeetStruct([
13
+ ['optimalUtilizationRate', beet_1.u8],
14
+ ['loanToValueRatio', beet_1.u8],
15
+ ['liquidationBonus', beet_1.u8],
16
+ ['liquidationThreshold', beet_1.u8],
17
+ ['minBorrowRate', beet_1.u8],
18
+ ['optimalBorrowRate', beet_1.u8],
19
+ ['maxBorrowRate', beet_1.u8],
20
+ ['fees', exports.feesStruct],
21
+ ['depositLimit', solana_1.u64],
22
+ ['borrowLimit', solana_1.u64],
23
+ ['feeReceiver', beet_solana_1.publicKey],
24
+ ], (args) => args);
25
+ exports.collateralStruct = new beet_1.BeetStruct([
26
+ ['mintPubkey', beet_solana_1.publicKey],
27
+ ['mintTotalSupply', solana_1.u64],
28
+ ['supplyPubkey', beet_solana_1.publicKey],
29
+ ], (args) => args);
30
+ exports.liquidityStruct = new beet_1.BeetStruct([
31
+ ['mintPubkey', beet_solana_1.publicKey],
32
+ ['mintDecimals', beet_1.u8],
33
+ ['supplyPubkey', beet_solana_1.publicKey],
34
+ ['pythOracle', beet_solana_1.publicKey],
35
+ ['switchboardOracle', beet_solana_1.publicKey],
36
+ ['availableAmount', solana_1.u64],
37
+ ['borrowedAmountWads', solana_1.u128],
38
+ ['cumulativeBorrowRateWads', solana_1.u128],
39
+ ['marketPrice', solana_1.u128],
40
+ ], (args) => args);
41
+ exports.lastUpdateStruct = new beet_1.BeetStruct([
42
+ ['slot', solana_1.u64],
43
+ ['stale', beet_1.u8],
44
+ ], (args) => args);
45
+ exports.reserveAccountStruct = new beet_1.BeetStruct([
46
+ ['version', beet_1.u8],
47
+ ['lastUpdate', exports.lastUpdateStruct],
48
+ ['lendingMarket', beet_solana_1.publicKey],
49
+ ['liquidity', exports.liquidityStruct],
50
+ ['collateral', exports.collateralStruct],
51
+ ['config', exports.reserveConfigStruct],
52
+ ['padding', (0, solana_1.blob)(248)],
53
+ ], (args) => args);
54
+ exports.obligationStruct = new beet_1.BeetStruct([
55
+ ['version', beet_1.u8],
56
+ ['lastUpdate', exports.lastUpdateStruct],
57
+ ['lendingMarket', beet_solana_1.publicKey],
58
+ ['owner', beet_solana_1.publicKey],
59
+ ['depositedValue', solana_1.u128],
60
+ ['borrowedValue', solana_1.u128],
61
+ ['allowedBorrowValue', solana_1.u128],
62
+ ['unhealthyBorrowValue', solana_1.u128],
63
+ ['padding', (0, solana_1.blob)(64)],
64
+ ['depositsLen', beet_1.u8],
65
+ ['borrowsLen', beet_1.u8],
66
+ ['dataFlat', (0, solana_1.blob)(1096)],
67
+ ], (args) => args);
68
+ exports.obligationCollateralStruct = new beet_1.BeetStruct([
69
+ ['depositReserve', beet_solana_1.publicKey],
70
+ ['depositedAmount', solana_1.u64],
71
+ ['marketValue', solana_1.u128],
72
+ ['padding', (0, solana_1.blob)(32)],
73
+ ], (args) => args);
74
+ exports.obligationLiquidityStruct = new beet_1.BeetStruct([
75
+ ['borrowReserve', beet_solana_1.publicKey],
76
+ ['cumulativeBorrowRateWads', solana_1.u128],
77
+ ['borrowedAmountWads', solana_1.u128],
78
+ ['marketValue', solana_1.u128],
79
+ ['padding', (0, solana_1.blob)(32)],
80
+ ], (args) => args);
81
+ //# sourceMappingURL=structs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ export interface ApiResponse<T> {
2
+ results: T[];
3
+ next: null;
4
+ }
5
+ export interface LiquidityToken {
6
+ coingeckoID: string;
7
+ decimals: number;
8
+ logo: string;
9
+ mint: string;
10
+ name: string;
11
+ symbol: string;
12
+ volume24h: string;
13
+ }
14
+ export interface MarketInfo {
15
+ name: string;
16
+ isPrimary: boolean;
17
+ description: string;
18
+ creator: string;
19
+ address: string;
20
+ hidden: boolean;
21
+ authorityAddress: string;
22
+ owner: string;
23
+ reserves: {
24
+ liquidityToken: LiquidityToken;
25
+ pythOracle: string;
26
+ switchboardOracle: string;
27
+ address: string;
28
+ collateralMintAddress: string;
29
+ collateralSupplyAddress: string;
30
+ liquidityAddress: string;
31
+ liquidityFeeReceiverAddress: string;
32
+ userBorrowCap?: number | string;
33
+ userSupplyCap?: number | string;
34
+ }[];
35
+ }
36
+ export interface ReserveInfo {
37
+ reserve: ReserveData;
38
+ rates: RatesInfo;
39
+ rewards: RewardInfo[];
40
+ }
41
+ export interface ReserveData {
42
+ version: number;
43
+ lastUpdate: {
44
+ slot: string;
45
+ stale: number;
46
+ };
47
+ lendingMarket: string;
48
+ liquidity: {
49
+ mintPubkey: string;
50
+ mintDecimals: number;
51
+ supplyPubkey: string;
52
+ pythOracle: string;
53
+ switchboardOracle: string;
54
+ availableAmount: string;
55
+ borrowedAmountWads: string;
56
+ cumulativeBorrowRateWads: string;
57
+ marketPrice: string;
58
+ };
59
+ collateral: {
60
+ mintPubkey: string;
61
+ mintTotalSupply: string;
62
+ supplyPubkey: string;
63
+ };
64
+ config: {
65
+ optimalUtilizationRate: number;
66
+ loanToValueRatio: number;
67
+ liquidationBonus: number;
68
+ liquidationThreshold: number;
69
+ minBorrowRate: number;
70
+ optimalBorrowRate: number;
71
+ maxBorrowRate: number;
72
+ depositLimit: string;
73
+ borrowLimit: string;
74
+ feeReceiver: string;
75
+ protocolLiquidationFee: number;
76
+ protocolTakeRate: number;
77
+ borrowedAmountWads: string;
78
+ };
79
+ }
80
+ export interface RatesInfo {
81
+ supplyInterest: string;
82
+ borrowInterest: string;
83
+ }
84
+ export interface RewardInfo {
85
+ rewardMint: string;
86
+ rewardSymbol: string;
87
+ apy: string;
88
+ side: string;
89
+ }
90
+ export type ReserveRewards = {
91
+ rates: RatesInfo;
92
+ additionalRewards: {
93
+ supply: RewardInfo[];
94
+ borrow: RewardInfo[];
95
+ };
96
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/types.ts"],"names":[],"mappings":""}