@sonarwatch/portfolio-plugins 0.8.111 → 0.8.113
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 +10 -2
- package/package.json +3 -2
- package/src/index.js +4 -0
- package/src/index.js.map +1 -1
- package/src/plugins/jupiter/constants.d.ts +3 -0
- package/src/plugins/jupiter/constants.js +4 -1
- package/src/plugins/jupiter/constants.js.map +1 -1
- package/src/plugins/jupiter/custodiesJob.d.ts +3 -0
- package/src/plugins/jupiter/custodiesJob.js +34 -0
- package/src/plugins/jupiter/custodiesJob.js.map +1 -0
- package/src/plugins/jupiter/filters.d.ts +2 -0
- package/src/plugins/jupiter/filters.js +14 -0
- package/src/plugins/jupiter/filters.js.map +1 -0
- package/src/plugins/jupiter/index.js +4 -2
- package/src/plugins/jupiter/index.js.map +1 -1
- package/src/plugins/jupiter/perpetualFetcher.d.ts +3 -0
- package/src/plugins/jupiter/perpetualFetcher.js +153 -0
- package/src/plugins/jupiter/perpetualFetcher.js.map +1 -0
- package/src/plugins/jupiter/structs.d.ts +24 -0
- package/src/plugins/jupiter/structs.js +25 -1
- package/src/plugins/jupiter/structs.js.map +1 -1
- package/src/plugins/jupiter/types.d.ts +62 -0
- package/src/plugins/jupiter/types.js +9 -0
- package/src/plugins/jupiter/types.js.map +1 -0
- package/src/plugins/port/constants.d.ts +6 -0
- package/src/plugins/port/constants.js +16 -0
- package/src/plugins/port/constants.js.map +1 -0
- package/src/plugins/port/filters.d.ts +2 -0
- package/src/plugins/port/filters.js +15 -0
- package/src/plugins/port/filters.js.map +1 -0
- package/src/plugins/port/helpers.d.ts +8 -0
- package/src/plugins/port/helpers.js +27 -0
- package/src/plugins/port/helpers.js.map +1 -0
- package/src/plugins/port/index.d.ts +6 -0
- package/src/plugins/port/index.js +14 -0
- package/src/plugins/port/index.js.map +1 -0
- package/src/plugins/port/obligationsFetcher.d.ts +3 -0
- package/src/plugins/port/obligationsFetcher.js +156 -0
- package/src/plugins/port/obligationsFetcher.js.map +1 -0
- package/src/plugins/port/pTokensJob.d.ts +3 -0
- package/src/plugins/port/pTokensJob.js +73 -0
- package/src/plugins/port/pTokensJob.js.map +1 -0
- package/src/plugins/port/reservesJob.d.ts +3 -0
- package/src/plugins/port/reservesJob.js +60 -0
- package/src/plugins/port/reservesJob.js.map +1 -0
- package/src/plugins/port/structs.d.ts +82 -0
- package/src/plugins/port/structs.js +75 -0
- package/src/plugins/port/structs.js.map +1 -0
- package/src/plugins/port/types.d.ts +71 -0
- package/src/plugins/port/types.js +3 -0
- package/src/plugins/port/types.js.map +1 -0
- package/src/plugins/solend/structs.d.ts +2 -2
- package/src/plugins/solend/structs.js +2 -2
- package/src/plugins/solend/structs.js.map +1 -1
- package/src/utils/solana/pyth/helpers.d.ts +13 -0
- package/src/utils/solana/pyth/helpers.js +239 -0
- package/src/utils/solana/pyth/helpers.js.map +1 -0
- package/src/utils/solana/pyth/readBig.d.ts +4 -0
- package/src/utils/solana/pyth/readBig.js +61 -0
- package/src/utils/solana/pyth/readBig.js.map +1 -0
- package/src/utils/solana/pyth/structs.d.ts +97 -0
- package/src/utils/solana/pyth/structs.js +35 -0
- package/src/utils/solana/pyth/structs.js.map +1 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.parseDataflat = exports.parseApy = void 0;
|
4
|
+
const beet_1 = require("@metaplex-foundation/beet");
|
5
|
+
const structs_1 = require("./structs");
|
6
|
+
function parseApy(apy) {
|
7
|
+
if (!apy)
|
8
|
+
return 0;
|
9
|
+
return Number(apy.replace('%', '')) / 100;
|
10
|
+
}
|
11
|
+
exports.parseApy = parseApy;
|
12
|
+
const parseDataflat = (dataFlat, depositsLen, borrowsLen) => {
|
13
|
+
const obligationCollateralArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationCollateralStruct, depositsLen);
|
14
|
+
const deposits = obligationCollateralArray.read(dataFlat, 0);
|
15
|
+
const depositsMap = new Map(deposits.map((i) => [i.depositReserve.toString(), i]));
|
16
|
+
const obligationLiquidityArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationLiquidityStruct, borrowsLen);
|
17
|
+
const borrows = obligationLiquidityArray.read(dataFlat, obligationCollateralArray.byteSize);
|
18
|
+
const borrowsMap = new Map(borrows.map((i) => [i.borrowReserve.toString(), i]));
|
19
|
+
return {
|
20
|
+
deposits,
|
21
|
+
depositsMap,
|
22
|
+
borrows,
|
23
|
+
borrowsMap,
|
24
|
+
};
|
25
|
+
};
|
26
|
+
exports.parseDataflat = parseDataflat;
|
27
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/helpers.ts"],"names":[],"mappings":";;;AAAA,oDAAkE;AAClE,uCAGmB;AAEnB,SAAgB,QAAQ,CAAC,GAAuB;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAC5C,CAAC;AAHD,4BAGC;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,14 @@
|
|
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 = exports.platforms = void 0;
|
7
|
+
const constants_1 = require("./constants");
|
8
|
+
const pTokensJob_1 = __importDefault(require("./pTokensJob"));
|
9
|
+
const reservesJob_1 = __importDefault(require("./reservesJob"));
|
10
|
+
const obligationsFetcher_1 = __importDefault(require("./obligationsFetcher"));
|
11
|
+
exports.platforms = [constants_1.platform];
|
12
|
+
exports.jobs = [pTokensJob_1.default, reservesJob_1.default];
|
13
|
+
exports.fetchers = [obligationsFetcher_1.default];
|
14
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/index.ts"],"names":[],"mappings":";;;;;;AAGA,2CAAuC;AACvC,8DAAsC;AACtC,gEAAuC;AACvC,8EAAsD;AAEzC,QAAA,SAAS,GAAe,CAAC,oBAAQ,CAAC,CAAC;AACnC,QAAA,IAAI,GAAU,CAAC,oBAAU,EAAE,qBAAU,CAAC,CAAC;AACvC,QAAA,QAAQ,GAAc,CAAC,4BAAkB,CAAC,CAAC"}
|
@@ -0,0 +1,156 @@
|
|
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 solana_1 = require("../../utils/solana");
|
19
|
+
const structs_1 = require("./structs");
|
20
|
+
const clients_1 = require("../../utils/clients");
|
21
|
+
const filters_1 = require("./filters");
|
22
|
+
const helpers_1 = require("./helpers");
|
23
|
+
const tokenPriceToAssetToken_1 = __importDefault(require("../../utils/misc/tokenPriceToAssetToken"));
|
24
|
+
const getTokensPricesMap_1 = __importDefault(require("../../utils/misc/getTokensPricesMap"));
|
25
|
+
const constants_2 = require("../solend/constants");
|
26
|
+
const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
|
27
|
+
const client = (0, clients_1.getClientSolana)();
|
28
|
+
const obligations = yield (0, solana_1.getParsedProgramAccounts)(client, structs_1.obligationStruct, constants_1.programId, (0, filters_1.obligationsFilter)(owner));
|
29
|
+
if (obligations.length === 0)
|
30
|
+
return [];
|
31
|
+
const reservesInfo = yield cache.getItems(obligations.map((o) => o.lendingMarket.toString()), {
|
32
|
+
prefix: constants_1.platformId,
|
33
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
34
|
+
});
|
35
|
+
const allReserves = reservesInfo.flat();
|
36
|
+
const reservesByMarket = new Map();
|
37
|
+
obligations.forEach((obli, index) => {
|
38
|
+
const reserves = reservesInfo[index];
|
39
|
+
if (reserves)
|
40
|
+
reservesByMarket.set(obli.lendingMarket.toString(), reserves);
|
41
|
+
});
|
42
|
+
const reserveByAddress = new Map();
|
43
|
+
for (const market of reservesByMarket.keys()) {
|
44
|
+
const reserves = reservesByMarket.get(market);
|
45
|
+
if (!reserves)
|
46
|
+
continue;
|
47
|
+
reserves.forEach((res) => reserveByAddress.set(res.pubkey, res));
|
48
|
+
}
|
49
|
+
const tokenPriceById = yield (0, getTokensPricesMap_1.default)(allReserves
|
50
|
+
.map((reserves) => (reserves ? reserves.liquidity.mintPubkey : []))
|
51
|
+
.flat(), portfolio_core_1.NetworkId.solana, cache);
|
52
|
+
const elements = [];
|
53
|
+
for (const obligation of obligations) {
|
54
|
+
const reserves = reservesByMarket.get(obligation.lendingMarket.toString());
|
55
|
+
if (!reserves)
|
56
|
+
continue;
|
57
|
+
const { depositsMap, borrowsMap } = (0, helpers_1.parseDataflat)(obligation.dataFlat, obligation.depositsLen, obligation.borrowsLen);
|
58
|
+
if (depositsMap.size === 0 && borrowsMap.size === 0)
|
59
|
+
continue;
|
60
|
+
const borrowedAssets = [];
|
61
|
+
const borrowedYields = [];
|
62
|
+
const suppliedAssets = [];
|
63
|
+
const suppliedYields = [];
|
64
|
+
const rewardAssets = [];
|
65
|
+
for (let j = 0; j < reserves.length; j += 1) {
|
66
|
+
const { pubkey: reserveAddress } = reserves[j];
|
67
|
+
const reserve = reserveByAddress.get(reserveAddress);
|
68
|
+
if (!reserve)
|
69
|
+
continue;
|
70
|
+
const { liquidity, collateral } = reserve;
|
71
|
+
const lMint = liquidity.mintPubkey;
|
72
|
+
const lTokenPrice = tokenPriceById.get(lMint);
|
73
|
+
if (!lTokenPrice)
|
74
|
+
continue;
|
75
|
+
const decimals = liquidity.mintDecimals;
|
76
|
+
const reserveBorrowAmount = new bignumber_js_1.default(liquidity.borrowedAmountWads)
|
77
|
+
.dividedBy(Math.pow(10, (constants_2.wadsDecimal + decimals)))
|
78
|
+
.toNumber();
|
79
|
+
const reserveAvailableAmount = new bignumber_js_1.default(liquidity.availableAmount)
|
80
|
+
.dividedBy(Math.pow(10, decimals))
|
81
|
+
.toNumber();
|
82
|
+
const collateralSupply = new bignumber_js_1.default(collateral.mintTotalSupply)
|
83
|
+
.dividedBy(Math.pow(10, decimals))
|
84
|
+
.toNumber();
|
85
|
+
const reserveDepositAmount = reserveBorrowAmount + reserveAvailableAmount;
|
86
|
+
// Deposit
|
87
|
+
const deposit = depositsMap.get(reserveAddress);
|
88
|
+
if (deposit) {
|
89
|
+
if (!deposit.depositedAmount.isZero()) {
|
90
|
+
const suppliedAmount = deposit.depositedAmount
|
91
|
+
.div(Math.pow(10, decimals))
|
92
|
+
.times(reserveDepositAmount / collateralSupply)
|
93
|
+
.toNumber();
|
94
|
+
const apy = (0, helpers_1.parseApy)(reserve.depositApy);
|
95
|
+
const cSuppliedYields = [
|
96
|
+
{
|
97
|
+
apr: (0, portfolio_core_1.apyToApr)(apy),
|
98
|
+
apy,
|
99
|
+
},
|
100
|
+
];
|
101
|
+
suppliedYields.push(cSuppliedYields);
|
102
|
+
suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, suppliedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
|
103
|
+
}
|
104
|
+
}
|
105
|
+
// Borrow
|
106
|
+
const borrow = borrowsMap.get(reserveAddress);
|
107
|
+
if (borrow) {
|
108
|
+
if (!borrow.borrowedAmountWads.isZero()) {
|
109
|
+
const borrowedAmount = borrow.borrowedAmountWads
|
110
|
+
.times(new bignumber_js_1.default(liquidity.cumulativeBorrowRateWads))
|
111
|
+
.div(borrow.cumulativeBorrowRateWads)
|
112
|
+
.dividedBy(new bignumber_js_1.default(Math.pow(10, (constants_2.wadsDecimal + decimals))))
|
113
|
+
.toNumber();
|
114
|
+
const apy = (0, helpers_1.parseApy)(reserve.borrowApy);
|
115
|
+
const cBorrowedYields = [
|
116
|
+
{
|
117
|
+
apr: (0, portfolio_core_1.apyToApr)(apy),
|
118
|
+
apy,
|
119
|
+
},
|
120
|
+
];
|
121
|
+
borrowedYields.push(cBorrowedYields);
|
122
|
+
borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, borrowedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
if (suppliedAssets.length === 0 && borrowedAssets.length === 0)
|
127
|
+
continue;
|
128
|
+
const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
|
129
|
+
elements.push({
|
130
|
+
type: portfolio_core_1.PortfolioElementType.borrowlend,
|
131
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
132
|
+
platformId: constants_1.platformId,
|
133
|
+
label: 'Lending',
|
134
|
+
value,
|
135
|
+
data: {
|
136
|
+
borrowedAssets,
|
137
|
+
borrowedValue,
|
138
|
+
borrowedYields,
|
139
|
+
suppliedAssets,
|
140
|
+
suppliedValue,
|
141
|
+
suppliedYields,
|
142
|
+
collateralRatio,
|
143
|
+
rewardAssets,
|
144
|
+
value,
|
145
|
+
},
|
146
|
+
});
|
147
|
+
}
|
148
|
+
return elements;
|
149
|
+
});
|
150
|
+
const fetcher = {
|
151
|
+
id: `${constants_1.platformId}-obligations`,
|
152
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
153
|
+
executor,
|
154
|
+
};
|
155
|
+
exports.default = fetcher;
|
156
|
+
//# sourceMappingURL=obligationsFetcher.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"obligationsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/obligationsFetcher.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,73 @@
|
|
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 bignumber_js_1 = __importDefault(require("bignumber.js"));
|
18
|
+
const constants_1 = require("./constants");
|
19
|
+
const getTokensPricesMap_1 = __importDefault(require("../../utils/misc/getTokensPricesMap"));
|
20
|
+
const constants_2 = require("../kamino/constants");
|
21
|
+
const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
|
22
|
+
const reservesRes = yield axios_1.default
|
23
|
+
.get(`${constants_1.portApi}/reserves`)
|
24
|
+
.catch(() => null);
|
25
|
+
if (!reservesRes || reservesRes.data.length === 0)
|
26
|
+
return;
|
27
|
+
const reserves = reservesRes.data;
|
28
|
+
const tokenPriceById = yield (0, getTokensPricesMap_1.default)(reserves.map((r) => r.assetMintId), portfolio_core_1.NetworkId.solana, cache);
|
29
|
+
const promises = [];
|
30
|
+
for (const reserve of reserves) {
|
31
|
+
const { assetMintId } = reserve;
|
32
|
+
const tokenPrice = tokenPriceById.get(assetMintId);
|
33
|
+
if (!tokenPrice)
|
34
|
+
continue;
|
35
|
+
const exchangeRatio = new bignumber_js_1.default(reserve.exchangeRatio);
|
36
|
+
const amountPerLp = new bignumber_js_1.default(1).dividedBy(exchangeRatio).toNumber();
|
37
|
+
const price = exchangeRatio
|
38
|
+
.dividedBy(Math.pow(10, tokenPrice.decimals))
|
39
|
+
.times(tokenPrice.price)
|
40
|
+
.toNumber();
|
41
|
+
const pToken = reserve.shareMintId;
|
42
|
+
promises.push(cache.setTokenPriceSource({
|
43
|
+
address: reserve.reserveId,
|
44
|
+
decimals: tokenPrice.decimals,
|
45
|
+
id: pToken,
|
46
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
47
|
+
platformId: constants_1.platformId,
|
48
|
+
price,
|
49
|
+
timestamp: Date.now(),
|
50
|
+
weight: 1,
|
51
|
+
underlyings: [
|
52
|
+
{
|
53
|
+
address: tokenPrice.address,
|
54
|
+
amountPerLp,
|
55
|
+
decimals: tokenPrice.decimals,
|
56
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
57
|
+
price: tokenPrice.price,
|
58
|
+
},
|
59
|
+
],
|
60
|
+
}));
|
61
|
+
}
|
62
|
+
promises.push(cache.setItem(constants_2.reservesKey, reserves, {
|
63
|
+
prefix: constants_1.platformId,
|
64
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
65
|
+
}));
|
66
|
+
yield Promise.all(promises);
|
67
|
+
});
|
68
|
+
const job = {
|
69
|
+
id: `${constants_1.platformId}-pTokens`,
|
70
|
+
executor,
|
71
|
+
};
|
72
|
+
exports.default = job;
|
73
|
+
//# sourceMappingURL=pTokensJob.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pTokensJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/pTokensJob.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kDAA6C;AAC7C,+DAAuD;AACvD,gEAAqC;AAGrC,2CAAkD;AAElD,6FAAoE;AACpE,mDAAkD;AAElD,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,WAAW,GAA2C,MAAM,eAAK;SACpE,GAAG,CAAC,GAAG,mBAAO,WAAW,CAAC;SAC1B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;IAElC,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAiB,EAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAClC,0BAAS,CAAC,MAAM,EAChB,KAAK,CACN,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEhC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,aAAa,GAAG,IAAI,sBAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,aAAa;aACxB,SAAS,CAAC,SAAA,EAAE,EAAI,UAAU,CAAC,QAAQ,CAAA,CAAC;aACpC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,QAAQ,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAEnC,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,mBAAmB,CAAC;YACxB,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,EAAE,EAAE,MAAM;YACV,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,UAAU,EAAV,sBAAU;YACV,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,CAAC;YACT,WAAW,EAAE;gBACX;oBACE,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,WAAW;oBACX,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,SAAS,EAAE,0BAAS,CAAC,MAAM;oBAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;iBACxB;aACF;SACF,CAAC,CACH,CAAC;KACH;IACD,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,OAAO,CAAC,uBAAW,EAAE,QAAQ,EAAE;QACnC,MAAM,EAAE,sBAAU;QAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;KAC5B,CAAC,CACH,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,UAAU;IAC3B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
|
@@ -0,0 +1,60 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
13
|
+
const clients_1 = require("../../utils/clients");
|
14
|
+
const solana_1 = require("../../utils/solana");
|
15
|
+
const constants_1 = require("./constants");
|
16
|
+
const structs_1 = require("./structs");
|
17
|
+
const filters_1 = require("../../utils/solana/filters");
|
18
|
+
const constants_2 = require("../kamino/constants");
|
19
|
+
const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
|
20
|
+
const client = (0, clients_1.getClientSolana)();
|
21
|
+
const parseReserves = yield cache.getItem(constants_2.reservesKey, {
|
22
|
+
prefix: constants_1.platformId,
|
23
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
24
|
+
});
|
25
|
+
const parsedReserveById = new Map();
|
26
|
+
if (parseReserves) {
|
27
|
+
parseReserves.forEach((res) => parsedReserveById.set(res.reserveId, res));
|
28
|
+
}
|
29
|
+
const reservesAccounts = yield (0, solana_1.getParsedProgramAccounts)(client, structs_1.reserveStruct, constants_1.programId, (0, filters_1.dataStructSizeFilter)(structs_1.reserveStruct));
|
30
|
+
const reservesByMarket = new Map();
|
31
|
+
reservesAccounts.forEach((res) => {
|
32
|
+
const tempReserves = reservesByMarket.get(res.lendingMarket.toString());
|
33
|
+
const apys = parsedReserveById.get(res.pubkey.toString());
|
34
|
+
if (tempReserves) {
|
35
|
+
tempReserves.push(Object.assign({ borrowApy: apys === null || apys === void 0 ? void 0 : apys.borrowApy, depositApy: apys === null || apys === void 0 ? void 0 : apys.depositApy }, res));
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
reservesByMarket.set(res.lendingMarket.toString(), [
|
39
|
+
Object.assign({ borrowApy: apys === null || apys === void 0 ? void 0 : apys.borrowApy, depositApy: apys === null || apys === void 0 ? void 0 : apys.depositApy }, res),
|
40
|
+
]);
|
41
|
+
}
|
42
|
+
});
|
43
|
+
const promises = [];
|
44
|
+
for (const key of reservesByMarket.keys()) {
|
45
|
+
const reserves = reservesByMarket.get(key);
|
46
|
+
if (!reserves)
|
47
|
+
continue;
|
48
|
+
promises.push(cache.setItem(key, reserves, {
|
49
|
+
prefix: constants_1.platformId,
|
50
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
51
|
+
}));
|
52
|
+
}
|
53
|
+
yield Promise.all(promises);
|
54
|
+
});
|
55
|
+
const job = {
|
56
|
+
id: `${constants_1.platformId}-reserves`,
|
57
|
+
executor,
|
58
|
+
};
|
59
|
+
exports.default = job;
|
60
|
+
//# sourceMappingURL=reservesJob.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"reservesJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/reservesJob.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAuD;AAGvD,iDAAsD;AACtD,+CAA8D;AAC9D,2CAAoD;AACpD,uCAA0C;AAC1C,wDAAkE;AAElE,mDAAkD;AAElD,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,OAAO,CAAe,uBAAW,EAAE;QACnE,MAAM,EAAE,sBAAU;QAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC7D,IAAI,aAAa,EAAE;QACjB,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3E;IAED,MAAM,gBAAgB,GAAG,MAAM,IAAA,iCAAwB,EACrD,MAAM,EACN,uBAAa,EACb,qBAAS,EACT,IAAA,8BAAoB,EAAC,uBAAa,CAAC,CACpC,CAAC;IAEF,MAAM,gBAAgB,GAAmC,IAAI,GAAG,EAAE,CAAC;IACnE,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,IAAI,iBACf,SAAS,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAC1B,UAAU,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,IACxB,GAA0B,EAC9B,CAAC;SACJ;aAAM;YACL,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE;gCAE/C,SAAS,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAC1B,UAAU,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,IACxB,GAA0B;aAEjC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE;YAC3B,MAAM,EAAE,sBAAU;YAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;SAC5B,CAAC,CACH,CAAC;KACH;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,WAAW;IAC5B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
|
@@ -0,0 +1,82 @@
|
|
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
|
+
};
|
21
|
+
export declare const reserveConfigStruct: BeetStruct<ReserveConfig, Partial<ReserveConfig>>;
|
22
|
+
export type Collateral = {
|
23
|
+
mintPubkey: PublicKey;
|
24
|
+
mintTotalSupply: BigNumber;
|
25
|
+
supplyPubkey: PublicKey;
|
26
|
+
};
|
27
|
+
export declare const collateralStruct: BeetStruct<Collateral, Partial<Collateral>>;
|
28
|
+
export type Liquidity = {
|
29
|
+
mintPubkey: PublicKey;
|
30
|
+
mintDecimals: number;
|
31
|
+
supplyPubkey: PublicKey;
|
32
|
+
feeReceiver: PublicKey;
|
33
|
+
oracleOption: BigNumber;
|
34
|
+
oraclePubkey: PublicKey;
|
35
|
+
availableAmount: BigNumber;
|
36
|
+
borrowedAmountWads: BigNumber;
|
37
|
+
cumulativeBorrowRateWads: BigNumber;
|
38
|
+
marketPrice: BigNumber;
|
39
|
+
};
|
40
|
+
export declare const liquidityStruct: BeetStruct<Liquidity, Partial<Liquidity>>;
|
41
|
+
export type LastUpdate = {
|
42
|
+
slot: BigNumber;
|
43
|
+
stale: number;
|
44
|
+
};
|
45
|
+
export declare const lastUpdateStruct: BeetStruct<LastUpdate, Partial<LastUpdate>>;
|
46
|
+
export type Reserve = {
|
47
|
+
version: number;
|
48
|
+
lastUpdate: LastUpdate;
|
49
|
+
lendingMarket: PublicKey;
|
50
|
+
liquidity: Liquidity;
|
51
|
+
collateral: Collateral;
|
52
|
+
config: ReserveConfig;
|
53
|
+
padding: Buffer;
|
54
|
+
};
|
55
|
+
export declare const reserveStruct: BeetStruct<Reserve, Partial<Reserve>>;
|
56
|
+
export type Obligation = {
|
57
|
+
version: number;
|
58
|
+
lastUpdate: LastUpdate;
|
59
|
+
lendingMarket: PublicKey;
|
60
|
+
owner: PublicKey;
|
61
|
+
depositedValue: BigNumber;
|
62
|
+
borrowedValue: BigNumber;
|
63
|
+
allowedBorrowValue: BigNumber;
|
64
|
+
unhealthyBorrowValue: BigNumber;
|
65
|
+
depositsLen: number;
|
66
|
+
borrowsLen: number;
|
67
|
+
dataFlat: Buffer;
|
68
|
+
};
|
69
|
+
export declare const obligationStruct: BeetStruct<Obligation, Partial<Obligation>>;
|
70
|
+
export type ObligationCollateral = {
|
71
|
+
depositReserve: PublicKey;
|
72
|
+
depositedAmount: BigNumber;
|
73
|
+
marketValue: BigNumber;
|
74
|
+
};
|
75
|
+
export declare const obligationCollateralStruct: BeetStruct<ObligationCollateral, Partial<ObligationCollateral>>;
|
76
|
+
export type ObligationLiquidity = {
|
77
|
+
borrowReserve: PublicKey;
|
78
|
+
cumulativeBorrowRateWads: BigNumber;
|
79
|
+
borrowedAmountWads: BigNumber;
|
80
|
+
marketValue: BigNumber;
|
81
|
+
};
|
82
|
+
export declare const obligationLiquidityStruct: BeetStruct<ObligationLiquidity, Partial<ObligationLiquidity>>;
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveStruct = 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
|
+
['hostFeePercentage', beet_1.u8],
|
10
|
+
], (args) => args);
|
11
|
+
exports.reserveConfigStruct = new beet_1.BeetStruct([
|
12
|
+
['optimalUtilizationRate', beet_1.u8],
|
13
|
+
['loanToValueRatio', beet_1.u8],
|
14
|
+
['liquidationBonus', beet_1.u8],
|
15
|
+
['liquidationThreshold', beet_1.u8],
|
16
|
+
['minBorrowRate', beet_1.u8],
|
17
|
+
['optimalBorrowRate', beet_1.u8],
|
18
|
+
['maxBorrowRate', beet_1.u8],
|
19
|
+
['fees', exports.feesStruct],
|
20
|
+
], (args) => args);
|
21
|
+
exports.collateralStruct = new beet_1.BeetStruct([
|
22
|
+
['mintPubkey', beet_solana_1.publicKey],
|
23
|
+
['mintTotalSupply', solana_1.u64],
|
24
|
+
['supplyPubkey', beet_solana_1.publicKey],
|
25
|
+
], (args) => args);
|
26
|
+
exports.liquidityStruct = new beet_1.BeetStruct([
|
27
|
+
['mintPubkey', beet_solana_1.publicKey],
|
28
|
+
['mintDecimals', beet_1.u8],
|
29
|
+
['supplyPubkey', beet_solana_1.publicKey],
|
30
|
+
['feeReceiver', beet_solana_1.publicKey],
|
31
|
+
['oracleOption', beet_1.u32],
|
32
|
+
['oraclePubkey', beet_solana_1.publicKey],
|
33
|
+
['availableAmount', solana_1.u64],
|
34
|
+
['borrowedAmountWads', solana_1.u128],
|
35
|
+
['cumulativeBorrowRateWads', solana_1.u128],
|
36
|
+
['marketPrice', solana_1.u128],
|
37
|
+
], (args) => args);
|
38
|
+
exports.lastUpdateStruct = new beet_1.BeetStruct([
|
39
|
+
['slot', solana_1.u64],
|
40
|
+
['stale', beet_1.u8],
|
41
|
+
], (args) => args);
|
42
|
+
exports.reserveStruct = new beet_1.BeetStruct([
|
43
|
+
['version', beet_1.u8],
|
44
|
+
['lastUpdate', exports.lastUpdateStruct],
|
45
|
+
['lendingMarket', beet_solana_1.publicKey],
|
46
|
+
['liquidity', exports.liquidityStruct],
|
47
|
+
['collateral', exports.collateralStruct],
|
48
|
+
['config', exports.reserveConfigStruct],
|
49
|
+
['padding', (0, solana_1.blob)(256)],
|
50
|
+
], (args) => args);
|
51
|
+
exports.obligationStruct = new beet_1.BeetStruct([
|
52
|
+
['version', beet_1.u8],
|
53
|
+
['lastUpdate', exports.lastUpdateStruct],
|
54
|
+
['lendingMarket', beet_solana_1.publicKey],
|
55
|
+
['owner', beet_solana_1.publicKey],
|
56
|
+
['depositedValue', solana_1.u128],
|
57
|
+
['borrowedValue', solana_1.u128],
|
58
|
+
['allowedBorrowValue', solana_1.u128],
|
59
|
+
['unhealthyBorrowValue', solana_1.u128],
|
60
|
+
['depositsLen', beet_1.u8],
|
61
|
+
['borrowsLen', beet_1.u8],
|
62
|
+
['dataFlat', (0, solana_1.blob)(776)],
|
63
|
+
], (args) => args);
|
64
|
+
exports.obligationCollateralStruct = new beet_1.BeetStruct([
|
65
|
+
['depositReserve', beet_solana_1.publicKey],
|
66
|
+
['depositedAmount', solana_1.u64],
|
67
|
+
['marketValue', solana_1.u128],
|
68
|
+
], (args) => args);
|
69
|
+
exports.obligationLiquidityStruct = new beet_1.BeetStruct([
|
70
|
+
['borrowReserve', beet_solana_1.publicKey],
|
71
|
+
['cumulativeBorrowRateWads', solana_1.u128],
|
72
|
+
['borrowedAmountWads', solana_1.u128],
|
73
|
+
['marketValue', solana_1.u128],
|
74
|
+
], (args) => args);
|
75
|
+
//# sourceMappingURL=structs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/structs.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
export type ReservesResponse = ReserveApi[];
|
2
|
+
export type ReserveEnhanced = Reserve & {
|
3
|
+
depositApy?: string;
|
4
|
+
borrowApy?: string;
|
5
|
+
};
|
6
|
+
export type ReserveApi = {
|
7
|
+
reserveId: string;
|
8
|
+
assetMintId: string;
|
9
|
+
shareMintId: string;
|
10
|
+
oracleId: string;
|
11
|
+
shareBalanceId: string;
|
12
|
+
liquidityBalanceId: string;
|
13
|
+
availableLiquidity: string;
|
14
|
+
borrowedLiquidity: string;
|
15
|
+
totalLiquidity: string;
|
16
|
+
issuedShare: string;
|
17
|
+
exchangeRatio: string;
|
18
|
+
depositApy: string;
|
19
|
+
borrowApy: string;
|
20
|
+
stakingPool: string;
|
21
|
+
minBorrowRate: string;
|
22
|
+
maxBorrowRate: string;
|
23
|
+
optimalBorrowRate: string;
|
24
|
+
optimalUtilisation: string;
|
25
|
+
};
|
26
|
+
export type Fees = {
|
27
|
+
borrowFeeWad: string;
|
28
|
+
flashLoanFeeWad: string;
|
29
|
+
hostFeePercentage: number;
|
30
|
+
};
|
31
|
+
export type ReserveConfig = {
|
32
|
+
optimalUtilizationRate: number;
|
33
|
+
loanToValueRatio: number;
|
34
|
+
liquidationBonus: number;
|
35
|
+
liquidationThreshold: number;
|
36
|
+
minBorrowRate: number;
|
37
|
+
optimalBorrowRate: number;
|
38
|
+
maxBorrowRate: number;
|
39
|
+
fees: Fees;
|
40
|
+
};
|
41
|
+
export type Collateral = {
|
42
|
+
mintPubkey: string;
|
43
|
+
mintTotalSupply: string;
|
44
|
+
supplyPubkey: string;
|
45
|
+
};
|
46
|
+
export type Liquidity = {
|
47
|
+
mintPubkey: string;
|
48
|
+
mintDecimals: number;
|
49
|
+
supplyPubkey: string;
|
50
|
+
feeReceiver: string;
|
51
|
+
oracleOption: string;
|
52
|
+
oraclePubkey: string;
|
53
|
+
availableAmount: string;
|
54
|
+
borrowedAmountWads: string;
|
55
|
+
cumulativeBorrowRateWads: string;
|
56
|
+
marketPrice: string;
|
57
|
+
};
|
58
|
+
export type LastUpdate = {
|
59
|
+
slot: string;
|
60
|
+
stale: number;
|
61
|
+
};
|
62
|
+
export type Reserve = {
|
63
|
+
pubkey: string;
|
64
|
+
version: number;
|
65
|
+
lastUpdate: LastUpdate;
|
66
|
+
lendingMarket: string;
|
67
|
+
liquidity: Liquidity;
|
68
|
+
collateral: Collateral;
|
69
|
+
config: ReserveConfig;
|
70
|
+
padding: string;
|
71
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/types.ts"],"names":[],"mappings":""}
|
@@ -45,7 +45,7 @@ export type LastUpdate = {
|
|
45
45
|
stale: number;
|
46
46
|
};
|
47
47
|
export declare const lastUpdateStruct: BeetStruct<LastUpdate, Partial<LastUpdate>>;
|
48
|
-
export type
|
48
|
+
export type Reserve = {
|
49
49
|
version: number;
|
50
50
|
lastUpdate: LastUpdate;
|
51
51
|
lendingMarket: PublicKey;
|
@@ -54,7 +54,7 @@ export type ReserveAccount = {
|
|
54
54
|
config: ReserveConfig;
|
55
55
|
padding: Buffer;
|
56
56
|
};
|
57
|
-
export declare const
|
57
|
+
export declare const reserveStruct: BeetStruct<Reserve, Partial<Reserve>>;
|
58
58
|
export type Obligation = {
|
59
59
|
version: number;
|
60
60
|
lastUpdate: LastUpdate;
|