@scallop-io/sui-scallop-sdk 0.44.3 → 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.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: ""
@@ -705,11 +710,11 @@ var ScallopAddress = class {
705
710
  };
706
711
 
707
712
  // src/models/scallopClient.ts
708
- var import_utils17 = require("@mysten/sui.js/utils");
713
+ var import_utils19 = require("@mysten/sui.js/utils");
709
714
  var import_sui_kit9 = require("@scallop-io/sui-kit");
710
715
 
711
716
  // src/models/scallopUtils.ts
712
- var import_utils7 = require("@mysten/sui.js/utils");
717
+ var import_utils9 = require("@mysten/sui.js/utils");
713
718
  var import_sui_kit4 = require("@scallop-io/sui-kit");
714
719
  var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
715
720
 
@@ -717,6 +722,7 @@ var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
717
722
  var import_sui_kit3 = require("@scallop-io/sui-kit");
718
723
 
719
724
  // src/queries/coreQuery.ts
725
+ var import_utils2 = require("@mysten/sui.js/utils");
720
726
  var import_sui_kit = require("@scallop-io/sui-kit");
721
727
  var import_bignumber2 = __toESM(require("bignumber.js"));
722
728
 
@@ -734,7 +740,7 @@ var import_bignumber = __toESM(require("bignumber.js"));
734
740
  var import_utils = require("@mysten/sui.js/utils");
