@t2000/sdk 0.17.12 → 0.17.14
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/dist/adapters/index.cjs +40 -3
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.js +40 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/index.cjs +84 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +84 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/adapters/index.js
CHANGED
|
@@ -1234,6 +1234,26 @@ function computeRates(reserve) {
|
|
|
1234
1234
|
const depositAprPct = utilizationPct / 100 * (borrowAprPct / 100) * (1 - reserve.spreadFeeBps / 1e4) * 100;
|
|
1235
1235
|
return { borrowAprPct, depositAprPct };
|
|
1236
1236
|
}
|
|
1237
|
+
var MS_PER_YEAR = 365.25 * 24 * 3600 * 1e3;
|
|
1238
|
+
function computeDepositRewardApr(reserve, allReserves) {
|
|
1239
|
+
if (reserve.depositTotalShares <= 0 || reserve.price <= 0) return 0;
|
|
1240
|
+
const totalDepositValue = reserve.depositTotalShares / 10 ** reserve.mintDecimals * reserve.price;
|
|
1241
|
+
if (totalDepositValue <= 0) return 0;
|
|
1242
|
+
const priceMap = /* @__PURE__ */ new Map();
|
|
1243
|
+
for (const r of allReserves) {
|
|
1244
|
+
if (r.price > 0) priceMap.set(r.coinType, { price: r.price, decimals: r.mintDecimals });
|
|
1245
|
+
}
|
|
1246
|
+
let rewardApr = 0;
|
|
1247
|
+
for (const rw of reserve.depositPoolRewards) {
|
|
1248
|
+
const info = priceMap.get(rw.coinType);
|
|
1249
|
+
if (!info || info.price <= 0) continue;
|
|
1250
|
+
const durationMs = rw.endTimeMs - rw.startTimeMs;
|
|
1251
|
+
if (durationMs <= 0) continue;
|
|
1252
|
+
const annualTokens = rw.totalRewards / 10 ** info.decimals * (MS_PER_YEAR / durationMs);
|
|
1253
|
+
rewardApr += annualTokens * info.price / totalDepositValue * 100;
|
|
1254
|
+
}
|
|
1255
|
+
return rewardApr;
|
|
1256
|
+
}
|
|
1237
1257
|
function cTokenRatio(reserve) {
|
|
1238
1258
|
if (reserve.ctokenSupply === 0) return 1;
|
|
1239
1259
|
const totalSupply = reserve.availableAmount + reserve.borrowedAmountWad / WAD - reserve.unclaimedSpreadFeesWad / WAD;
|
|
@@ -1253,6 +1273,18 @@ function parseReserve(raw, index) {
|
|
|
1253
1273
|
const r = f(raw);
|
|
1254
1274
|
const coinTypeField = f(r.coin_type);
|
|
1255
1275
|
const config = f(f(r.config)?.element);
|
|
1276
|
+
const dMgr = f(r.deposits_pool_reward_manager);
|
|
1277
|
+
const rawRewards = Array.isArray(dMgr?.pool_rewards) ? dMgr.pool_rewards : [];
|
|
1278
|
+
const now = Date.now();
|
|
1279
|
+
const depositPoolRewards = rawRewards.filter((rw) => rw !== null).map((rw) => {
|
|
1280
|
+
const rwf = f(rw);
|
|
1281
|
+
return {
|
|
1282
|
+
coinType: str(f(rwf.coin_type)?.name),
|
|
1283
|
+
totalRewards: num(rwf.total_rewards),
|
|
1284
|
+
startTimeMs: num(rwf.start_time_ms),
|
|
1285
|
+
endTimeMs: num(rwf.end_time_ms)
|
|
1286
|
+
};
|
|
1287
|
+
}).filter((rw) => rw.endTimeMs > now && rw.totalRewards > 0);
|
|
1256
1288
|
return {
|
|
1257
1289
|
coinType: str(coinTypeField?.name),
|
|
1258
1290
|
mintDecimals: num(r.mint_decimals),
|
|
@@ -1266,7 +1298,10 @@ function parseReserve(raw, index) {
|
|
|
1266
1298
|
spreadFeeBps: num(config?.spread_fee_bps),
|
|
1267
1299
|
interestRateUtils: Array.isArray(config?.interest_rate_utils) ? config.interest_rate_utils.map(num) : [],
|
|
1268
1300
|
interestRateAprs: Array.isArray(config?.interest_rate_aprs) ? config.interest_rate_aprs.map(num) : [],
|
|
1269
|
-
arrayIndex: index
|
|
1301
|
+
arrayIndex: index,
|
|
1302
|
+
price: num(f(r.price)?.value) / WAD,
|
|
1303
|
+
depositTotalShares: num(dMgr?.total_shares),
|
|
1304
|
+
depositPoolRewards
|
|
1270
1305
|
};
|
|
1271
1306
|
}
|
|
1272
1307
|
function parseObligation(raw) {
|
|
@@ -1411,7 +1446,8 @@ var SuilendAdapter = class {
|
|
|
1411
1446
|
const reserve = this.findReserve(reserves, asset);
|
|
1412
1447
|
if (!reserve) throw new T2000Error("ASSET_NOT_SUPPORTED", `Suilend does not support ${asset}`);
|
|
1413
1448
|
const { borrowAprPct, depositAprPct } = computeRates(reserve);
|
|
1414
|
-
|
|
1449
|
+
const rewardApr = computeDepositRewardApr(reserve, reserves);
|
|
1450
|
+
return { asset, saveApy: depositAprPct + rewardApr, borrowApy: borrowAprPct };
|
|
1415
1451
|
}
|
|
1416
1452
|
async getPositions(address) {
|
|
1417
1453
|
const supplies = [];
|
|
@@ -1428,7 +1464,8 @@ var SuilendAdapter = class {
|
|
|
1428
1464
|
const ratio = cTokenRatio(reserve);
|
|
1429
1465
|
const amount = dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals;
|
|
1430
1466
|
const { depositAprPct } = computeRates(reserve);
|
|
1431
|
-
|
|
1467
|
+
const rewardApr = computeDepositRewardApr(reserve, reserves);
|
|
1468
|
+
supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct + rewardApr });
|
|
1432
1469
|
}
|
|
1433
1470
|
for (const bor of obligation.borrows) {
|
|
1434
1471
|
const reserve = reserves[bor.reserveIdx];
|