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