@scallop-io/sui-scallop-sdk 0.46.38 → 0.46.40

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
@@ -194,6 +194,22 @@ var MAX_LOCK_DURATION = MAX_LOCK_ROUNDS * UNLOCK_ROUND_DURATION;
194
194
  var MIN_INITIAL_LOCK_AMOUNT = 1e10;
195
195
  var MIN_TOP_UP_AMOUNT = 1e9;
196
196
 
197
+ // src/constants/flashloan.ts
198
+ var FlashLoanFeeObjectMap = {
199
+ vsui: "0x0069cddee7a5c0b1d34beb5ef0620f978096525f1830b055f38b110f40d73fbb",
200
+ btc: "0x2078490aa37d8fb42b511e5c95e217cb957d141267e16980bc802d76b42719f7",
201
+ sui: "0x27614284a8f0a699ffd35aae8f2572c937ec76771cb21b0d7930ec4491a76ed4",
202
+ usdt: "0x5b61983a19b5159ca348d291e4b595f42db70ccda32852a2ed85528aa65171e4",
203
+ apt: "0x9d5898edcd1e4abcb044273242293a9d036f6a977bf3fe57ab71f5a87c505ee6",
204
+ afsui: "0xac87fde83d434554ec300c1334c9a622aa5b59e82a04334dc99e1cc1f75d4eae",
205
+ hasui: "0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e",
206
+ usdc: "0xd241d6a7e44ac11a6689370ed9a98eec389b98b8a6695c61fddede9fa7567b90",
207
+ eth: "0xd252acb058e77877810c1290564e290a8f9fcab5bc9aca2884ede8a38810cf34",
208
+ sca: "0xe04e46471754b6f48d81c549ecfec09de02733715a63bec02364c6ac7c4dd2dc",
209
+ cetus: "0xe65a73d11c31b2d323ad2b9f6b4bb0a3c0df9c1b212eef66c854941186a5ddc7",
210
+ sol: "0xe84bdb35b790fc7bdd1645122ac6ac0fc904531d6772c9e25904fece322c5f34"
211
+ };
212
+
197
213
  // src/models/scallop.ts
198
214
  import { SuiKit as SuiKit5 } from "@scallop-io/sui-kit";
199
215
 
@@ -2034,7 +2050,7 @@ var getMarketPools = async (query, poolCoinNames, indexer = false) => {
2034
2050
  }
2035
2051
  return marketPools;
2036
2052
  }
2037
- Promise.allSettled(
2053
+ await Promise.allSettled(
2038
2054
  poolCoinNames.map(async (poolCoinName) => {
2039
2055
  const marketPool = await getMarketPool(
2040
2056
  query,
@@ -2051,11 +2067,6 @@ var getMarketPools = async (query, poolCoinNames, indexer = false) => {
2051
2067
  return marketPools;
2052
2068
  };
2053
2069
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2054
- const marketId = query.address.get("core.market");
2055
- marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2056
- showContent: true
2057
- })).data;
2058
- coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2059
2070
  let marketPool;
2060
2071
  let balanceSheet;
2061
2072
  let borrowIndex;
@@ -2069,6 +2080,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2069
2080
  );
2070
2081
  return marketPoolIndexer;
2071
2082
  }
