@scallop-io/sui-scallop-sdk 0.42.6 → 0.42.8

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
@@ -47,9 +47,11 @@ __export(src_exports, {
47
47
  ScallopUtils: () => ScallopUtils,
48
48
  assetCoins: () => assetCoins,
49
49
  coinDecimals: () => coinDecimals,
50
+ coinIds: () => coinIds,
50
51
  marketCoins: () => marketCoins,
51
52
  rewardCoins: () => rewardCoins,
52
- stakeMarketCoins: () => stakeMarketCoins
53
+ stakeMarketCoins: () => stakeMarketCoins,
54
+ wormholeCoinIds: () => wormholeCoinIds
53
55
  });
54
56
  module.exports = __toCommonJS(src_exports);
55
57
 
@@ -144,6 +146,24 @@ var rewardCoins = {
144
146
  susdc: "sui",
145
147
  susdt: "sui"
146
148
  };
149
+ var coinIds = {
150
+ sui: "0x0000000000000000000000000000000000000000000000000000000000000002",
151
+ eth: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
152
+ btc: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
153
+ usdc: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
154
+ usdt: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
155
+ apt: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
156
+ sol: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",
157
+ cetus: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"
158
+ };
159
+ var wormholeCoinIds = {
160
+ eth: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
161
+ btc: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
162
+ usdc: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
163
+ usdt: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
164
+ apt: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
165
+ sol: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"
166
+ };
147
167
 
148
168
  // src/models/scallop.ts
149
169
  var import_sui_kit8 = require("@scallop-io/sui-kit");
@@ -604,11 +624,11 @@ var ScallopAddress = class {
604
624
  };
605
625
 
606
626
  // src/models/scallopClient.ts
607
- var import_utils10 = require("@mysten/sui.js/utils");
627
+ var import_utils11 = require("@mysten/sui.js/utils");
608
628
  var import_sui_kit7 = require("@scallop-io/sui-kit");
609
629
 
610
630
  // src/models/scallopUtils.ts
611
- var import_utils4 = require("@mysten/sui.js/utils");
631
+ var import_utils5 = require("@mysten/sui.js/utils");
612
632
  var import_sui_kit3 = require("@scallop-io/sui-kit");
613
633
  var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
614
634
 
@@ -691,12 +711,12 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
691
711
  parsedMarketPoolData.debtAmount
692
712
  );
693
713
  const borrowCoin = borrowAmount.shiftedBy(-1 * coinDecimal);
