@scallop-io/sui-scallop-sdk 1.3.2-alpha.3 → 1.3.2

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.
@@ -40,10 +40,7 @@ export declare const queryKeys: {
40
40
  })[];
41
41
  getDynamicFieldObject: (input?: Partial<GetDynamicFieldObjectParams>) => (string | {
42
42
  parentId: string | undefined;
43
- name: {
44
- type: string | undefined;
45
- value: unknown;
46
- };
43
+ name: string;
47
44
  })[];
48
45
  getTotalVeScaTreasuryAmount: (refreshArgs?: any[], vescaAmountArgs?: (string | SuiObjectData)[]) => (string | {
49
46
  refreshArgs: string;
package/dist/index.js CHANGED
@@ -423,10 +423,7 @@ var queryKeys = {
423
423
  "getDynamicFieldObject",
424
424
  {
425
425
  parentId: input?.parentId,
426
- name: {
427
- type: input?.name?.type,
428
- value: input?.name?.value
429
- }
426
+ name: JSON.stringify(input?.name ?? void 0)
430
427
  }
431
428
  ],
432
429
  getTotalVeScaTreasuryAmount: (refreshArgs, vescaAmountArgs) => [
@@ -2394,86 +2391,6 @@ var getSupplyLimit = async (utils, poolName) => {
2394
2391
  return parsedData.data.fields.value;
2395
2392
  };
2396
2393
 
2397
- // src/queries/isolatedAsset.ts
2398
- var import_zod2 = require("zod");
2399
- var isolatedAssetZod = import_zod2.z.object({
2400
- dataType: import_zod2.z.string(),
2401
- type: import_zod2.z.string(),
2402
- hasPublicTransfer: import_zod2.z.boolean(),
2403
- fields: import_zod2.z.object({
2404
- id: import_zod2.z.object({
2405
- id: import_zod2.z.string()
2406
- }),
2407
- name: import_zod2.z.object({
2408
- type: import_zod2.z.string()
2409
- }),
2410
- value: import_zod2.z.boolean()
2411
- })
2412
- });
2413
- var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
2414
- var getIsolatedAssets = async (address) => {
2415
- try {
2416
- const marketObject = address.get("core.market");
2417
- const isolatedAssets = [];
2418
- if (!marketObject)
2419
- return isolatedAssets;
2420
- let hasNextPage = false;
2421
- let nextCursor = null;
2422
- const isIsolatedDynamicField = (dynamicField) => {
2423
- return dynamicField.name.type === ISOLATED_ASSET_KEY;
2424
- };
2425
- do {
2426
- const response = await address.cache.queryGetDynamicFields({
2427
- parentId: marketObject,
2428
- cursor: nextCursor,
2429
- limit: 10
2430
- });
2431
- if (!response)
2432
- break;
2433
- const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
2434
- isolatedAssets.push(...isolatedAssetCoinTypes);
2435
- if (response && response.hasNextPage && response.nextCursor) {
2436
- hasNextPage = true;
2437
- nextCursor = response.nextCursor;
2438
- } else {
2439
- hasNextPage = false;
2440
- }
2441
- } while (hasNextPage);
2442
- return isolatedAssets;
2443
- } catch (e) {
2444
- console.error(e);
2445
- return [];
2446
- }
2447
- };
2448
- var isIsolatedAsset = async (utils, coinName) => {
2449
- try {
2450
- const marketObject = utils.address.get("core.market");
2451
- const cachedData = utils.address.cache.queryClient.getQueryData([
2452
- "getDynamicFields",
2453
- marketObject
2454
- ]);
2455
- if (cachedData) {
2456
- const coinType2 = utils.parseCoinType(coinName);
2457
- return cachedData.includes(coinType2);
2458
- }
2459
- const coinType = utils.parseCoinType(coinName).slice(2);
2460
- const object = await utils.cache.queryGetDynamicFieldObject({
2461
- parentId: marketObject,
2462
- name: {
2463
- type: ISOLATED_ASSET_KEY,
2464
- value: coinType
2465
- }
2466
- });
2467
- const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2468
- if (!parsedData.success)
2469
- return false;
2470
- return parsedData.data.fields.value;
2471
- } catch (e) {
2472
- console.error(e);
2473
- return false;
2474
- }
2475
- };
2476
-
2477
2394
  // src/queries/coreQuery.ts
2478
2395
  var queryMarket = async (query, indexer = false) => {
2479
2396
  const coinPrices = await query.utils.getCoinPrices();
@@ -2503,7 +2420,7 @@ var queryMarket = async (query, indexer = false) => {
2503
2420
  const queryTarget = `${packageId}::market_query::market_data`;
2504
2421
  const args = [marketId];
2505
2422
  const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
2506
- const marketData = queryResult?.events[0].parsedJson;
2423
+ const marketData = queryResult?.events[0]?.parsedJson;
2507
2424
  for (const pool of marketData?.pools ?? []) {
2508
2425
  const coinType = (0, import_utils3.normalizeStructTag)(pool.type.name);
2509
2426
  const poolCoinName = query.utils.parseCoinNameFromType(coinType);
@@ -2558,7 +2475,8 @@ var queryMarket = async (query, indexer = false) => {
2558
2475
  borrowFee: parsedMarketPoolData.borrowFee,
2559
2476
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2560
2477
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2561
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2478
+ // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2479
+ isIsolated: false,
2562
2480
  maxSupplyCoin,
2563
2481
  ...calculatedMarketPoolData
2564
2482
  };
@@ -2786,7 +2704,8 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2786
2704
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2787
2705
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2788
2706
  maxSupplyCoin,
2789
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2707
+ // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2708
+ isIsolated: false,
2790
2709
  ...calculatedMarketPoolData
2791
2710
  };
2792
2711
  }
@@ -3145,6 +3064,9 @@ var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexe
3145
3064
  var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPrices) => {
3146
3065
  const coinName = query.utils.parseCoinName(marketCoinName);
3147
3066
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
3067
+ if (!marketPool) {
3068
+ throw new Error("Fail to fetch marketPool");
3069
+ }
3148
3070
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
3149
3071
  const rewardPoolId = query.address.get(
3150
3072
  `spool.pools.${marketCoinName}.rewardPoolId`
@@ -3154,10 +3076,10 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3154
3076
  if (indexer) {
3155
3077
  const spoolIndexer = await query.indexer.getSpool(marketCoinName);
3156
3078
  const coinName2 = query.utils.parseCoinName(marketCoinName);
3157
- const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3079
+ const rewardCoinName2 = query.utils.getSpoolRewardCoinName(marketCoinName);
3158
3080
  spoolIndexer.coinPrice = coinPrices?.[coinName2] || spoolIndexer.coinPrice;
3159
3081
  spoolIndexer.marketCoinPrice = (coinPrices?.[coinName2] ?? 0) * (marketPool ? marketPool.conversionRate : 0) || spoolIndexer.marketCoinPrice;
3160
- spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName] || spoolIndexer.rewardCoinPrice;
3082
+ spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] || spoolIndexer.rewardCoinPrice;
3161
3083
  return spoolIndexer;
3162
3084
  }
3163
3085
  const spoolObjectResponse = await query.cache.queryGetObjects(
@@ -3166,70 +3088,71 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3166
3088
  showContent: true
3167
3089
  }
3168
3090
  );
3169
- if (marketPool && spoolObjectResponse[0] && spoolObjectResponse[1]) {
3170
- const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3171
- coinPrices = coinPrices || await query.utils.getCoinPrices([coinName, rewardCoinName]);
3172
- const spoolObject = spoolObjectResponse[0];
3173
- const rewardPoolObject = spoolObjectResponse[1];
3174
- if (spoolObject.content && "fields" in spoolObject.content) {
3175
- const spoolFields = spoolObject.content.fields;
3176
- const parsedSpoolData = parseOriginSpoolData({
3177
- stakeType: spoolFields.stake_type,
3178
- maxDistributedPoint: spoolFields.max_distributed_point,
3179
- distributedPoint: spoolFields.distributed_point,
3180
- distributedPointPerPeriod: spoolFields.distributed_point_per_period,
3181
- pointDistributionTime: spoolFields.point_distribution_time,
3182
- maxStake: spoolFields.max_stakes,
3183
- stakes: spoolFields.stakes,
3184
- index: spoolFields.index,
3185
- createdAt: spoolFields.created_at,
3186
- lastUpdate: spoolFields.last_update
3091
+ if (!(spoolObjectResponse[0] && spoolObjectResponse[1])) {
3092
+ throw new Error("Fail to fetch spoolObjectResponse!");
3093
+ }
3094
+ const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3095
+ coinPrices = coinPrices || await query.utils.getCoinPrices([coinName, rewardCoinName]);
3096
+ const spoolObject = spoolObjectResponse[0];
3097
+ const rewardPoolObject = spoolObjectResponse[1];
3098
+ if (spoolObject.content && "fields" in spoolObject.content) {
3099
+ const spoolFields = spoolObject.content.fields;
3100
+ const parsedSpoolData = parseOriginSpoolData({
3101
+ stakeType: spoolFields.stake_type,
3102
+ maxDistributedPoint: spoolFields.max_distributed_point,
3103
+ distributedPoint: spoolFields.distributed_point,
3104
+ distributedPointPerPeriod: spoolFields.distributed_point_per_period,
3105
+ pointDistributionTime: spoolFields.point_distribution_time,
3106
+ maxStake: spoolFields.max_stakes,
3107
+ stakes: spoolFields.stakes,
3108
+ index: spoolFields.index,
3109
+ createdAt: spoolFields.created_at,
3110
+ lastUpdate: spoolFields.last_update
3111
+ });
3112
+ const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
3113
+ const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
3114
+ const calculatedSpoolData = calculateSpoolData(
3115
+ parsedSpoolData,
3116
+ marketCoinPrice,
3117
+ marketCoinDecimal
3118
+ );
3119
+ if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
3120
+ const rewardPoolFields = rewardPoolObject.content.fields;
3121
+ const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
3122
+ claimed_rewards: rewardPoolFields.claimed_rewards,
3123
+ exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
3124
+ exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
3125
+ rewards: rewardPoolFields.rewards,
3126
+ spool_id: rewardPoolFields.spool_id
3187
3127
  });
3188
- const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
3189
- const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
3190
- const calculatedSpoolData = calculateSpoolData(
3128
+ const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
3129
+ const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
3130
+ const calculatedRewardPoolData = calculateSpoolRewardPoolData(
3191
3131
  parsedSpoolData,
3132
+ parsedSpoolRewardPoolData,
3133
+ calculatedSpoolData,
3134
+ rewardCoinPrice,
3135
+ rewardCoinDecimal
3136
+ );
3137
+ spool = {
3138
+ marketCoinName,
3139
+ symbol: query.utils.parseSymbol(marketCoinName),
3140
+ coinType: query.utils.parseCoinType(coinName),
3141
+ marketCoinType: query.utils.parseMarketCoinType(coinName),
3142
+ rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
3143
+ coinDecimal: query.utils.getCoinDecimal(coinName),
3144
+ rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
3145
+ coinPrice: coinPrices?.[coinName] ?? 0,
3192
3146
  marketCoinPrice,
3193
- marketCoinDecimal
3194
- );
3195
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
3196
- const rewardPoolFields = rewardPoolObject.content.fields;
3197
- const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
3198
- claimed_rewards: rewardPoolFields.claimed_rewards,
3199
- exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
3200
- exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
3201
- rewards: rewardPoolFields.rewards,
3202
- spool_id: rewardPoolFields.spool_id
3203
- });
3204
- const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
3205
- const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
3206
- const calculatedRewardPoolData = calculateSpoolRewardPoolData(
3207
- parsedSpoolData,
3208
- parsedSpoolRewardPoolData,
3209
- calculatedSpoolData,
3210
- rewardCoinPrice,
3211
- rewardCoinDecimal
3212
- );
3213
- spool = {
3214
- marketCoinName,
3215
- symbol: query.utils.parseSymbol(marketCoinName),
3216
- coinType: query.utils.parseCoinType(coinName),
3217
- marketCoinType: query.utils.parseMarketCoinType(coinName),
3218
- rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
3219
- coinDecimal: query.utils.getCoinDecimal(coinName),
3220
- rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
3221
- coinPrice: coinPrices?.[coinName] ?? 0,
3222
- marketCoinPrice,
3223
- rewardCoinPrice,
3224
- maxPoint: parsedSpoolData.maxPoint,
3225
- distributedPoint: parsedSpoolData.distributedPoint,
3226
- maxStake: parsedSpoolData.maxStake,
3227
- ...calculatedSpoolData,
3228
- exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
3229
- exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
3230
- ...calculatedRewardPoolData
3231
- };
3232
- }
3147
+ rewardCoinPrice,
3148
+ maxPoint: parsedSpoolData.maxPoint,
3149
+ distributedPoint: parsedSpoolData.distributedPoint,
3150
+ maxStake: parsedSpoolData.maxStake,
3151
+ ...calculatedSpoolData,
3152
+ exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
3153
+ exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
3154
+ ...calculatedRewardPoolData
3155
+ };
3233
3156
  }
3234
3157
  }
