@sonarwatch/portfolio-plugins 0.4.32 → 0.4.34
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 +21 -13
- package/package.json +2 -2
- package/src/index.js +5 -2
- package/src/index.js.map +1 -1
- package/src/platforms.d.ts +2 -0
- package/src/platforms.js +11 -1
- package/src/platforms.js.map +1 -1
- package/src/plugins/solend/constants.d.ts +8 -0
- package/src/plugins/solend/constants.js +12 -0
- package/src/plugins/solend/constants.js.map +1 -0
- package/src/plugins/solend/helpers.d.ts +9 -0
- package/src/plugins/solend/helpers.js +30 -0
- package/src/plugins/solend/helpers.js.map +1 -0
- package/src/plugins/solend/index.d.ts +3 -0
- package/src/plugins/solend/index.js +12 -0
- package/src/plugins/solend/index.js.map +1 -0
- package/src/plugins/solend/marketsJob.d.ts +3 -0
- package/src/plugins/solend/marketsJob.js +34 -0
- package/src/plugins/solend/marketsJob.js.map +1 -0
- package/src/plugins/solend/obligationsFetcher.d.ts +3 -0
- package/src/plugins/solend/obligationsFetcher.js +153 -0
- package/src/plugins/solend/obligationsFetcher.js.map +1 -0
- package/src/plugins/solend/reservesJob.d.ts +3 -0
- package/src/plugins/solend/reservesJob.js +46 -0
- package/src/plugins/solend/reservesJob.js.map +1 -0
- package/src/plugins/solend/structs.d.ts +87 -0
- package/src/plugins/solend/structs.js +81 -0
- package/src/plugins/solend/structs.js.map +1 -0
- package/src/plugins/solend/types.d.ts +96 -0
- package/src/plugins/solend/types.js +3 -0
- package/src/plugins/solend/types.js.map +1 -0
package/CHANGELOG.md
CHANGED
@@ -2,22 +2,30 @@
|
|
2
2
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
4
4
|
|
5
|
-
## [0.4.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
## [0.4.31](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.30...plugins-0.4.31) (2023-07-13)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
## [0.4.30](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.29...plugins-0.4.30) (2023-07-13)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
## [0.4.29](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.28...plugins-0.4.29) (2023-07-13)
|
5
|
+
## [0.4.34](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.33...plugins-0.4.34) (2023-07-14)
|
18
6
|
|
19
7
|
|
20
8
|
|
9
|
+
## [0.4.33](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.32...plugins-0.4.33) (2023-07-13)
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
## [0.4.32](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.31...plugins-0.4.32) (2023-07-13)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
## [0.4.31](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.30...plugins-0.4.31) (2023-07-13)
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
## [0.4.30](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.29...plugins-0.4.30) (2023-07-13)
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
## [0.4.29](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.28...plugins-0.4.29) (2023-07-13)
|
26
|
+
|
27
|
+
|
28
|
+
|
21
29
|
## [0.4.28](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.27...plugins-0.4.28) (2023-07-13)
|
22
30
|
|
23
31
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sonarwatch/portfolio-plugins",
|
3
|
-
"version": "0.4.
|
3
|
+
"version": "0.4.34",
|
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.
|
25
|
+
"@sonarwatch/portfolio-core": "0.4.34"
|
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
|
-
...
|
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,+
|
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"}
|
package/src/platforms.d.ts
CHANGED
@@ -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
|
package/src/platforms.js.map
CHANGED
@@ -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,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,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,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,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 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/types.ts"],"names":[],"mappings":""}
|