@scallop-io/sui-scallop-sdk 0.44.4 → 0.44.6

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.
@@ -1,6 +1,7 @@
1
1
  export declare const API_BASE_URL = "https://sui.api.scallop.io";
2
2
  export declare const ADDRESSES_ID = "6462a088a7ace142bb6d7e9b";
3
3
  export declare const PROTOCOL_OBJECT_ID = "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
4
+ export declare const BORROW_FEE_PROTOCOL_ID = "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
4
5
  export declare const SUPPORT_POOLS: readonly ["eth", "btc", "usdc", "usdt", "sui", "apt", "sol", "cetus", "afsui", "hasui", "vsui"];
5
6
  export declare const SUPPORT_COLLATERALS: readonly ["eth", "btc", "usdc", "usdt", "sui", "apt", "sol", "cetus", "afsui", "hasui", "vsui"];
6
7
  export declare const SUPPORT_SPOOLS: readonly ["ssui", "susdc", "susdt"];
package/dist/index.js CHANGED
@@ -32,6 +32,7 @@ var src_exports = {};
32
32
  __export(src_exports, {
33
33
  ADDRESSES_ID: () => ADDRESSES_ID,
34
34
  API_BASE_URL: () => API_BASE_URL,
35
+ BORROW_FEE_PROTOCOL_ID: () => BORROW_FEE_PROTOCOL_ID,
35
36
  PROTOCOL_OBJECT_ID: () => PROTOCOL_OBJECT_ID,
36
37
  SUPPORT_BORROW_INCENTIVE_POOLS: () => SUPPORT_BORROW_INCENTIVE_POOLS,
37
38
  SUPPORT_BORROW_INCENTIVE_REWARDS: () => SUPPORT_BORROW_INCENTIVE_REWARDS,
@@ -63,6 +64,7 @@ module.exports = __toCommonJS(src_exports);
63
64
  var API_BASE_URL = "https://sui.api.scallop.io";
64
65
  var ADDRESSES_ID = "6462a088a7ace142bb6d7e9b";
65
66
  var PROTOCOL_OBJECT_ID = "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
67
+ var BORROW_FEE_PROTOCOL_ID = "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
66
68
  var SUPPORT_POOLS = [
67
69
  "eth",
68
70
  "btc",
@@ -208,6 +210,7 @@ var EMPTY_ADDRESSES = {
208
210
  core: {
209
211
  version: "",
210
212
  versionCap: "",
213
+ object: "",
211
214
  market: "",
212
215
  adminCap: "",
213
216
  coinDecimalsRegistry: "",
@@ -385,6 +388,7 @@ var EMPTY_ADDRESSES = {
385
388
  spool: {
386
389
  id: "",
387
390
  adminCap: "",
391
+ object: "",
388
392
  pools: {
389
393
  ssui: {
390
394
  id: "",
@@ -399,6 +403,7 @@ var EMPTY_ADDRESSES = {
399
403
  borrowIncentive: {
400
404
  id: "",
401
405
  adminCap: "",
406
+ object: "",
402
407
  query: "",
403
408
  incentivePools: "",
404
409
  incentiveAccounts: ""
@@ -748,6 +753,7 @@ var parseOriginMarketPoolData = (originMarketPoolData) => {
748
753
  reserveAmount: Number(originMarketPoolData.reserve),
749
754
  reserveFactor: Number(originMarketPoolData.reserveFactor.value) / 2 ** 32,
750
755
  borrowWeight: Number(originMarketPoolData.borrowWeight.value) / 2 ** 32,
756
+ borrowFee: Number(originMarketPoolData.borrowFeeRate.value) / 2 ** 32,
751
757
  // Parse origin data required for additional display.
752
758
  baseBorrowRate: Number(originMarketPoolData.baseBorrowRatePerSec.value) / 2 ** 32,
753
759
  borrowRateOnHighKink: Number(originMarketPoolData.borrowRateOnHighKink.value) / 2 ** 32,
@@ -918,12 +924,14 @@ var calculateSpoolData = (parsedSpoolData, stakeMarketCoinPrice, stakeMarketCoin
918
924
  var parseOriginSpoolRewardPoolData = (originSpoolRewardPoolData) => {
919
925
  return {
920
926
  claimedRewards: Number(originSpoolRewardPoolData.claimed_rewards),
921
- exchangeRateNumerator: Number(
922
- originSpoolRewardPoolData.exchange_rate_numerator
923
- ),
924
927
  exchangeRateDenominator: Number(
925
928
  originSpoolRewardPoolData.exchange_rate_denominator
926
929
  ),
930
+ exchangeRateNumerator: Number(
931
+ originSpoolRewardPoolData.exchange_rate_numerator
932
+ ),
933
+ feeRateDenominator: Number(originSpoolRewardPoolData.fee_rate_denominator),
934
+ feeRateNumerator: Number(originSpoolRewardPoolData.fee_rate_numerator),
927
935
  rewards: Number(originSpoolRewardPoolData.rewards),
928
936
  spoolId: String(originSpoolRewardPoolData.spool_id)
929
937
  };
@@ -948,6 +956,7 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
948
956
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
949
957
  const rewardValueForYear = (0, import_bignumber.default)(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
950
958
  const rewardRate = rewardValueForYear.dividedBy(calculatedSpoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedSpoolData.stakedValue).toNumber() : Infinity;
959
+ const rewardFeeRate = (0, import_bignumber.default)(parsedSpoolRewardPoolData.feeRateNumerator).dividedBy(parsedSpoolRewardPoolData.feeRateDenominator).toNumber();
951
960
  return {
952
961
  rewardApr: rewardRate,
953
962
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -959,7 +968,8 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
959
968
  claimedRewardAmount: claimedRewardAmount.toNumber(),
960
969
  claimedRewardCoin: claimedRewardCoin.toNumber(),
961
970
  claimedRewardValue: claimedRewardValue.toNumber(),
962
- rewardPerSec: rewardPerSec.toNumber()
971
+ rewardPerSec: rewardPerSec.toNumber(),
972
+ rewardFee: rewardFeeRate
963
973
  };
964
974
  };
965
975
  var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
@@ -1034,6 +1044,12 @@ var parseOriginBorrowIncentiveRewardPoolData = (originBorrowIncentiveRewardPoolD
1034
1044
  exchangeRateDenominator: Number(
1035
1045
  originBorrowIncentiveRewardPoolData.exchange_rate_denominator
1036
1046
  ),
1047
+ rewardsFeeRateNumerator: Number(
1048
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_numerator
1049
+ ),
1050
+ rewardsFeeRateDenominator: Number(
1051
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_denominator
1052
+ ),
1037
1053
  remainingRewards: Number(
1038
1054
  originBorrowIncentiveRewardPoolData.remaining_reward
1039
1055
  )
@@ -1063,6 +1079,9 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1063
1079
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
1064
1080
  const rewardValueForYear = (0, import_bignumber.default)(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
1065
1081
  const rewardRate = rewardValueForYear.dividedBy(calculatedBorrowIncentivePoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedBorrowIncentivePoolData.stakedValue).toNumber() : Infinity;
1082
+ const rewardFeeRate = (0, import_bignumber.default)(
1083
+ parsedBorrowIncentiveRewardPoolData.rewardsFeeRateNumerator
1084
+ ).dividedBy(parsedBorrowIncentiveRewardPoolData.rewardsFeeRateDenominator).toNumber();
1066
1085
  return {
1067
1086
  rewardApr: rewardRate,
1068
1087
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -1074,7 +1093,8 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1074
1093
  claimedRewardAmount: claimedRewardAmount.toNumber(),
1075
1094
  claimedRewardCoin: claimedRewardCoin.toNumber(),
1076
1095
  claimedRewardValue: claimedRewardValue.toNumber(),
1077
- rewardPerSec: rewardPerSec.toNumber()
1096
+ rewardPerSec: rewardPerSec.toNumber(),
1097
+ rewardFee: rewardFeeRate
1078
1098
  };
1079
1099
  };
1080
1100
  var parseOriginBorrowIncentiveAccountData = (originBorrowIncentiveAccountData) => {
@@ -1169,6 +1189,7 @@ var queryMarket = async (query) => {
1169
1189
  reserve: pool.reserve,
1170
1190
  reserveFactor: pool.reserveFactor,
1171
1191
  borrowWeight: pool.borrowWeight,
1192
+ borrowFeeRate: pool.borrowFeeRate,
1172
1193
  baseBorrowRatePerSec: pool.baseBorrowRatePerSec,
1173
1194
  borrowRateOnHighKink: pool.borrowRateOnHighKink,
1174
1195
  borrowRateOnMidKink: pool.borrowRateOnMidKink,
@@ -1192,6 +1213,7 @@ var queryMarket = async (query) => {
1192
1213
  midKink: parsedMarketPoolData.midKink,
1193
1214
  reserveFactor: parsedMarketPoolData.reserveFactor,
1194
1215
  borrowWeight: parsedMarketPoolData.borrowWeight,
1216
+ borrowFee: parsedMarketPoolData.borrowFee,
1195
1217
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1196
1218
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1197
1219
  ...calculatedMarketPoolData
@@ -1276,6 +1298,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1276
1298
  let balanceSheet;
1277
1299
  let borrowIndex;
1278
1300
  let interestModel;
1301
+ let borrowFeeRate;
1279
1302
  if (marketObject) {
1280
1303
  if (marketObject.content && "fields" in marketObject.content) {
1281
1304
  const fields = marketObject.content.fields;
@@ -1325,9 +1348,25 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1325
1348
  const dynamicFields = interestModelDynamicFieldObject.content.fields;
1326
1349
  interestModel = dynamicFields.value.fields;
1327
1350
  }
1351
+ const borrowFeeDynamicFieldObjectResponse = await query.suiKit.client().getDynamicFieldObject({
1352
+ parentId: marketId,
1353
+ name: {
1354
+ type: `${BORROW_FEE_PROTOCOL_ID}::market_dynamic_keys::BorrowFeeKey`,
1355
+ value: {
1356
+ type: {
1357
+ name: coinType.substring(2)
1358
+ }
1359
+ }
1360
+ }
1361
+ });
1362
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
1363
+ if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
1364
+ const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
1365
+ borrowFeeRate = dynamicFields.value.fields;
1366
+ }
1328
1367
  }
1329
1368
  }
1330
- if (balanceSheet && borrowIndex && interestModel) {
1369
+ if (balanceSheet && borrowIndex && interestModel && borrowFeeRate) {
1331
1370
  const parsedMarketPoolData = parseOriginMarketPoolData({
1332
1371
  type: interestModel.type.fields,
1333
1372
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -1341,6 +1380,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1341
1380
  reserve: balanceSheet.revenue,
1342
1381
  reserveFactor: interestModel.revenue_factor.fields,
1343
1382
  borrowWeight: interestModel.borrow_weight.fields,
1383
+ borrowFeeRate,
1344
1384
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
1345
1385
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
1346
1386
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -1365,6 +1405,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1365
1405
  midKink: parsedMarketPoolData.midKink,
1366
1406
  reserveFactor: parsedMarketPoolData.reserveFactor,
1367
1407
  borrowWeight: parsedMarketPoolData.borrowWeight,
1408
+ borrowFee: parsedMarketPoolData.borrowFee,
1368
1409
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1369
1410
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1370
1411
  ...calculatedMarketPoolData
@@ -1479,6 +1520,7 @@ var getMarketCollateral = async (query, collateralCoinName, marketObject, coinPr
1479
1520
  };
1480
1521
  var getObligations = async (query, ownerAddress) => {
1481
1522
  const owner = ownerAddress || query.suiKit.currentAddress();
1523
+ const protocolObjectId = query.address.get("core.object") || PROTOCOL_OBJECT_ID;
1482
1524
  const keyObjectsResponse = [];
1483
1525
  let hasNextPage = false;
1484
1526
  let nextCursor = null;
@@ -1486,7 +1528,7 @@ var getObligations = async (query, ownerAddress) => {
1486
1528
  const paginatedKeyObjectsResponse = await query.suiKit.client().getOwnedObjects({
1487
1529
  owner,
1488
1530
  filter: {
1489
- StructType: `${PROTOCOL_OBJECT_ID}::obligation::ObligationKey`
1531
+ StructType: `${protocolObjectId}::obligation::ObligationKey`
1490
1532
  },
1491
1533
  cursor: nextCursor
1492
1534
  });
@@ -1723,6 +1765,7 @@ var getSpools = async (query, stakeMarketCoinNames) => {
1723
1765
  var getSpool = async (query, marketCoinName, marketPool) => {
1724
1766
  const coinName = query.utils.parseCoinName(marketCoinName);
1725
1767
  marketPool = marketPool || await query.getMarketPool(coinName);
1768
+ const spoolPkgId = query.address.get(`spool.id`);
1726
1769
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
1727
1770
  const rewardPoolId = query.address.get(
1728
1771
  `spool.pools.${marketCoinName}.rewardPoolId`
@@ -1734,6 +1777,13 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1734
1777
  showContent: true
1735
1778
  }
1736
1779
  });
1780
+ const spoolRewardFeeDynamicFieldsResponse = await query.suiKit.client().getDynamicFieldObject({
1781
+ parentId: rewardPoolId,
1782
+ name: {
1783
+ type: `${spoolPkgId}::rewards_pool::RewardsPoolFeeKey`,
1784
+ value: { dummy_field: false }
1785
+ }
1786
+ });
1737
1787
  if (marketPool && spoolObjectResponse[0].data && spoolObjectResponse[1].data) {
1738
1788
  const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
1739
1789
  const coinPrices = await query.utils.getCoinPrices([
@@ -1742,19 +1792,20 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1742
1792
  ]);
1743
1793
  const spoolObject = spoolObjectResponse[0].data;
1744
1794
  const rewardPoolObject = spoolObjectResponse[1].data;
1795
+ const rewardFeeObject = spoolRewardFeeDynamicFieldsResponse.data;
1745
1796
  if (spoolObject.content && "fields" in spoolObject.content) {
1746
- const fields = spoolObject.content.fields;
1797
+ const spoolFields = spoolObject.content.fields;
1747
1798
  const parsedSpoolData = parseOriginSpoolData({
1748
- stakeType: fields.stake_type,
1749
- maxDistributedPoint: fields.max_distributed_point,
1750
- distributedPoint: fields.distributed_point,
1751
- distributedPointPerPeriod: fields.distributed_point_per_period,
1752
- pointDistributionTime: fields.point_distribution_time,
1753
- maxStake: fields.max_stakes,
1754
- stakes: fields.stakes,
1755
- index: fields.index,
1756
- createdAt: fields.created_at,
1757
- lastUpdate: fields.last_update
1799
+ stakeType: spoolFields.stake_type,
1800
+ maxDistributedPoint: spoolFields.max_distributed_point,
1801
+ distributedPoint: spoolFields.distributed_point,
1802
+ distributedPointPerPeriod: spoolFields.distributed_point_per_period,
1803
+ pointDistributionTime: spoolFields.point_distribution_time,
1804
+ maxStake: spoolFields.max_stakes,
1805
+ stakes: spoolFields.stakes,
1806
+ index: spoolFields.index,
1807
+ createdAt: spoolFields.created_at,
1808
+ lastUpdate: spoolFields.last_update
1758
1809
  });
1759
1810
  const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
1760
1811
  const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
@@ -1763,14 +1814,17 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1763
1814
  marketCoinPrice,
1764
1815
  marketCoinDecimal
1765
1816
  );
1766
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
1767
- const fields2 = rewardPoolObject.content.fields;
1817
+ if (rewardPoolObject.content && rewardFeeObject?.content && "fields" in rewardPoolObject.content && "fields" in rewardFeeObject.content) {
1818
+ const rewardPoolFields = rewardPoolObject.content.fields;
1819
+ const rewardFeeFields = rewardFeeObject.content.fields.value.fields;
1768
1820
  const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
1769
- claimed_rewards: fields2.claimed_rewards,
1770
- exchange_rate_numerator: fields2.exchange_rate_numerator,
1771
- exchange_rate_denominator: fields2.exchange_rate_denominator,
1772
- rewards: fields2.rewards,
1773
- spool_id: fields2.spool_id
1821
+ claimed_rewards: rewardPoolFields.claimed_rewards,
1822
+ exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
1823
+ exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
1824
+ fee_rate_numerator: rewardFeeFields.fee_rate_numerator,
1825
+ fee_rate_denominator: rewardFeeFields.fee_rate_denominator,
1826
+ rewards: rewardPoolFields.rewards,
1827
+ spool_id: rewardPoolFields.spool_id
1774
1828
  });
1775
1829
  const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
1776
1830
  const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
@@ -1807,8 +1861,8 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1807
1861
  };
1808
1862
  var getStakeAccounts = async (query, ownerAddress) => {
1809
1863
  const owner = ownerAddress || query.suiKit.currentAddress();
1810
- const spoolPkgId = query.address.get("spool.id");
1811
- const stakeAccountType = `${spoolPkgId}::spool_account::SpoolAccount`;
1864
+ const spoolObjectId = query.address.get("spool.object");
1865
+ const stakeAccountType = `${spoolObjectId}::spool_account::SpoolAccount`;
1812
1866
  const stakeObjectsResponse = [];
1813
1867
  let hasNextPage = false;
1814
1868
  let nextCursor = null;
@@ -1837,7 +1891,7 @@ var getStakeAccounts = async (query, ownerAddress) => {
1837
1891
  (types, stakeMarketCoinName) => {
1838
1892
  const stakeCoinName = query.utils.parseCoinName(stakeMarketCoinName);
1839
1893
  const marketCoinType = query.utils.parseMarketCoinType(stakeCoinName);
1840
- types[stakeMarketCoinName] = `${spoolPkgId}::spool_account::SpoolAccount<${marketCoinType}>`;
1894
+ types[stakeMarketCoinName] = `${spoolObjectId}::spool_account::SpoolAccount<${marketCoinType}>`;
1841
1895
  return types;
1842
1896
  },
1843
1897
  {}
@@ -1938,6 +1992,7 @@ var getStakePool = async (query, marketCoinName) => {
1938
1992
  return stakePool;
1939
1993
  };
1940
1994
  var getStakeRewardPool = async (query, marketCoinName) => {
1995
+ const spoolPkgId = query.address.get("spool.id");
1941
1996
  const poolId = query.address.get(
1942
1997
  `spool.pools.${marketCoinName}.rewardPoolId`
1943
1998
  );
@@ -1949,23 +2004,38 @@ var getStakeRewardPool = async (query, marketCoinName) => {
1949
2004
  showType: true
1950
2005
  }
1951
2006
  });
1952
- if (stakeRewardPoolObjectResponse.data) {
2007
+ const stakeRewardFeeDynamicFieldsResponse = await query.suiKit.client().getDynamicFieldObject({
2008
+ parentId: poolId,
2009
+ name: {
2010
+ type: `${spoolPkgId}::rewards_pool::RewardsPoolFeeKey`,
2011
+ value: { dummy_field: false }
2012
+ }
2013
+ });
2014
+ if (stakeRewardPoolObjectResponse.data && stakeRewardFeeDynamicFieldsResponse.data) {
1953
2015
  const stakeRewardPoolObject = stakeRewardPoolObjectResponse.data;
2016
+ const stakeRewardFeeDynamicFieldObject = stakeRewardFeeDynamicFieldsResponse.data;
1954
2017
  const id = stakeRewardPoolObject.objectId;
1955
2018
  const type = stakeRewardPoolObject.type;
1956
- if (stakeRewardPoolObject.content && "fields" in stakeRewardPoolObject.content) {
1957
- const fields = stakeRewardPoolObject.content.fields;
1958
- const stakePoolId = String(fields.spool_id);
1959
- const ratioNumerator = Number(fields.exchange_rate_numerator);
1960
- const ratioDenominator = Number(fields.exchange_rate_denominator);
1961
- const rewards = Number(fields.rewards);
1962
- const claimedRewards = Number(fields.claimed_rewards);
2019
+ if (stakeRewardPoolObject.content && stakeRewardFeeDynamicFieldObject.content && "fields" in stakeRewardPoolObject.content && "fields" in stakeRewardFeeDynamicFieldObject.content) {
2020
+ const rewardPoolFields = stakeRewardPoolObject.content.fields;
2021
+ const rewardFeeFields = stakeRewardFeeDynamicFieldObject.content.fields.value.fields;
2022
+ const stakePoolId = String(rewardPoolFields.spool_id);
2023
+ const ratioNumerator = Number(rewardPoolFields.exchange_rate_numerator);
2024
+ const ratioDenominator = Number(
2025
+ rewardPoolFields.exchange_rate_denominator
2026
+ );
2027
+ const rewards = Number(rewardPoolFields.rewards);
2028
+ const claimedRewards = Number(rewardPoolFields.claimed_rewards);
2029
+ const feeRateNumerator = Number(rewardFeeFields.fee_rate_numerator);
2030
+ const feeRateDenominator = Number(rewardFeeFields.fee_rate_denominator);
1963
2031
  stakeRewardPool = {
1964
2032
  id,
1965
2033
  type: (0, import_utils4.normalizeStructTag)(type),
1966
2034
  stakePoolId,
1967
2035
  ratioNumerator,
1968
2036
  ratioDenominator,
2037
+ feeRateNumerator,
2038
+ feeRateDenominator,
1969
2039
  rewards,
1970
2040
  claimedRewards
1971
2041
  };
@@ -2303,16 +2373,19 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2303
2373
  let totalBorrowedPools = 0;
2304
2374
  let totalBorrowedValue = (0, import_bignumber3.default)(0);
2305
2375
  let totalBorrowedValueWithWeight = (0, import_bignumber3.default)(0);
2306
- for (const collateral of obligationQuery.collaterals) {
2307
- const collateralCoinName = query.utils.parseCoinNameFromType(
2308
- collateral.type.name
2309
- );
2310
- const coinDecimal = query.utils.getCoinDecimal(collateralCoinName);
2311
- const marketCollateral = market.collaterals[collateralCoinName];
2312
- const coinPrice = coinPrices?.[collateralCoinName];
2313
- const coinAmount = coinAmounts?.[collateralCoinName] ?? 0;
2376
+ for (const assetCoinName of assetCoinNames) {
2377
+ const collateral = obligationQuery.collaterals.find((collateral2) => {
2378
+ const collateralCoinName = query.utils.parseCoinNameFromType(
2379
+ collateral2.type.name
2380
+ );
2381
+ return assetCoinName === collateralCoinName;
2382
+ });
2383
+ const coinDecimal = query.utils.getCoinDecimal(assetCoinName);
2384
+ const marketCollateral = market.collaterals[assetCoinName];
2385
+ const coinPrice = coinPrices?.[assetCoinName];
2386
+ const coinAmount = coinAmounts?.[assetCoinName] ?? 0;
2314
2387
  if (marketCollateral && coinPrice) {
2315
- const depositedAmount = (0, import_bignumber3.default)(collateral.amount);
2388
+ const depositedAmount = (0, import_bignumber3.default)(collateral?.amount ?? 0);
2316
2389
  const depositedCoin = depositedAmount.shiftedBy(-1 * coinDecimal);
2317
2390
  const depositedValue = depositedCoin.multipliedBy(coinPrice);
2318
2391
  const borrowCapacityValue = depositedValue.multipliedBy(
@@ -2333,10 +2406,10 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2333
2406
  if (depositedAmount.isGreaterThan(0)) {
2334
2407
  totalDepositedPools++;
2335
2408
  }
2336
- collaterals[collateralCoinName] = {
2337
- coinName: collateralCoinName,
2338
- coinType: collateral.type.name,
2339
- symbol: query.utils.parseSymbol(collateralCoinName),
2409
+ collaterals[assetCoinName] = {
2410
+ coinName: assetCoinName,
2411
+ coinType: query.utils.parseCoinType(assetCoinName),
2412
+ symbol: query.utils.parseSymbol(assetCoinName),
2340
2413
  coinDecimal,
2341
2414
  coinPrice,
2342
2415
  depositedAmount: depositedAmount.toNumber(),
@@ -2351,16 +2424,19 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2351
2424
  };
2352
2425
  }
2353
2426
  }
2354
- for (const debt of obligationQuery.debts) {
2355
- const poolCoinName = query.utils.parseCoinNameFromType(
2356
- debt.type.name
2357
- );
2358
- const coinDecimal = query.utils.getCoinDecimal(poolCoinName);
2359
- const marketPool = market.pools[poolCoinName];
2360
- const coinPrice = coinPrices?.[poolCoinName];
2427
+ for (const assetCoinName of assetCoinNames) {
2428
+ const debt = obligationQuery.debts.find((debt2) => {
2429
+ const poolCoinName = query.utils.parseCoinNameFromType(
2430
+ debt2.type.name
2431
+ );
2432
+ return assetCoinName === poolCoinName;
2433
+ });
2434
+ const coinDecimal = query.utils.getCoinDecimal(assetCoinName);
2435
+ const marketPool = market.pools[assetCoinName];
2436
+ const coinPrice = coinPrices?.[assetCoinName];
2361
2437
  if (marketPool && coinPrice) {
2362
- const increasedRate = marketPool.borrowIndex / Number(debt.borrowIndex) - 1;
2363
- const borrowedAmount = (0, import_bignumber3.default)(debt.amount);
2438
+ const increasedRate = debt?.borrowIndex ? marketPool.borrowIndex / Number(debt.borrowIndex) - 1 : 0;
2439
+ const borrowedAmount = (0, import_bignumber3.default)(debt?.amount ?? 0);
2364
2440
  const borrowedCoin = borrowedAmount.shiftedBy(-1 * coinDecimal);
2365
2441
  const availableRepayAmount = borrowedAmount.multipliedBy(
2366
2442
  increasedRate + 1
@@ -2379,17 +2455,17 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2379
2455
  if (borrowedAmount.isGreaterThan(0)) {
2380
2456
  totalBorrowedPools++;
2381
2457
  }
2382
- debts[poolCoinName] = {
2383
- coinName: poolCoinName,
2384
- coinType: debt.type.name,
2385
- symbol: query.utils.parseSymbol(poolCoinName),
2458
+ debts[assetCoinName] = {
2459
+ coinName: assetCoinName,
2460
+ coinType: query.utils.parseCoinType(assetCoinName),
2461
+ symbol: query.utils.parseSymbol(assetCoinName),
2386
2462
  coinDecimal,
2387
2463
  coinPrice,
2388
2464
  borrowedAmount: borrowedAmount.toNumber(),
2389
2465
  borrowedCoin: borrowedCoin.toNumber(),
2390
2466
  borrowedValue: borrowedValue.toNumber(),
2391
2467
  borrowedValueWithWeight: borrowedValueWithWeight.toNumber(),
2392
- borrowIndex: Number(debt.borrowIndex),
2468
+ borrowIndex: Number(debt?.borrowIndex ?? 0),
2393
2469
  availableBorrowAmount: 0,
2394
2470
  availableBorrowCoin: 0,
2395
2471
  availableRepayAmount: availableRepayAmount.toNumber(),
@@ -2840,10 +2916,11 @@ var ScallopQuery = class {
2840
2916
  * borrowing and obligation information for specific pool.
2841
2917
  *
2842
2918
  * @param obligationId - The obligation id.
2919
+ * @param ownerAddress - The owner address.
2843
2920
  * @return Borrowing and collateral information.
2844
2921
  */
2845
- async getObligationAccount(obligationId) {
2846
- return await getObligationAccount(this, obligationId);
2922
+ async getObligationAccount(obligationId, ownerAddress) {
2923
+ return await getObligationAccount(this, obligationId, ownerAddress);
2847
2924
  }
2848
2925
  /**
2849
2926
  * Get total value locked.
@@ -2963,8 +3040,9 @@ var ScallopUtils = class {
2963
3040
  * @return Market coin type.
2964
3041
  */
2965
3042
  parseMarketCoinType(coinName) {
3043
+ const protocolObjectId = this._address.get("core.object") || PROTOCOL_OBJECT_ID;
2966
3044
  const coinType = this.parseCoinType(coinName);
2967
- return `${PROTOCOL_OBJECT_ID}::reserve::MarketCoin<${coinType}>`;
3045
+ return `${protocolObjectId}::reserve::MarketCoin<${coinType}>`;
2968
3046
  }
2969
3047
  parseCoinNameFromType(coinType) {
2970
3048
  coinType = (0, import_utils9.normalizeStructTag)(coinType);
@@ -4659,6 +4737,7 @@ var Scallop = class {
4659
4737
  0 && (module.exports = {
4660
4738
  ADDRESSES_ID,
4661
4739
  API_BASE_URL,
4740
+ BORROW_FEE_PROTOCOL_ID,
4662
4741
  PROTOCOL_OBJECT_ID,
4663
4742
  SUPPORT_BORROW_INCENTIVE_POOLS,
4664
4743
  SUPPORT_BORROW_INCENTIVE_REWARDS,