735
741
  var parseOriginMarketPoolData = (originMarketPoolData) => {
736
742
  return {
737
- coinType: "0x" + originMarketPoolData.type.name,
743
+ coinType: (0, import_utils.normalizeStructTag)(originMarketPoolData.type.name),
738
744
  // Parse origin data required for basic calculations.
739
745
  maxBorrowRate: Number(originMarketPoolData.maxBorrowRate.value) / 2 ** 32,
740
746
  borrowRate: Number(originMarketPoolData.interestRate.value) / 2 ** 32,
@@ -747,6 +753,7 @@ var parseOriginMarketPoolData = (originMarketPoolData) => {
747
753
  reserveAmount: Number(originMarketPoolData.reserve),
748
754
  reserveFactor: Number(originMarketPoolData.reserveFactor.value) / 2 ** 32,
749
755
  borrowWeight: Number(originMarketPoolData.borrowWeight.value) / 2 ** 32,
756
+ borrowFee: Number(originMarketPoolData.borrowFeeRate.value) / 2 ** 32,
750
757
  // Parse origin data required for additional display.
751
758
  baseBorrowRate: Number(originMarketPoolData.baseBorrowRatePerSec.value) / 2 ** 32,
752
759
  borrowRateOnHighKink: Number(originMarketPoolData.borrowRateOnHighKink.value) / 2 ** 32,
@@ -828,7 +835,7 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
828
835
  };
829
836
  var parseOriginMarketCollateralData = (originMarketCollateralData) => {
830
837
  return {
831
- coinType: "0x" + originMarketCollateralData.type.name,
838
+ coinType: (0, import_utils.normalizeStructTag)(originMarketCollateralData.type.name),
832
839
  collateralFactor: Number(originMarketCollateralData.collateralFactor.value) / 2 ** 32,
833
840
  liquidationFactor: Number(originMarketCollateralData.liquidationFactor.value) / 2 ** 32,
834
841
  liquidationDiscount: Number(originMarketCollateralData.liquidationDiscount.value) / 2 ** 32,
@@ -860,7 +867,7 @@ var calculateMarketCollateralData = (utils, parsedMarketCollateralData) => {
860
867
  };
861
868
  var parseOriginSpoolData = (originSpoolData) => {
862
869
  return {
863
- stakeType: "0x" + originSpoolData.stakeType.fields.name,
870
+ stakeType: (0, import_utils.normalizeStructTag)(originSpoolData.stakeType.fields.name),
864
871
  maxPoint: Number(originSpoolData.maxDistributedPoint),
865
872
  distributedPoint: Number(originSpoolData.distributedPoint),
866
873
  pointPerPeriod: Number(originSpoolData.distributedPointPerPeriod),
@@ -917,12 +924,14 @@ var calculateSpoolData = (parsedSpoolData, stakeMarketCoinPrice, stakeMarketCoin
917
924
  var parseOriginSpoolRewardPoolData = (originSpoolRewardPoolData) => {
918
925
  return {
919
926
  claimedRewards: Number(originSpoolRewardPoolData.claimed_rewards),
920
- exchangeRateNumerator: Number(
921
- originSpoolRewardPoolData.exchange_rate_numerator
922
- ),
923
927
  exchangeRateDenominator: Number(
924
928
  originSpoolRewardPoolData.exchange_rate_denominator
925
929
  ),
930
+ exchangeRateNumerator: Number(
931
+ originSpoolRewardPoolData.exchange_rate_numerator
932
+ ),
933
+ feeRateDenominator: Number(originSpoolRewardPoolData.fee_rate_denominator),
934
+ feeRateNumerator: Number(originSpoolRewardPoolData.fee_rate_numerator),
926
935
  rewards: Number(originSpoolRewardPoolData.rewards),
927
936
  spoolId: String(originSpoolRewardPoolData.spool_id)
928
937
  };
@@ -947,6 +956,7 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
947
956
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
948
957
  const rewardValueForYear = (0, import_bignumber.default)(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
949
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();
950
960
  return {
951
961
  rewardApr: rewardRate,
952
962
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -958,7 +968,8 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
958
968
  claimedRewardAmount: claimedRewardAmount.toNumber(),
959
969
  claimedRewardCoin: claimedRewardCoin.toNumber(),
960
970
  claimedRewardValue: claimedRewardValue.toNumber(),
961
- rewardPerSec: rewardPerSec.toNumber()
971
+ rewardPerSec: rewardPerSec.toNumber(),
972
+ rewardFee: rewardFeeRate
962
973
  };
963
974
  };
964
975
  var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
@@ -1033,6 +1044,12 @@ var parseOriginBorrowIncentiveRewardPoolData = (originBorrowIncentiveRewardPoolD
1033
1044
  exchangeRateDenominator: Number(
1034
1045
  originBorrowIncentiveRewardPoolData.exchange_rate_denominator
1035
1046
  ),
1047
+ rewardsFeeRateNumerator: Number(
1048
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_numerator
1049
+ ),
1050
+ rewardsFeeRateDenominator: Number(
1051
+ originBorrowIncentiveRewardPoolData.rewards_fee_rate_denominator
1052
+ ),
1036
1053
  remainingRewards: Number(
1037
1054
  originBorrowIncentiveRewardPoolData.remaining_reward
1038
1055
  )
@@ -1062,6 +1079,9 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1062
1079
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
1063
1080
  const rewardValueForYear = (0, import_bignumber.default)(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
1064
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();
1065
1085
  return {
1066
1086
  rewardApr: rewardRate,
1067
1087
  totalRewardAmount: totalRewardAmount.toNumber(),
@@ -1073,7 +1093,8 @@ var calculateBorrowIncentiveRewardPoolData = (parsedBorrowIncentivePoolData, par
1073
1093
  claimedRewardAmount: claimedRewardAmount.toNumber(),
1074
1094
  claimedRewardCoin: claimedRewardCoin.toNumber(),
1075
1095
  claimedRewardValue: claimedRewardValue.toNumber(),
1076
- rewardPerSec: rewardPerSec.toNumber()
1096
+ rewardPerSec: rewardPerSec.toNumber(),
1097
+ rewardFee: rewardFeeRate
1077
1098
  };
1078
1099
  };
1079
1100
  var parseOriginBorrowIncentiveAccountData = (originBorrowIncentiveAccountData) => {
@@ -1149,7 +1170,7 @@ var queryMarket = async (query) => {
1149
1170
  const pools = {};
1150
1171
  const collaterals = {};
1151
1172
  for (const pool of marketData.pools) {
1152
- const coinType = "0x" + pool.type.name;
1173
+ const coinType = (0, import_utils2.normalizeStructTag)(pool.type.name);
1153
1174
  const poolCoinName = query.utils.parseCoinNameFromType(coinType);
1154
1175
  const coinPrice = (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName] ?? 0;
1155
1176
  if (!SUPPORT_POOLS.includes(poolCoinName)) {
@@ -1168,6 +1189,7 @@ var queryMarket = async (query) => {
1168
1189
  reserve: pool.reserve,
1169
1190
  reserveFactor: pool.reserveFactor,
1170
1191
  borrowWeight: pool.borrowWeight,
1192
+ borrowFeeRate: pool.borrowFeeRate,
1171
1193
  baseBorrowRatePerSec: pool.baseBorrowRatePerSec,
1172
1194
  borrowRateOnHighKink: pool.borrowRateOnHighKink,
1173
1195
  borrowRateOnMidKink: pool.borrowRateOnMidKink,
@@ -1191,13 +1213,14 @@ var queryMarket = async (query) => {
1191
1213
  midKink: parsedMarketPoolData.midKink,
1192
1214
  reserveFactor: parsedMarketPoolData.reserveFactor,
1193
1215
  borrowWeight: parsedMarketPoolData.borrowWeight,
1216
+ borrowFee: parsedMarketPoolData.borrowFee,
1194
1217
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1195
1218
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1196
1219
  ...calculatedMarketPoolData
1197
1220
  };
1198
1221
  }
1199
1222
  for (const collateral of marketData.collaterals) {
1200
- const coinType = "0x" + collateral.type.name;
1223
+ const coinType = (0, import_utils2.normalizeStructTag)(collateral.type.name);
1201
1224
  const collateralCoinName = query.utils.parseCoinNameFromType(coinType);
1202
1225
  const coinPrice = (await query.utils.getCoinPrices([collateralCoinName]))?.[collateralCoinName] ?? 0;
1203
1226
  if (!SUPPORT_COLLATERALS.includes(collateralCoinName)) {
@@ -1275,6 +1298,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1275
1298
  let balanceSheet;
1276
1299
  let borrowIndex;
1277
1300
  let interestModel;
1301
+ let borrowFeeRate;
1278
1302
  if (marketObject) {
1279
1303
  if (marketObject.content && "fields" in marketObject.content) {
1280
1304
  const fields = marketObject.content.fields;
@@ -1324,9 +1348,25 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1324
1348
  const dynamicFields = interestModelDynamicFieldObject.content.fields;
1325
1349
  interestModel = dynamicFields.value.fields;
1326
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
+ }
1327
1367
  }
1328
1368
  }
1329
- if (balanceSheet && borrowIndex && interestModel) {
1369
+ if (balanceSheet && borrowIndex && interestModel && borrowFeeRate) {
1330
1370
  const parsedMarketPoolData = parseOriginMarketPoolData({
1331
1371
  type: interestModel.type.fields,
1332
1372
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -1340,6 +1380,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1340
1380
  reserve: balanceSheet.revenue,
1341
1381
  reserveFactor: interestModel.revenue_factor.fields,
1342
1382
  borrowWeight: interestModel.borrow_weight.fields,
1383
+ borrowFeeRate,
1343
1384
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
1344
1385
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
1345
1386
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -1364,6 +1405,7 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1364
1405
  midKink: parsedMarketPoolData.midKink,
1365
1406
  reserveFactor: parsedMarketPoolData.reserveFactor,
1366
1407
  borrowWeight: parsedMarketPoolData.borrowWeight,
1408
+ borrowFee: parsedMarketPoolData.borrowFee,
1367
1409
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
1368
1410
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
1369
1411
  ...calculatedMarketPoolData
@@ -1478,6 +1520,7 @@ var getMarketCollateral = async (query, collateralCoinName, marketObject, coinPr
1478
1520
  };
1479
1521
  var getObligations = async (query, ownerAddress) => {
1480
1522
  const owner = ownerAddress || query.suiKit.currentAddress();
1523
+ const protocolObjectId = query.address.get("core.object") || PROTOCOL_OBJECT_ID;
1481
1524
  const keyObjectsResponse = [];
1482
1525
  let hasNextPage = false;
1483
1526
  let nextCursor = null;
@@ -1485,7 +1528,7 @@ var getObligations = async (query, ownerAddress) => {
1485
1528
  const paginatedKeyObjectsResponse = await query.suiKit.client().getOwnedObjects({
1486
1529
  owner,
1487
1530
  filter: {
1488
- StructType: `${PROTOCOL_OBJECT_ID}::obligation::ObligationKey`
1531
+ StructType: `${protocolObjectId}::obligation::ObligationKey`
1489
1532
  },
1490
1533
  cursor: nextCursor
1491
1534
  });
@@ -1698,7 +1741,7 @@ var getMarketCoinAmount = async (query, marketCoinName, ownerAddress) => {
1698
1741
  };
1699
1742
 
1700
1743
  // src/queries/spoolQuery.ts
1701
- var import_utils3 = require("@mysten/sui.js/utils");
1744
+ var import_utils4 = require("@mysten/sui.js/utils");
1702
1745
  var getSpools = async (query, stakeMarketCoinNames) => {
1703
1746
  stakeMarketCoinNames = stakeMarketCoinNames || [...SUPPORT_SPOOLS];
1704
1747
  const stakeCoinNames = stakeMarketCoinNames.map(
@@ -1722,6 +1765,7 @@ var getSpools = async (query, stakeMarketCoinNames) => {
1722
1765
  var getSpool = async (query, marketCoinName, marketPool) => {
1723
1766
  const coinName = query.utils.parseCoinName(marketCoinName);
1724
1767
  marketPool = marketPool || await query.getMarketPool(coinName);
1768
+ const spoolPkgId = query.address.get(`spool.id`);
1725
1769
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
1726
1770
  const rewardPoolId = query.address.get(
1727
1771
  `spool.pools.${marketCoinName}.rewardPoolId`
@@ -1733,6 +1777,13 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1733
1777
  showContent: true
1734
1778
  }
1735
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
+ });
1736
1787
  if (marketPool && spoolObjectResponse[0].data && spoolObjectResponse[1].data) {
1737
1788
  const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
1738
1789
  const coinPrices = await query.utils.getCoinPrices([
@@ -1741,19 +1792,20 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1741
1792
  ]);
1742
1793
  const spoolObject = spoolObjectResponse[0].data;
1743
1794
  const rewardPoolObject = spoolObjectResponse[1].data;
1795
+ const rewardFeeObject = spoolRewardFeeDynamicFieldsResponse.data;
1744
1796
  if (spoolObject.content && "fields" in spoolObject.content) {
1745
- const fields = spoolObject.content.fields;
1797
+ const spoolFields = spoolObject.content.fields;
1746
1798
  const parsedSpoolData = parseOriginSpoolData({
1747
- stakeType: fields.stake_type,
1748
- maxDistributedPoint: fields.max_distributed_point,
1749
- distributedPoint: fields.distributed_point,
1750
- distributedPointPerPeriod: fields.distributed_point_per_period,
1751
- pointDistributionTime: fields.point_distribution_time,
1752
- maxStake: fields.max_stakes,
1753
- stakes: fields.stakes,
1754
- index: fields.index,
1755
- createdAt: fields.created_at,
1756
- 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
1757
1809
  });
1758
1810
  const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
1759
1811
  const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
@@ -1762,14 +1814,17 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1762
1814
  marketCoinPrice,
1763
1815
  marketCoinDecimal
1764
1816
  );
1765
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
1766
- 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;
1767
1820
  const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
1768
- claimed_rewards: fields2.claimed_rewards,
1769
- exchange_rate_numerator: fields2.exchange_rate_numerator,
1770
- exchange_rate_denominator: fields2.exchange_rate_denominator,
1771
- rewards: fields2.rewards,
1772
- 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
1773
1828
  });
1774
1829
  const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
1775
1830
  const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
@@ -1806,8 +1861,8 @@ var getSpool = async (query, marketCoinName, marketPool) => {
1806
1861
  };
1807
1862
  var getStakeAccounts = async (query, ownerAddress) => {
1808
1863
  const owner = ownerAddress || query.suiKit.currentAddress();
1809
- const spoolPkgId = query.address.get("spool.id");
1810
- const stakeAccountType = `${spoolPkgId}::spool_account::SpoolAccount`;
1864
+ const spoolObjectId = query.address.get("spool.object");
1865
+ const stakeAccountType = `${spoolObjectId}::spool_account::SpoolAccount`;
1811
1866
  const stakeObjectsResponse = [];
1812
1867
  let hasNextPage = false;
1813
1868
  let nextCursor = null;
@@ -1836,7 +1891,7 @@ var getStakeAccounts = async (query, ownerAddress) => {
1836
1891
  (types, stakeMarketCoinName) => {
1837
1892
  const stakeCoinName = query.utils.parseCoinName(stakeMarketCoinName);
1838
1893
  const marketCoinType = query.utils.parseMarketCoinType(stakeCoinName);
1839
- types[stakeMarketCoinName] = `${spoolPkgId}::spool_account::SpoolAccount<${marketCoinType}>`;
1894
+ types[stakeMarketCoinName] = `${spoolObjectId}::spool_account::SpoolAccount<${marketCoinType}>`;
1840
1895
  return types;
1841
1896
  },
1842
1897
  {}
@@ -1854,34 +1909,34 @@ var getStakeAccounts = async (query, ownerAddress) => {
1854
1909
  const index = Number(fields.index);
1855
1910
  const points = Number(fields.points);
1856
1911
  const totalPoints = Number(fields.total_points);
1857
- if ((0, import_utils3.normalizeStructTag)(type) === stakeMarketCoinTypes.ssui) {
1912
+ if ((0, import_utils4.normalizeStructTag)(type) === stakeMarketCoinTypes.ssui) {
1858
1913
  stakeAccounts.ssui.push({
1859
1914
  id,
1860
- type,
1915
+ type: (0, import_utils4.normalizeStructTag)(type),
1861
1916
  stakePoolId,
1862
- stakeType,
1917
+ stakeType: (0, import_utils4.normalizeStructTag)(stakeType),
1863
1918
  staked,
1864
1919
  index,
1865
1920
  points,
1866
1921
  totalPoints
1867
1922
  });
1868
- } else if ((0, import_utils3.normalizeStructTag)(type) === stakeMarketCoinTypes.susdc) {
1923
+ } else if ((0, import_utils4.normalizeStructTag)(type) === stakeMarketCoinTypes.susdc) {
1869
1924
  stakeAccounts.susdc.push({
1870
1925
  id,
1871
- type,
1926
+ type: (0, import_utils4.normalizeStructTag)(type),
1872
1927
  stakePoolId,
1873
- stakeType,
1928
+ stakeType: (0, import_utils4.normalizeStructTag)(stakeType),
1874
1929
  staked,
1875
1930
  index,
1876
1931
  points,
1877
1932
  totalPoints
1878
1933
  });
1879
- } else if ((0, import_utils3.normalizeStructTag)(type) === stakeMarketCoinTypes.susdt) {
1934
+ } else if ((0, import_utils4.normalizeStructTag)(type) === stakeMarketCoinTypes.susdt) {
1880
1935
  stakeAccounts.susdt.push({
1881
1936
  id,
1882
- type,
1937
+ type: (0, import_utils4.normalizeStructTag)(type),
1883
1938
  stakePoolId,
1884
- stakeType,
1939
+ stakeType: (0, import_utils4.normalizeStructTag)(stakeType),
1885
1940
  staked,
1886
1941
  index,
1887
1942
  points,
@@ -1920,13 +1975,13 @@ var getStakePool = async (query, marketCoinName) => {
1920
1975
  const lastUpdate = Number(fields.last_update);
1921
1976
  stakePool = {
1922
1977
  id,
1923
- type,
1978
+ type: (0, import_utils4.normalizeStructTag)(type),
1924
1979
  maxPoint,
1925
1980
  distributedPoint,
1926
1981
  pointPerPeriod,
1927
1982
  period,
1928
1983
  maxStake,
1929
- stakeType,
1984
+ stakeType: (0, import_utils4.normalizeStructTag)(stakeType),
1930
1985
  totalStaked,
1931
1986
  index,
1932
1987
  createdAt,
@@ -1937,6 +1992,7 @@ var getStakePool = async (query, marketCoinName) => {
1937
1992
  return stakePool;
1938
1993
  };
1939
1994
  var getStakeRewardPool = async (query, marketCoinName) => {
1995
+ const spoolPkgId = query.address.get("spool.id");
1940
1996
  const poolId = query.address.get(
1941
1997
  `spool.pools.${marketCoinName}.rewardPoolId`
1942
1998
  );
@@ -1948,23 +2004,38 @@ var getStakeRewardPool = async (query, marketCoinName) => {
1948
2004
  showType: true
1949
2005
  }
1950
2006
  });
1951
- 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) {
1952
2015
  const stakeRewardPoolObject = stakeRewardPoolObjectResponse.data;
2016
+ const stakeRewardFeeDynamicFieldObject = stakeRewardFeeDynamicFieldsResponse.data;
1953
2017
  const id = stakeRewardPoolObject.objectId;
1954
2018
  const type = stakeRewardPoolObject.type;
1955
- if (stakeRewardPoolObject.content && "fields" in stakeRewardPoolObject.content) {
1956
- const fields = stakeRewardPoolObject.content.fields;
1957
- const stakePoolId = String(fields.spool_id);
1958
- const ratioNumerator = Number(fields.exchange_rate_numerator);
1959
- const ratioDenominator = Number(fields.exchange_rate_denominator);
1960
- const rewards = Number(fields.rewards);
1961
- 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);
1962
2031
  stakeRewardPool = {
1963
2032
  id,
1964
- type,
2033
+ type: (0, import_utils4.normalizeStructTag)(type),
1965
2034
  stakePoolId,
1966
2035
  ratioNumerator,
1967
2036
  ratioDenominator,
2037
+ feeRateNumerator,
2038
+ feeRateDenominator,
1968
2039
  rewards,
1969
2040
  claimedRewards
1970
2041
  };
@@ -1974,6 +2045,7 @@ var getStakeRewardPool = async (query, marketCoinName) => {
1974
2045
  };
1975
2046
 
1976
2047
  // src/queries/borrowIncentiveQuery.ts
2048
+ var import_utils6 = require("@mysten/sui.js/utils");
1977
2049
  var import_sui_kit2 = require("@scallop-io/sui-kit");
1978
2050
  var queryBorrowIncentivePools = async (query, borrowIncentiveCoinNames) => {
1979
2051
  borrowIncentiveCoinNames = borrowIncentiveCoinNames || [
@@ -1992,7 +2064,7 @@ var queryBorrowIncentivePools = async (query, borrowIncentiveCoinNames) => {
1992
2064
  const rewardCoinType = parsedBorrowIncentiveRewardPoolData.rewardType;
1993
2065
  const borrowIncentivePools = {};
1994
2066
  for (const pool of borrowIncentivePoolsQueryData.incentive_pools) {
1995
- const coinType = "0x" + pool.pool_type.name;
2067
+ const coinType = (0, import_utils6.normalizeStructTag)(pool.pool_type.name);
1996
2068
  const coinName = query.utils.parseCoinNameFromType(coinType);
1997
2069
  const rewardCoinName = query.utils.parseCoinNameFromType(rewardCoinType);
1998
2070
  if (!borrowIncentiveCoinNames.includes(coinName)) {
@@ -2190,15 +2262,19 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
2190
2262
  availableUnstakeAmount = availableUnstakeAmount.plus(
2191
2263
  accountStakedMarketCoinAmount
2192
2264
  );
2193
- availableUnstakeCoin = availableUnstakeAmount.shiftedBy(-1 * coinDecimal);
2265
+ availableUnstakeCoin = availableUnstakeAmount.shiftedBy(
2266
+ -1 * spool.coinDecimal
2267
+ );
2194
2268
  const baseIndexRate = 1e9;
2195
2269
  const increasedPointRate = spool?.currentPointIndex ? (0, import_bignumber3.default)(spool.currentPointIndex - stakeAccount.index).dividedBy(
2196
2270
  baseIndexRate
2197
2271
  ) : 1;
2198
2272
  availableClaimAmount = availableClaimAmount.plus(
2199
- (0, import_bignumber3.default)(stakeAccount.staked).multipliedBy(increasedPointRate).plus(stakeAccount.points).multipliedBy(spool.exchangeRateNumerator).dividedBy(spool.exchangeRateDenominator)
2273
+ accountStakedMarketCoinAmount.multipliedBy(increasedPointRate).plus(stakeAccount.points).multipliedBy(spool.exchangeRateNumerator).dividedBy(spool.exchangeRateDenominator)
2274
+ );
2275
+ availableClaimCoin = availableClaimAmount.shiftedBy(
2276
+ -1 * spool.rewardCoinDecimal
2200
2277
  );
2201
- availableClaimCoin = availableClaimAmount.shiftedBy(-1 * coinDecimal);
2202
2278
  }
2203
2279
  }
2204
2280
  const suppliedAmount = (0, import_bignumber3.default)(marketCoinAmount).multipliedBy(
@@ -2283,10 +2359,13 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2283
2359
  ])
2284
2360
  ];
2285
2361
  const obligationQuery = await query.queryObligation(obligationId);
2362
+ const borrowIncentivePools = await query.getBorrowIncentivePools();
2363
+ const borrowIncentiveAccounts = await query.getBorrowIncentiveAccounts(obligationId);
2286
2364
  coinPrices = coinPrices || await query.utils.getCoinPrices(assetCoinNames);
2287
2365
  coinAmounts = coinAmounts || await query.getCoinAmounts(assetCoinNames, ownerAddress);
2288
2366
  const collaterals = {};
2289
2367
  const debts = {};
2368
+ const borrowIncentives = {};
2290
2369
  let totalDepositedPools = 0;
2291
2370
  let totalDepositedValue = (0, import_bignumber3.default)(0);
2292
2371
  let totalBorrowCapacityValue = (0, import_bignumber3.default)(0);
@@ -2388,6 +2467,41 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2388
2467
  };
2389
2468
  }
2390
2469
  }
2470
+ for (const [poolCoinName, borrowIncentiveAccount] of Object.entries(
2471
+ borrowIncentiveAccounts
2472
+ )) {
2473
+ const coinName = poolCoinName;
2474
+ const borrowIncentivePool = borrowIncentivePools[coinName];
2475
+ let availableClaimAmount = (0, import_bignumber3.default)(0);
2476
+ let availableClaimCoin = (0, import_bignumber3.default)(0);
2477
+ if (borrowIncentivePool) {
2478
+ const accountBorrowedAmount = (0, import_bignumber3.default)(borrowIncentiveAccount.amount);
2479
+ const baseIndexRate = 1e9;
2480
+ const increasedPointRate = borrowIncentivePool.currentPointIndex ? (0, import_bignumber3.default)(
2481
+ borrowIncentivePool.currentPointIndex - borrowIncentiveAccount.index
2482
+ ).dividedBy(baseIndexRate) : 1;
2483
+ availableClaimAmount = availableClaimAmount.plus(
2484
+ accountBorrowedAmount.multipliedBy(increasedPointRate).plus(borrowIncentiveAccount.points).multipliedBy(borrowIncentivePool.exchangeRateNumerator).dividedBy(borrowIncentivePool.exchangeRateDenominator)
2485
+ );
2486
+ availableClaimCoin = availableClaimAmount.shiftedBy(
2487
+ -1 * borrowIncentivePool.rewardCoinDecimal
2488
+ );
2489
+ if (availableClaimAmount.isGreaterThan(0)) {
2490
+ borrowIncentives[coinName] = {
2491
+ coinName: borrowIncentivePool.coinName,
2492
+ coinType: borrowIncentivePool.coinType,
2493
+ rewardCoinType: borrowIncentivePool.rewardCoinType,
2494
+ symbol: borrowIncentivePool.symbol,
2495
+ coinDecimal: borrowIncentivePool.coinDecimal,
2496
+ rewardCoinDecimal: borrowIncentivePool.rewardCoinDecimal,
2497
+ coinPrice: borrowIncentivePool.coinPrice,
2498
+ rewardCoinPrice: borrowIncentivePool.rewardCoinPrice,
2499
+ availableClaimAmount: availableClaimAmount.toNumber(),
2500
+ availableClaimCoin: availableClaimCoin.toNumber()
2501
+ };
2502
+ }
2503
+ }
2504
+ }
2391
2505
  let riskLevel = totalRequiredCollateralValue.isZero() && totalBorrowedValueWithWeight.isZero() ? (0, import_bignumber3.default)(0) : totalBorrowedValueWithWeight.dividedBy(totalRequiredCollateralValue);
2392
2506
  riskLevel = riskLevel.isFinite() ? riskLevel.isLessThan(1) ? riskLevel : (0, import_bignumber3.default)(1) : (0, import_bignumber3.default)(1);
2393
2507
  const accountBalanceValue = totalDepositedValue.minus(totalBorrowedValue).isGreaterThan(0) ? totalDepositedValue.minus(totalBorrowedValue) : (0, import_bignumber3.default)(0);
@@ -2416,7 +2530,8 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2416
2530
  totalDepositedPools,
2417
2531
  totalBorrowedPools,
2418
2532
  collaterals,
2419
- debts
2533
+ debts,
2534
+ borrowIncentives
2420
2535
  };
2421
2536
  for (const [collateralCoinName, obligationCollateral] of Object.entries(
2422
2537
  obligationAccount.collaterals
@@ -2432,10 +2547,10 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2432
2547
  obligationCollateral.availableWithdrawCoin = availableWithdrawAmount.shiftedBy(-1 * obligationCollateral.coinDecimal).toNumber();
2433
2548
  }
2434
2549
  }
2435
- for (const [assetCoinName, obligationDebt] of Object.entries(
2550
+ for (const [poolCoinName, obligationDebt] of Object.entries(
2436
2551
  obligationAccount.debts
2437
2552
  )) {
2438
- const marketPool = market.pools[assetCoinName];
2553
+ const marketPool = market.pools[poolCoinName];
2439
2554
  if (marketPool) {
2440
2555
  const availableRepayAmount = (0, import_bignumber3.default)(
2441
2556
  obligationDebt.availableRepayAmount
@@ -2890,7 +3005,7 @@ var ScallopUtils = class {
2890
3005
  throw Error(`Coin ${coinName} is not supported`);
2891
3006
  }
2892
3007
  if (coinName === "sui")
2893
- return (0, import_utils7.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
3008
+ return (0, import_utils9.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
2894
3009
  const wormHolePckageIds = [
2895
3010
  this._address.get("core.coins.usdc.id") ?? wormholeCoinIds.usdc,
2896
3011
  this._address.get("core.coins.usdt.id") ?? wormholeCoinIds.usdt,
@@ -2918,11 +3033,12 @@ var ScallopUtils = class {
2918
3033
  * @return Market coin type.
2919
3034
  */
2920
3035
  parseMarketCoinType(coinName) {
3036
+ const protocolObjectId = this._address.get("core.object") || PROTOCOL_OBJECT_ID;
2921
3037
  const coinType = this.parseCoinType(coinName);
2922
- return `${PROTOCOL_OBJECT_ID}::reserve::MarketCoin<${coinType}>`;
3038
+ return `${protocolObjectId}::reserve::MarketCoin<${coinType}>`;
2923
3039
  }
2924
3040
  parseCoinNameFromType(coinType) {
2925
- coinType = (0, import_utils7.normalizeStructTag)(coinType);
3041
+ coinType = (0, import_utils9.normalizeStructTag)(coinType);
2926
3042
  const coinTypeRegex = new RegExp(`((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)`);
2927
3043
  const coinTypeMatch = coinType.match(coinTypeRegex);
2928
3044
  const isMarketCoinType = coinType.includes("reserve::MarketCoin");
@@ -2986,7 +3102,7 @@ var ScallopUtils = class {
2986
3102
  * @param coinType - The coin type, default is 0x2::SUI::SUI.
2987
3103
  * @return The selected transaction coin arguments.
2988
3104
  */
2989
- async selectCoinIds(amount, coinType = import_utils7.SUI_TYPE_ARG, ownerAddress) {
3105
+ async selectCoinIds(amount, coinType = import_utils9.SUI_TYPE_ARG, ownerAddress) {
2990
3106
  ownerAddress = ownerAddress || this._suiKit.currentAddress();
2991
3107
  const coins = await this._suiKit.suiInteractor.selectCoins(
2992
3108
  ownerAddress,
@@ -3106,16 +3222,16 @@ var ScallopUtils = class {
3106
3222
  };
3107
3223
 
3108
3224
  // src/models/scallopBuilder.ts
3109
- var import_utils16 = require("@mysten/sui.js/utils");
3225
+ var import_utils18 = require("@mysten/sui.js/utils");
3110
3226
  var import_sui_kit8 = require("@scallop-io/sui-kit");
3111
3227
 
3112
3228
  // src/builders/coreBuilder.ts
3113
3229
  var import_transactions = require("@mysten/sui.js/transactions");
3114
- var import_utils10 = require("@mysten/sui.js/utils");
3230
+ var import_utils12 = require("@mysten/sui.js/utils");
3115
3231
  var import_sui_kit5 = require("@scallop-io/sui-kit");
3116
3232
 
3117
3233
  // src/builders/oracle.ts
3118
- var import_utils9 = require("@mysten/sui.js/utils");
3234
+ var import_utils11 = require("@mysten/sui.js/utils");
3119
3235
  var import_pyth_sui_js2 = require("@pythnetwork/pyth-sui-js");
3120
3236
  var updateOracles = async (builder, txBlock, assetCoinNames) => {
3121
3237
  assetCoinNames = assetCoinNames ?? [
@@ -3221,27 +3337,27 @@ var priceUpdateRequest = (txBlock, packageId, xOracleId, coinType) => {
3221
3337
  var confirmPriceUpdateRequest = (txBlock, packageId, xOracleId, request, coinType) => {
3222
3338
  const target = `${packageId}::x_oracle::confirm_price_update_request`;
3223
3339
  const typeArgs = [coinType];
3224
- txBlock.moveCall(target, [xOracleId, request, import_utils9.SUI_CLOCK_OBJECT_ID], typeArgs);
3340
+ txBlock.moveCall(target, [xOracleId, request, import_utils11.SUI_CLOCK_OBJECT_ID], typeArgs);
3225
3341
  return txBlock;
3226
3342
  };
3227
3343
  var updateSupraPrice = (txBlock, packageId, request, holderId, registryId, coinType) => {
3228
3344
  txBlock.moveCall(
3229
3345
  `${packageId}::rule::set_price`,
3230
- [request, holderId, registryId, import_utils9.SUI_CLOCK_OBJECT_ID],
3346
+ [request, holderId, registryId, import_utils11.SUI_CLOCK_OBJECT_ID],
3231
3347
  [coinType]
3232
3348
  );
3233
3349
  };
3234
3350
  var updateSwitchboardPrice = (txBlock, packageId, request, aggregatorId, registryId, coinType) => {
3235
3351
  txBlock.moveCall(
3236
3352
  `${packageId}::rule::set_price`,
3237
- [request, aggregatorId, registryId, import_utils9.SUI_CLOCK_OBJECT_ID],
3353
+ [request, aggregatorId, registryId, import_utils11.SUI_CLOCK_OBJECT_ID],
3238
3354
  [coinType]
3239
3355
  );
3240
3356
  };
3241
3357
  var updatePythPrice = (txBlock, packageId, request, stateId, feedObjectId, registryId, coinType) => {
3242
3358
  txBlock.moveCall(
3243
3359
  `${packageId}::rule::set_price`,
3244
- [request, stateId, feedObjectId, registryId, import_utils9.SUI_CLOCK_OBJECT_ID],
3360
+ [request, stateId, feedObjectId, registryId, import_utils11.SUI_CLOCK_OBJECT_ID],
3245
3361
  [coinType]
3246
3362
  );
3247
3363
  };
@@ -3307,7 +3423,7 @@ var generateCoreNormalMethod = ({
3307
3423
  coreIds.coinDecimalsRegistry,
3308
3424
  amount,
3309
3425
  coreIds.xOracle,
3310
- import_utils10.SUI_CLOCK_OBJECT_ID
3426
+ import_utils12.SUI_CLOCK_OBJECT_ID
3311
3427
  ],
3312
3428
  [coinType]
3313
3429
  );
@@ -3316,7 +3432,7 @@ var generateCoreNormalMethod = ({
3316
3432
  const coinType = builder.utils.parseCoinType(poolCoinName);
3317
3433
  return txBlock.moveCall(
3318
3434
  `${coreIds.protocolPkg}::mint::mint`,
3319
- [coreIds.version, coreIds.market, coin, import_utils10.SUI_CLOCK_OBJECT_ID],
3435
+ [coreIds.version, coreIds.market, coin, import_utils12.SUI_CLOCK_OBJECT_ID],
3320
3436
  [coinType]
3321
3437
  );
3322
3438
  },
@@ -3324,7 +3440,7 @@ var generateCoreNormalMethod = ({
3324
3440
  const coinType = builder.utils.parseCoinType(poolCoinName);
3325
3441
  return txBlock.moveCall(
3326
3442
  `${coreIds.protocolPkg}::mint::mint_entry`,
3327
- [coreIds.version, coreIds.market, coin, import_utils10.SUI_CLOCK_OBJECT_ID],
3443
+ [coreIds.version, coreIds.market, coin, import_utils12.SUI_CLOCK_OBJECT_ID],
3328
3444
  [coinType]
3329
3445
  );
3330
3446
  },
@@ -3332,7 +3448,7 @@ var generateCoreNormalMethod = ({
3332
3448
  const coinType = builder.utils.parseCoinType(poolCoinName);
3333
3449
  return txBlock.moveCall(
3334
3450
  `${coreIds.protocolPkg}::redeem::redeem`,
3335
- [coreIds.version, coreIds.market, marketCoin, import_utils10.SUI_CLOCK_OBJECT_ID],
3451
+ [coreIds.version, coreIds.market, marketCoin, import_utils12.SUI_CLOCK_OBJECT_ID],
3336
3452
  [coinType]
3337
3453
  );
3338
3454
  },
@@ -3340,7 +3456,7 @@ var generateCoreNormalMethod = ({
3340
3456
  const coinType = builder.utils.parseCoinType(poolCoinName);
3341
3457
  return txBlock.moveCall(
3342
3458
  `${coreIds.protocolPkg}::redeem::redeem_entry`,
3343
- [coreIds.version, coreIds.market, marketCoin, import_utils10.SUI_CLOCK_OBJECT_ID],
3459
+ [coreIds.version, coreIds.market, marketCoin, import_utils12.SUI_CLOCK_OBJECT_ID],
3344
3460
  [coinType]
3345
3461
  );
3346
3462
  },
@@ -3356,7 +3472,7 @@ var generateCoreNormalMethod = ({
3356
3472
  coreIds.coinDecimalsRegistry,
3357
3473
  amount,
3358
3474
  coreIds.xOracle,
3359
- import_utils10.SUI_CLOCK_OBJECT_ID
3475
+ import_utils12.SUI_CLOCK_OBJECT_ID
3360
3476
  ],
3361
3477
  [coinType]
3362
3478
  );
@@ -3373,7 +3489,7 @@ var generateCoreNormalMethod = ({
3373
3489
  coreIds.coinDecimalsRegistry,
3374
3490
  amount,
3375
3491
  coreIds.xOracle,
3376
- import_utils10.SUI_CLOCK_OBJECT_ID
3492
+ import_utils12.SUI_CLOCK_OBJECT_ID
3377
3493
  ],
3378
3494
  [coinType]
3379
3495
  );
@@ -3387,7 +3503,7 @@ var generateCoreNormalMethod = ({
3387
3503
  obligation,
3388
3504
  coreIds.market,
3389
3505
  coin,
3390
- import_utils10.SUI_CLOCK_OBJECT_ID
3506
+ import_utils12.SUI_CLOCK_OBJECT_ID
3391
3507
  ],
3392
3508
  [coinType]
3393
3509
  );
@@ -3565,7 +3681,7 @@ var newCoreTxBlock = (builder, initTxBlock) => {
3565
3681
 
3566
3682
  // src/builders/spoolBuilder.ts
3567
3683
  var import_transactions2 = require("@mysten/sui.js/transactions");
3568
- var import_utils12 = require("@mysten/sui.js/utils");
3684
+ var import_utils14 = require("@mysten/sui.js/utils");
3569
3685
  var import_sui_kit6 = require("@scallop-io/sui-kit");
3570
3686
  var requireStakeAccountIds = async (...params) => {
3571
3687
  const [builder, txBlock, stakeMarketCoinName, stakeAccountId] = params;
@@ -3605,7 +3721,7 @@ var generateSpoolNormalMethod = ({
3605
3721
  );
3606
3722
  return txBlock.moveCall(
3607
3723
  `${spoolIds.spoolPkg}::user::new_spool_account`,
3608
- [stakePoolId, import_utils12.SUI_CLOCK_OBJECT_ID],
3724
+ [stakePoolId, import_utils14.SUI_CLOCK_OBJECT_ID],
3609
3725
  [marketCoinType]
3610
3726
  );
3611
3727
  },
@@ -3616,7 +3732,7 @@ var generateSpoolNormalMethod = ({
3616
3732
  );
3617
3733
  txBlock.moveCall(
3618
3734
  `${spoolIds.spoolPkg}::user::stake`,
3619
- [stakePoolId, stakeAccount, coin, import_utils12.SUI_CLOCK_OBJECT_ID],
3735
+ [stakePoolId, stakeAccount, coin, import_utils14.SUI_CLOCK_OBJECT_ID],
3620
3736
  [marketCoinType]
3621
3737
  );
3622
3738
  },
@@ -3627,7 +3743,7 @@ var generateSpoolNormalMethod = ({
3627
3743
  );
3628
3744
  return txBlock.moveCall(
3629
3745
  `${spoolIds.spoolPkg}::user::unstake`,
3630
- [stakePoolId, stakeAccount, amount, import_utils12.SUI_CLOCK_OBJECT_ID],
3746
+ [stakePoolId, stakeAccount, amount, import_utils14.SUI_CLOCK_OBJECT_ID],
3631
3747
  [marketCoinType]
3632
3748
  );
3633
3749
  },
@@ -3643,7 +3759,7 @@ var generateSpoolNormalMethod = ({
3643
3759
  const rewardCoinType = builder.utils.parseCoinType(rewardCoinName);
3644
3760
  return txBlock.moveCall(
3645
3761
  `${spoolIds.spoolPkg}::user::redeem_rewards`,
3646
- [stakePoolId, rewardPoolId, stakeAccount, import_utils12.SUI_CLOCK_OBJECT_ID],
3762
+ [stakePoolId, rewardPoolId, stakeAccount, import_utils14.SUI_CLOCK_OBJECT_ID],
3647
3763
  [marketCoinType, rewardCoinType]
3648
3764
  );
3649
3765
  }
@@ -3753,7 +3869,7 @@ var newSpoolTxBlock = (builder, initTxBlock) => {
3753
3869
 
3754
3870
  // src/builders/borrowIncentiveBuilder.ts
3755
3871
  var import_transactions3 = require("@mysten/sui.js/transactions");
3756
- var import_utils14 = require("@mysten/sui.js/utils");
3872
+ var import_utils16 = require("@mysten/sui.js/utils");
3757
3873
  var import_sui_kit7 = require("@scallop-io/sui-kit");
3758
3874
  var requireObligationInfo2 = async (...params) => {
3759
3875
  const [builder, txBlock, obligationId, obligationKey] = params;
@@ -3797,7 +3913,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
3797
3913
  obligaionKey,
3798
3914
  obligationId,
3799
3915
  borrowIncentiveIds.obligationAccessStore,
3800
- import_utils14.SUI_CLOCK_OBJECT_ID
3916
+ import_utils16.SUI_CLOCK_OBJECT_ID
3801
3917
  ],
3802
3918
  [rewardType]
3803
3919
  );
@@ -3812,7 +3928,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
3812
3928
  borrowIncentiveIds.incentiveAccounts,
3813
3929
  obligaionKey,
3814
3930
  obligationId,
3815
- import_utils14.SUI_CLOCK_OBJECT_ID
3931
+ import_utils16.SUI_CLOCK_OBJECT_ID
3816
3932
  ],
3817
3933
  [rewardType]
3818
3934
  );
@@ -3827,7 +3943,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
3827
3943
  borrowIncentiveIds.incentiveAccounts,
3828
3944
  obligaionKey,
3829
3945
  obligationId,
3830
- import_utils14.SUI_CLOCK_OBJECT_ID
3946
+ import_utils16.SUI_CLOCK_OBJECT_ID
3831
3947
  ],
3832
3948
  [rewardType]
3833
3949
  );
@@ -3953,7 +4069,7 @@ var ScallopBuilder = class {
3953
4069
  address: this.address,
3954
4070
  query: this.query
3955
4071
  });
3956
- this.walletAddress = (0, import_utils16.normalizeSuiAddress)(
4072
+ this.walletAddress = (0, import_utils18.normalizeSuiAddress)(
3957
4073
  params?.walletAddress || this.suiKit.currentAddress()
3958
4074
  );
3959
4075
  this.isTestnet = params.networkType ? params.networkType === "testnet" : false;
@@ -4049,7 +4165,7 @@ var ScallopClient = class {
4049
4165
  query: this.query,
4050
4166
  utils: this.utils
4051
4167
  });
4052
- this.walletAddress = (0, import_utils17.normalizeSuiAddress)(
4168
+ this.walletAddress = (0, import_utils19.normalizeSuiAddress)(
4053
4169
  params?.walletAddress || this.suiKit.currentAddress()
4054
4170
  );
4055
4171
  }
@@ -4614,6 +4730,7 @@ var Scallop = class {
4614
4730
  0 && (module.exports = {
4615
4731
  ADDRESSES_ID,
4616
4732
  API_BASE_URL,
4733
+ BORROW_FEE_PROTOCOL_ID,
4617
4734
  PROTOCOL_OBJECT_ID,
4618
4735
  SUPPORT_BORROW_INCENTIVE_POOLS,
4619
4736
  SUPPORT_BORROW_INCENTIVE_REWARDS,