3235
3158
  return spool;
@@ -4201,7 +4124,7 @@ var getTotalValueLocked = async (query, indexer = false) => {
4201
4124
  var import_bignumber5 = __toESM(require("bignumber.js"));
4202
4125
  var import_sui_kit3 = require("@scallop-io/sui-kit");
4203
4126
  var import_bcs = require("@mysten/sui/bcs");
4204
- var import_zod3 = require("zod");
4127
+ var import_zod2 = require("zod");
4205
4128
  var import_assert = __toESM(require("assert"));
4206
4129
  var getVescaKeys = async (utils, ownerAddress) => {
4207
4130
  const owner = ownerAddress || utils.suiKit.currentAddress();
@@ -4250,10 +4173,10 @@ var getVeScas = async ({
4250
4173
  }
4251
4174
  return result;
4252
4175
  };
4253
- var SuiObjectRefZod = import_zod3.z.object({
4254
- objectId: import_zod3.z.string(),
4255
- digest: import_zod3.z.string(),
4256
- version: import_zod3.z.string()
4176
+ var SuiObjectRefZod = import_zod2.z.object({
4177
+ objectId: import_zod2.z.string(),
4178
+ digest: import_zod2.z.string(),
4179
+ version: import_zod2.z.string()
4257
4180
  });
4258
4181
  var getVeSca = async (utils, veScaKey, ownerAddress) => {
4259
4182
  const tableId = utils.address.get(`vesca.tableId`);
@@ -4337,7 +4260,7 @@ var getTotalVeScaTreasuryAmount = async (utils, veScaTreasury) => {
4337
4260
  }
4338
4261
  });
4339
4262
  const results = res.results;
4340
- if (results && results[1].returnValues) {
4263
+ if (results && results[1]?.returnValues) {
4341
4264
  const value = Uint8Array.from(results[1].returnValues[0][0]);
4342
4265
  const type = results[1].returnValues[0][1];
4343
4266
  (0, import_assert.default)(type === "u64", "Result type is not u64");
@@ -4387,16 +4310,16 @@ var queryVeScaKeyIdFromReferralBindings = async (address, refereeAddress) => {
4387
4310
 
4388
4311
  // src/queries/loyaltyProgramQuery.ts
4389
4312
  var import_bignumber6 = __toESM(require("bignumber.js"));
4390
- var import_zod4 = require("zod");
4391
- var rewardPoolFieldsZod = import_zod4.z.object({
4392
- balance: import_zod4.z.string(),
4393
- enable_claim: import_zod4.z.boolean()
4313
+ var import_zod3 = require("zod");
4314
+ var rewardPoolFieldsZod = import_zod3.z.object({
4315
+ balance: import_zod3.z.string(),
4316
+ enable_claim: import_zod3.z.boolean()
4394
4317
  }).transform((value) => ({
4395
4318
  totalPoolReward: (0, import_bignumber6.default)(value.balance).shiftedBy(-9).toNumber(),
4396
4319
  isClaimEnabled: value.enable_claim
4397
4320
  }));
4398
- var userRewardFieldsZod = import_zod4.z.object({
4399
- value: import_zod4.z.string()
4321
+ var userRewardFieldsZod = import_zod3.z.object({
4322
+ value: import_zod3.z.string()
4400
4323
  }).transform((value) => (0, import_bignumber6.default)(value.value).shiftedBy(-9).toNumber());
4401
4324
  var getLoyaltyProgramInformations = async (query, veScaKey) => {
4402
4325
  const rewardPool = query.address.get("loyaltyProgram.rewardPool");
@@ -4822,10 +4745,10 @@ var ScallopUtils = class {
4822
4745
  const feed = await this.cache.queryClient.fetchQuery({
4823
4746
  queryKey: queryKeys.oracle.getPythLatestPriceFeed(priceId),
4824
4747
  queryFn: async () => {
4825
- return await pythConnection.getLatestPriceFeeds([priceId]);
4748
+ return await pythConnection.getLatestPriceFeeds([priceId]) ?? [];
4826
4749
  }
4827
4750
  });
4828
- if (feed) {
4751
+ if (feed[0]) {
4829
4752
  const data = parseDataFromPythPriceFeed(feed[0], this.address);
4830
4753
  this._priceMap.set(coinName, {
4831
4754
  price: data.price,
@@ -5571,6 +5494,9 @@ var generateSpoolQuickMethod = ({
5571
5494
  stakeMarketCoinName,
5572
5495
  stakeAccountId
5573
5496
  );
5497
+ if (stakeAccountIds.length === 0) {
5498
+ throw new Error(`No stakeAccountIds found for user ${sender}`);
5499
+ }
5574
5500
  if (typeof amountOrMarketCoin === "number") {
5575
5501
  const stakedMarketCoinAmount = await stakeHelper(
5576
5502
  builder,
@@ -6701,7 +6627,7 @@ var getSCoinTotalSupply = async ({
6701
6627
  typeArgs
6702
6628
  });
6703
6629
  const results = queryResults?.results;
6704
- if (results && results[0].returnValues) {
6630
+ if (results && results[0]?.returnValues) {
6705
6631
  const value = Uint8Array.from(results[0].returnValues[0][0]);
6706
6632
  const type = results[0].returnValues[0][1];
6707
6633
  (0, import_assert2.default)(type === "u64", "Result type is not u64");
@@ -6776,6 +6702,88 @@ var getSCoinSwapRate = async (query, fromSCoin, toSCoin, underlyingCoinPrice) =>
6776
6702
 
6777
6703
  // src/models/scallopQuery.ts
6778
6704
  var import_utils23 = require("@mysten/sui/utils");
6705
+
6706
+ // src/queries/isolatedAsset.ts
6707
+ var import_zod4 = require("zod");
6708
+ var isolatedAssetZod = import_zod4.z.object({
6709
+ dataType: import_zod4.z.string(),
6710
+ type: import_zod4.z.string(),
6711
+ hasPublicTransfer: import_zod4.z.boolean(),
6712
+ fields: import_zod4.z.object({
6713
+ id: import_zod4.z.object({
6714
+ id: import_zod4.z.string()
6715
+ }),
6716
+ name: import_zod4.z.object({
6717
+ type: import_zod4.z.string()
6718
+ }),
6719
+ value: import_zod4.z.boolean()
6720
+ })
6721
+ });
6722
+ var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
6723
+ var getIsolatedAssets = async (address) => {
6724
+ try {
6725
+ const marketObject = address.get("core.market");
6726
+ const isolatedAssets = [];
6727
+ if (!marketObject)
6728
+ return isolatedAssets;
6729
+ let hasNextPage = false;
6730
+ let nextCursor = null;
6731
+ const isIsolatedDynamicField = (dynamicField) => {
6732
+ return dynamicField.name.type === ISOLATED_ASSET_KEY;
6733
+ };
6734
+ do {
6735
+ const response = await address.cache.queryGetDynamicFields({
6736
+ parentId: marketObject,
6737
+ cursor: nextCursor,
6738
+ limit: 10
6739
+ });
6740
+ if (!response)
6741
+ break;
6742
+ const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
6743
+ isolatedAssets.push(...isolatedAssetCoinTypes);
6744
+ if (response && response.hasNextPage && response.nextCursor) {
6745
+ hasNextPage = true;
6746
+ nextCursor = response.nextCursor;
6747
+ } else {
6748
+ hasNextPage = false;
6749
+ }
6750
+ } while (hasNextPage);
6751
+ return isolatedAssets;
6752
+ } catch (e) {
6753
+ console.error(e);
6754
+ return [];
6755
+ }
6756
+ };
6757
+ var isIsolatedAsset = async (utils, coinName) => {
6758
+ try {
6759
+ const marketObject = utils.address.get("core.market");
6760
+ const cachedData = utils.address.cache.queryClient.getQueryData([
6761
+ "getDynamicFields",
6762
+ marketObject
6763
+ ]);
6764
+ if (cachedData) {
6765
+ const coinType2 = utils.parseCoinType(coinName);
6766
+ return cachedData.includes(coinType2);
6767
+ }
6768
+ const coinType = utils.parseCoinType(coinName).slice(2);
6769
+ const object = await utils.cache.queryGetDynamicFieldObject({
6770
+ parentId: marketObject,
6771
+ name: {
6772
+ type: ISOLATED_ASSET_KEY,
6773
+ value: coinType
6774
+ }
6775
+ });
6776
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
6777
+ if (!parsedData.success)
6778
+ return false;
6779
+ return parsedData.data.fields.value;
6780
+ } catch (e) {
6781
+ console.error(e);
6782
+ return false;
6783
+ }
6784
+ };
6785
+
6786
+ // src/models/scallopQuery.ts
6779
6787
  var ScallopQuery = class {
6780
6788
  constructor(params, instance) {
6781
6789
  this.params = params;
@@ -7612,7 +7620,7 @@ var ScallopClient = class {
7612
7620
  const sender = walletAddress || this.walletAddress;
7613
7621
  txBlock.setSender(sender);
7614
7622
  const obligations = await this.query.getObligations(sender);
7615
- const specificObligationId = obligationId || obligations?.[0]?.id;
7623
+ const specificObligationId = obligationId || obligations[0]?.id;
7616
7624
  if (specificObligationId) {
7617
7625
  await txBlock.addCollateralQuick(
7618
7626
  amount,
@@ -7683,7 +7691,7 @@ var ScallopClient = class {
7683
7691
  txBlock.setSender(sender);
7684
7692
  const stakeMarketCoinName = this.utils.parseMarketCoinName(stakeCoinName);
7685
7693
  const stakeAccounts = await this.query.getStakeAccounts(stakeMarketCoinName);
7686
- const targetStakeAccount = stakeAccountId || stakeAccounts[0].id;
7694
+ const targetStakeAccount = stakeAccountId || stakeAccounts[0]?.id;
7687
7695
  const marketCoin = await txBlock.depositQuick(amount, stakeCoinName, false);
7688
7696
  if (targetStakeAccount) {
7689
7697
  await txBlock.stakeQuick(
@@ -7818,7 +7826,7 @@ var ScallopClient = class {
7818
7826
  const sender = walletAddress || this.walletAddress;
7819
7827
  txBlock.setSender(sender);
7820
7828
  const stakeAccounts = await this.query.getStakeAccounts(stakeMarketCoinName);
7821
- const targetStakeAccount = stakeAccountId || stakeAccounts[0].id;
7829
+ const targetStakeAccount = stakeAccountId || stakeAccounts[0]?.id;
7822
7830
  if (targetStakeAccount) {
7823
7831
  await txBlock.stakeQuick(amount, stakeMarketCoinName, targetStakeAccount);
7824
7832
  } else {