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

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/index.mjs CHANGED
@@ -2,6 +2,7 @@
2
2
  var API_BASE_URL = "https://sui.api.scallop.io";
3
3
  var ADDRESSES_ID = "6462a088a7ace142bb6d7e9b";
4
4
  var PROTOCOL_OBJECT_ID = "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
5
+ var BORROW_FEE_PROTOCOL_ID = "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
5
6
  var SUPPORT_POOLS = [
6
7
  "eth",
7
8
  "btc",
@@ -147,6 +148,7 @@ var EMPTY_ADDRESSES = {
147
148
  core: {
148
149
  version: "",
149
150
  versionCap: "",
151
+ object: "",
150
152
  market: "",
151
153
  adminCap: "",
152
154
  coinDecimalsRegistry: "",
@@ -324,6 +326,7 @@ var EMPTY_ADDRESSES = {
324
326
  spool: {
325
327
  id: "",
326
328
  adminCap: "",
329
+ object: "",
327
330
  pools: {
328
331
  ssui: {
329
332
  id: "",
@@ -338,6 +341,7 @@ var EMPTY_ADDRESSES = {
338
341
  borrowIncentive: {
339
342
  id: "",
340
343
  adminCap: "",
344
+ object: "",
341
345
  query: "",
342
346
  incentivePools: "",
343
347
  incentiveAccounts: ""
@@ -687,6 +691,7 @@ var parseOriginMarketPoolData = (originMarketPoolData) => {
687
691
  reserveAmount: Number(originMarketPoolData.reserve),
688
692
  reserveFactor: Number(originMarketPoolData.reserveFactor.value) / 2 ** 32,
689
693
  borrowWeight: Number(originMarketPoolData.borrowWeight.value) / 2 ** 32,
694
+ borrowFee: Number(originMarketPoolData.borrowFeeRate.value) / 2 ** 32,
690
695
  // Parse origin data required for additional display.
691
696
  baseBorrowRate: Number(originMarketPoolData.baseBorrowRatePerSec.value) / 2 ** 32,
692
697
  borrowRateOnHighKink: Number(originMarketPoolData.borrowRateOnHighKink.value) / 2 ** 32,
@@ -857,12 +862,14 @@ var calculateSpoolData = (parsedSpoolData, stakeMarketCoinPrice, stakeMarketCoin
857
862
  var parseOriginSpoolRewardPoolData = (originSpoolRewardPoolData) => {
858
863
  return {
859
864
  claimedRewards: Number(originSpoolRewardPoolData.claimed_rewards),
860
- exchangeRateNumerator: Number(
861
- originSpoolRewardPoolData.exchange_rate_numerator
862
- ),
863
865
  exchangeRateDenominator: Number(
864
866
  originSpoolRewardPoolData.exchange_rate_denominator
865
867
  ),
868
+ exchangeRateNumerator: Number(
869
+ originSpoolRewardPoolData.exchange_rate_numerator
870
+ ),
871
+ feeRateDenominator: Number(originSpoolRewardPoolData.fee_rate_denominator),
872
+ feeRateNumerator: Number(originSpoolRewardPoolData.fee_rate_numerator),
866
873
  rewards: Number(originSpoolRewardPoolData.rewards),
867
874
  spoolId: String(originSpoolRewardPoolData.spool_id)
868
875
  };
@@ -887,6 +894,7 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
887
894
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
888
895
  const rewardValueForYear = BigNumber(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
889
896
  const rewardRate = rewardValueForYear.dividedBy(calculatedSpoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedSpoolData.stakedValue).toNumber() : Infinity;
897
+ const rewardFeeRate = BigNumber(parsedSpoolRewardPoolData.feeRateNumerator).dividedBy(parsedSpoolRewardPoolData.feeRateDenominator).toNumber();
890
898
  return {
891
899
  rewardApr: rewardRate,
892
900
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -898,7 +906,8 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
898
906
  claimedRewardAmount: claimedRewardAmount.toNumber(),
899
907
  claimedRewardCoin: claimedRewardCoin.toNumber(),
900
908
  claimedRewardValue: claimedRewardValue.toNumber(),
901
- rewardPerSec: rewardPerSec.toNumber()
909
+ rewardPerSec: rewardPerSec.toNumber(),
910
+ rewardFee: rewardFeeRate
902
911
  };
903
912
  };
904
913
  var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
@@ -973,6 +982,12 @@ var parseOriginBorrowIncentiveRewardPoolData = (originBorrowIncentiveRewardPoolD
973
982
  exchangeRateDenominator: Number(
974
983
  originBorrowIncentiveRewardPoolData.exchange_rate_denominator
975
984
  ),
985
+ rewardsFeeRateNumerator: Number(
986
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_numerator
987
+ ),
988
+ rewardsFeeRateDenominator: Number(
989
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_denominator
990
+ ),
976
991
  remainingRewards: Number(
977
992
  originBorrowIncentiveRewardPoolData.remaining_reward
978
993
  )
@@ -1002,6 +1017,9 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1002
1017
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
1003
1018
  const rewardValueForYear = BigNumber(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
1004
1019
  const rewardRate = rewardValueForYear.dividedBy(calculatedBorrowIncentivePoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedBorrowIncentivePoolData.stakedValue).toNumber() : Infinity;
1020
+ const rewardFeeRate = BigNumber(
1021
+ parsedBorrowIncentiveRewardPoolData.rewardsFeeRateNumerator
1022
+ ).dividedBy(parsedBorrowIncentiveRewardPoolData.rewardsFeeRateDenominator).toNumber();
1005
1023
  return {
1006
1024
  rewardApr: rewardRate,
1007
1025
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -1013,7 +1031,8 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1013
1031
  claimedRewardAmount: claimedRewardAmount.toNumber(),
1014
1032
  claimedRewardCoin: claimedRewardCoin.toNumber(),
1015
1033
  claimedRewardValue: claimedRewardValue.toNumber(),
1016
- rewardPerSec: rewardPerSec.toNumber()
1034
+ rewardPerSec: rewardPerSec.toNumber(),
1035
+ rewardFee: rewardFeeRate
1017
1036
  };
1018
1037
  };
1019
1038
  var parseOriginBorrowIncentiveAccountData = (originBorrowIncentiveAccountData) => {
@@ -1108,6 +1127,7 @@ var queryMarket = async (query) => {
1108
1127
  reserve: pool.reserve,
1109
1128
  reserveFactor: pool.reserveFactor,
1110
1129
  borrowWeight: pool.borrowWeight,
1130
+ borrowFeeRate: pool.borrowFeeRate,
1111
1131
  baseBorrowRatePerSec: pool.baseBorrowRatePerSec,
1112
1132
  borrowRateOnHighKink: pool.borrowRateOnHighKink,
1113
1133
  borrowRateOnMidKink: pool.borrowRateOnMidKink,
@@ -1131,6 +1151,7 @@ var queryMarket = async (query) => {
1131
1151
  midKink: parsedMarketPoolData.midKink,
1132
1152
  reserveFactor: parsedMarketPoolData.reserveFactor,
1133
1153
  borrowWeight: parsedMarketPoolData.borrowWeight,
1154
+ borrowFee: parsedMarketPoolData.borrowFee,
1134
1155
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1135
1156
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1136
1157
  ...calculatedMarketPoolData
@@ -1215,6 +1236,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1215
1236
  let balanceSheet;
1216
1237
  let borrowIndex;
1217
1238
  let interestModel;
1239
+ let borrowFeeRate;
1218
1240
  if (marketObject) {
1219
1241
  if (marketObject.content && "fields" in marketObject.content) {
1220
1242
  const fields = marketObject.content.fields;
@@ -1264,9 +1286,25 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1264
1286
  const dynamicFields = interestModelDynamicFieldObject.content.fields;
1265
1287
  interestModel = dynamicFields.value.fields;
1266
1288
  }
1289
+ const borrowFeeDynamicFieldObjectResponse = await query.suiKit.client().getDynamicFieldObject({
1290
+ parentId: marketId,
1291
+ name: {
1292
+ type: `${BORROW_FEE_PROTOCOL_ID}::market_dynamic_keys::BorrowFeeKey`,
1293
+ value: {
1294
+ type: {
1295
+ name: coinType.substring(2)
1296
+ }
1297
+ }
1298
+ }
1299
+ });
1300
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
1301
+ if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
1302
+ const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
1303
+ borrowFeeRate = dynamicFields.value.fields;
1304
+ }
1267
1305
  }
1268
1306
  }
1269
- if (balanceSheet && borrowIndex && interestModel) {
1307
+ if (balanceSheet && borrowIndex && interestModel && borrowFeeRate) {
1270
1308
  const parsedMarketPoolData = parseOriginMarketPoolData({
1271
1309
  type: interestModel.type.fields,
1272
1310
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -1280,6 +1318,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1280
1318
  reserve: balanceSheet.revenue,
1281
1319
  reserveFactor: interestModel.revenue_factor.fields,
1282
1320
  borrowWeight: interestModel.borrow_weight.fields,
1321
+ borrowFeeRate,
1283
1322
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
1284
1323
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
1285
1324
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -1304,6 +1343,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1304
1343
  midKink: parsedMarketPoolData.midKink,
1305
1344
  reserveFactor: parsedMarketPoolData.reserveFactor,
1306
1345
  borrowWeight: parsedMarketPoolData.borrowWeight,
1346
+ borrowFee: parsedMarketPoolData.borrowFee,
1307
1347
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1308
1348
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1309
1349
  ...calculatedMarketPoolData
@@ -1418,6 +1458,7 @@ var getMarketCollateral = async (query, collateralCoinName, marketObject, coinPr
1418
1458
  };
1419
1459
  var getObligations = async (query, ownerAddress) => {
1420
1460
  const owner = ownerAddress || query.suiKit.currentAddress();
1461
+ const protocolObjectId = query.address.get("core.object") || PROTOCOL_OBJECT_ID;
1421
1462
  const keyObjectsResponse = [];
1422
1463
  let hasNextPage = false;
1423
1464
  let nextCursor = null;
@@ -1425,7 +1466,7 @@ var getObligations = async (query, ownerAddress) => {
1425
1466
  const paginatedKeyObjectsResponse = await query.suiKit.client().getOwnedObjects({
1426
1467
  owner,
1427
1468
  filter: {
1428
- StructType: `${PROTOCOL_OBJECT_ID}::obligation::ObligationKey`
1469
+ StructType: `${protocolObjectId}::obligation::ObligationKey`
1429
1470
  },
1430
1471
  cursor: nextCursor
1431
1472
  });
@@ -1662,6 +1703,7 @@ var getSpools = async (query, stakeMarketCoinNames) => {
1662
1703
  var getSpool = async (query, marketCoinName, marketPool) => {
1663
1704
  const coinName = query.utils.parseCoinName(marketCoinName);
1664
1705
  marketPool = marketPool || await query.getMarketPool(coinName);
1706
+ const spoolPkgId = query.address.get(`spool.id`);
1665
1707
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
1666
1708
  const rewardPoolId = query.address.get(
1667
1709
  `spool.pools.${marketCoinName}.rewardPoolId`
@@ -1673,6 +1715,13 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1673
1715
  showContent: true
1674
1716
  }
1675
1717
  });
1718
+ const spoolRewardFeeDynamicFieldsResponse = await query.suiKit.client().getDynamicFieldObject({
1719
+ parentId: rewardPoolId,
1720
+ name: {
1721
+ type: `${spoolPkgId}::rewards_pool::RewardsPoolFeeKey`,
1722
+ value: { dummy_field: false }
1723
+ }
1724
+ });
1676
1725
  if (marketPool && spoolObjectResponse[0].data && spoolObjectResponse[1].data) {
1677
1726
  const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
1678
1727
  const coinPrices = await query.utils.getCoinPrices([
@@ -1681,19 +1730,20 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1681
1730
  ]);
1682
1731
  const spoolObject = spoolObjectResponse[0].data;
1683
1732
  const rewardPoolObject = spoolObjectResponse[1].data;
1733
+ const rewardFeeObject = spoolRewardFeeDynamicFieldsResponse.data;
1684
1734
  if (spoolObject.content && "fields" in spoolObject.content) {
1685
- const fields = spoolObject.content.fields;
1735
+ const spoolFields = spoolObject.content.fields;
1686
1736
  const parsedSpoolData = parseOriginSpoolData({
1687
- stakeType: fields.stake_type,
1688
- maxDistributedPoint: fields.max_distributed_point,
1689
- distributedPoint: fields.distributed_point,
1690
- distributedPointPerPeriod: fields.distributed_point_per_period,
1691
- pointDistributionTime: fields.point_distribution_time,
1692
- maxStake: fields.max_stakes,
1693
- stakes: fields.stakes,
1694
- index: fields.index,
1695
- createdAt: fields.created_at,
1696
- lastUpdate: fields.last_update
1737
+ stakeType: spoolFields.stake_type,
1738
+ maxDistributedPoint: spoolFields.max_distributed_point,
1739
+ distributedPoint: spoolFields.distributed_point,
1740
+ distributedPointPerPeriod: spoolFields.distributed_point_per_period,
1741
+ pointDistributionTime: spoolFields.point_distribution_time,
1742
+ maxStake: spoolFields.max_stakes,
1743
+ stakes: spoolFields.stakes,
1744
+ index: spoolFields.index,
1745
+ createdAt: spoolFields.created_at,
1746
+ lastUpdate: spoolFields.last_update
1697
1747
  });
1698
1748
  const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
1699
1749
  const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
@@ -1702,14 +1752,17 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1702
1752
  marketCoinPrice,
1703
1753
  marketCoinDecimal
1704
1754
  );
1705
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
1706
- const fields2 = rewardPoolObject.content.fields;
1755
+ if (rewardPoolObject.content && rewardFeeObject?.content && "fields" in rewardPoolObject.content && "fields" in rewardFeeObject.content) {
1756
+ const rewardPoolFields = rewardPoolObject.content.fields;
1757
+ const rewardFeeFields = rewardFeeObject.content.fields.value.fields;
1707
1758
  const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
1708
- claimed_rewards: fields2.claimed_rewards,
1709
- exchange_rate_numerator: fields2.exchange_rate_numerator,
1710
- exchange_rate_denominator: fields2.exchange_rate_denominator,
1711
- rewards: fields2.rewards,
1712
- spool_id: fields2.spool_id
1759
+ claimed_rewards: rewardPoolFields.claimed_rewards,
1760
+ exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
1761
+ exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
1762
+ fee_rate_numerator: rewardFeeFields.fee_rate_numerator,
1763
+ fee_rate_denominator: rewardFeeFields.fee_rate_denominator,
1764
+ rewards: rewardPoolFields.rewards,
1765
+ spool_id: rewardPoolFields.spool_id
1713
1766
  });
1714
1767
  const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
1715
1768
  const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
@@ -1746,8 +1799,8 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1746
1799
  };
1747
1800
  var getStakeAccounts = async (query, ownerAddress) => {
1748
1801
  const owner = ownerAddress || query.suiKit.currentAddress();
1749
- const spoolPkgId = query.address.get("spool.id");
1750
- const stakeAccountType = `${spoolPkgId}::spool_account::SpoolAccount`;
1802
+ const spoolObjectId = query.address.get("spool.object");
1803
+ const stakeAccountType = `${spoolObjectId}::spool_account::SpoolAccount`;
1751
1804
  const stakeObjectsResponse = [];
1752
1805
  let hasNextPage = false;
1753
1806
  let nextCursor = null;
@@ -1776,7 +1829,7 @@ var getStakeAccounts = async (query, ownerAddress) => {
1776
1829
  (types, stakeMarketCoinName) => {
1777
1830
  const stakeCoinName = query.utils.parseCoinName(stakeMarketCoinName);
1778
1831
  const marketCoinType = query.utils.parseMarketCoinType(stakeCoinName);
1779
- types[stakeMarketCoinName] = `${spoolPkgId}::spool_account::SpoolAccount<${marketCoinType}>`;
1832
+ types[stakeMarketCoinName] = `${spoolObjectId}::spool_account::SpoolAccount<${marketCoinType}>`;
1780
1833
  return types;
1781
1834
  },
1782
1835
  {}
@@ -1877,6 +1930,7 @@ var getStakePool = async (query, marketCoinName) => {
1877
1930
  return stakePool;
1878
1931
  };
1879
1932
  var getStakeRewardPool = async (query, marketCoinName) => {
1933
+ const spoolPkgId = query.address.get("spool.id");
1880
1934
  const poolId = query.address.get(
1881
1935
  `spool.pools.${marketCoinName}.rewardPoolId`
1882
1936
  );
@@ -1888,23 +1942,38 @@ var getStakeRewardPool = async (query, marketCoinName) => {
1888
1942
  showType: true
1889
1943
  }
1890
1944
  });
1891
- if (stakeRewardPoolObjectResponse.data) {
1945
+ const stakeRewardFeeDynamicFieldsResponse = await query.suiKit.client().getDynamicFieldObject({
1946
+ parentId: poolId,
1947
+ name: {
1948
+ type: `${spoolPkgId}::rewards_pool::RewardsPoolFeeKey`,
1949
+ value: { dummy_field: false }
1950
+ }
1951
+ });
1952
+ if (stakeRewardPoolObjectResponse.data && stakeRewardFeeDynamicFieldsResponse.data) {
1892
1953
  const stakeRewardPoolObject = stakeRewardPoolObjectResponse.data;
1954
+ const stakeRewardFeeDynamicFieldObject = stakeRewardFeeDynamicFieldsResponse.data;
1893
1955
  const id = stakeRewardPoolObject.objectId;
1894
1956
  const type = stakeRewardPoolObject.type;
1895
- if (stakeRewardPoolObject.content && "fields" in stakeRewardPoolObject.content) {
1896
- const fields = stakeRewardPoolObject.content.fields;
1897
- const stakePoolId = String(fields.spool_id);
1898
- const ratioNumerator = Number(fields.exchange_rate_numerator);
1899
- const ratioDenominator = Number(fields.exchange_rate_denominator);
1900
- const rewards = Number(fields.rewards);
1901
- const claimedRewards = Number(fields.claimed_rewards);
1957
+ if (stakeRewardPoolObject.content && stakeRewardFeeDynamicFieldObject.content && "fields" in stakeRewardPoolObject.content && "fields" in stakeRewardFeeDynamicFieldObject.content) {
1958
+ const rewardPoolFields = stakeRewardPoolObject.content.fields;
1959
+ const rewardFeeFields = stakeRewardFeeDynamicFieldObject.content.fields.value.fields;
1960
+ const stakePoolId = String(rewardPoolFields.spool_id);
1961
+ const ratioNumerator = Number(rewardPoolFields.exchange_rate_numerator);
1962
+ const ratioDenominator = Number(
1963
+ rewardPoolFields.exchange_rate_denominator
1964
+ );
1965
+ const rewards = Number(rewardPoolFields.rewards);
1966
+ const claimedRewards = Number(rewardPoolFields.claimed_rewards);
1967
+ const feeRateNumerator = Number(rewardFeeFields.fee_rate_numerator);
1968
+ const feeRateDenominator = Number(rewardFeeFields.fee_rate_denominator);
1902
1969
  stakeRewardPool = {
1903
1970
  id,
1904
1971
  type: normalizeStructTag3(type),
1905
1972
  stakePoolId,
1906
1973
  ratioNumerator,
1907
1974
  ratioDenominator,
1975
+ feeRateNumerator,
1976
+ feeRateDenominator,
1908
1977
  rewards,
1909
1978
  claimedRewards
1910
1979
  };
@@ -2902,8 +2971,9 @@ var ScallopUtils = class {
2902
2971
  * @return Market coin type.
2903
2972
  */
2904
2973
  parseMarketCoinType(coinName) {
2974
+ const protocolObjectId = this._address.get("core.object") || PROTOCOL_OBJECT_ID;
2905
2975
  const coinType = this.parseCoinType(coinName);
2906
- return `${PROTOCOL_OBJECT_ID}::reserve::MarketCoin<${coinType}>`;
2976
+ return `${protocolObjectId}::reserve::MarketCoin<${coinType}>`;
2907
2977
  }
2908
2978
  parseCoinNameFromType(coinType) {
2909
2979
  coinType = normalizeStructTag5(coinType);
@@ -4600,6 +4670,7 @@ var Scallop = class {
4600
4670
  export {
4601
4671
  ADDRESSES_ID,
4602
4672
  API_BASE_URL,
4673
+ BORROW_FEE_PROTOCOL_ID,
4603
4674
  PROTOCOL_OBJECT_ID,
4604
4675
  SUPPORT_BORROW_INCENTIVE_POOLS,
4605
4676
  SUPPORT_BORROW_INCENTIVE_REWARDS,