694
- const teserveAmount = (0, import_bignumber.default)(parsedMarketPoolData.reserveAmount).plus(
714
+ const reserveAmount = (0, import_bignumber.default)(parsedMarketPoolData.reserveAmount).plus(
695
715
  increasedDebtAmount.multipliedBy(parsedMarketPoolData.reserveFactor)
696
716
  );
697
- const reserveCoin = teserveAmount.shiftedBy(-1 * coinDecimal);
717
+ const reserveCoin = reserveAmount.shiftedBy(-1 * coinDecimal);
698
718
  const supplyAmount = (0, import_bignumber.default)(borrowAmount).plus(
699
- Math.max(parsedMarketPoolData.cashAmount - teserveAmount.toNumber(), 0)
719
+ Math.max(parsedMarketPoolData.cashAmount - reserveAmount.toNumber(), 0)
700
720
  );
701
721
  const supplyCoin = supplyAmount.shiftedBy(-1 * coinDecimal);
702
722
  let utilizationRate = (0, import_bignumber.default)(borrowAmount).dividedBy(supplyAmount);
@@ -727,7 +747,7 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
727
747
  supplyCoin: supplyCoin.toNumber(),
728
748
  borrowAmount: borrowAmount.toNumber(),
729
749
  borrowCoin: borrowCoin.toNumber(),
730
- reserveAmount: teserveAmount.toNumber(),
750
+ reserveAmount: reserveAmount.toNumber(),
731
751
  reserveCoin: reserveCoin.toNumber(),
732
752
  utilizationRate: utilizationRate.toNumber(),
733
753
  supplyApr: supplyApr.toNumber(),
@@ -851,9 +871,9 @@ var calculateRewardPoolData = (parsedStakePoolData, parsedRewardPoolData, calcul
851
871
  );
852
872
  const claimedRewardValue = claimedRewardCoin.multipliedBy(rewardCoinPrice);
853
873
  const rewardValueForYear = (0, import_bignumber.default)(rewardPerSec).shiftedBy(-1 * rewardCoinDecimal).multipliedBy(rateYearFactor).multipliedBy(rewardCoinPrice);
854
- const stakeRate = rewardValueForYear.dividedBy(calculatedStakePoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedStakePoolData.stakedValue).toNumber() : Infinity;
874
+ const rewardRate = rewardValueForYear.dividedBy(calculatedStakePoolData.stakedValue).isFinite() ? rewardValueForYear.dividedBy(calculatedStakePoolData.stakedValue).toNumber() : Infinity;
855
875
  return {
856
- stakeApr: stakeRate,
876
+ rewardApr: rewardRate,
857
877
  totalRewardAmount: totalRewardAmount.toNumber(),
858
878
  totalRewardCoin: totalRewardCoin.toNumber(),
859
879
  totalRewardValue: totalRewardValue.toNumber(),
@@ -868,6 +888,13 @@ var calculateRewardPoolData = (parsedStakePoolData, parsedRewardPoolData, calcul
868
888
  exchangeRateDenominator: parsedRewardPoolData.exchangeRateDenominator
869
889
  };
870
890
  };
891
+ var minBigNumber = (...args) => {
892
+ return (0, import_bignumber.default)(
893
+ args.reduce(
894
+ (min, current) => new import_bignumber.default(current).lt(min) ? current : min
895
+ )
896
+ );
897
+ };
871
898
 
872
899
  // src/utils/util.ts
873
900
  var isMarketCoin = (coinName) => {
@@ -928,6 +955,8 @@ var queryMarket = async (query) => {
928
955
  coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
929
956
  coinDecimal: query.utils.getCoinDecimal(poolCoinName),
930
957
  coinPrice,
958
+ highKink: parsedMarketPoolData.highKink,
959
+ midKink: parsedMarketPoolData.midKink,
931
960
  reserveFactor: parsedMarketPoolData.reserveFactor,
932
961
  borrowWeight: parsedMarketPoolData.borrowWeight,
933
962
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
@@ -1096,6 +1125,8 @@ var getMarketPool = async (query, poolCoinName, marketObject, coinPrice) => {
1096
1125
  coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
1097
1126
  coinDecimal: query.utils.getCoinDecimal(poolCoinName),
1098
1127
  coinPrice: coinPrice ?? 0,
1128
+ highKink: parsedMarketPoolData.highKink,
1129
+ midKink: parsedMarketPoolData.midKink,
1099
1130
  reserveFactor: parsedMarketPoolData.reserveFactor,
1100
1131
  borrowWeight: parsedMarketPoolData.borrowWeight,
1101
1132
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
@@ -1499,8 +1530,8 @@ var getSpool = async (query, stakeMarketCoinName, marketPool) => {
1499
1530
  rewardCoinDecimal
1500
1531
  );
1501
1532
  spool = {
1502
- marketCoin: stakeMarketCoinName,
1503
- symbol: query.utils.parseSymbol(stakeCoinName),
1533
+ marketCoinName: stakeMarketCoinName,
1534
+ symbol: query.utils.parseSymbol(stakeMarketCoinName),
1504
1535
  coinType: query.utils.parseCoinType(stakeCoinName),
1505
1536
  marketCoinType: query.utils.parseMarketCoinType(stakeCoinName),
1506
1537
  rewardCoinType: isMarketCoin(rewardCoin) ? query.utils.parseMarketCoinType(rewardCoin) : query.utils.parseCoinType(rewardCoin),
@@ -1776,7 +1807,9 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1776
1807
  let stakedCoin = (0, import_bignumber3.default)(0);
1777
1808
  let stakedValue = (0, import_bignumber3.default)(0);
1778
1809
  let availableUnstakeAmount = (0, import_bignumber3.default)(0);
1810
+ let availableUnstakeCoin = (0, import_bignumber3.default)(0);
1779
1811
  let availableClaimAmount = (0, import_bignumber3.default)(0);
1812
+ let availableClaimCoin = (0, import_bignumber3.default)(0);
1780
1813
  if (spool) {
1781
1814
  for (const stakeAccount of stakeAccounts) {
1782
1815
  const accountStakedMarketCoinAmount = (0, import_bignumber3.default)(stakeAccount.staked);
@@ -1802,6 +1835,7 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1802
1835
  availableUnstakeAmount = availableUnstakeAmount.plus(
1803
1836
  accountStakedMarketCoinAmount
1804
1837
  );
1838
+ availableUnstakeCoin = availableUnstakeAmount.shiftedBy(-1 * coinDecimal);
1805
1839
  const baseIndexRate = 1e9;
1806
1840
  const increasedPointRate = spool?.currentPointIndex ? (0, import_bignumber3.default)(spool.currentPointIndex - stakeAccount.index).dividedBy(
1807
1841
  baseIndexRate
@@ -1809,6 +1843,7 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1809
1843
  availableClaimAmount = availableClaimAmount.plus(
1810
1844
  (0, import_bignumber3.default)(stakeAccount.staked).multipliedBy(increasedPointRate).plus(stakeAccount.points).multipliedBy(spool.exchangeRateNumerator).dividedBy(spool.exchangeRateDenominator)
1811
1845
  );
1846
+ availableClaimCoin = availableClaimAmount.shiftedBy(-1 * coinDecimal);
1812
1847
  }
1813
1848
  }
1814
1849
  const suppliedAmount = (0, import_bignumber3.default)(marketCoinAmount).multipliedBy(
@@ -1816,6 +1851,18 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1816
1851
  );
1817
1852
  const suppliedCoin = suppliedAmount.shiftedBy(-1 * coinDecimal);
1818
1853
  const suppliedValue = suppliedCoin.multipliedBy(coinPrice ?? 0);
1854
+ const unstakedMarketAmount = (0, import_bignumber3.default)(marketCoinAmount);
1855
+ const unstakedMarketCoin = unstakedMarketAmount.shiftedBy(-1 * coinDecimal);
1856
+ const availableSupplyAmount = (0, import_bignumber3.default)(coinAmount);
1857
+ const availableSupplyCoin = availableSupplyAmount.shiftedBy(-1 * coinDecimal);
1858
+ const availableWithdrawAmount = minBigNumber(
1859
+ suppliedAmount,
1860
+ marketPool?.supplyAmount ?? Infinity
1861
+ ).plus(stakedAmount);
1862
+ const availableWithdrawCoin = minBigNumber(
1863
+ suppliedCoin,
1864
+ marketPool?.supplyCoin ?? Infinity
1865
+ ).plus(stakedCoin);
1819
1866
  const lending = {
1820
1867
  coinName: poolCoinName,
1821
1868
  symbol: query.utils.parseSymbol(poolCoinName),
@@ -1825,7 +1872,7 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1825
1872
  coinPrice: coinPrice ?? 0,
1826
1873
  supplyApr: marketPool?.supplyApr ?? 0,
1827
1874
  supplyApy: marketPool?.supplyApy ?? 0,
1828
- rewardApr: spool?.stakeApr ?? 0,
1875
+ rewardApr: spool?.rewardApr ?? 0,
1829
1876
  suppliedAmount: suppliedAmount.plus(stakedAmount).toNumber(),
1830
1877
  suppliedCoin: suppliedCoin.plus(stakedCoin).toNumber(),
1831
1878
  suppliedValue: suppliedValue.plus(stakedValue).toNumber(),
@@ -1834,11 +1881,21 @@ var getLending = async (query, poolCoinName, ownerAddress, marketPool, spool, st
1834
1881
  stakedAmount: stakedAmount.toNumber(),
1835
1882
  stakedCoin: stakedCoin.toNumber(),
1836
1883
  stakedValue: stakedValue.toNumber(),
1837
- availableSupplyAmount: coinAmount,
1838
- availableWithdrawAmount: 0,
1839
- availableStakeAmount: marketCoinAmount,
1884
+ unstakedMarketAmount: unstakedMarketAmount.toNumber(),
1885
+ unstakedMarketCoin: unstakedMarketCoin.toNumber(),
1886
+ unstakedAmount: suppliedAmount.toNumber(),
1887
+ unstakedCoin: suppliedCoin.toNumber(),
1888
+ unstakedValue: suppliedValue.toNumber(),
1889
+ availableSupplyAmount: availableSupplyAmount.toNumber(),
1890
+ availableSupplyCoin: availableSupplyCoin.toNumber(),
1891
+ availableWithdrawAmount: availableWithdrawAmount.toNumber(),
1892
+ availableWithdrawCoin: availableWithdrawCoin.toNumber(),
1893
+ availableStakeAmount: unstakedMarketAmount.toNumber(),
1894
+ availableStakeCoin: unstakedMarketCoin.toNumber(),
1840
1895
  availableUnstakeAmount: availableUnstakeAmount.toNumber(),
1841
- availableClaimAmount: availableClaimAmount.toNumber()
1896
+ availableUnstakeCoin: availableUnstakeCoin.toNumber(),
1897
+ availableClaimAmount: availableClaimAmount.toNumber(),
1898
+ availableClaimCoin: availableClaimCoin.toNumber()
1842
1899
  };
1843
1900
  return lending;
1844
1901
  };
@@ -1875,13 +1932,13 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
1875
1932
  coinAmounts = coinAmounts || await query.getCoinAmounts(assetCoinNames, ownerAddress);
1876
1933
  const collaterals = {};
1877
1934
  const debts = {};
1878
- let totalCollateralPools = 0;
1879
- let totalCollateralValue = (0, import_bignumber3.default)(0);
1935
+ let totalDepositedPools = 0;
1936
+ let totalDepositedValue = (0, import_bignumber3.default)(0);
1880
1937
  let totalBorrowCapacityValue = (0, import_bignumber3.default)(0);
1881
1938
  let totalRequiredCollateralValue = (0, import_bignumber3.default)(0);
1882
- let totalDebtPools = 0;
1883
- let totalDebtValue = (0, import_bignumber3.default)(0);
1884
- let totalDebtValueWithWeight = (0, import_bignumber3.default)(0);
1939
+ let totalBorrowedPools = 0;
1940
+ let totalBorrowedValue = (0, import_bignumber3.default)(0);
1941
+ let totalBorrowedValueWithWeight = (0, import_bignumber3.default)(0);
1885
1942
  for (const collateral of obligationQuery.collaterals) {
1886
1943
  const collateralCoinName = query.utils.parseCoinNameFromType(
1887
1944
  collateral.type.name
@@ -1891,33 +1948,36 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
1891
1948
  const coinPrice = coinPrices?.[collateralCoinName];
1892
1949
  const coinAmount = coinAmounts?.[collateralCoinName] ?? 0;
1893
1950
  if (marketCollateral && coinPrice) {
1894
- const collateralAmount = (0, import_bignumber3.default)(collateral.amount);
1895
- const collateralCoin = collateralAmount.shiftedBy(-1 * coinDecimal);
1896
- const collateralValue = collateralCoin.multipliedBy(coinPrice);
1897
- const borrowCapacityValue = collateralValue.multipliedBy(
1951
+ const depositedAmount = (0, import_bignumber3.default)(collateral.amount);
1952
+ const depositedCoin = depositedAmount.shiftedBy(-1 * coinDecimal);
1953
+ const depositedValue = depositedCoin.multipliedBy(coinPrice);
1954
+ const borrowCapacityValue = depositedValue.multipliedBy(
1898
1955
  marketCollateral.collateralFactor
1899
1956
  );
1900
- const requiredCollateralValue2 = collateralValue.multipliedBy(
1957
+ const requiredCollateralValue2 = depositedValue.multipliedBy(
1901
1958
  marketCollateral.liquidationFactor
1902
1959
  );
1903
1960
  const availableDepositAmount = (0, import_bignumber3.default)(coinAmount);
1904
1961
  const availableDepositCoin = availableDepositAmount.shiftedBy(
1905
1962
  -1 * coinDecimal
1906
1963
  );
1907
- totalCollateralValue = totalCollateralValue.plus(collateralValue);
1964
+ totalDepositedValue = totalDepositedValue.plus(depositedValue);
1908
1965
  totalBorrowCapacityValue = totalBorrowCapacityValue.plus(borrowCapacityValue);
1909
1966
  totalRequiredCollateralValue = totalRequiredCollateralValue.plus(
1910
1967
  requiredCollateralValue2
1911
1968
  );
1912
- if (collateralAmount.isGreaterThan(0)) {
1913
- totalCollateralPools++;
1969
+ if (depositedAmount.isGreaterThan(0)) {
1970
+ totalDepositedPools++;
1914
1971
  }
1915
1972
  collaterals[collateralCoinName] = {
1916
1973
  coinName: collateralCoinName,
1917
1974
  coinType: collateral.type.name,
1918
- collateralAmount: collateralAmount.toNumber(),
1919
- collateralCoin: collateralCoin.toNumber(),
1920
- collateralValue: collateralValue.toNumber(),
1975
+ symbol: query.utils.parseSymbol(collateralCoinName),
1976
+ coinDecimal,
1977
+ coinPrice,
1978
+ depositedAmount: depositedAmount.toNumber(),
1979
+ depositedCoin: depositedCoin.toNumber(),
1980
+ depositedValue: depositedValue.toNumber(),
1921
1981
  borrowCapacityValue: borrowCapacityValue.toNumber(),
1922
1982
  requiredCollateralValue: requiredCollateralValue2.toNumber(),
1923
1983
  availableDepositAmount: availableDepositAmount.toNumber(),
@@ -1936,28 +1996,35 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
1936
1996
  const coinPrice = coinPrices?.[poolCoinName];
1937
1997
  if (marketPool && coinPrice) {
1938
1998
  const increasedRate = marketPool.borrowIndex / Number(debt.borrowIndex) - 1;
1939
- const debtAmount = (0, import_bignumber3.default)(debt.amount);
1940
- const debtCoin = debtAmount.shiftedBy(-1 * coinDecimal);
1941
- const availableRepayAmount = debtAmount.multipliedBy(increasedRate + 1);
1999
+ const borrowedAmount = (0, import_bignumber3.default)(debt.amount);
2000
+ const borrowedCoin = borrowedAmount.shiftedBy(-1 * coinDecimal);
2001
+ const availableRepayAmount = borrowedAmount.multipliedBy(
2002
+ increasedRate + 1
2003
+ );
1942
2004
  const availableRepayCoin = availableRepayAmount.shiftedBy(
1943
2005
  -1 * coinDecimal
1944
2006
  );
1945
- const debtValue = availableRepayCoin.multipliedBy(coinPrice);
1946
- const debtValueWithWeight = debtValue.multipliedBy(
2007
+ const borrowedValue = availableRepayCoin.multipliedBy(coinPrice);
2008
+ const borrowedValueWithWeight = borrowedValue.multipliedBy(
1947
2009
  marketPool.borrowWeight
1948
2010
  );
1949
- totalDebtValue = totalDebtValue.plus(debtValue);
1950
- totalDebtValueWithWeight = totalDebtValueWithWeight.plus(debtValueWithWeight);
1951
- if (debtAmount.isGreaterThan(0)) {
1952
- totalDebtPools++;
2011
+ totalBorrowedValue = totalBorrowedValue.plus(borrowedValue);
2012
+ totalBorrowedValueWithWeight = totalBorrowedValueWithWeight.plus(
2013
+ borrowedValueWithWeight
2014
+ );
2015
+ if (borrowedAmount.isGreaterThan(0)) {
2016
+ totalBorrowedPools++;
1953
2017
  }
1954
2018
  debts[poolCoinName] = {
1955
2019
  coinName: poolCoinName,
1956
2020
  coinType: debt.type.name,
1957
- debtAmount: debtAmount.toNumber(),
1958
- debtCoin: debtCoin.toNumber(),
1959
- debtValue: debtValue.toNumber(),
1960
- debtValueWithWeight: debtValueWithWeight.toNumber(),
2021
+ symbol: query.utils.parseSymbol(poolCoinName),
2022
+ coinDecimal,
2023
+ coinPrice,
2024
+ borrowedAmount: borrowedAmount.toNumber(),
2025
+ borrowedCoin: borrowedCoin.toNumber(),
2026
+ borrowedValue: borrowedValue.toNumber(),
2027
+ borrowedValueWithWeight: borrowedValueWithWeight.toNumber(),
1961
2028
  borrowIndex: Number(debt.borrowIndex),
1962
2029
  availableBorrowAmount: 0,
1963
2030
  availableBorrowCoin: 0,
@@ -1966,33 +2033,33 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
1966
2033
  };
1967
2034
  }
1968
2035
  }
1969
- let riskLevel = totalRequiredCollateralValue.isZero() && totalDebtValueWithWeight.isZero() ? (0, import_bignumber3.default)(0) : totalDebtValueWithWeight.dividedBy(totalRequiredCollateralValue);
2036
+ let riskLevel = totalRequiredCollateralValue.isZero() && totalBorrowedValueWithWeight.isZero() ? (0, import_bignumber3.default)(0) : totalBorrowedValueWithWeight.dividedBy(totalRequiredCollateralValue);
1970
2037
  riskLevel = riskLevel.isFinite() ? riskLevel.isLessThan(1) ? riskLevel : (0, import_bignumber3.default)(1) : (0, import_bignumber3.default)(1);
1971
- const accountBalanceValue = totalCollateralValue.minus(totalDebtValue).isGreaterThan(0) ? totalCollateralValue.minus(totalDebtValue) : (0, import_bignumber3.default)(0);
1972
- const availableCollateralValue = totalBorrowCapacityValue.minus(totalDebtValueWithWeight).isGreaterThan(0) ? totalBorrowCapacityValue.minus(totalDebtValueWithWeight) : (0, import_bignumber3.default)(0);
1973
- const requiredCollateralValue = totalDebtValueWithWeight.isGreaterThan(0) ? totalRequiredCollateralValue : (0, import_bignumber3.default)(0);
1974
- const unhealthyCollateralValue = totalDebtValueWithWeight.minus(requiredCollateralValue).isGreaterThan(0) ? totalDebtValueWithWeight.minus(requiredCollateralValue) : (0, import_bignumber3.default)(0);
2038
+ const accountBalanceValue = totalDepositedValue.minus(totalBorrowedValue).isGreaterThan(0) ? totalDepositedValue.minus(totalBorrowedValue) : (0, import_bignumber3.default)(0);
2039
+ const availableCollateralValue = totalBorrowCapacityValue.minus(totalBorrowedValueWithWeight).isGreaterThan(0) ? totalBorrowCapacityValue.minus(totalBorrowedValueWithWeight) : (0, import_bignumber3.default)(0);
2040
+ const requiredCollateralValue = totalBorrowedValueWithWeight.isGreaterThan(0) ? totalRequiredCollateralValue : (0, import_bignumber3.default)(0);
2041
+ const unhealthyCollateralValue = totalBorrowedValueWithWeight.minus(requiredCollateralValue).isGreaterThan(0) ? totalBorrowedValueWithWeight.minus(requiredCollateralValue) : (0, import_bignumber3.default)(0);
1975
2042
  const obligationAccount = {
1976
2043
  obligationId,
1977
2044
  // Deposited collateral value (collateral balance)
1978
- totalCollateralValue: totalCollateralValue.toNumber(),
2045
+ totalDepositedValue: totalDepositedValue.toNumber(),
1979
2046
  // Borrowed debt value (liabilities balance)
1980
- totalDebtValue: totalDebtValue.toNumber(),
2047
+ totalBorrowedValue: totalBorrowedValue.toNumber(),
1981
2048
  // The difference between the user’s actual deposit and loan (remaining balance)
1982
2049
  totalBalanceValue: accountBalanceValue.toNumber(),
1983
2050
  // Effective collateral value (the actual collateral value included in the calculation).
1984
2051
  totalBorrowCapacityValue: totalBorrowCapacityValue.toNumber(),
1985
2052
  // Available collateral value (the remaining collateral value that can be borrowed).
1986
- availableCollateralValue: availableCollateralValue.toNumber(),
2053
+ totalAvailableCollateralValue: availableCollateralValue.toNumber(),
1987
2054
  // Available debt value (the actual borrowing value included in the calculation).
1988
- totalDebtValueWithWeight: totalDebtValueWithWeight.toNumber(),
2055
+ totalBorrowedValueWithWeight: totalBorrowedValueWithWeight.toNumber(),
1989
2056
  // Required collateral value (avoid be liquidated).
1990
- requiredCollateralValue: requiredCollateralValue.toNumber(),
2057
+ totalRequiredCollateralValue: requiredCollateralValue.toNumber(),
1991
2058
  // Unliquidated collateral value (pending liquidation).
1992
- unhealthyCollateralValue: unhealthyCollateralValue.toNumber(),
1993
- riskLevel: riskLevel.toNumber(),
1994
- totalCollateralPools,
1995
- totalDebtPools,
2059
+ totalUnhealthyCollateralValue: unhealthyCollateralValue.toNumber(),
2060
+ totalRiskLevel: riskLevel.toNumber(),
2061
+ totalDepositedPools,
2062
+ totalBorrowedPools,
1996
2063
  collaterals,
1997
2064
  debts
1998
2065
  };
@@ -2001,13 +2068,13 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2001
2068
  )) {
2002
2069
  const marketCollateral = market.collaterals[collateralCoinName];
2003
2070
  if (marketCollateral) {
2004
- const availableWithdrawAmount = obligationAccount.totalDebtValueWithWeight === 0 ? obligationCollateral.collateralAmount : Math.min(
2005
- (0, import_bignumber3.default)(obligationAccount.availableCollateralValue).dividedBy(marketCollateral.collateralFactor).dividedBy(marketCollateral.coinPrice).multipliedBy(0.99).toNumber(),
2006
- obligationCollateral.collateralAmount,
2071
+ const availableWithdrawAmount = obligationAccount.totalBorrowedValueWithWeight === 0 ? (0, import_bignumber3.default)(obligationCollateral.depositedAmount) : minBigNumber(
2072
+ (0, import_bignumber3.default)(obligationAccount.totalAvailableCollateralValue).dividedBy(marketCollateral.collateralFactor).dividedBy(marketCollateral.coinPrice).multipliedBy(0.99).toNumber(),
2073
+ obligationCollateral.depositedAmount,
2007
2074
  marketCollateral.depositAmount
2008
2075
  );
2009
- obligationCollateral.availableWithdrawAmount = availableWithdrawAmount;
2010
- obligationCollateral.availableWithdrawCoin = availableWithdrawAmount;
2076
+ obligationCollateral.availableWithdrawAmount = availableWithdrawAmount.toNumber();
2077
+ obligationCollateral.availableWithdrawCoin = availableWithdrawAmount.shiftedBy(-1 * obligationCollateral.coinDecimal).toNumber();
2011
2078
  }
2012
2079
  }
2013
2080
  for (const [assetCoinName, obligationDebt] of Object.entries(
@@ -2017,17 +2084,19 @@ var getObligationAccount = async (query, obligationId, ownerAddress, market, coi
2017
2084
  if (marketPool) {
2018
2085
  const availableRepayAmount = (0, import_bignumber3.default)(
2019
2086
  obligationDebt.availableRepayAmount
2020
- ).multipliedBy(1.01).toNumber();
2021
- const availableBorrowAmount = obligationAccount.availableCollateralValue !== 0 ? Math.min(
2022
- (0, import_bignumber3.default)(obligationAccount.availableCollateralValue).dividedBy(
2087
+ ).multipliedBy(1.01);
2088
+ const availableBorrowAmount = obligationAccount.totalAvailableCollateralValue !== 0 ? minBigNumber(
2089
+ (0, import_bignumber3.default)(obligationAccount.totalAvailableCollateralValue).dividedBy(
2023
2090
  (0, import_bignumber3.default)(marketPool.coinPrice).multipliedBy(
2024
2091
  marketPool.borrowWeight
2025
2092
  )
2026
2093
  ).multipliedBy(0.99).toNumber(),
2027
2094
  marketPool.supplyAmount
2028
- ) : 0;
2029
- obligationDebt.availableBorrowAmount = availableBorrowAmount;
2030
- obligationDebt.availableRepayAmount = availableRepayAmount;
2095
+ ) : (0, import_bignumber3.default)(0);
2096
+ obligationDebt.availableBorrowAmount = availableBorrowAmount.toNumber();
2097
+ obligationDebt.availableBorrowCoin = availableBorrowAmount.shiftedBy(-1 * obligationDebt.coinDecimal).toNumber();
2098
+ obligationDebt.availableRepayAmount = availableRepayAmount.toNumber();
2099
+ obligationDebt.availableRepayCoin = availableRepayAmount.shiftedBy(-1 * obligationDebt.coinDecimal).toNumber();
2031
2100
  }
2032
2101
  }
2033
2102
  return obligationAccount;
@@ -2429,16 +2498,19 @@ var ScallopUtils = class {
2429
2498
  */
2430
2499
  parseCoinType(coinName) {
2431
2500
  coinName = isMarketCoin(coinName) ? this.parseCoinName(coinName) : coinName;
2432
- const coinPackageId = this._address.get(`core.coins.${coinName}.id`);
2501
+ const coinPackageId = this._address.get(`core.coins.${coinName}.id`) ?? coinIds[coinName] ?? void 0;
2502
+ if (!coinPackageId) {
2503
+ throw Error(`Coin ${coinName} is not supported`);
2504
+ }
2433
2505
  if (coinName === "sui")
2434
- return (0, import_utils4.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
2506
+ return (0, import_utils5.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
2435
2507
  const wormHoleCoinIds = [
2436
- this._address.get("core.coins.usdc.id"),
2437
- this._address.get("core.coins.usdt.id"),
2438
- this._address.get("core.coins.eth.id"),
2439
- this._address.get("core.coins.btc.id"),
2440
- this._address.get("core.coins.sol.id"),
2441
- this._address.get("core.coins.apt.id")
2508
+ this._address.get("core.coins.usdc.id") ?? wormholeCoinIds.usdc,
2509
+ this._address.get("core.coins.usdt.id") ?? wormholeCoinIds.usdt,
2510
+ this._address.get("core.coins.eth.id") ?? wormholeCoinIds.eth,
2511
+ this._address.get("core.coins.btc.id") ?? wormholeCoinIds.btc,
2512
+ this._address.get("core.coins.sol.id") ?? wormholeCoinIds.sol,
2513
+ this._address.get("core.coins.apt.id") ?? wormholeCoinIds.apt
2442
2514
  ];
2443
2515
  if (wormHoleCoinIds.includes(coinPackageId)) {
2444
2516
  return `${coinPackageId}::coin::COIN`;
@@ -2458,18 +2530,18 @@ var ScallopUtils = class {
2458
2530
  return `${PROTOCOL_OBJECT_ID}::reserve::MarketCoin<${coinType}>`;
2459
2531
  }
2460
2532
  parseCoinNameFromType(coinType) {
2461
- coinType = (0, import_utils4.normalizeStructTag)(coinType);
2533
+ coinType = (0, import_utils5.normalizeStructTag)(coinType);
2462
2534
  const coinTypeRegex = new RegExp(`((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)`);
2463
2535
  const coinTypeMatch = coinType.match(coinTypeRegex);
2464
2536
  const isMarketCoinType = coinType.includes("reserve::MarketCoin");
2465
2537
  coinType = coinTypeMatch?.[1] || coinType;
2466
2538
  const wormHoleCoinTypeMap = {
2467
- [`${this._address.get("core.coins.usdc.id")}::coin::COIN`]: "usdc",
2468
- [`${this._address.get("core.coins.usdt.id")}::coin::COIN`]: "usdt",
2469
- [`${this._address.get("core.coins.eth.id")}::coin::COIN`]: "eth",
2470
- [`${this._address.get("core.coins.btc.id")}::coin::COIN`]: "btc",
2471
- [`${this._address.get("core.coins.sol.id")}::coin::COIN`]: "sol",
2472
- [`${this._address.get("core.coins.apt.id")}::coin::COIN`]: "apt"
2539
+ [`${this._address.get("core.coins.usdc.id") ?? wormholeCoinIds.usdc}::coin::COIN`]: "usdc",
2540
+ [`${this._address.get("core.coins.usdt.id") ?? wormholeCoinIds.usdt}::coin::COIN`]: "usdt",
2541
+ [`${this._address.get("core.coins.eth.id") ?? wormholeCoinIds.eth}::coin::COIN`]: "eth",
2542
+ [`${this._address.get("core.coins.btc.id") ?? wormholeCoinIds.btc}::coin::COIN`]: "btc",
2543
+ [`${this._address.get("core.coins.sol.id") ?? wormholeCoinIds.sol}::coin::COIN`]: "sol",
2544
+ [`${this._address.get("core.coins.apt.id") ?? wormholeCoinIds.apt}::coin::COIN`]: "apt"
2473
2545
  };
2474
2546
  const assetCoinName = wormHoleCoinTypeMap[coinType] || coinType.split("::")[2].toLowerCase();
2475
2547
  return isMarketCoinType ? this.parseMarketCoinName(assetCoinName) : assetCoinName;
@@ -2519,7 +2591,7 @@ var ScallopUtils = class {
2519
2591
  * @param coinType - The coin type, default is 0x2::SUI::SUI.
2520
2592
  * @return The selected transaction coin arguments.
2521
2593
  */
2522
- async selectCoinIds(amount, coinType = import_utils4.SUI_TYPE_ARG, ownerAddress) {
2594
+ async selectCoinIds(amount, coinType = import_utils5.SUI_TYPE_ARG, ownerAddress) {
2523
2595
  ownerAddress = ownerAddress || this._suiKit.currentAddress();
2524
2596
  const coins = await this._suiKit.suiInteractor.selectCoins(
2525
2597
  ownerAddress,
@@ -2638,16 +2710,16 @@ var ScallopUtils = class {
2638
2710
  };
2639
2711
 
2640
2712
  // src/models/scallopBuilder.ts
2641
- var import_utils9 = require("@mysten/sui.js/utils");
2713
+ var import_utils10 = require("@mysten/sui.js/utils");
2642
2714
  var import_sui_kit6 = require("@scallop-io/sui-kit");
2643
2715
 
2644
2716
  // src/builders/coreBuilder.ts
2645
2717
  var import_transactions = require("@mysten/sui.js/transactions");
2646
- var import_utils7 = require("@mysten/sui.js/utils");
2718
+ var import_utils8 = require("@mysten/sui.js/utils");
2647
2719
  var import_sui_kit4 = require("@scallop-io/sui-kit");
2648
2720
 
2649
2721
  // src/builders/oracle.ts
2650
- var import_utils6 = require("@mysten/sui.js/utils");
2722
+ var import_utils7 = require("@mysten/sui.js/utils");
2651
2723
  var import_pyth_sui_js2 = require("@pythnetwork/pyth-sui-js");
2652
2724
  var updateOracles = async (builder, txBlock, assetCoinNames) => {
2653
2725
  assetCoinNames = assetCoinNames ?? [
@@ -2753,27 +2825,27 @@ var priceUpdateRequest = (txBlock, packageId, xOracleId, coinType) => {
2753
2825
  var confirmPriceUpdateRequest = (txBlock, packageId, xOracleId, request, coinType) => {
2754
2826
  const target = `${packageId}::x_oracle::confirm_price_update_request`;
2755
2827
  const typeArgs = [coinType];
2756
- txBlock.moveCall(target, [xOracleId, request, import_utils6.SUI_CLOCK_OBJECT_ID], typeArgs);
2828
+ txBlock.moveCall(target, [xOracleId, request, import_utils7.SUI_CLOCK_OBJECT_ID], typeArgs);
2757
2829
  return txBlock;
2758
2830
  };
2759
2831
  var updateSupraPrice = (txBlock, packageId, request, holderId, registryId, coinType) => {
2760
2832
  txBlock.moveCall(
2761
2833
  `${packageId}::rule::set_price`,
2762
- [request, holderId, registryId, import_utils6.SUI_CLOCK_OBJECT_ID],
2834
+ [request, holderId, registryId, import_utils7.SUI_CLOCK_OBJECT_ID],
2763
2835
  [coinType]
2764
2836
  );
2765
2837
  };
2766
2838
  var updateSwitchboardPrice = (txBlock, packageId, request, aggregatorId, registryId, coinType) => {
2767
2839
  txBlock.moveCall(
2768
2840
  `${packageId}::rule::set_price`,
2769
- [request, aggregatorId, registryId, import_utils6.SUI_CLOCK_OBJECT_ID],
2841
+ [request, aggregatorId, registryId, import_utils7.SUI_CLOCK_OBJECT_ID],
2770
2842
  [coinType]
2771
2843
  );
2772
2844
  };
2773
2845
  var updatePythPrice = (txBlock, packageId, request, stateId, feedObjectId, registryId, coinType) => {
2774
2846
  txBlock.moveCall(
2775
2847
  `${packageId}::rule::set_price`,
2776
- [request, stateId, feedObjectId, registryId, import_utils6.SUI_CLOCK_OBJECT_ID],
2848
+ [request, stateId, feedObjectId, registryId, import_utils7.SUI_CLOCK_OBJECT_ID],
2777
2849
  [coinType]
2778
2850
  );
2779
2851
  };
@@ -2846,7 +2918,7 @@ var generateCoreNormalMethod = ({
2846
2918
  coreIds.coinDecimalsRegistry,
2847
2919
  amount,
2848
2920
  coreIds.xOracle,
2849
- import_utils7.SUI_CLOCK_OBJECT_ID
2921
+ import_utils8.SUI_CLOCK_OBJECT_ID
2850
2922
  ],
2851
2923
  [coinType]
2852
2924
  );
@@ -2855,7 +2927,7 @@ var generateCoreNormalMethod = ({
2855
2927
  const coinType = builder.utils.parseCoinType(poolCoinName);
2856
2928
  return txBlock.moveCall(
2857
2929
  `${coreIds.protocolPkg}::mint::mint`,
2858
- [coreIds.version, coreIds.market, coin, import_utils7.SUI_CLOCK_OBJECT_ID],
2930
+ [coreIds.version, coreIds.market, coin, import_utils8.SUI_CLOCK_OBJECT_ID],
2859
2931
  [coinType]
2860
2932
  );
2861
2933
  },
@@ -2863,7 +2935,7 @@ var generateCoreNormalMethod = ({
2863
2935
  const coinType = builder.utils.parseCoinType(poolCoinName);
2864
2936
  return txBlock.moveCall(
2865
2937
  `${coreIds.protocolPkg}::mint::mint_entry`,
2866
- [coreIds.version, coreIds.market, coin, import_utils7.SUI_CLOCK_OBJECT_ID],
2938
+ [coreIds.version, coreIds.market, coin, import_utils8.SUI_CLOCK_OBJECT_ID],
2867
2939
  [coinType]
2868
2940
  );
2869
2941
  },
@@ -2871,7 +2943,7 @@ var generateCoreNormalMethod = ({
2871
2943
  const coinType = builder.utils.parseCoinType(poolCoinName);
2872
2944
  return txBlock.moveCall(
2873
2945
  `${coreIds.protocolPkg}::redeem::redeem`,
2874
- [coreIds.version, coreIds.market, marketCoin, import_utils7.SUI_CLOCK_OBJECT_ID],
2946
+ [coreIds.version, coreIds.market, marketCoin, import_utils8.SUI_CLOCK_OBJECT_ID],
2875
2947
  [coinType]
2876
2948
  );
2877
2949
  },
@@ -2879,7 +2951,7 @@ var generateCoreNormalMethod = ({
2879
2951
  const coinType = builder.utils.parseCoinType(poolCoinName);
2880
2952
  return txBlock.moveCall(
2881
2953
  `${coreIds.protocolPkg}::redeem::redeem_entry`,
2882
- [coreIds.version, coreIds.market, marketCoin, import_utils7.SUI_CLOCK_OBJECT_ID],
2954
+ [coreIds.version, coreIds.market, marketCoin, import_utils8.SUI_CLOCK_OBJECT_ID],
2883
2955
  [coinType]
2884
2956
  );
2885
2957
  },
@@ -2895,7 +2967,7 @@ var generateCoreNormalMethod = ({
2895
2967
  coreIds.coinDecimalsRegistry,
2896
2968
  amount,
2897
2969
  coreIds.xOracle,
2898
- import_utils7.SUI_CLOCK_OBJECT_ID
2970
+ import_utils8.SUI_CLOCK_OBJECT_ID
2899
2971
  ],
2900
2972
  [coinType]
2901
2973
  );
@@ -2912,7 +2984,7 @@ var generateCoreNormalMethod = ({
2912
2984
  coreIds.coinDecimalsRegistry,
2913
2985
  amount,
2914
2986
  coreIds.xOracle,
2915
- import_utils7.SUI_CLOCK_OBJECT_ID
2987
+ import_utils8.SUI_CLOCK_OBJECT_ID
2916
2988
  ],
2917
2989
  [coinType]
2918
2990
  );
@@ -2926,7 +2998,7 @@ var generateCoreNormalMethod = ({
2926
2998
  obligation,
2927
2999
  coreIds.market,
2928
3000
  coin,
2929
- import_utils7.SUI_CLOCK_OBJECT_ID
3001
+ import_utils8.SUI_CLOCK_OBJECT_ID
2930
3002
  ],
2931
3003
  [coinType]
2932
3004
  );
@@ -3104,7 +3176,7 @@ var newCoreTxBlock = (builder, initTxBlock) => {
3104
3176
 
3105
3177
  // src/builders/spoolBuilder.ts
3106
3178
  var import_transactions2 = require("@mysten/sui.js/transactions");
3107
- var import_utils8 = require("@mysten/sui.js/utils");
3179
+ var import_utils9 = require("@mysten/sui.js/utils");
3108
3180
  var import_sui_kit5 = require("@scallop-io/sui-kit");
3109
3181
  var requireSender2 = (txBlock) => {
3110
3182
  const sender = txBlock.blockData.sender;
@@ -3151,7 +3223,7 @@ var generateSpoolNormalMethod = ({
3151
3223
  );
3152
3224
  return txBlock.moveCall(
3153
3225
  `${spoolIds.spoolPkg}::user::new_spool_account`,
3154
- [stakePoolId, import_utils8.SUI_CLOCK_OBJECT_ID],
3226
+ [stakePoolId, import_utils9.SUI_CLOCK_OBJECT_ID],
3155
3227
  [marketCoinType]
3156
3228
  );
3157
3229
  },
@@ -3162,7 +3234,7 @@ var generateSpoolNormalMethod = ({
3162
3234
  );
3163
3235
  txBlock.moveCall(
3164
3236
  `${spoolIds.spoolPkg}::user::stake`,
3165
- [stakePoolId, stakeAccount, coin, import_utils8.SUI_CLOCK_OBJECT_ID],
3237
+ [stakePoolId, stakeAccount, coin, import_utils9.SUI_CLOCK_OBJECT_ID],
3166
3238
  [marketCoinType]
3167
3239
  );
3168
3240
  },
@@ -3173,7 +3245,7 @@ var generateSpoolNormalMethod = ({
3173
3245
  );
3174
3246
  return txBlock.moveCall(
3175
3247
  `${spoolIds.spoolPkg}::user::unstake`,
3176
- [stakePoolId, stakeAccount, amount, import_utils8.SUI_CLOCK_OBJECT_ID],
3248
+ [stakePoolId, stakeAccount, amount, import_utils9.SUI_CLOCK_OBJECT_ID],
3177
3249
  [marketCoinType]
3178
3250
  );
3179
3251
  },
@@ -3189,7 +3261,7 @@ var generateSpoolNormalMethod = ({
3189
3261
  const rewardCoinType = builder.utils.parseCoinType(rewardCoinName);
3190
3262
  return txBlock.moveCall(
3191
3263
  `${spoolIds.spoolPkg}::user::redeem_rewards`,
3192
- [stakePoolId, rewardPoolId, stakeAccount, import_utils8.SUI_CLOCK_OBJECT_ID],
3264
+ [stakePoolId, rewardPoolId, stakeAccount, import_utils9.SUI_CLOCK_OBJECT_ID],
3193
3265
  [marketCoinType, rewardCoinType]
3194
3266
  );
3195
3267
  }
@@ -3329,7 +3401,7 @@ var ScallopBuilder = class {
3329
3401
  address: this.address,
3330
3402
  query: this.query
3331
3403
  });
3332
- this.walletAddress = (0, import_utils9.normalizeSuiAddress)(
3404
+ this.walletAddress = (0, import_utils10.normalizeSuiAddress)(
3333
3405
  params?.walletAddress || this.suiKit.currentAddress()
3334
3406
  );
3335
3407
  this.isTestnet = params.networkType ? params.networkType === "testnet" : false;
@@ -3425,7 +3497,7 @@ var ScallopClient = class {
3425
3497
  query: this.query,
3426
3498
  utils: this.utils
3427
3499
  });
3428
- this.walletAddress = (0, import_utils10.normalizeSuiAddress)(
3500
+ this.walletAddress = (0, import_utils11.normalizeSuiAddress)(
3429
3501
  params?.walletAddress || this.suiKit.currentAddress()
3430
3502
  );
3431
3503
  }
@@ -3932,8 +4004,10 @@ var Scallop = class {
3932
4004
  ScallopUtils,
3933
4005
  assetCoins,
3934
4006
  coinDecimals,
4007
+ coinIds,
3935
4008
  marketCoins,
3936
4009
  rewardCoins,
3937
- stakeMarketCoins
4010
+ stakeMarketCoins,
4011
+ wormholeCoinIds
3938
4012
  });
3939
4013
  //# sourceMappingURL=index.js.map