2083
+ const marketId = query.address.get("core.market");
2084
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2085
+ showContent: true
2086
+ })).data;
2087
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2072
2088
  if (marketObject) {
2073
2089
  if (marketObject.content && "fields" in marketObject.content) {
2074
2090
  const fields = marketObject.content.fields;
@@ -2395,7 +2411,7 @@ var getMarketCoinAmounts = async (query, marketCoinNames, ownerAddress) => {
2395
2411
  );
2396
2412
  const owner = ownerAddress || query.suiKit.currentAddress();
2397
2413
  const marketCoins2 = {};
2398
- Promise.allSettled(
2414
+ await Promise.allSettled(
2399
2415
  marketCoinNames.map(async (marketCoinName) => {
2400
2416
  const marketCoin = await getMarketCoinAmount(
2401
2417
  query,
@@ -2416,6 +2432,64 @@ var getMarketCoinAmount = async (query, marketCoinName, ownerAddress) => {
2416
2432
  });
2417
2433
  return BigNumber2(amount).toNumber();
2418
2434
  };
2435
+ var getFlashLoanFees = async (query, assetNames) => {
2436
+ const FEE_RATE = 1e4;
2437
+ const missingAssets = [];
2438
+ const assetTypeMap = assetNames.reduce(
2439
+ (prev, curr) => {
2440
+ const assetType = query.utils.parseCoinType(curr).slice(2);
2441
+ prev[assetType] = curr;
2442
+ return prev;
2443
+ },
2444
+ {}
2445
+ );
2446
+ const objIds = assetNames.map((assetName) => {
2447
+ if (!FlashLoanFeeObjectMap[assetName]) {
2448
+ missingAssets.push(assetName);
2449
+ return null;
2450
+ } else {
2451
+ return FlashLoanFeeObjectMap[assetName];
2452
+ }
2453
+ }).filter((t) => !!t);
2454
+ const flashloanFeeObjects = await query.cache.queryGetObjects(objIds, {
2455
+ showContent: true
2456
+ });
2457
+ if (missingAssets.length > 0) {
2458
+ const marketObjectId = query.address.get("core.market");
2459
+ const marketObjectRes = await query.cache.queryGetObject(marketObjectId, {
2460
+ showContent: true
2461
+ });
2462
+ if (marketObjectRes.data?.content?.dataType !== "moveObject")
2463
+ throw new Error("Failed to get market object");
2464
+ const vault = marketObjectRes.data.content.fields.vault;
2465
+ const flashloanFeesTableId = vault.fields.flash_loan_fees.fields.table.fields.id.id;
2466
+ const balanceSheetDynamicFields = await query.cache.queryGetDynamicFields({
2467
+ parentId: flashloanFeesTableId,
2468
+ limit: 50
2469
+ });
2470
+ const dynamicFieldObjectIds = balanceSheetDynamicFields.data.filter((field) => {
2471
+ const assetType = field.name.value.name;
2472
+ return !!assetTypeMap[assetType];
2473
+ }).map((field) => field.objectId);
2474
+ flashloanFeeObjects.push(
2475
+ ...await query.cache.queryGetObjects(dynamicFieldObjectIds, {
2476
+ showContent: true
2477
+ })
2478
+ );
2479
+ }
2480
+ return flashloanFeeObjects.reduce(
2481
+ (prev, curr) => {
2482
+ if (curr.content?.dataType === "moveObject") {
2483
+ const objectFields = curr.content.fields;
2484
+ const assetType = curr.content.fields.name.fields.name;
2485
+ const feeNumerator = +objectFields.value;
2486
+ prev[assetTypeMap[assetType]] = feeNumerator / FEE_RATE;
2487
+ }
2488
+ return prev;
2489
+ },
2490
+ {}
2491
+ );
2492
+ };
2419
2493
 
2420
2494
  // src/queries/spoolQuery.ts
2421
2495
  import { normalizeStructTag as normalizeStructTag4 } from "@mysten/sui.js/utils";
@@ -3544,7 +3618,7 @@ var getVescaKeys = async (query, ownerAddress) => {
3544
3618
  let hasNextPage = false;
3545
3619
  let nextCursor = null;
3546
3620
  do {
3547
- const paginatedKeyObjectsResponse = await query.suiKit.client().getOwnedObjects({
3621
+ const paginatedKeyObjectsResponse = await query.cache.queryGetOwnedObjects({
3548
3622
  owner,
3549
3623
  filter: {
3550
3624
  StructType: veScaKeyType
@@ -4342,6 +4416,12 @@ var ScallopQuery = class {
4342
4416
  async getLoyaltyProgramInfos(veScaKey) {
4343
4417
  return await getLoyaltyProgramInformations(this, veScaKey);
4344
4418
  }
4419
+ /**
4420
+ * Get flashloan fee for specified assets
4421
+ */
4422
+ async getFlashLoanFees(assetCoinNames = [...SUPPORT_POOLS]) {
4423
+ return await getFlashLoanFees(this, assetCoinNames);
4424
+ }
4345
4425
  };
4346
4426
 
4347
4427
  // src/constants/pyth.ts
@@ -6909,6 +6989,7 @@ export {
6909
6989
  ADDRESSES_ID,
6910
6990
  API_BASE_URL,
6911
6991
  BORROW_FEE_PROTOCOL_ID,
6992
+ FlashLoanFeeObjectMap,
6912
6993
  IS_VE_SCA_TEST,
6913
6994
  MAX_LOCK_DURATION,
6914
6995
  MAX_LOCK_ROUNDS,