@suilend/sdk 1.1.31 → 1.1.32
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/api/events.d.ts +1 -1
- package/client.d.ts +1 -1
- package/client.js +3 -3
- package/index.d.ts +1 -2
- package/index.js +1 -2
- package/{constants.d.ts → lib/constants.d.ts} +1 -0
- package/{constants.js → lib/constants.js} +2 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.js +21 -0
- package/lib/initialize.d.ts +517 -0
- package/lib/initialize.js +169 -0
- package/lib/liquidityMining.d.ts +54 -0
- package/lib/liquidityMining.js +158 -0
- package/lib/transactions.d.ts +8 -0
- package/lib/transactions.js +19 -0
- package/package.json +1 -1
- package/parsers/apiReserveAssetDataEvent.d.ts +1 -1
- package/parsers/apiReserveAssetDataEvent.js +1 -1
- package/parsers/obligation.js +1 -1
- package/parsers/rateLimiter.js +1 -1
- package/parsers/reserve.js +1 -1
- package/utils/index.d.ts +0 -2
- package/utils/index.js +1 -10
- package/utils/simulate.js +1 -1
- /package/{types.d.ts → lib/types.d.ts} +0 -0
- /package/{types.js → lib/types.js} +0 -0
package/api/events.d.ts
CHANGED
package/client.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { FeeReceivers, LendingMarket, ObligationOwnerCap } from "./_generated/su
|
|
|
5
5
|
import { Obligation } from "./_generated/suilend/obligation/structs";
|
|
6
6
|
import { NewConfigArgs as CreateRateLimiterConfigArgs } from "./_generated/suilend/rate-limiter/functions";
|
|
7
7
|
import { CreateReserveConfigArgs } from "./_generated/suilend/reserve-config/functions";
|
|
8
|
-
import { Side } from "./types";
|
|
8
|
+
import { Side } from "./lib/types";
|
|
9
9
|
export declare const LENDING_MARKET_ID: string;
|
|
10
10
|
export declare const LENDING_MARKET_TYPE: string;
|
|
11
11
|
export type ClaimRewardsReward = {
|
package/client.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.SuilendClient = exports.LENDING_MARKET_TYPE = exports.LENDING_MARKET_ID = void 0;
|
|
13
13
|
const utils_1 = require("@mysten/sui/utils");
|
|
14
14
|
const pyth_sui_js_1 = require("@pythnetwork/pyth-sui-js");
|
|
15
|
+
const frontend_sui_1 = require("@suilend/frontend-sui");
|
|
15
16
|
const structs_1 = require("./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-info/structs");
|
|
16
17
|
const reified_1 = require("./_generated/_framework/reified");
|
|
17
18
|
const suilend_1 = require("./_generated/suilend");
|
|
@@ -22,8 +23,7 @@ const functions_2 = require("./_generated/suilend/lending-market-registry/functi
|
|
|
22
23
|
const structs_3 = require("./_generated/suilend/obligation/structs");
|
|
23
24
|
const functions_3 = require("./_generated/suilend/rate-limiter/functions");
|
|
24
25
|
const functions_4 = require("./_generated/suilend/reserve-config/functions");
|
|
25
|
-
const types_1 = require("./types");
|
|
26
|
-
const utils_2 = require("./utils");
|
|
26
|
+
const types_1 = require("./lib/types");
|
|
27
27
|
const SUI_COINTYPE = "0x2::sui::SUI";
|
|
28
28
|
const NORMALIZED_SUI_COINTYPE = (0, utils_1.normalizeStructTag)(SUI_COINTYPE);
|
|
29
29
|
const isSui = (coinType) => (0, utils_1.normalizeStructTag)(coinType) === NORMALIZED_SUI_COINTYPE;
|
|
@@ -633,7 +633,7 @@ class SuilendClient {
|
|
|
633
633
|
if (mergeCoins.length > 1) {
|
|
634
634
|
transaction.mergeCoins(transaction.object(mergeCoin.coinObjectId), mergeCoins.map((mc) => transaction.object(mc.coinObjectId)).slice(1));
|
|
635
635
|
}
|
|
636
|
-
const coinType = (0,
|
|
636
|
+
const coinType = (0, frontend_sui_1.extractCTokenCoinType)(ctokenCoinType);
|
|
637
637
|
const [exemption] = transaction.moveCall({
|
|
638
638
|
target: `0x1::option::none`,
|
|
639
639
|
typeArguments: [
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -15,8 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./api"), exports);
|
|
18
|
+
__exportStar(require("./lib"), exports);
|
|
18
19
|
__exportStar(require("./parsers"), exports);
|
|
19
20
|
__exportStar(require("./utils"), exports);
|
|
20
21
|
__exportStar(require("./client"), exports);
|
|
21
|
-
__exportStar(require("./constants"), exports);
|
|
22
|
-
__exportStar(require("./types"), exports);
|
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.WAD = exports.maxU64 = void 0;
|
|
6
|
+
exports.msPerYear = exports.WAD = exports.maxU64 = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
8
|
exports.maxU64 = new bignumber_js_1.default(2).pow(64).minus(1);
|
|
9
9
|
exports.WAD = new bignumber_js_1.default(10).pow(18);
|
|
10
|
+
exports.msPerYear = 31556952000; // Approx. 1000 * 60 * 60 * 24 * 365;
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants"), exports);
|
|
18
|
+
__exportStar(require("./initialize"), exports);
|
|
19
|
+
__exportStar(require("./liquidityMining"), exports);
|
|
20
|
+
__exportStar(require("./transactions"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { CoinMetadata, SuiClient } from "@mysten/sui/client";
|
|
2
|
+
import BigNumber from "bignumber.js";
|
|
3
|
+
import { SuilendClient } from "../client";
|
|
4
|
+
import { ParsedObligation, ParsedReserve } from "../parsers";
|
|
5
|
+
export declare const RESERVES_CUSTOM_ORDER: string[];
|
|
6
|
+
export declare const initializeSuilend: (suiClient: SuiClient, suilendClient: SuilendClient, address?: string) => Promise<{
|
|
7
|
+
lendingMarket: {
|
|
8
|
+
id: string;
|
|
9
|
+
version: bigint;
|
|
10
|
+
reserves: {
|
|
11
|
+
config: {
|
|
12
|
+
$typeName: string;
|
|
13
|
+
openLtvPct: number;
|
|
14
|
+
closeLtvPct: number;
|
|
15
|
+
maxCloseLtvPct: number;
|
|
16
|
+
borrowWeightBps: BigNumber;
|
|
17
|
+
depositLimit: BigNumber;
|
|
18
|
+
borrowLimit: BigNumber;
|
|
19
|
+
liquidationBonusBps: number;
|
|
20
|
+
maxLiquidationBonusBps: number;
|
|
21
|
+
depositLimitUsd: BigNumber;
|
|
22
|
+
borrowLimitUsd: BigNumber;
|
|
23
|
+
borrowFeeBps: number;
|
|
24
|
+
spreadFeeBps: number;
|
|
25
|
+
protocolLiquidationFeeBps: number;
|
|
26
|
+
isolated: boolean;
|
|
27
|
+
openAttributedBorrowLimitUsd: number;
|
|
28
|
+
closeAttributedBorrowLimitUsd: number;
|
|
29
|
+
interestRate: {
|
|
30
|
+
id: string;
|
|
31
|
+
utilPercent: BigNumber;
|
|
32
|
+
aprPercent: BigNumber;
|
|
33
|
+
}[];
|
|
34
|
+
};
|
|
35
|
+
$typeName: string;
|
|
36
|
+
id: string;
|
|
37
|
+
arrayIndex: bigint;
|
|
38
|
+
coinType: string;
|
|
39
|
+
mintDecimals: number;
|
|
40
|
+
priceIdentifier: string;
|
|
41
|
+
price: BigNumber;
|
|
42
|
+
smoothedPrice: BigNumber;
|
|
43
|
+
minPrice: BigNumber;
|
|
44
|
+
maxPrice: BigNumber;
|
|
45
|
+
priceLastUpdateTimestampS: bigint;
|
|
46
|
+
availableAmount: BigNumber;
|
|
47
|
+
ctokenSupply: BigNumber;
|
|
48
|
+
borrowedAmount: BigNumber;
|
|
49
|
+
cumulativeBorrowRate: BigNumber;
|
|
50
|
+
interestLastUpdateTimestampS: bigint;
|
|
51
|
+
unclaimedSpreadFees: BigNumber;
|
|
52
|
+
attributedBorrowValue: BigNumber;
|
|
53
|
+
depositsPoolRewardManager: {
|
|
54
|
+
$typeName: string;
|
|
55
|
+
id: string;
|
|
56
|
+
totalShares: bigint;
|
|
57
|
+
poolRewards: {
|
|
58
|
+
$typeName: string;
|
|
59
|
+
id: string;
|
|
60
|
+
poolRewardManagerId: string;
|
|
61
|
+
coinType: string;
|
|
62
|
+
startTimeMs: number;
|
|
63
|
+
endTimeMs: number;
|
|
64
|
+
totalRewards: BigNumber;
|
|
65
|
+
allocatedRewards: BigNumber;
|
|
66
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
67
|
+
numUserRewardManagers: bigint;
|
|
68
|
+
rewardIndex: number;
|
|
69
|
+
symbol: string;
|
|
70
|
+
mintDecimals: number;
|
|
71
|
+
}[];
|
|
72
|
+
lastUpdateTimeMs: bigint;
|
|
73
|
+
};
|
|
74
|
+
borrowsPoolRewardManager: {
|
|
75
|
+
$typeName: string;
|
|
76
|
+
id: string;
|
|
77
|
+
totalShares: bigint;
|
|
78
|
+
poolRewards: {
|
|
79
|
+
$typeName: string;
|
|
80
|
+
id: string;
|
|
81
|
+
poolRewardManagerId: string;
|
|
82
|
+
coinType: string;
|
|
83
|
+
startTimeMs: number;
|
|
84
|
+
endTimeMs: number;
|
|
85
|
+
totalRewards: BigNumber;
|
|
86
|
+
allocatedRewards: BigNumber;
|
|
87
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
88
|
+
numUserRewardManagers: bigint;
|
|
89
|
+
rewardIndex: number;
|
|
90
|
+
symbol: string;
|
|
91
|
+
mintDecimals: number;
|
|
92
|
+
}[];
|
|
93
|
+
lastUpdateTimeMs: bigint;
|
|
94
|
+
};
|
|
95
|
+
availableAmountUsd: BigNumber;
|
|
96
|
+
borrowedAmountUsd: BigNumber;
|
|
97
|
+
depositedAmount: BigNumber;
|
|
98
|
+
depositedAmountUsd: BigNumber;
|
|
99
|
+
cTokenExchangeRate: BigNumber;
|
|
100
|
+
borrowAprPercent: BigNumber;
|
|
101
|
+
depositAprPercent: BigNumber;
|
|
102
|
+
utilizationPercent: BigNumber;
|
|
103
|
+
token: {
|
|
104
|
+
decimals: number;
|
|
105
|
+
description: string;
|
|
106
|
+
iconUrl?: string | null;
|
|
107
|
+
id?: string | null;
|
|
108
|
+
name: string;
|
|
109
|
+
symbol: string;
|
|
110
|
+
coinType: string;
|
|
111
|
+
};
|
|
112
|
+
symbol: string;
|
|
113
|
+
name: string;
|
|
114
|
+
iconUrl: string | null | undefined;
|
|
115
|
+
description: string;
|
|
116
|
+
totalDeposits: BigNumber;
|
|
117
|
+
}[];
|
|
118
|
+
obligations: import("../_generated/_dependencies/source/0x2/object-table/structs").ObjectTable<"0x2::object::ID", `0x1f54a9a2d71799553197e9ea24557797c6398d6a65f2d4d3818c9304b75d5e21::obligation::Obligation<${string}>` | `0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::obligation::Obligation<${string}>`>;
|
|
119
|
+
rateLimiter: {
|
|
120
|
+
config: {
|
|
121
|
+
windowDuration: bigint;
|
|
122
|
+
maxOutflow: bigint;
|
|
123
|
+
};
|
|
124
|
+
$typeName: string;
|
|
125
|
+
prevQty: bigint;
|
|
126
|
+
windowStart: bigint;
|
|
127
|
+
curQty: bigint;
|
|
128
|
+
remainingOutflow: BigNumber;
|
|
129
|
+
};
|
|
130
|
+
feeReceiver: string;
|
|
131
|
+
badDebtUsd: BigNumber;
|
|
132
|
+
badDebtLimitUsd: BigNumber;
|
|
133
|
+
depositedAmountUsd: BigNumber;
|
|
134
|
+
borrowedAmountUsd: BigNumber;
|
|
135
|
+
tvlUsd: BigNumber;
|
|
136
|
+
totalSupplyUsd: BigNumber;
|
|
137
|
+
totalBorrowUsd: BigNumber;
|
|
138
|
+
};
|
|
139
|
+
refreshedRawReserves: import("../_generated/suilend/reserve/structs").Reserve<string>[];
|
|
140
|
+
reserveMap: Record<string, {
|
|
141
|
+
config: {
|
|
142
|
+
$typeName: string;
|
|
143
|
+
openLtvPct: number;
|
|
144
|
+
closeLtvPct: number;
|
|
145
|
+
maxCloseLtvPct: number;
|
|
146
|
+
borrowWeightBps: BigNumber;
|
|
147
|
+
depositLimit: BigNumber;
|
|
148
|
+
borrowLimit: BigNumber;
|
|
149
|
+
liquidationBonusBps: number;
|
|
150
|
+
maxLiquidationBonusBps: number;
|
|
151
|
+
depositLimitUsd: BigNumber;
|
|
152
|
+
borrowLimitUsd: BigNumber;
|
|
153
|
+
borrowFeeBps: number;
|
|
154
|
+
spreadFeeBps: number;
|
|
155
|
+
protocolLiquidationFeeBps: number;
|
|
156
|
+
isolated: boolean;
|
|
157
|
+
openAttributedBorrowLimitUsd: number;
|
|
158
|
+
closeAttributedBorrowLimitUsd: number;
|
|
159
|
+
interestRate: {
|
|
160
|
+
id: string;
|
|
161
|
+
utilPercent: BigNumber;
|
|
162
|
+
aprPercent: BigNumber;
|
|
163
|
+
}[];
|
|
164
|
+
};
|
|
165
|
+
$typeName: string;
|
|
166
|
+
id: string;
|
|
167
|
+
arrayIndex: bigint;
|
|
168
|
+
coinType: string;
|
|
169
|
+
mintDecimals: number;
|
|
170
|
+
priceIdentifier: string;
|
|
171
|
+
price: BigNumber;
|
|
172
|
+
smoothedPrice: BigNumber;
|
|
173
|
+
minPrice: BigNumber;
|
|
174
|
+
maxPrice: BigNumber;
|
|
175
|
+
priceLastUpdateTimestampS: bigint;
|
|
176
|
+
availableAmount: BigNumber;
|
|
177
|
+
ctokenSupply: BigNumber;
|
|
178
|
+
borrowedAmount: BigNumber;
|
|
179
|
+
cumulativeBorrowRate: BigNumber;
|
|
180
|
+
interestLastUpdateTimestampS: bigint;
|
|
181
|
+
unclaimedSpreadFees: BigNumber;
|
|
182
|
+
attributedBorrowValue: BigNumber;
|
|
183
|
+
depositsPoolRewardManager: {
|
|
184
|
+
$typeName: string;
|
|
185
|
+
id: string;
|
|
186
|
+
totalShares: bigint;
|
|
187
|
+
poolRewards: {
|
|
188
|
+
$typeName: string;
|
|
189
|
+
id: string;
|
|
190
|
+
poolRewardManagerId: string;
|
|
191
|
+
coinType: string;
|
|
192
|
+
startTimeMs: number;
|
|
193
|
+
endTimeMs: number;
|
|
194
|
+
totalRewards: BigNumber;
|
|
195
|
+
allocatedRewards: BigNumber;
|
|
196
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
197
|
+
numUserRewardManagers: bigint;
|
|
198
|
+
rewardIndex: number;
|
|
199
|
+
symbol: string;
|
|
200
|
+
mintDecimals: number;
|
|
201
|
+
}[];
|
|
202
|
+
lastUpdateTimeMs: bigint;
|
|
203
|
+
};
|
|
204
|
+
borrowsPoolRewardManager: {
|
|
205
|
+
$typeName: string;
|
|
206
|
+
id: string;
|
|
207
|
+
totalShares: bigint;
|
|
208
|
+
poolRewards: {
|
|
209
|
+
$typeName: string;
|
|
210
|
+
id: string;
|
|
211
|
+
poolRewardManagerId: string;
|
|
212
|
+
coinType: string;
|
|
213
|
+
startTimeMs: number;
|
|
214
|
+
endTimeMs: number;
|
|
215
|
+
totalRewards: BigNumber;
|
|
216
|
+
allocatedRewards: BigNumber;
|
|
217
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
218
|
+
numUserRewardManagers: bigint;
|
|
219
|
+
rewardIndex: number;
|
|
220
|
+
symbol: string;
|
|
221
|
+
mintDecimals: number;
|
|
222
|
+
}[];
|
|
223
|
+
lastUpdateTimeMs: bigint;
|
|
224
|
+
};
|
|
225
|
+
availableAmountUsd: BigNumber;
|
|
226
|
+
borrowedAmountUsd: BigNumber;
|
|
227
|
+
depositedAmount: BigNumber;
|
|
228
|
+
depositedAmountUsd: BigNumber;
|
|
229
|
+
cTokenExchangeRate: BigNumber;
|
|
230
|
+
borrowAprPercent: BigNumber;
|
|
231
|
+
depositAprPercent: BigNumber;
|
|
232
|
+
utilizationPercent: BigNumber;
|
|
233
|
+
token: {
|
|
234
|
+
decimals: number;
|
|
235
|
+
description: string;
|
|
236
|
+
iconUrl?: string | null;
|
|
237
|
+
id?: string | null;
|
|
238
|
+
name: string;
|
|
239
|
+
symbol: string;
|
|
240
|
+
coinType: string;
|
|
241
|
+
};
|
|
242
|
+
symbol: string;
|
|
243
|
+
name: string;
|
|
244
|
+
iconUrl: string | null | undefined;
|
|
245
|
+
description: string;
|
|
246
|
+
totalDeposits: BigNumber;
|
|
247
|
+
}>;
|
|
248
|
+
reserveCoinTypes: string[];
|
|
249
|
+
rewardCoinTypes: string[];
|
|
250
|
+
reserveCoinMetadataMap: Record<string, CoinMetadata>;
|
|
251
|
+
rewardCoinMetadataMap: Record<string, CoinMetadata>;
|
|
252
|
+
coinMetadataMap: {
|
|
253
|
+
[x: string]: CoinMetadata;
|
|
254
|
+
};
|
|
255
|
+
obligationOwnerCaps: import("../_generated/suilend/lending-market/structs").ObligationOwnerCap<string>[] | undefined;
|
|
256
|
+
obligations: {
|
|
257
|
+
id: string;
|
|
258
|
+
depositedAmountUsd: BigNumber;
|
|
259
|
+
borrowedAmountUsd: BigNumber;
|
|
260
|
+
netValueUsd: BigNumber;
|
|
261
|
+
weightedBorrowsUsd: BigNumber;
|
|
262
|
+
maxPriceWeightedBorrowsUsd: BigNumber;
|
|
263
|
+
borrowLimitUsd: BigNumber;
|
|
264
|
+
minPriceBorrowLimitUsd: BigNumber;
|
|
265
|
+
unhealthyBorrowValueUsd: BigNumber;
|
|
266
|
+
depositPositionCount: number;
|
|
267
|
+
borrowPositionCount: number;
|
|
268
|
+
positionCount: number;
|
|
269
|
+
deposits: {
|
|
270
|
+
coinType: string;
|
|
271
|
+
reserveArrayIndex: bigint;
|
|
272
|
+
userRewardManagerIndex: number;
|
|
273
|
+
userRewardManager: import("../_generated/suilend/liquidity-mining/structs").UserRewardManager;
|
|
274
|
+
depositedAmount: BigNumber;
|
|
275
|
+
depositedAmountUsd: BigNumber;
|
|
276
|
+
depositedCtokenAmount: BigNumber;
|
|
277
|
+
reserve: {
|
|
278
|
+
config: {
|
|
279
|
+
$typeName: string;
|
|
280
|
+
openLtvPct: number;
|
|
281
|
+
closeLtvPct: number;
|
|
282
|
+
maxCloseLtvPct: number;
|
|
283
|
+
borrowWeightBps: BigNumber;
|
|
284
|
+
depositLimit: BigNumber;
|
|
285
|
+
borrowLimit: BigNumber;
|
|
286
|
+
liquidationBonusBps: number;
|
|
287
|
+
maxLiquidationBonusBps: number;
|
|
288
|
+
depositLimitUsd: BigNumber;
|
|
289
|
+
borrowLimitUsd: BigNumber;
|
|
290
|
+
borrowFeeBps: number;
|
|
291
|
+
spreadFeeBps: number;
|
|
292
|
+
protocolLiquidationFeeBps: number;
|
|
293
|
+
isolated: boolean;
|
|
294
|
+
openAttributedBorrowLimitUsd: number;
|
|
295
|
+
closeAttributedBorrowLimitUsd: number;
|
|
296
|
+
interestRate: {
|
|
297
|
+
id: string;
|
|
298
|
+
utilPercent: BigNumber;
|
|
299
|
+
aprPercent: BigNumber;
|
|
300
|
+
}[];
|
|
301
|
+
};
|
|
302
|
+
$typeName: string;
|
|
303
|
+
id: string;
|
|
304
|
+
arrayIndex: bigint;
|
|
305
|
+
coinType: string;
|
|
306
|
+
mintDecimals: number;
|
|
307
|
+
priceIdentifier: string;
|
|
308
|
+
price: BigNumber;
|
|
309
|
+
smoothedPrice: BigNumber;
|
|
310
|
+
minPrice: BigNumber;
|
|
311
|
+
maxPrice: BigNumber;
|
|
312
|
+
priceLastUpdateTimestampS: bigint;
|
|
313
|
+
availableAmount: BigNumber;
|
|
314
|
+
ctokenSupply: BigNumber;
|
|
315
|
+
borrowedAmount: BigNumber;
|
|
316
|
+
cumulativeBorrowRate: BigNumber;
|
|
317
|
+
interestLastUpdateTimestampS: bigint;
|
|
318
|
+
unclaimedSpreadFees: BigNumber;
|
|
319
|
+
attributedBorrowValue: BigNumber;
|
|
320
|
+
depositsPoolRewardManager: {
|
|
321
|
+
$typeName: string;
|
|
322
|
+
id: string;
|
|
323
|
+
totalShares: bigint;
|
|
324
|
+
poolRewards: {
|
|
325
|
+
$typeName: string;
|
|
326
|
+
id: string;
|
|
327
|
+
poolRewardManagerId: string;
|
|
328
|
+
coinType: string;
|
|
329
|
+
startTimeMs: number;
|
|
330
|
+
endTimeMs: number;
|
|
331
|
+
totalRewards: BigNumber;
|
|
332
|
+
allocatedRewards: BigNumber;
|
|
333
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
334
|
+
numUserRewardManagers: bigint;
|
|
335
|
+
rewardIndex: number;
|
|
336
|
+
symbol: string;
|
|
337
|
+
mintDecimals: number;
|
|
338
|
+
}[];
|
|
339
|
+
lastUpdateTimeMs: bigint;
|
|
340
|
+
};
|
|
341
|
+
borrowsPoolRewardManager: {
|
|
342
|
+
$typeName: string;
|
|
343
|
+
id: string;
|
|
344
|
+
totalShares: bigint;
|
|
345
|
+
poolRewards: {
|
|
346
|
+
$typeName: string;
|
|
347
|
+
id: string;
|
|
348
|
+
poolRewardManagerId: string;
|
|
349
|
+
coinType: string;
|
|
350
|
+
startTimeMs: number;
|
|
351
|
+
endTimeMs: number;
|
|
352
|
+
totalRewards: BigNumber;
|
|
353
|
+
allocatedRewards: BigNumber;
|
|
354
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
355
|
+
numUserRewardManagers: bigint;
|
|
356
|
+
rewardIndex: number;
|
|
357
|
+
symbol: string;
|
|
358
|
+
mintDecimals: number;
|
|
359
|
+
}[];
|
|
360
|
+
lastUpdateTimeMs: bigint;
|
|
361
|
+
};
|
|
362
|
+
availableAmountUsd: BigNumber;
|
|
363
|
+
borrowedAmountUsd: BigNumber;
|
|
364
|
+
depositedAmount: BigNumber;
|
|
365
|
+
depositedAmountUsd: BigNumber;
|
|
366
|
+
cTokenExchangeRate: BigNumber;
|
|
367
|
+
borrowAprPercent: BigNumber;
|
|
368
|
+
depositAprPercent: BigNumber;
|
|
369
|
+
utilizationPercent: BigNumber;
|
|
370
|
+
token: {
|
|
371
|
+
decimals: number;
|
|
372
|
+
description: string;
|
|
373
|
+
iconUrl?: string | null;
|
|
374
|
+
id?: string | null;
|
|
375
|
+
name: string;
|
|
376
|
+
symbol: string;
|
|
377
|
+
coinType: string;
|
|
378
|
+
};
|
|
379
|
+
symbol: string;
|
|
380
|
+
name: string;
|
|
381
|
+
iconUrl: string | null | undefined;
|
|
382
|
+
description: string;
|
|
383
|
+
totalDeposits: BigNumber;
|
|
384
|
+
};
|
|
385
|
+
original: import("../_generated/suilend/obligation/structs").Obligation<string>;
|
|
386
|
+
}[];
|
|
387
|
+
borrows: {
|
|
388
|
+
coinType: string;
|
|
389
|
+
reserveArrayIndex: bigint;
|
|
390
|
+
userRewardManagerIndex: number;
|
|
391
|
+
userRewardManager: import("../_generated/suilend/liquidity-mining/structs").UserRewardManager;
|
|
392
|
+
borrowedAmount: BigNumber;
|
|
393
|
+
borrowedAmountUsd: BigNumber;
|
|
394
|
+
reserve: {
|
|
395
|
+
config: {
|
|
396
|
+
$typeName: string;
|
|
397
|
+
openLtvPct: number;
|
|
398
|
+
closeLtvPct: number;
|
|
399
|
+
maxCloseLtvPct: number;
|
|
400
|
+
borrowWeightBps: BigNumber;
|
|
401
|
+
depositLimit: BigNumber;
|
|
402
|
+
borrowLimit: BigNumber;
|
|
403
|
+
liquidationBonusBps: number;
|
|
404
|
+
maxLiquidationBonusBps: number;
|
|
405
|
+
depositLimitUsd: BigNumber;
|
|
406
|
+
borrowLimitUsd: BigNumber;
|
|
407
|
+
borrowFeeBps: number;
|
|
408
|
+
spreadFeeBps: number;
|
|
409
|
+
protocolLiquidationFeeBps: number;
|
|
410
|
+
isolated: boolean;
|
|
411
|
+
openAttributedBorrowLimitUsd: number;
|
|
412
|
+
closeAttributedBorrowLimitUsd: number;
|
|
413
|
+
interestRate: {
|
|
414
|
+
id: string;
|
|
415
|
+
utilPercent: BigNumber;
|
|
416
|
+
aprPercent: BigNumber;
|
|
417
|
+
}[];
|
|
418
|
+
};
|
|
419
|
+
$typeName: string;
|
|
420
|
+
id: string;
|
|
421
|
+
arrayIndex: bigint;
|
|
422
|
+
coinType: string;
|
|
423
|
+
mintDecimals: number;
|
|
424
|
+
priceIdentifier: string;
|
|
425
|
+
price: BigNumber;
|
|
426
|
+
smoothedPrice: BigNumber;
|
|
427
|
+
minPrice: BigNumber;
|
|
428
|
+
maxPrice: BigNumber;
|
|
429
|
+
priceLastUpdateTimestampS: bigint;
|
|
430
|
+
availableAmount: BigNumber;
|
|
431
|
+
ctokenSupply: BigNumber;
|
|
432
|
+
borrowedAmount: BigNumber;
|
|
433
|
+
cumulativeBorrowRate: BigNumber;
|
|
434
|
+
interestLastUpdateTimestampS: bigint;
|
|
435
|
+
unclaimedSpreadFees: BigNumber;
|
|
436
|
+
attributedBorrowValue: BigNumber;
|
|
437
|
+
depositsPoolRewardManager: {
|
|
438
|
+
$typeName: string;
|
|
439
|
+
id: string;
|
|
440
|
+
totalShares: bigint;
|
|
441
|
+
poolRewards: {
|
|
442
|
+
$typeName: string;
|
|
443
|
+
id: string;
|
|
444
|
+
poolRewardManagerId: string;
|
|
445
|
+
coinType: string;
|
|
446
|
+
startTimeMs: number;
|
|
447
|
+
endTimeMs: number;
|
|
448
|
+
totalRewards: BigNumber;
|
|
449
|
+
allocatedRewards: BigNumber;
|
|
450
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
451
|
+
numUserRewardManagers: bigint;
|
|
452
|
+
rewardIndex: number;
|
|
453
|
+
symbol: string;
|
|
454
|
+
mintDecimals: number;
|
|
455
|
+
}[];
|
|
456
|
+
lastUpdateTimeMs: bigint;
|
|
457
|
+
};
|
|
458
|
+
borrowsPoolRewardManager: {
|
|
459
|
+
$typeName: string;
|
|
460
|
+
id: string;
|
|
461
|
+
totalShares: bigint;
|
|
462
|
+
poolRewards: {
|
|
463
|
+
$typeName: string;
|
|
464
|
+
id: string;
|
|
465
|
+
poolRewardManagerId: string;
|
|
466
|
+
coinType: string;
|
|
467
|
+
startTimeMs: number;
|
|
468
|
+
endTimeMs: number;
|
|
469
|
+
totalRewards: BigNumber;
|
|
470
|
+
allocatedRewards: BigNumber;
|
|
471
|
+
cumulativeRewardsPerShare: BigNumber;
|
|
472
|
+
numUserRewardManagers: bigint;
|
|
473
|
+
rewardIndex: number;
|
|
474
|
+
symbol: string;
|
|
475
|
+
mintDecimals: number;
|
|
476
|
+
}[];
|
|
477
|
+
lastUpdateTimeMs: bigint;
|
|
478
|
+
};
|
|
479
|
+
availableAmountUsd: BigNumber;
|
|
480
|
+
borrowedAmountUsd: BigNumber;
|
|
481
|
+
depositedAmount: BigNumber;
|
|
482
|
+
depositedAmountUsd: BigNumber;
|
|
483
|
+
cTokenExchangeRate: BigNumber;
|
|
484
|
+
borrowAprPercent: BigNumber;
|
|
485
|
+
depositAprPercent: BigNumber;
|
|
486
|
+
utilizationPercent: BigNumber;
|
|
487
|
+
token: {
|
|
488
|
+
decimals: number;
|
|
489
|
+
description: string;
|
|
490
|
+
iconUrl?: string | null;
|
|
491
|
+
id?: string | null;
|
|
492
|
+
name: string;
|
|
493
|
+
symbol: string;
|
|
494
|
+
coinType: string;
|
|
495
|
+
};
|
|
496
|
+
symbol: string;
|
|
497
|
+
name: string;
|
|
498
|
+
iconUrl: string | null | undefined;
|
|
499
|
+
description: string;
|
|
500
|
+
totalDeposits: BigNumber;
|
|
501
|
+
};
|
|
502
|
+
original: import("../_generated/suilend/obligation/structs").Obligation<string>;
|
|
503
|
+
}[];
|
|
504
|
+
weightedConservativeBorrowUtilizationPercent: BigNumber;
|
|
505
|
+
original: import("../_generated/suilend/obligation/structs").Obligation<string>;
|
|
506
|
+
totalSupplyUsd: BigNumber;
|
|
507
|
+
totalBorrowUsd: BigNumber;
|
|
508
|
+
totalWeightedBorrowUsd: BigNumber;
|
|
509
|
+
maxPriceTotalWeightedBorrowUsd: BigNumber;
|
|
510
|
+
borrowLimit: BigNumber;
|
|
511
|
+
minPriceBorrowLimit: BigNumber;
|
|
512
|
+
}[] | undefined;
|
|
513
|
+
}>;
|
|
514
|
+
export declare const initializeSuilendRewards: (reserveMap: Record<string, ParsedReserve>, rewardCoinTypes: string[], rewardCoinMetadataMap: Record<string, CoinMetadata>, obligations?: ParsedObligation[]) => Promise<{
|
|
515
|
+
rewardPriceMap: Record<string, BigNumber | undefined>;
|
|
516
|
+
rewardMap: import("./liquidityMining").RewardMap;
|
|
517
|
+
}>;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.initializeSuilendRewards = exports.initializeSuilend = exports.RESERVES_CUSTOM_ORDER = void 0;
|
|
49
|
+
const utils_1 = require("@mysten/sui/utils");
|
|
50
|
+
const pyth_sui_js_1 = require("@pythnetwork/pyth-sui-js");
|
|
51
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
52
|
+
const frontend_sui_1 = require("@suilend/frontend-sui");
|
|
53
|
+
const client_1 = require("../client");
|
|
54
|
+
const parsers_1 = require("../parsers");
|
|
55
|
+
const simulate = __importStar(require("../utils/simulate"));
|
|
56
|
+
const constants_1 = require("./constants");
|
|
57
|
+
const liquidityMining_1 = require("./liquidityMining");
|
|
58
|
+
exports.RESERVES_CUSTOM_ORDER = [
|
|
59
|
+
// Main assets
|
|
60
|
+
frontend_sui_1.NORMALIZED_sSUI_COINTYPE,
|
|
61
|
+
// Main assets - Ecosystem LSTs
|
|
62
|
+
frontend_sui_1.NORMALIZED_mSUI_COINTYPE,
|
|
63
|
+
frontend_sui_1.NORMALIZED_fudSUI_COINTYPE,
|
|
64
|
+
frontend_sui_1.NORMALIZED_kSUI_COINTYPE,
|
|
65
|
+
frontend_sui_1.NORMALIZED_trevinSUI_COINTYPE,
|
|
66
|
+
frontend_sui_1.NORMALIZED_upSUI_COINTYPE,
|
|
67
|
+
frontend_sui_1.NORMALIZED_SUI_COINTYPE,
|
|
68
|
+
frontend_sui_1.NORMALIZED_USDC_COINTYPE,
|
|
69
|
+
frontend_sui_1.NORMALIZED_suiUSDT_COINTYPE,
|
|
70
|
+
frontend_sui_1.NORMALIZED_wUSDT_COINTYPE,
|
|
71
|
+
frontend_sui_1.NORMALIZED_AUSD_COINTYPE,
|
|
72
|
+
frontend_sui_1.NORMALIZED_suiETH_COINTYPE,
|
|
73
|
+
frontend_sui_1.NORMALIZED_SOL_COINTYPE,
|
|
74
|
+
// Isolated assets
|
|
75
|
+
frontend_sui_1.NORMALIZED_SEND_COINTYPE,
|
|
76
|
+
frontend_sui_1.NORMALIZED_DEEP_COINTYPE,
|
|
77
|
+
frontend_sui_1.NORMALIZED_BLUE_COINTYPE, // Not listed
|
|
78
|
+
frontend_sui_1.NORMALIZED_NS_COINTYPE,
|
|
79
|
+
frontend_sui_1.NORMALIZED_BUCK_COINTYPE,
|
|
80
|
+
// Isolated assets - Memecoins
|
|
81
|
+
frontend_sui_1.NORMALIZED_FUD_COINTYPE,
|
|
82
|
+
frontend_sui_1.NORMALIZED_HIPPO_COINTYPE,
|
|
83
|
+
// Deprecated assets
|
|
84
|
+
frontend_sui_1.NORMALIZED_wUSDC_COINTYPE,
|
|
85
|
+
frontend_sui_1.NORMALIZED_WETH_COINTYPE,
|
|
86
|
+
];
|
|
87
|
+
const initializeSuilend = (suiClient, suilendClient, address) => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
+
const now = Math.floor(Date.now() / 1000);
|
|
89
|
+
const refreshedRawReserves = yield simulate.refreshReservePrice(suilendClient.lendingMarket.reserves.map((r) => simulate.compoundReserveInterest(r, now)), new pyth_sui_js_1.SuiPriceServiceConnection("https://hermes.pyth.network"));
|
|
90
|
+
const reserveCoinTypes = [];
|
|
91
|
+
const rewardCoinTypes = [];
|
|
92
|
+
refreshedRawReserves.forEach((r) => {
|
|
93
|
+
reserveCoinTypes.push((0, utils_1.normalizeStructTag)(r.coinType.name));
|
|
94
|
+
[
|
|
95
|
+
...r.depositsPoolRewardManager.poolRewards,
|
|
96
|
+
...r.borrowsPoolRewardManager.poolRewards,
|
|
97
|
+
].forEach((pr) => {
|
|
98
|
+
if (!pr)
|
|
99
|
+
return;
|
|
100
|
+
rewardCoinTypes.push((0, utils_1.normalizeStructTag)(pr.coinType.name));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
const uniqueReservesCoinTypes = Array.from(new Set(reserveCoinTypes));
|
|
104
|
+
const uniqueRewardsCoinTypes = Array.from(new Set(rewardCoinTypes));
|
|
105
|
+
const reserveCoinMetadataMap = yield (0, frontend_sui_1.getCoinMetadataMap)(suiClient, uniqueReservesCoinTypes);
|
|
106
|
+
const rewardCoinMetadataMap = yield (0, frontend_sui_1.getCoinMetadataMap)(suiClient, uniqueRewardsCoinTypes);
|
|
107
|
+
const coinMetadataMap = Object.assign(Object.assign({}, reserveCoinMetadataMap), rewardCoinMetadataMap);
|
|
108
|
+
const reservesWithTemporaryPythPriceFeeds = refreshedRawReserves.filter((r) => frontend_sui_1.TEMPORARY_PYTH_PRICE_FEED_COINTYPES.includes((0, utils_1.normalizeStructTag)(r.coinType.name)));
|
|
109
|
+
for (const reserve of reservesWithTemporaryPythPriceFeeds) {
|
|
110
|
+
const birdeyePrice = yield (0, frontend_sui_1.getPrice)((0, utils_1.normalizeStructTag)(reserve.coinType.name));
|
|
111
|
+
if (birdeyePrice === undefined)
|
|
112
|
+
continue;
|
|
113
|
+
const parsedBirdeyePrice = BigInt(+new bignumber_js_1.default(birdeyePrice)
|
|
114
|
+
.times(constants_1.WAD)
|
|
115
|
+
.integerValue(bignumber_js_1.default.ROUND_DOWN));
|
|
116
|
+
reserve.price.value = parsedBirdeyePrice;
|
|
117
|
+
reserve.smoothedPrice.value = parsedBirdeyePrice;
|
|
118
|
+
}
|
|
119
|
+
const lendingMarket = (0, parsers_1.parseLendingMarket)(suilendClient.lendingMarket, refreshedRawReserves, coinMetadataMap, now);
|
|
120
|
+
lendingMarket.reserves = lendingMarket.reserves.slice().sort((a, b) => {
|
|
121
|
+
const aCustomOrderIndex = exports.RESERVES_CUSTOM_ORDER.indexOf(a.coinType);
|
|
122
|
+
const bCustomOrderIndex = exports.RESERVES_CUSTOM_ORDER.indexOf(b.coinType);
|
|
123
|
+
if (aCustomOrderIndex > -1 && bCustomOrderIndex > -1)
|
|
124
|
+
return aCustomOrderIndex - bCustomOrderIndex;
|
|
125
|
+
else if (aCustomOrderIndex === -1 && bCustomOrderIndex === -1)
|
|
126
|
+
return 0;
|
|
127
|
+
else
|
|
128
|
+
return aCustomOrderIndex > -1 ? -1 : 1;
|
|
129
|
+
});
|
|
130
|
+
const reserveMap = lendingMarket.reserves.reduce((acc, reserve) => (Object.assign(Object.assign({}, acc), { [reserve.coinType]: reserve })), {});
|
|
131
|
+
// Obligations
|
|
132
|
+
let obligationOwnerCaps, obligations;
|
|
133
|
+
if (address) {
|
|
134
|
+
obligationOwnerCaps = yield client_1.SuilendClient.getObligationOwnerCaps(address, suilendClient.lendingMarket.$typeArgs, suiClient);
|
|
135
|
+
obligations = (yield Promise.all(obligationOwnerCaps.map((ownerCap) => client_1.SuilendClient.getObligation(ownerCap.obligationId, suilendClient.lendingMarket.$typeArgs, suiClient))))
|
|
136
|
+
.map((rawObligation) => simulate.refreshObligation(rawObligation, refreshedRawReserves))
|
|
137
|
+
.map((refreshedObligation) => (0, parsers_1.parseObligation)(refreshedObligation, reserveMap))
|
|
138
|
+
.sort((a, b) => +b.netValueUsd.minus(a.netValueUsd));
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
lendingMarket,
|
|
142
|
+
refreshedRawReserves,
|
|
143
|
+
reserveMap,
|
|
144
|
+
reserveCoinTypes: uniqueReservesCoinTypes,
|
|
145
|
+
rewardCoinTypes: uniqueRewardsCoinTypes,
|
|
146
|
+
reserveCoinMetadataMap,
|
|
147
|
+
rewardCoinMetadataMap,
|
|
148
|
+
coinMetadataMap,
|
|
149
|
+
obligationOwnerCaps,
|
|
150
|
+
obligations,
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
exports.initializeSuilend = initializeSuilend;
|
|
154
|
+
const initializeSuilendRewards = (reserveMap, rewardCoinTypes, rewardCoinMetadataMap, obligations) => __awaiter(void 0, void 0, void 0, function* () {
|
|
155
|
+
const rewardPriceMap = Object.entries(reserveMap).reduce((acc, [coinType, reserve]) => (Object.assign(Object.assign({}, acc), { [coinType]: reserve.price })), {});
|
|
156
|
+
rewardPriceMap[frontend_sui_1.NORMALIZED_TREATS_COINTYPE] = new bignumber_js_1.default(0.1);
|
|
157
|
+
const reservelessRewardCoinTypes = rewardCoinTypes.filter((coinType) => !((0, frontend_sui_1.isSendPoints)(coinType) || coinType === frontend_sui_1.NORMALIZED_MAYA_COINTYPE) &&
|
|
158
|
+
!rewardPriceMap[coinType]);
|
|
159
|
+
const reservelessRewardBirdeyePrices = yield Promise.all(reservelessRewardCoinTypes.map((coinType) => (0, frontend_sui_1.getPrice)(coinType)));
|
|
160
|
+
for (let i = 0; i < reservelessRewardCoinTypes.length; i++) {
|
|
161
|
+
const birdeyePrice = reservelessRewardBirdeyePrices[i];
|
|
162
|
+
if (birdeyePrice === undefined)
|
|
163
|
+
continue;
|
|
164
|
+
rewardPriceMap[reservelessRewardCoinTypes[i]] = new bignumber_js_1.default(birdeyePrice);
|
|
165
|
+
}
|
|
166
|
+
const rewardMap = (0, liquidityMining_1.formatRewards)(reserveMap, rewardCoinMetadataMap, rewardPriceMap, obligations);
|
|
167
|
+
return { rewardPriceMap, rewardMap };
|
|
168
|
+
});
|
|
169
|
+
exports.initializeSuilendRewards = initializeSuilendRewards;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CoinMetadata } from "@mysten/sui/client";
|
|
2
|
+
import BigNumber from "bignumber.js";
|
|
3
|
+
import { ParsedObligation, ParsedReserve } from "../parsers";
|
|
4
|
+
import { Side } from "./types";
|
|
5
|
+
export type RewardMap = {
|
|
6
|
+
[coinType: string]: {
|
|
7
|
+
deposit: RewardSummary[];
|
|
8
|
+
borrow: RewardSummary[];
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
type ObligationClaim = {
|
|
12
|
+
claimableAmount: BigNumber;
|
|
13
|
+
reserveArrayIndex: bigint;
|
|
14
|
+
};
|
|
15
|
+
export type RewardSummary = {
|
|
16
|
+
stats: {
|
|
17
|
+
id: string;
|
|
18
|
+
isActive: boolean;
|
|
19
|
+
rewardIndex: number;
|
|
20
|
+
reserve: ParsedReserve;
|
|
21
|
+
rewardCoinType: string;
|
|
22
|
+
mintDecimals: number;
|
|
23
|
+
price?: BigNumber;
|
|
24
|
+
symbol: string;
|
|
25
|
+
iconUrl?: string | null;
|
|
26
|
+
aprPercent?: BigNumber;
|
|
27
|
+
perDay?: BigNumber;
|
|
28
|
+
side: Side;
|
|
29
|
+
};
|
|
30
|
+
obligationClaims: {
|
|
31
|
+
[obligationId: string]: ObligationClaim;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export type AprRewardSummary = Omit<RewardSummary, "stats"> & {
|
|
35
|
+
stats: RewardSummary["stats"] & {
|
|
36
|
+
aprPercent: BigNumber;
|
|
37
|
+
price: BigNumber;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export type PerDayRewardSummary = Omit<RewardSummary, "stats"> & {
|
|
41
|
+
stats: RewardSummary["stats"] & {
|
|
42
|
+
perDay: BigNumber;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export declare const getDepositShare: (reserve: ParsedReserve, share: BigNumber) => BigNumber;
|
|
46
|
+
export declare const getBorrowShare: (reserve: ParsedReserve, share: BigNumber) => BigNumber;
|
|
47
|
+
export declare const formatRewards: (parsedReserveMap: Record<string, ParsedReserve>, coinMetadataMap: Record<string, CoinMetadata>, priceMap: Record<string, BigNumber | undefined>, obligations?: ParsedObligation[]) => RewardMap;
|
|
48
|
+
export declare const getFilteredRewards: (rewards: RewardSummary[]) => RewardSummary[];
|
|
49
|
+
export declare const getDedupedAprRewards: (filteredRewards: RewardSummary[]) => AprRewardSummary[];
|
|
50
|
+
export declare const getDedupedPerDayRewards: (filteredRewards: RewardSummary[]) => PerDayRewardSummary[];
|
|
51
|
+
export declare const getStakingYieldAprPercent: (side: Side, reserve: ParsedReserve, lstAprPercentMap: Record<string, BigNumber>) => BigNumber | undefined;
|
|
52
|
+
export declare const getTotalAprPercent: (side: Side, aprPercent: BigNumber, filteredRewards: RewardSummary[], stakingYieldAprPercent?: BigNumber) => BigNumber;
|
|
53
|
+
export declare const getNetAprPercent: (obligation: ParsedObligation, rewardMap: RewardMap, lstAprPercentMap: Record<string, BigNumber>) => BigNumber;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,158 @@
|
|
|
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.getNetAprPercent = exports.getTotalAprPercent = exports.getStakingYieldAprPercent = exports.getDedupedPerDayRewards = exports.getDedupedAprRewards = exports.getFilteredRewards = exports.formatRewards = exports.getBorrowShare = exports.getDepositShare = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
const getDepositShare = (reserve, share) => share.div(10 ** reserve.mintDecimals).times(reserve.cTokenExchangeRate);
|
|
12
|
+
exports.getDepositShare = getDepositShare;
|
|
13
|
+
const getDepositShareUsd = (reserve, share) => (0, exports.getDepositShare)(reserve, share).times(reserve.price);
|
|
14
|
+
const getBorrowShare = (reserve, share) => share.div(10 ** reserve.mintDecimals).times(reserve.cumulativeBorrowRate);
|
|
15
|
+
exports.getBorrowShare = getBorrowShare;
|
|
16
|
+
const getBorrowShareUsd = (reserve, share) => (0, exports.getBorrowShare)(reserve, share).times(reserve.price);
|
|
17
|
+
const formatRewards = (parsedReserveMap, coinMetadataMap, priceMap, obligations) => {
|
|
18
|
+
const currentTime = new Date().getTime();
|
|
19
|
+
const rewardMap = {};
|
|
20
|
+
const getRewardSummary = (reserve, poolReward, side) => {
|
|
21
|
+
var _a;
|
|
22
|
+
const rewardCoinMetadata = coinMetadataMap[poolReward.coinType];
|
|
23
|
+
const rewardPrice = priceMap === null || priceMap === void 0 ? void 0 : priceMap[poolReward.coinType];
|
|
24
|
+
const isActive = currentTime >= poolReward.startTimeMs &&
|
|
25
|
+
currentTime < poolReward.endTimeMs;
|
|
26
|
+
const aprPercent = rewardPrice
|
|
27
|
+
? poolReward.totalRewards
|
|
28
|
+
.times(rewardPrice)
|
|
29
|
+
.times(new bignumber_js_1.default(constants_1.msPerYear).div(poolReward.endTimeMs - poolReward.startTimeMs))
|
|
30
|
+
.div(side === types_1.Side.DEPOSIT
|
|
31
|
+
? getDepositShareUsd(reserve, new bignumber_js_1.default(reserve.depositsPoolRewardManager.totalShares.toString()))
|
|
32
|
+
: getBorrowShareUsd(reserve, new bignumber_js_1.default(reserve.borrowsPoolRewardManager.totalShares.toString())))
|
|
33
|
+
.times(100)
|
|
34
|
+
: undefined;
|
|
35
|
+
const perDay = rewardPrice
|
|
36
|
+
? undefined
|
|
37
|
+
: poolReward.totalRewards
|
|
38
|
+
.times(new bignumber_js_1.default(constants_1.msPerYear).div(poolReward.endTimeMs - poolReward.startTimeMs))
|
|
39
|
+
.div(365)
|
|
40
|
+
.div(side === types_1.Side.DEPOSIT
|
|
41
|
+
? (0, exports.getDepositShare)(reserve, new bignumber_js_1.default(reserve.depositsPoolRewardManager.totalShares.toString()))
|
|
42
|
+
: (0, exports.getBorrowShare)(reserve, new bignumber_js_1.default(reserve.borrowsPoolRewardManager.totalShares.toString())));
|
|
43
|
+
return {
|
|
44
|
+
stats: {
|
|
45
|
+
id: poolReward.id,
|
|
46
|
+
isActive,
|
|
47
|
+
rewardIndex: poolReward.rewardIndex,
|
|
48
|
+
reserve,
|
|
49
|
+
rewardCoinType: poolReward.coinType,
|
|
50
|
+
mintDecimals: poolReward.mintDecimals,
|
|
51
|
+
price: rewardPrice,
|
|
52
|
+
symbol: rewardCoinMetadata.symbol,
|
|
53
|
+
iconUrl: rewardCoinMetadata.iconUrl,
|
|
54
|
+
aprPercent,
|
|
55
|
+
perDay,
|
|
56
|
+
side,
|
|
57
|
+
},
|
|
58
|
+
obligationClaims: Object.fromEntries((_a = obligations === null || obligations === void 0 ? void 0 : obligations.map((ob) => {
|
|
59
|
+
const claim = getObligationClaims(ob, poolReward, side === types_1.Side.DEPOSIT
|
|
60
|
+
? reserve.depositsPoolRewardManager.id
|
|
61
|
+
: reserve.borrowsPoolRewardManager.id, reserve.arrayIndex);
|
|
62
|
+
if (!claim) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return [ob.id, claim];
|
|
66
|
+
}).filter(Boolean)) !== null && _a !== void 0 ? _a : []),
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
Object.values(parsedReserveMap).forEach((reserve) => {
|
|
70
|
+
const depositRewards = reserve.depositsPoolRewardManager.poolRewards.map((poolReward) => getRewardSummary(reserve, poolReward, types_1.Side.DEPOSIT));
|
|
71
|
+
const borrowRewards = reserve.borrowsPoolRewardManager.poolRewards.map((poolReward) => getRewardSummary(reserve, poolReward, types_1.Side.BORROW));
|
|
72
|
+
rewardMap[reserve.coinType] = {
|
|
73
|
+
deposit: depositRewards,
|
|
74
|
+
borrow: borrowRewards,
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
return rewardMap;
|
|
78
|
+
};
|
|
79
|
+
exports.formatRewards = formatRewards;
|
|
80
|
+
const getObligationClaims = (obligation, poolReward, reservePoolManagerId, reserveArrayIndex) => {
|
|
81
|
+
const userRewardManager = obligation.original.userRewardManagers.find((urm) => urm.poolRewardManagerId === reservePoolManagerId);
|
|
82
|
+
if (!userRewardManager)
|
|
83
|
+
return;
|
|
84
|
+
const userReward = userRewardManager.rewards[poolReward.rewardIndex];
|
|
85
|
+
if (!userReward)
|
|
86
|
+
return;
|
|
87
|
+
return {
|
|
88
|
+
// TODO: earnedRewards is refreshed via simulate.ts to only show unclaimed rewards.
|
|
89
|
+
// Lifetime earned amount is not available right yet as a result.
|
|
90
|
+
claimableAmount: (userReward === null || userReward === void 0 ? void 0 : userReward.earnedRewards)
|
|
91
|
+
? new bignumber_js_1.default(userReward.earnedRewards.value.toString())
|
|
92
|
+
.div(constants_1.WAD)
|
|
93
|
+
.div(10 ** poolReward.mintDecimals)
|
|
94
|
+
: new bignumber_js_1.default(0),
|
|
95
|
+
reserveArrayIndex,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
const getFilteredRewards = (rewards) => rewards.filter((r) => r.stats.isActive);
|
|
99
|
+
exports.getFilteredRewards = getFilteredRewards;
|
|
100
|
+
const getDedupedAprRewards = (filteredRewards) => {
|
|
101
|
+
const aprRewards = filteredRewards.filter((r) => r.stats.aprPercent !== undefined);
|
|
102
|
+
const result = [];
|
|
103
|
+
for (const reward of aprRewards) {
|
|
104
|
+
const index = result.findIndex((r) => r.stats.rewardCoinType === reward.stats.rewardCoinType);
|
|
105
|
+
if (index > -1) {
|
|
106
|
+
result[index].stats.aprPercent = result[index].stats.aprPercent.plus(reward.stats.aprPercent);
|
|
107
|
+
}
|
|
108
|
+
else
|
|
109
|
+
result.push((0, lodash_1.cloneDeep)(reward));
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
};
|
|
113
|
+
exports.getDedupedAprRewards = getDedupedAprRewards;
|
|
114
|
+
const getDedupedPerDayRewards = (filteredRewards) => {
|
|
115
|
+
const perDayRewards = filteredRewards.filter((r) => r.stats.perDay !== undefined);
|
|
116
|
+
const result = [];
|
|
117
|
+
for (const reward of perDayRewards) {
|
|
118
|
+
const index = result.findIndex((r) => r.stats.rewardCoinType === reward.stats.rewardCoinType);
|
|
119
|
+
if (index > -1) {
|
|
120
|
+
result[index].stats.perDay = result[index].stats.perDay.plus(reward.stats.perDay);
|
|
121
|
+
}
|
|
122
|
+
else
|
|
123
|
+
result.push((0, lodash_1.cloneDeep)(reward));
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
};
|
|
127
|
+
exports.getDedupedPerDayRewards = getDedupedPerDayRewards;
|
|
128
|
+
const getRewardsAprPercent = (side, filteredRewards) => (0, exports.getDedupedAprRewards)(filteredRewards).reduce((acc, reward) => acc.plus(reward.stats.aprPercent.times(side === types_1.Side.DEPOSIT ? 1 : -1)), new bignumber_js_1.default(0));
|
|
129
|
+
const getStakingYieldAprPercent = (side, reserve, lstAprPercentMap) => (side === types_1.Side.DEPOSIT ? lstAprPercentMap[reserve.coinType] : undefined);
|
|
130
|
+
exports.getStakingYieldAprPercent = getStakingYieldAprPercent;
|
|
131
|
+
const getTotalAprPercent = (side, aprPercent, filteredRewards, stakingYieldAprPercent) => aprPercent
|
|
132
|
+
.plus(getRewardsAprPercent(side, filteredRewards))
|
|
133
|
+
.plus(stakingYieldAprPercent !== null && stakingYieldAprPercent !== void 0 ? stakingYieldAprPercent : 0);
|
|
134
|
+
exports.getTotalAprPercent = getTotalAprPercent;
|
|
135
|
+
const getNetAprPercent = (obligation, rewardMap, lstAprPercentMap) => {
|
|
136
|
+
const weightedDepositedAmountUsd_aprPercent = obligation.deposits.reduce((acc, deposit) => {
|
|
137
|
+
var _a;
|
|
138
|
+
const weightedDepositedAmountUsd_baseAprPercent = deposit.reserve.depositAprPercent.times(deposit.depositedAmountUsd);
|
|
139
|
+
const weightedDepositedAmountUsd_stakingYieldAprPercent = new bignumber_js_1.default((_a = (0, exports.getStakingYieldAprPercent)(types_1.Side.DEPOSIT, deposit.reserve, lstAprPercentMap)) !== null && _a !== void 0 ? _a : 0).times(deposit.depositedAmountUsd);
|
|
140
|
+
const weightedDepositedAmountUsd_rewardsAprPercent = getRewardsAprPercent(types_1.Side.DEPOSIT, (0, exports.getFilteredRewards)(rewardMap[deposit.reserve.coinType].deposit)).times(getDepositShareUsd(deposit.reserve, new bignumber_js_1.default(deposit.userRewardManager.share.toString())));
|
|
141
|
+
return acc
|
|
142
|
+
.plus(weightedDepositedAmountUsd_baseAprPercent)
|
|
143
|
+
.plus(weightedDepositedAmountUsd_stakingYieldAprPercent)
|
|
144
|
+
.plus(weightedDepositedAmountUsd_rewardsAprPercent);
|
|
145
|
+
}, new bignumber_js_1.default(0));
|
|
146
|
+
const weightedBorrowedAmountUsd_aprPercent = obligation.borrows.reduce((acc, borrow) => {
|
|
147
|
+
const weightedBorrowedAmountUsd_baseAprPercent = borrow.reserve.borrowAprPercent.times(borrow.borrowedAmountUsd);
|
|
148
|
+
const weightedBorrowedAmountUsd_rewardsAprPercent = getRewardsAprPercent(types_1.Side.BORROW, (0, exports.getFilteredRewards)(rewardMap[borrow.reserve.coinType].borrow)).times(getBorrowShareUsd(borrow.reserve, new bignumber_js_1.default(borrow.userRewardManager.share.toString())));
|
|
149
|
+
return acc
|
|
150
|
+
.plus(weightedBorrowedAmountUsd_baseAprPercent)
|
|
151
|
+
.plus(weightedBorrowedAmountUsd_rewardsAprPercent);
|
|
152
|
+
}, new bignumber_js_1.default(0));
|
|
153
|
+
const aprPercentWeightedNetValueUsd = weightedDepositedAmountUsd_aprPercent.minus(weightedBorrowedAmountUsd_aprPercent);
|
|
154
|
+
return !obligation.netValueUsd.eq(0)
|
|
155
|
+
? aprPercentWeightedNetValueUsd.div(obligation.netValueUsd)
|
|
156
|
+
: new bignumber_js_1.default(0);
|
|
157
|
+
};
|
|
158
|
+
exports.getNetAprPercent = getNetAprPercent;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Transaction, TransactionResult } from "@mysten/sui/transactions";
|
|
2
|
+
import { ObligationOwnerCap } from "../_generated/suilend/lending-market/structs";
|
|
3
|
+
import { SuilendClient } from "../client";
|
|
4
|
+
export declare const createObligationIfNoneExists: (suilendClient: SuilendClient, transaction: Transaction, obligationOwnerCap?: ObligationOwnerCap<string>) => {
|
|
5
|
+
obligationOwnerCapId: string | TransactionResult;
|
|
6
|
+
didCreate: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const sendObligationToUser: (obligationOwnerCapId: string | TransactionResult, address: string, transaction: Transaction) => void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendObligationToUser = exports.createObligationIfNoneExists = void 0;
|
|
4
|
+
const createObligationIfNoneExists = (suilendClient, transaction, obligationOwnerCap) => {
|
|
5
|
+
let obligationOwnerCapId;
|
|
6
|
+
let didCreate = false;
|
|
7
|
+
if (obligationOwnerCap)
|
|
8
|
+
obligationOwnerCapId = obligationOwnerCap.id;
|
|
9
|
+
else {
|
|
10
|
+
obligationOwnerCapId = suilendClient.createObligation(transaction);
|
|
11
|
+
didCreate = true;
|
|
12
|
+
}
|
|
13
|
+
return { obligationOwnerCapId, didCreate };
|
|
14
|
+
};
|
|
15
|
+
exports.createObligationIfNoneExists = createObligationIfNoneExists;
|
|
16
|
+
const sendObligationToUser = (obligationOwnerCapId, address, transaction) => {
|
|
17
|
+
transaction.transferObjects([obligationOwnerCapId], transaction.pure.address(address));
|
|
18
|
+
};
|
|
19
|
+
exports.sendObligationToUser = sendObligationToUser;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@suilend/sdk","version":"1.1.
|
|
1
|
+
{"name":"@suilend/sdk","version":"1.1.32","private":false,"description":"A TypeScript SDK for interacting with the Suilend program","author":"Suilend","license":"MIT","main":"./index.js","exports":{".":"./index.js","./client":"./client.js","./api/events":"./api/events.js","./api":"./api/index.js","./lib/constants":"./lib/constants.js","./lib":"./lib/index.js","./lib/initialize":"./lib/initialize.js","./lib/liquidityMining":"./lib/liquidityMining.js","./lib/transactions":"./lib/transactions.js","./lib/types":"./lib/types.js","./parsers/apiReserveAssetDataEvent":"./parsers/apiReserveAssetDataEvent.js","./parsers":"./parsers/index.js","./parsers/lendingMarket":"./parsers/lendingMarket.js","./parsers/obligation":"./parsers/obligation.js","./parsers/rateLimiter":"./parsers/rateLimiter.js","./parsers/reserve":"./parsers/reserve.js","./utils/events":"./utils/events.js","./utils":"./utils/index.js","./utils/obligation":"./utils/obligation.js","./utils/simulate":"./utils/simulate.js","./_generated/_framework/reified":"./_generated/_framework/reified.js","./_generated/_framework/util":"./_generated/_framework/util.js","./_generated/_framework/vector":"./_generated/_framework/vector.js","./_generated/suilend":"./_generated/suilend/index.js","./_generated/suilend/cell/structs":"./_generated/suilend/cell/structs.js","./_generated/suilend/decimal/structs":"./_generated/suilend/decimal/structs.js","./_generated/suilend/lending-market/functions":"./_generated/suilend/lending-market/functions.js","./_generated/suilend/lending-market/structs":"./_generated/suilend/lending-market/structs.js","./_generated/suilend/lending-market-registry/functions":"./_generated/suilend/lending-market-registry/functions.js","./_generated/suilend/liquidity-mining/structs":"./_generated/suilend/liquidity-mining/structs.js","./_generated/suilend/obligation/structs":"./_generated/suilend/obligation/structs.js","./_generated/suilend/rate-limiter/functions":"./_generated/suilend/rate-limiter/functions.js","./_generated/suilend/rate-limiter/structs":"./_generated/suilend/rate-limiter/structs.js","./_generated/suilend/reserve/structs":"./_generated/suilend/reserve/structs.js","./_generated/suilend/reserve-config/functions":"./_generated/suilend/reserve-config/functions.js","./_generated/suilend/reserve-config/structs":"./_generated/suilend/reserve-config/structs.js","./_generated/_dependencies/source/0x1":"./_generated/_dependencies/source/0x1/index.js","./_generated/_dependencies/source/0x2":"./_generated/_dependencies/source/0x2/index.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.js","./_generated/_dependencies/source/0x1/ascii/structs":"./_generated/_dependencies/source/0x1/ascii/structs.js","./_generated/_dependencies/source/0x1/option/structs":"./_generated/_dependencies/source/0x1/option/structs.js","./_generated/_dependencies/source/0x1/type-name/structs":"./_generated/_dependencies/source/0x1/type-name/structs.js","./_generated/_dependencies/source/0x2/bag/structs":"./_generated/_dependencies/source/0x2/bag/structs.js","./_generated/_dependencies/source/0x2/balance/structs":"./_generated/_dependencies/source/0x2/balance/structs.js","./_generated/_dependencies/source/0x2/object/structs":"./_generated/_dependencies/source/0x2/object/structs.js","./_generated/_dependencies/source/0x2/object-table/structs":"./_generated/_dependencies/source/0x2/object-table/structs.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/i64/structs":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/i64/structs.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price/structs":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price/structs.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-feed/structs":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-feed/structs.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.js","./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-info/structs":"./_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-info/structs.js"},"types":"./index.js","scripts":{"build":"rm -rf ./dist && bun tsc","eslint":"eslint --fix \"./src/**/*.ts\"","prettier":"prettier --write \"./src/**/*\"","lint":"bun eslint && bun prettier && bun tsc --noEmit","release":"bun run build && bun ts-node ./release.ts && cd ./dist && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/solendprotocol/suilend-public.git"},"bugs":{"url":"https://github.com/solendprotocol/suilend-public/issues"},"dependencies":{"@mysten/bcs":"1.2.1","@mysten/sui":"1.20.0","@pythnetwork/pyth-sui-js":"^2.1.0","@suilend/frontend-sui":"^0.2.32","bignumber.js":"^9.1.2","p-limit":"3.1.0","uuid":"^11.0.3"},"devDependencies":{"ts-node":"^10.9.2"}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BigNumber from "bignumber.js";
|
|
2
|
-
import { ApiReserveAssetDataEvent, DownsampledApiReserveAssetDataEvent } from "../types";
|
|
2
|
+
import { ApiReserveAssetDataEvent, DownsampledApiReserveAssetDataEvent } from "../lib/types";
|
|
3
3
|
import { ParsedReserve } from "./reserve";
|
|
4
4
|
export type ParsedReserveAssetDataEvent = ReturnType<typeof parseReserveAssetDataEvent>;
|
|
5
5
|
export declare const parseReserveAssetDataEvent: (event: ApiReserveAssetDataEvent, reserve: ParsedReserve) => {
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.parseDownsampledApiReserveAssetDataEvent = exports.parseReserveAssetDataEvent = void 0;
|
|
7
7
|
const utils_1 = require("@mysten/sui/utils");
|
|
8
8
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
-
const constants_1 = require("../constants");
|
|
9
|
+
const constants_1 = require("../lib/constants");
|
|
10
10
|
const parseReserveAssetDataEvent = (event, reserve) => {
|
|
11
11
|
const availableAmount = new bignumber_js_1.default(event.availableAmount)
|
|
12
12
|
.div(constants_1.WAD)
|
package/parsers/obligation.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.parseObligation = void 0;
|
|
7
7
|
const utils_1 = require("@mysten/sui/utils");
|
|
8
8
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
-
const constants_1 = require("../constants");
|
|
9
|
+
const constants_1 = require("../lib/constants");
|
|
10
10
|
const parseObligation = (obligation, parsedReserveMap) => {
|
|
11
11
|
let totalDepositedAmountUsd = new bignumber_js_1.default(0);
|
|
12
12
|
let totalBorrowedAmountUsd = new bignumber_js_1.default(0);
|
package/parsers/rateLimiter.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.parseRateLimiterConfig = exports.parseRateLimiter = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
-
const constants_1 = require("../constants");
|
|
8
|
+
const constants_1 = require("../lib/constants");
|
|
9
9
|
const parseRateLimiter = (rateLimiter, currentTime) => {
|
|
10
10
|
const config = (0, exports.parseRateLimiterConfig)(rateLimiter);
|
|
11
11
|
const $typeName = rateLimiter.$typeName;
|
package/parsers/reserve.js
CHANGED
|
@@ -40,7 +40,7 @@ exports.parsePoolReward = exports.parsePoolRewardManager = exports.parseReserveC
|
|
|
40
40
|
const utils_1 = require("@mysten/sui/utils");
|
|
41
41
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
42
42
|
const uuid_1 = require("uuid");
|
|
43
|
-
const constants_1 = require("../constants");
|
|
43
|
+
const constants_1 = require("../lib/constants");
|
|
44
44
|
const utils_2 = require("../utils");
|
|
45
45
|
const simulate = __importStar(require("../utils/simulate"));
|
|
46
46
|
const parseReserve = (reserve, coinMetadataMap) => {
|
package/utils/index.d.ts
CHANGED
|
@@ -6,5 +6,3 @@ export * from "./simulate";
|
|
|
6
6
|
export declare const toHexString: (bytes: number[]) => string;
|
|
7
7
|
export declare const reserveSort: (reserves: ParsedReserve[], aCoinType: string, bCoinType: string) => number;
|
|
8
8
|
export declare const linearlyInterpolate: (array: any[], xKey: string, yKey: string, _xValue: number | BigNumber) => BigNumber;
|
|
9
|
-
export declare const isCTokenCoinType: (coinType: string) => boolean;
|
|
10
|
-
export declare const extractCTokenCoinType: (coinType: string) => string;
|
package/utils/index.js
CHANGED
|
@@ -17,8 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.
|
|
21
|
-
const utils_1 = require("@mysten/sui/utils");
|
|
20
|
+
exports.linearlyInterpolate = exports.reserveSort = exports.toHexString = void 0;
|
|
22
21
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
23
22
|
__exportStar(require("./events"), exports);
|
|
24
23
|
__exportStar(require("./obligation"), exports);
|
|
@@ -56,11 +55,3 @@ const linearlyInterpolate = (array, xKey, yKey, _xValue) => {
|
|
|
56
55
|
return new bignumber_js_1.default(0);
|
|
57
56
|
};
|
|
58
57
|
exports.linearlyInterpolate = linearlyInterpolate;
|
|
59
|
-
const isCTokenCoinType = (coinType) => coinType.includes("::reserve::CToken<") && coinType.endsWith(">");
|
|
60
|
-
exports.isCTokenCoinType = isCTokenCoinType;
|
|
61
|
-
const extractCTokenCoinType = (coinType) => {
|
|
62
|
-
if (!(0, exports.isCTokenCoinType)(coinType))
|
|
63
|
-
throw new Error("Not a CToken");
|
|
64
|
-
return (0, utils_1.normalizeStructTag)(coinType.split("::reserve::CToken")[1].split(",")[1].slice(0, -1));
|
|
65
|
-
};
|
|
66
|
-
exports.extractCTokenCoinType = extractCTokenCoinType;
|
package/utils/simulate.js
CHANGED
|
@@ -19,7 +19,7 @@ const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
|
19
19
|
const uuid_1 = require("uuid");
|
|
20
20
|
const structs_1 = require("../_generated/suilend/decimal/structs");
|
|
21
21
|
const structs_2 = require("../_generated/suilend/liquidity-mining/structs");
|
|
22
|
-
const constants_1 = require("../constants");
|
|
22
|
+
const constants_1 = require("../lib/constants");
|
|
23
23
|
const utils_2 = require("../utils");
|
|
24
24
|
/**
|
|
25
25
|
* @deprecated since version 1.0.8. Use `calculateUtilizationPercent` instead.
|
|
File without changes
|
|
File without changes
|