@scallop-io/sui-scallop-sdk 0.46.39 → 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
 
@@ -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";
@@ -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,