@t2000/sdk 0.17.13 → 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 +40 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +40 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1906,6 +1906,26 @@ function computeRates(reserve) {
|
|
|
1906
1906
|
const depositAprPct = utilizationPct / 100 * (borrowAprPct / 100) * (1 - reserve.spreadFeeBps / 1e4) * 100;
|
|
1907
1907
|
return { borrowAprPct, depositAprPct };
|
|
1908
1908
|
}
|
|
1909
|
+
var MS_PER_YEAR = 365.25 * 24 * 3600 * 1e3;
|
|
1910
|
+
function computeDepositRewardApr(reserve, allReserves) {
|
|
1911
|
+
if (reserve.depositTotalShares <= 0 || reserve.price <= 0) return 0;
|
|
1912
|
+
const totalDepositValue = reserve.depositTotalShares / 10 ** reserve.mintDecimals * reserve.price;
|
|
1913
|
+
if (totalDepositValue <= 0) return 0;
|
|
1914
|
+
const priceMap = /* @__PURE__ */ new Map();
|
|
1915
|
+
for (const r of allReserves) {
|
|
1916
|
+
if (r.price > 0) priceMap.set(r.coinType, { price: r.price, decimals: r.mintDecimals });
|
|
1917
|
+
}
|
|
1918
|
+
let rewardApr = 0;
|
|
1919
|
+
for (const rw of reserve.depositPoolRewards) {
|
|
1920
|
+
const info = priceMap.get(rw.coinType);
|
|
1921
|
+
if (!info || info.price <= 0) continue;
|
|
1922
|
+
const durationMs = rw.endTimeMs - rw.startTimeMs;
|
|
1923
|
+
if (durationMs <= 0) continue;
|
|
1924
|
+
const annualTokens = rw.totalRewards / 10 ** info.decimals * (MS_PER_YEAR / durationMs);
|
|
1925
|
+
rewardApr += annualTokens * info.price / totalDepositValue * 100;
|
|
1926
|
+
}
|
|
1927
|
+
return rewardApr;
|
|
1928
|
+
}
|
|
1909
1929
|
function cTokenRatio(reserve) {
|
|
1910
1930
|
if (reserve.ctokenSupply === 0) return 1;
|
|
1911
1931
|
const totalSupply = reserve.availableAmount + reserve.borrowedAmountWad / WAD - reserve.unclaimedSpreadFeesWad / WAD;
|
|
@@ -1925,6 +1945,18 @@ function parseReserve(raw, index) {
|
|
|
1925
1945
|
const r = f(raw);
|
|
1926
1946
|
const coinTypeField = f(r.coin_type);
|
|
1927
1947
|
const config = f(f(r.config)?.element);
|
|
1948
|
+
const dMgr = f(r.deposits_pool_reward_manager);
|
|
1949
|
+
const rawRewards = Array.isArray(dMgr?.pool_rewards) ? dMgr.pool_rewards : [];
|
|
1950
|
+
const now = Date.now();
|
|
1951
|
+
const depositPoolRewards = rawRewards.filter((rw) => rw !== null).map((rw) => {
|
|
1952
|
+
const rwf = f(rw);
|
|
1953
|
+
return {
|
|
1954
|
+
coinType: str(f(rwf.coin_type)?.name),
|
|
1955
|
+
totalRewards: num(rwf.total_rewards),
|
|
1956
|
+
startTimeMs: num(rwf.start_time_ms),
|
|
1957
|
+
endTimeMs: num(rwf.end_time_ms)
|
|
1958
|
+
};
|
|
1959
|
+
}).filter((rw) => rw.endTimeMs > now && rw.totalRewards > 0);
|
|
1928
1960
|
return {
|
|
1929
1961
|
coinType: str(coinTypeField?.name),
|
|
1930
1962
|
mintDecimals: num(r.mint_decimals),
|
|
@@ -1938,7 +1970,10 @@ function parseReserve(raw, index) {
|
|
|
1938
1970
|
spreadFeeBps: num(config?.spread_fee_bps),
|
|
1939
1971
|
interestRateUtils: Array.isArray(config?.interest_rate_utils) ? config.interest_rate_utils.map(num) : [],
|
|
1940
1972
|
interestRateAprs: Array.isArray(config?.interest_rate_aprs) ? config.interest_rate_aprs.map(num) : [],
|
|
1941
|
-
arrayIndex: index
|
|
1973
|
+
arrayIndex: index,
|
|
1974
|
+
price: num(f(r.price)?.value) / WAD,
|
|
1975
|
+
depositTotalShares: num(dMgr?.total_shares),
|
|
1976
|
+
depositPoolRewards
|
|
1942
1977
|
};
|
|
1943
1978
|
}
|
|
1944
1979
|
function parseObligation(raw) {
|
|
@@ -2083,7 +2118,8 @@ var SuilendAdapter = class {
|
|
|
2083
2118
|
const reserve = this.findReserve(reserves, asset);
|
|
2084
2119
|
if (!reserve) throw new T2000Error("ASSET_NOT_SUPPORTED", `Suilend does not support ${asset}`);
|
|
2085
2120
|
const { borrowAprPct, depositAprPct } = computeRates(reserve);
|
|
2086
|
-
|
|
2121
|
+
const rewardApr = computeDepositRewardApr(reserve, reserves);
|
|
2122
|
+
return { asset, saveApy: depositAprPct + rewardApr, borrowApy: borrowAprPct };
|
|
2087
2123
|
}
|
|
2088
2124
|
async getPositions(address) {
|
|
2089
2125
|
const supplies = [];
|
|
@@ -2100,7 +2136,8 @@ var SuilendAdapter = class {
|
|
|
2100
2136
|
const ratio = cTokenRatio(reserve);
|
|
2101
2137
|
const amount = dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals;
|
|
2102
2138
|
const { depositAprPct } = computeRates(reserve);
|
|
2103
|
-
|
|
2139
|
+
const rewardApr = computeDepositRewardApr(reserve, reserves);
|
|
2140
|
+
supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct + rewardApr });
|
|
2104
2141
|
}
|
|
2105
2142
|
for (const bor of obligation.borrows) {
|
|
2106
2143
|
const reserve = reserves[bor.reserveIdx];
|