@scallop-io/sui-scallop-sdk 0.44.28 → 0.46.0
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/builders/borrowIncentiveBuilder.d.ts +1 -1
- package/dist/builders/referralBuilder.d.ts +12 -0
- package/dist/constants/cache.d.ts +8 -0
- package/dist/constants/common.d.ts +1 -1
- package/dist/index.js +890 -419
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +967 -493
- package/dist/index.mjs.map +1 -1
- package/dist/models/index.d.ts +1 -0
- package/dist/models/scallop.d.ts +7 -1
- package/dist/models/scallopAddress.d.ts +4 -2
- package/dist/models/scallopBuilder.d.ts +2 -0
- package/dist/models/scallopCache.d.ts +75 -0
- package/dist/models/scallopClient.d.ts +2 -0
- package/dist/models/scallopIndexer.d.ts +5 -3
- package/dist/models/scallopQuery.d.ts +28 -28
- package/dist/models/scallopUtils.d.ts +1 -0
- package/dist/queries/coreQuery.d.ts +3 -29
- package/dist/queries/index.d.ts +1 -0
- package/dist/queries/priceQuery.d.ts +3 -1
- package/dist/queries/referralQuery.d.ts +7 -0
- package/dist/queries/vescaQuery.d.ts +6 -2
- package/dist/types/address.d.ts +15 -0
- package/dist/types/builder/core.d.ts +2 -0
- package/dist/types/builder/index.d.ts +2 -1
- package/dist/types/builder/referral.d.ts +30 -0
- package/dist/types/builder/vesca.d.ts +1 -0
- package/dist/types/model.d.ts +2 -0
- package/package.json +8 -6
- package/src/builders/borrowIncentiveBuilder.ts +12 -21
- package/src/builders/coreBuilder.ts +54 -0
- package/src/builders/index.ts +5 -2
- package/src/builders/referralBuilder.ts +178 -0
- package/src/builders/vescaBuilder.ts +8 -6
- package/src/constants/cache.ts +15 -0
- package/src/constants/common.ts +9 -2
- package/src/constants/vesca.ts +1 -3
- package/src/models/index.ts +1 -0
- package/src/models/scallop.ts +26 -7
- package/src/models/scallopAddress.ts +87 -38
- package/src/models/scallopBuilder.ts +14 -4
- package/src/models/scallopCache.ts +285 -0
- package/src/models/scallopClient.ts +15 -4
- package/src/models/scallopIndexer.ts +58 -84
- package/src/models/scallopQuery.ts +54 -5
- package/src/models/scallopUtils.ts +66 -37
- package/src/queries/borrowIncentiveQuery.ts +6 -12
- package/src/queries/coreQuery.ts +83 -260
- package/src/queries/index.ts +1 -0
- package/src/queries/priceQuery.ts +48 -9
- package/src/queries/referralQuery.ts +27 -0
- package/src/queries/spoolQuery.ts +20 -27
- package/src/queries/vescaQuery.ts +95 -17
- package/src/types/address.ts +15 -0
- package/src/types/builder/core.ts +14 -0
- package/src/types/builder/index.ts +2 -0
- package/src/types/builder/referral.ts +51 -0
- package/src/types/builder/vesca.ts +1 -0
- package/src/types/model.ts +2 -0
- package/src/types/query/borrowIncentive.ts +0 -107
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
var API_BASE_URL = "https://sui.api.scallop.io";
|
|
3
3
|
var SDK_API_BASE_URL = "https://sdk.api.scallop.io";
|
|
4
4
|
var IS_VE_SCA_TEST = false;
|
|
5
|
-
var ADDRESSES_ID = IS_VE_SCA_TEST ?
|
|
5
|
+
var ADDRESSES_ID = IS_VE_SCA_TEST ? (
|
|
6
|
+
// ? ('65fb07c39c845425d71d7b18' as const)
|
|
7
|
+
"65fb07c39c845425d71d7b18"
|
|
8
|
+
) : "664dfe22898c36c159e28bc8";
|
|
6
9
|
var PROTOCOL_OBJECT_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
|
|
7
10
|
var BORROW_FEE_PROTOCOL_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
|
|
8
11
|
var SCA_COIN_TYPE = IS_VE_SCA_TEST ? `0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524::sca::SCA` : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA";
|
|
@@ -186,7 +189,7 @@ var voloCoinIds = {
|
|
|
186
189
|
|
|
187
190
|
// src/constants/vesca.ts
|
|
188
191
|
var UNLOCK_ROUND_DURATION = 60 * 60 * 24;
|
|
189
|
-
var MAX_LOCK_ROUNDS =
|
|
192
|
+
var MAX_LOCK_ROUNDS = 1460;
|
|
190
193
|
var MAX_LOCK_DURATION = MAX_LOCK_ROUNDS * UNLOCK_ROUND_DURATION;
|
|
191
194
|
var MIN_INITIAL_LOCK_AMOUNT = 1e10;
|
|
192
195
|
var MIN_TOP_UP_AMOUNT = 1e9;
|
|
@@ -194,6 +197,226 @@ var MIN_TOP_UP_AMOUNT = 1e9;
|
|
|
194
197
|
// src/models/scallop.ts
|
|
195
198
|
import { SuiKit as SuiKit5 } from "@scallop-io/sui-kit";
|
|
196
199
|
|
|
200
|
+
// src/models/scallopCache.ts
|
|
201
|
+
import { QueryClient } from "@tanstack/query-core";
|
|
202
|
+
import { SuiTxBlock, normalizeStructTag } from "@scallop-io/sui-kit";
|
|
203
|
+
|
|
204
|
+
// src/constants/cache.ts
|
|
205
|
+
var DEFAULT_CACHE_OPTIONS = {
|
|
206
|
+
defaultOptions: {
|
|
207
|
+
queries: {
|
|
208
|
+
staleTime: 3e3
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
// src/models/scallopCache.ts
|
|
214
|
+
var ScallopCache = class {
|
|
215
|
+
constructor(cacheOptions, suiKit) {
|
|
216
|
+
this.queryClient = new QueryClient(cacheOptions ?? DEFAULT_CACHE_OPTIONS);
|
|
217
|
+
this._suiKit = suiKit;
|
|
218
|
+
}
|
|
219
|
+
get suiKit() {
|
|
220
|
+
if (!this._suiKit) {
|
|
221
|
+
throw new Error("SuiKit instance is not initialized");
|
|
222
|
+
}
|
|
223
|
+
return this._suiKit;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* @description Invalidate cache based on the refetchType parameter
|
|
227
|
+
* @param refetchType Determines the type of queries to be refetched. Defaults to `active`.
|
|
228
|
+
*
|
|
229
|
+
* - `active`: Only queries that match the refetch predicate and are actively being rendered via useQuery and related functions will be refetched in the background.
|
|
230
|
+
* - `inactive`: Only queries that match the refetch predicate and are NOT actively being rendered via useQuery and related functions will be refetched in the background.
|
|
231
|
+
* - `all`: All queries that match the refetch predicate will be refetched in the background.
|
|
232
|
+
* - `none`: No queries will be refetched. Queries that match the refetch predicate will only be marked as invalid.
|
|
233
|
+
*/
|
|
234
|
+
invalidateAndRefetchAllCache(refetchType) {
|
|
235
|
+
return this.queryClient.invalidateQueries({
|
|
236
|
+
refetchType
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* @description Cache protocol config call for 60 seconds.
|
|
241
|
+
* @returns Promise<ProtocolConfig>
|
|
242
|
+
*/
|
|
243
|
+
async getProtocolConfig() {
|
|
244
|
+
return await this.queryClient.fetchQuery({
|
|
245
|
+
queryKey: ["getProtocolConfig"],
|
|
246
|
+
queryFn: async () => {
|
|
247
|
+
return await this.suiKit.client().getProtocolConfig();
|
|
248
|
+
},
|
|
249
|
+
staleTime: 3e4
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* @description Provides cache for inspectTxn of the SuiKit.
|
|
254
|
+
* @param QueryInspectTxnParams
|
|
255
|
+
* @param txBlock
|
|
256
|
+
* @returns Promise<DevInspectResults>
|
|
257
|
+
*/
|
|
258
|
+
async queryInspectTxn({
|
|
259
|
+
queryTarget,
|
|
260
|
+
args,
|
|
261
|
+
typeArgs
|
|
262
|
+
}) {
|
|
263
|
+
const txBlock = new SuiTxBlock();
|
|
264
|
+
const resolvedArgs = await Promise.all(
|
|
265
|
+
args.map(async (arg) => {
|
|
266
|
+
if (typeof arg === "string") {
|
|
267
|
+
return (await this.queryGetObject(arg, { showContent: true })).data;
|
|
268
|
+
}
|
|
269
|
+
return arg;
|
|
270
|
+
})
|
|
271
|
+
);
|
|
272
|
+
txBlock.moveCall(queryTarget, resolvedArgs, typeArgs);
|
|
273
|
+
const txBytes = await txBlock.txBlock.build({
|
|
274
|
+
client: this.suiKit.client(),
|
|
275
|
+
onlyTransactionKind: true,
|
|
276
|
+
protocolConfig: await this.getProtocolConfig()
|
|
277
|
+
});
|
|
278
|
+
const query = await this.queryClient.fetchQuery({
|
|
279
|
+
queryKey: typeArgs ? ["inspectTxn", queryTarget, JSON.stringify(args)] : [
|
|
280
|
+
"inspectTxn",
|
|
281
|
+
queryTarget,
|
|
282
|
+
JSON.stringify(args),
|
|
283
|
+
JSON.stringify(typeArgs)
|
|
284
|
+
],
|
|
285
|
+
queryFn: async () => {
|
|
286
|
+
return await this.suiKit.inspectTxn(txBytes);
|
|
287
|
+
},
|
|
288
|
+
staleTime: 8e3
|
|
289
|
+
// make stale time longer for inspectTxn results
|
|
290
|
+
});
|
|
291
|
+
return query;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* @description Provides cache for getObject of the SuiKit.
|
|
295
|
+
* @param objectId
|
|
296
|
+
* @param QueryObjectParams
|
|
297
|
+
* @returns Promise<SuiObjectResponse>
|
|
298
|
+
*/
|
|
299
|
+
async queryGetObject(objectId, options) {
|
|
300
|
+
const queryKey = ["getObject", objectId, this.suiKit.currentAddress()];
|
|
301
|
+
if (options) {
|
|
302
|
+
queryKey.push(JSON.stringify(options));
|
|
303
|
+
}
|
|
304
|
+
return this.queryClient.fetchQuery({
|
|
305
|
+
queryKey,
|
|
306
|
+
queryFn: async () => {
|
|
307
|
+
return await this.suiKit.client().getObject({
|
|
308
|
+
id: objectId,
|
|
309
|
+
options
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* @description Provides cache for getObjects of the SuiKit.
|
|
316
|
+
* @param objectIds
|
|
317
|
+
* @returns Promise<SuiObjectData[]>
|
|
318
|
+
*/
|
|
319
|
+
async queryGetObjects(objectIds, options) {
|
|
320
|
+
const queryKey = [
|
|
321
|
+
"getObjects",
|
|
322
|
+
JSON.stringify(objectIds),
|
|
323
|
+
this.suiKit.currentAddress()
|
|
324
|
+
];
|
|
325
|
+
return this.queryClient.fetchQuery({
|
|
326
|
+
queryKey,
|
|
327
|
+
queryFn: async () => {
|
|
328
|
+
return await this.suiKit.getObjects(objectIds, options);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* @description Provides cache for getOwnedObjects of the SuiKit.
|
|
334
|
+
* @param input
|
|
335
|
+
* @returns Promise<PaginatedObjectsResponse>
|
|
336
|
+
*/
|
|
337
|
+
async queryGetOwnedObjects(input) {
|
|
338
|
+
const queryKey = ["getOwnedObjects", input.owner];
|
|
339
|
+
if (input.cursor) {
|
|
340
|
+
queryKey.push(JSON.stringify(input.cursor));
|
|
341
|
+
}
|
|
342
|
+
if (input.options) {
|
|
343
|
+
queryKey.push(JSON.stringify(input.options));
|
|
344
|
+
}
|
|
345
|
+
if (input.filter) {
|
|
346
|
+
queryKey.push(JSON.stringify(input.filter));
|
|
347
|
+
}
|
|
348
|
+
if (input.limit) {
|
|
349
|
+
queryKey.push(JSON.stringify(input.limit));
|
|
350
|
+
}
|
|
351
|
+
return this.queryClient.fetchQuery({
|
|
352
|
+
queryKey,
|
|
353
|
+
queryFn: async () => {
|
|
354
|
+
return await this.suiKit.client().getOwnedObjects(input);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
async queryGetDynamicFields(input) {
|
|
359
|
+
const queryKey = ["getDynamicFields", input.parentId];
|
|
360
|
+
if (input.cursor) {
|
|
361
|
+
queryKey.push(JSON.stringify(input.cursor));
|
|
362
|
+
}
|
|
363
|
+
if (input.cursor) {
|
|
364
|
+
queryKey.push(JSON.stringify(input.cursor));
|
|
365
|
+
}
|
|
366
|
+
if (input.limit) {
|
|
367
|
+
queryKey.push(JSON.stringify(input.limit));
|
|
368
|
+
}
|
|
369
|
+
return this.queryClient.fetchQuery({
|
|
370
|
+
queryKey,
|
|
371
|
+
queryFn: async () => {
|
|
372
|
+
return await this.suiKit.client().getDynamicFields(input);
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
async queryGetDynamicFieldObject(input) {
|
|
377
|
+
const queryKey = [
|
|
378
|
+
"getDynamicFieldObject",
|
|
379
|
+
input.parentId,
|
|
380
|
+
input.name.value
|
|
381
|
+
];
|
|
382
|
+
return this.queryClient.fetchQuery({
|
|
383
|
+
queryKey,
|
|
384
|
+
queryFn: async () => {
|
|
385
|
+
return await this.suiKit.client().getDynamicFieldObject(input);
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
async queryGetAllCoinBalances(owner) {
|
|
390
|
+
const queryKey = ["getAllCoinBalances", owner];
|
|
391
|
+
return this.queryClient.fetchQuery({
|
|
392
|
+
queryKey,
|
|
393
|
+
queryFn: async () => {
|
|
394
|
+
const allBalances = await this.suiKit.client().getAllBalances({ owner });
|
|
395
|
+
return allBalances.reduce(
|
|
396
|
+
(acc, coinBalance) => {
|
|
397
|
+
if (coinBalance.totalBalance !== "0") {
|
|
398
|
+
acc[normalizeStructTag(coinBalance.coinType)] = coinBalance.totalBalance;
|
|
399
|
+
}
|
|
400
|
+
return acc;
|
|
401
|
+
},
|
|
402
|
+
{}
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
async queryGetCoinBalance(input) {
|
|
408
|
+
const queryKey = ["getCoinBalance", input.owner, input.coinType];
|
|
409
|
+
return this.queryClient.fetchQuery({
|
|
410
|
+
queryKey,
|
|
411
|
+
queryFn: async () => {
|
|
412
|
+
if (!input.coinType)
|
|
413
|
+
return "0";
|
|
414
|
+
return (await this.queryGetAllCoinBalances(input.owner))[normalizeStructTag(input.coinType)] ?? "0";
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
|
|
197
420
|
// src/models/scallopAddress.ts
|
|
198
421
|
import axios from "axios";
|
|
199
422
|
var EMPTY_ADDRESSES = {
|
|
@@ -206,6 +429,45 @@ var EMPTY_ADDRESSES = {
|
|
|
206
429
|
coinDecimalsRegistry: "",
|
|
207
430
|
obligationAccessStore: "",
|
|
208
431
|
coins: {
|
|
432
|
+
cetus: {
|
|
433
|
+
id: "",
|
|
434
|
+
metaData: "",
|
|
435
|
+
treasury: "",
|
|
436
|
+
oracle: {
|
|
437
|
+
supra: "",
|
|
438
|
+
switchboard: "",
|
|
439
|
+
pyth: {
|
|
440
|
+
feed: "",
|
|
441
|
+
feedObject: ""
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
apt: {
|
|
446
|
+
id: "",
|
|
447
|
+
metaData: "",
|
|
448
|
+
treasury: "",
|
|
449
|
+
oracle: {
|
|
450
|
+
supra: "",
|
|
451
|
+
switchboard: "",
|
|
452
|
+
pyth: {
|
|
453
|
+
feed: "",
|
|
454
|
+
feedObject: ""
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
sol: {
|
|
459
|
+
id: "",
|
|
460
|
+
metaData: "",
|
|
461
|
+
treasury: "",
|
|
462
|
+
oracle: {
|
|
463
|
+
supra: "",
|
|
464
|
+
switchboard: "",
|
|
465
|
+
pyth: {
|
|
466
|
+
feed: "",
|
|
467
|
+
feedObject: ""
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
},
|
|
209
471
|
btc: {
|
|
210
472
|
id: "",
|
|
211
473
|
metaData: "",
|
|
@@ -327,15 +589,8 @@ var EMPTY_ADDRESSES = {
|
|
|
327
589
|
oracles: {
|
|
328
590
|
xOracle: "",
|
|
329
591
|
xOracleCap: "",
|
|
330
|
-
supra: {
|
|
331
|
-
|
|
332
|
-
registryCap: "",
|
|
333
|
-
holder: ""
|
|
334
|
-
},
|
|
335
|
-
switchboard: {
|
|
336
|
-
registry: "",
|
|
337
|
-
registryCap: ""
|
|
338
|
-
},
|
|
592
|
+
supra: { registry: "", registryCap: "", holder: "" },
|
|
593
|
+
switchboard: { registry: "", registryCap: "" },
|
|
339
594
|
pyth: {
|
|
340
595
|
registry: "",
|
|
341
596
|
registryCap: "",
|
|
@@ -365,27 +620,25 @@ var EMPTY_ADDRESSES = {
|
|
|
365
620
|
id: "",
|
|
366
621
|
upgradeCap: ""
|
|
367
622
|
},
|
|
368
|
-
|
|
623
|
+
protocolWhitelist: {
|
|
369
624
|
id: "",
|
|
370
625
|
upgradeCap: ""
|
|
371
626
|
},
|
|
372
|
-
|
|
627
|
+
query: {
|
|
373
628
|
id: "",
|
|
374
629
|
upgradeCap: ""
|
|
375
630
|
},
|
|
376
|
-
|
|
631
|
+
supra: { id: "", upgradeCap: "" },
|
|
632
|
+
pyth: {
|
|
377
633
|
id: "",
|
|
378
634
|
upgradeCap: ""
|
|
379
635
|
},
|
|
636
|
+
switchboard: { id: "", upgradeCap: "" },
|
|
380
637
|
xOracle: {
|
|
381
638
|
id: "",
|
|
382
639
|
upgradeCap: ""
|
|
383
640
|
},
|
|
384
|
-
|
|
385
|
-
testCoin: {
|
|
386
|
-
id: "",
|
|
387
|
-
upgradeCap: ""
|
|
388
|
-
}
|
|
641
|
+
testCoin: { id: "", upgradeCap: "" }
|
|
389
642
|
}
|
|
390
643
|
},
|
|
391
644
|
spool: {
|
|
@@ -425,34 +678,45 @@ var EMPTY_ADDRESSES = {
|
|
|
425
678
|
id: "",
|
|
426
679
|
rewardPoolId: ""
|
|
427
680
|
}
|
|
428
|
-
}
|
|
681
|
+
},
|
|
682
|
+
config: ""
|
|
429
683
|
},
|
|
430
684
|
borrowIncentive: {
|
|
431
685
|
id: "",
|
|
432
686
|
adminCap: "",
|
|
433
687
|
object: "",
|
|
434
688
|
query: "",
|
|
435
|
-
config: "",
|
|
436
689
|
incentivePools: "",
|
|
437
|
-
incentiveAccounts: ""
|
|
690
|
+
incentiveAccounts: "",
|
|
691
|
+
config: ""
|
|
438
692
|
},
|
|
439
693
|
vesca: {
|
|
440
694
|
id: "",
|
|
695
|
+
object: "",
|
|
441
696
|
adminCap: "",
|
|
442
697
|
tableId: "",
|
|
443
698
|
table: "",
|
|
444
699
|
treasury: "",
|
|
445
700
|
config: ""
|
|
701
|
+
},
|
|
702
|
+
referral: {
|
|
703
|
+
id: "",
|
|
704
|
+
version: "",
|
|
705
|
+
object: "",
|
|
706
|
+
adminCap: "",
|
|
707
|
+
referralBindings: "",
|
|
708
|
+
bindingTableId: "",
|
|
709
|
+
referralRevenuePool: "",
|
|
710
|
+
revenueTableId: "",
|
|
711
|
+
referralTiers: "",
|
|
712
|
+
tiersTableId: "",
|
|
713
|
+
authorizedWitnessList: ""
|
|
446
714
|
}
|
|
447
715
|
};
|
|
448
716
|
var ScallopAddress = class {
|
|
449
|
-
constructor(params) {
|
|
717
|
+
constructor(params, cache) {
|
|
450
718
|
const { id, auth, network } = params;
|
|
451
|
-
|
|
452
|
-
this._auth = auth;
|
|
453
|
-
this._id = id;
|
|
454
|
-
this._network = network || "mainnet";
|
|
455
|
-
this._addressesMap = /* @__PURE__ */ new Map();
|
|
719
|
+
this._cache = cache ?? new ScallopCache(DEFAULT_CACHE_OPTIONS);
|
|
456
720
|
this._requestClient = axios.create({
|
|
457
721
|
baseURL: API_BASE_URL,
|
|
458
722
|
headers: {
|
|
@@ -461,6 +725,11 @@ var ScallopAddress = class {
|
|
|
461
725
|
},
|
|
462
726
|
timeout: 3e4
|
|
463
727
|
});
|
|
728
|
+
if (auth)
|
|
729
|
+
this._auth = auth;
|
|
730
|
+
this._id = id;
|
|
731
|
+
this._network = network || "mainnet";
|
|
732
|
+
this._addressesMap = /* @__PURE__ */ new Map();
|
|
464
733
|
}
|
|
465
734
|
/**
|
|
466
735
|
* Get addresses API id.
|
|
@@ -584,7 +853,7 @@ var ScallopAddress = class {
|
|
|
584
853
|
this._addressesMap.clear();
|
|
585
854
|
this.setAddresses(targetAddresses, targetNetwork);
|
|
586
855
|
const response = await this._requestClient.post(
|
|
587
|
-
|
|
856
|
+
`/addresses`,
|
|
588
857
|
JSON.stringify({ ...Object.fromEntries(this._addressesMap), memo }),
|
|
589
858
|
{
|
|
590
859
|
headers: {
|
|
@@ -621,14 +890,16 @@ var ScallopAddress = class {
|
|
|
621
890
|
async read(id) {
|
|
622
891
|
const addressesId = id || this._id || void 0;
|
|
623
892
|
if (addressesId !== void 0) {
|
|
624
|
-
const response = await this.
|
|
625
|
-
|
|
626
|
-
{
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
893
|
+
const response = await this._cache.queryClient.fetchQuery({
|
|
894
|
+
queryKey: ["api-getAddresses", addressesId],
|
|
895
|
+
queryFn: async () => {
|
|
896
|
+
return await this._requestClient.get(`/addresses/${addressesId}`, {
|
|
897
|
+
headers: {
|
|
898
|
+
"Content-Type": "application/json"
|
|
899
|
+
}
|
|
900
|
+
});
|
|
630
901
|
}
|
|
631
|
-
);
|
|
902
|
+
});
|
|
632
903
|
if (response.status === 200) {
|
|
633
904
|
for (const [network, addresses] of Object.entries(
|
|
634
905
|
response.data
|
|
@@ -682,7 +953,7 @@ var ScallopAddress = class {
|
|
|
682
953
|
}
|
|
683
954
|
this.setAddresses(targetAddresses, targetNetwork);
|
|
684
955
|
const response = await this._requestClient.put(
|
|
685
|
-
|
|
956
|
+
`/addresses/${targetId}`,
|
|
686
957
|
JSON.stringify({ ...Object.fromEntries(this._addressesMap), memo }),
|
|
687
958
|
{
|
|
688
959
|
headers: {
|
|
@@ -724,7 +995,7 @@ var ScallopAddress = class {
|
|
|
724
995
|
throw Error("Require specific addresses id to be deleted.");
|
|
725
996
|
if (apiKey !== void 0) {
|
|
726
997
|
const response = await this._requestClient.delete(
|
|
727
|
-
|
|
998
|
+
`/addresses/${targetId}`,
|
|
728
999
|
{
|
|
729
1000
|
headers: {
|
|
730
1001
|
"Content-Type": "application/json",
|
|
@@ -750,7 +1021,7 @@ import { normalizeSuiAddress as normalizeSuiAddress2 } from "@mysten/sui.js/util
|
|
|
750
1021
|
import { SuiKit as SuiKit4 } from "@scallop-io/sui-kit";
|
|
751
1022
|
|
|
752
1023
|
// src/models/scallopUtils.ts
|
|
753
|
-
import { SUI_TYPE_ARG, normalizeStructTag as
|
|
1024
|
+
import { SUI_TYPE_ARG, normalizeStructTag as normalizeStructTag6 } from "@mysten/sui.js/utils";
|
|
754
1025
|
import { SuiKit as SuiKit2 } from "@scallop-io/sui-kit";
|
|
755
1026
|
import { SuiPriceServiceConnection } from "@pythnetwork/pyth-sui-js";
|
|
756
1027
|
|
|
@@ -758,9 +1029,7 @@ import { SuiPriceServiceConnection } from "@pythnetwork/pyth-sui-js";
|
|
|
758
1029
|
import { SuiKit } from "@scallop-io/sui-kit";
|
|
759
1030
|
|
|
760
1031
|
// src/queries/coreQuery.ts
|
|
761
|
-
import { normalizeStructTag as
|
|
762
|
-
import { SuiTxBlock as SuiKitTxBlock } from "@scallop-io/sui-kit";
|
|
763
|
-
import BigNumber2 from "bignumber.js";
|
|
1032
|
+
import { normalizeStructTag as normalizeStructTag3 } from "@mysten/sui.js/utils";
|
|
764
1033
|
|
|
765
1034
|
// src/utils/builder.ts
|
|
766
1035
|
var requireSender = (txBlock) => {
|
|
@@ -859,10 +1128,10 @@ var checkVesca = (prevUnlockAtInSecondTimestamp) => {
|
|
|
859
1128
|
|
|
860
1129
|
// src/utils/query.ts
|
|
861
1130
|
import BigNumber from "bignumber.js";
|
|
862
|
-
import { normalizeStructTag, parseStructTag } from "@mysten/sui.js/utils";
|
|
1131
|
+
import { normalizeStructTag as normalizeStructTag2, parseStructTag } from "@mysten/sui.js/utils";
|
|
863
1132
|
var parseOriginMarketPoolData = (originMarketPoolData) => {
|
|
864
1133
|
return {
|
|
865
|
-
coinType:
|
|
1134
|
+
coinType: normalizeStructTag2(originMarketPoolData.type.name),
|
|
866
1135
|
// Parse origin data required for basic calculations.
|
|
867
1136
|
maxBorrowRate: Number(originMarketPoolData.maxBorrowRate.value) / 2 ** 32,
|
|
868
1137
|
borrowRate: Number(originMarketPoolData.interestRate.value) / 2 ** 32,
|
|
@@ -957,7 +1226,7 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
|
|
|
957
1226
|
};
|
|
958
1227
|
var parseOriginMarketCollateralData = (originMarketCollateralData) => {
|
|
959
1228
|
return {
|
|
960
|
-
coinType:
|
|
1229
|
+
coinType: normalizeStructTag2(originMarketCollateralData.type.name),
|
|
961
1230
|
collateralFactor: Number(originMarketCollateralData.collateralFactor.value) / 2 ** 32,
|
|
962
1231
|
liquidationFactor: Number(originMarketCollateralData.liquidationFactor.value) / 2 ** 32,
|
|
963
1232
|
liquidationDiscount: Number(originMarketCollateralData.liquidationDiscount.value) / 2 ** 32,
|
|
@@ -989,7 +1258,7 @@ var calculateMarketCollateralData = (utils, parsedMarketCollateralData) => {
|
|
|
989
1258
|
};
|
|
990
1259
|
var parseOriginSpoolData = (originSpoolData) => {
|
|
991
1260
|
return {
|
|
992
|
-
stakeType:
|
|
1261
|
+
stakeType: normalizeStructTag2(originSpoolData.stakeType.fields.name),
|
|
993
1262
|
maxPoint: Number(originSpoolData.maxDistributedPoint),
|
|
994
1263
|
distributedPoint: Number(originSpoolData.distributedPoint),
|
|
995
1264
|
pointPerPeriod: Number(originSpoolData.distributedPointPerPeriod),
|
|
@@ -1095,7 +1364,7 @@ var calculateSpoolRewardPoolData = (parsedSpoolData, parsedSpoolRewardPoolData,
|
|
|
1095
1364
|
};
|
|
1096
1365
|
var parseOriginBorrowIncentivesPoolPointData = (originBorrowIncentivePoolPointData) => {
|
|
1097
1366
|
return {
|
|
1098
|
-
pointType:
|
|
1367
|
+
pointType: normalizeStructTag2(
|
|
1099
1368
|
originBorrowIncentivePoolPointData.point_type.name
|
|
1100
1369
|
),
|
|
1101
1370
|
distributedPointPerPeriod: Number(
|
|
@@ -1114,7 +1383,7 @@ var parseOriginBorrowIncentivesPoolPointData = (originBorrowIncentivePoolPointDa
|
|
|
1114
1383
|
};
|
|
1115
1384
|
var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
|
|
1116
1385
|
return {
|
|
1117
|
-
poolType:
|
|
1386
|
+
poolType: normalizeStructTag2(originBorrowIncentivePoolData.pool_type.name),
|
|
1118
1387
|
minStakes: Number(originBorrowIncentivePoolData.min_stakes),
|
|
1119
1388
|
maxStakes: Number(originBorrowIncentivePoolData.max_stakes),
|
|
1120
1389
|
staked: Number(originBorrowIncentivePoolData.stakes),
|
|
@@ -1198,7 +1467,7 @@ var calculateBorrowIncentivePoolPointData = (pasredBorrowIncentinvePoolData, par
|
|
|
1198
1467
|
};
|
|
1199
1468
|
var parseOriginBorrowIncentiveAccountPoolPointData = (originBorrowIncentiveAccountPoolPointData) => {
|
|
1200
1469
|
return {
|
|
1201
|
-
pointType:
|
|
1470
|
+
pointType: normalizeStructTag2(
|
|
1202
1471
|
originBorrowIncentiveAccountPoolPointData.point_type.name
|
|
1203
1472
|
),
|
|
1204
1473
|
weightedAmount: Number(
|
|
@@ -1211,7 +1480,7 @@ var parseOriginBorrowIncentiveAccountPoolPointData = (originBorrowIncentiveAccou
|
|
|
1211
1480
|
};
|
|
1212
1481
|
var parseOriginBorrowIncentiveAccountData = (originBorrowIncentiveAccountData) => {
|
|
1213
1482
|
return {
|
|
1214
|
-
poolType:
|
|
1483
|
+
poolType: normalizeStructTag2(
|
|
1215
1484
|
originBorrowIncentiveAccountData.pool_type.name
|
|
1216
1485
|
),
|
|
1217
1486
|
debtAmount: Number(originBorrowIncentiveAccountData.debt_amount),
|
|
@@ -1308,13 +1577,16 @@ var findClosestUnlockRound = (unlockAtInSecondTimestamp) => {
|
|
|
1308
1577
|
};
|
|
1309
1578
|
|
|
1310
1579
|
// src/queries/coreQuery.ts
|
|
1580
|
+
import BigNumber2 from "bignumber.js";
|
|
1311
1581
|
var queryMarket = async (query, indexer = false) => {
|
|
1312
1582
|
const packageId = query.address.get("core.packages.query.id");
|
|
1313
1583
|
const marketId = query.address.get("core.market");
|
|
1314
|
-
const txBlock = new SuiKitTxBlock();
|
|
1315
1584
|
const queryTarget = `${packageId}::market_query::market_data`;
|
|
1316
|
-
|
|
1317
|
-
const queryResult = await query.
|
|
1585
|
+
const args = [marketId];
|
|
1586
|
+
const queryResult = await query.cache.queryInspectTxn(
|
|
1587
|
+
{ queryTarget, args }
|
|
1588
|
+
// txBlock
|
|
1589
|
+
);
|
|
1318
1590
|
const marketData = queryResult.events[0].parsedJson;
|
|
1319
1591
|
const coinPrices = await query.utils.getCoinPrices();
|
|
1320
1592
|
const pools = {};
|
|
@@ -1337,7 +1609,7 @@ var queryMarket = async (query, indexer = false) => {
|
|
|
1337
1609
|
};
|
|
1338
1610
|
}
|
|
1339
1611
|
for (const pool of marketData.pools) {
|
|
1340
|
-
const coinType =
|
|
1612
|
+
const coinType = normalizeStructTag3(pool.type.name);
|
|
1341
1613
|
const poolCoinName = query.utils.parseCoinNameFromType(coinType);
|
|
1342
1614
|
const coinPrice = coinPrices[poolCoinName] ?? 0;
|
|
1343
1615
|
if (!SUPPORT_POOLS.includes(poolCoinName)) {
|
|
@@ -1387,7 +1659,7 @@ var queryMarket = async (query, indexer = false) => {
|
|
|
1387
1659
|
};
|
|
1388
1660
|
}
|
|
1389
1661
|
for (const collateral of marketData.collaterals) {
|
|
1390
|
-
const coinType =
|
|
1662
|
+
const coinType = normalizeStructTag3(collateral.type.name);
|
|
1391
1663
|
const collateralCoinName = query.utils.parseCoinNameFromType(coinType);
|
|
1392
1664
|
const coinPrice = coinPrices[collateralCoinName] ?? 0;
|
|
1393
1665
|
if (!SUPPORT_COLLATERALS.includes(collateralCoinName)) {
|
|
@@ -1432,11 +1704,8 @@ var queryMarket = async (query, indexer = false) => {
|
|
|
1432
1704
|
var getMarketPools = async (query, poolCoinNames, indexer = false) => {
|
|
1433
1705
|
poolCoinNames = poolCoinNames || [...SUPPORT_POOLS];
|
|
1434
1706
|
const marketId = query.address.get("core.market");
|
|
1435
|
-
const marketObjectResponse = await query.
|
|
1436
|
-
|
|
1437
|
-
options: {
|
|
1438
|
-
showContent: true
|
|
1439
|
-
}
|
|
1707
|
+
const marketObjectResponse = await query.cache.queryGetObject(marketId, {
|
|
1708
|
+
showContent: true
|
|
1440
1709
|
});
|
|
1441
1710
|
const coinPrices = await query.utils.getCoinPrices(poolCoinNames ?? []);
|
|
1442
1711
|
const marketPools = {};
|
|
@@ -1469,11 +1738,8 @@ var getMarketPools = async (query, poolCoinNames, indexer = false) => {
|
|
|
1469
1738
|
};
|
|
1470
1739
|
var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
|
|
1471
1740
|
const marketId = query.address.get("core.market");
|
|
1472
|
-
marketObject = marketObject || (await query.
|
|
1473
|
-
|
|
1474
|
-
options: {
|
|
1475
|
-
showContent: true
|
|
1476
|
-
}
|
|
1741
|
+
marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
|
|
1742
|
+
showContent: true
|
|
1477
1743
|
})).data;
|
|
1478
1744
|
coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
|
|
1479
1745
|
let marketPool;
|
|
@@ -1494,7 +1760,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
|
|
|
1494
1760
|
const fields = marketObject.content.fields;
|
|
1495
1761
|
const coinType = query.utils.parseCoinType(poolCoinName);
|
|
1496
1762
|
const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
|
|
1497
|
-
const balanceSheetDynamicFieldObjectResponse = await query.
|
|
1763
|
+
const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1498
1764
|
parentId: balanceSheetParentId,
|
|
1499
1765
|
name: {
|
|
1500
1766
|
type: "0x1::type_name::TypeName",
|
|
@@ -1509,7 +1775,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
|
|
|
1509
1775
|
balanceSheet = dynamicFields.value.fields;
|
|
1510
1776
|
}
|
|
1511
1777
|
const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
|
|
1512
|
-
const borrowIndexDynamicFieldObjectResponse = await query.
|
|
1778
|
+
const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1513
1779
|
parentId: borrowIndexParentId,
|
|
1514
1780
|
name: {
|
|
1515
1781
|
type: "0x1::type_name::TypeName",
|
|
@@ -1524,7 +1790,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
|
|
|
1524
1790
|
borrowIndex = dynamicFields.value.fields;
|
|
1525
1791
|
}
|
|
1526
1792
|
const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
|
|
1527
|
-
const interestModelDynamicFieldObjectResponse = await query.
|
|
1793
|
+
const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1528
1794
|
parentId: interestModelParentId,
|
|
1529
1795
|
name: {
|
|
1530
1796
|
type: "0x1::type_name::TypeName",
|
|
@@ -1538,7 +1804,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
|
|
|
1538
1804
|
const dynamicFields = interestModelDynamicFieldObject.content.fields;
|
|
1539
1805
|
interestModel = dynamicFields.value.fields;
|
|
1540
1806
|
}
|
|
1541
|
-
const borrowFeeDynamicFieldObjectResponse = await query.
|
|
1807
|
+
const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1542
1808
|
parentId: marketId,
|
|
1543
1809
|
name: {
|
|
1544
1810
|
type: `${BORROW_FEE_PROTOCOL_ID}::market_dynamic_keys::BorrowFeeKey`,
|
|
@@ -1605,11 +1871,8 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
|
|
|
1605
1871
|
var getMarketCollaterals = async (query, collateralCoinNames, indexer = false) => {
|
|
1606
1872
|
collateralCoinNames = collateralCoinNames || [...SUPPORT_COLLATERALS];
|
|
1607
1873
|
const marketId = query.address.get("core.market");
|
|
1608
|
-
const marketObjectResponse = await query.
|
|
1609
|
-
|
|
1610
|
-
options: {
|
|
1611
|
-
showContent: true
|
|
1612
|
-
}
|
|
1874
|
+
const marketObjectResponse = await query.cache.queryGetObject(marketId, {
|
|
1875
|
+
showContent: true
|
|
1613
1876
|
});
|
|
1614
1877
|
const coinPrices = await query.utils.getCoinPrices(collateralCoinNames ?? []);
|
|
1615
1878
|
const marketCollaterals = {};
|
|
@@ -1642,11 +1905,8 @@ var getMarketCollaterals = async (query, collateralCoinNames, indexer = false) =
|
|
|
1642
1905
|
};
|
|
1643
1906
|
var getMarketCollateral = async (query, collateralCoinName, indexer = false, marketObject, coinPrice) => {
|
|
1644
1907
|
const marketId = query.address.get("core.market");
|
|
1645
|
-
marketObject = marketObject || (await query.
|
|
1646
|
-
|
|
1647
|
-
options: {
|
|
1648
|
-
showContent: true
|
|
1649
|
-
}
|
|
1908
|
+
marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
|
|
1909
|
+
showContent: true
|
|
1650
1910
|
})).data;
|
|
1651
1911
|
coinPrice = coinPrice || (await query.utils.getCoinPrices([collateralCoinName]))?.[collateralCoinName];
|
|
1652
1912
|
let marketCollateral;
|
|
@@ -1665,7 +1925,7 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
|
|
|
1665
1925
|
const fields = marketObject.content.fields;
|
|
1666
1926
|
const coinType = query.utils.parseCoinType(collateralCoinName);
|
|
1667
1927
|
const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
|
|
1668
|
-
const riskModelDynamicFieldObjectResponse = await query.
|
|
1928
|
+
const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1669
1929
|
parentId: riskModelParentId,
|
|
1670
1930
|
name: {
|
|
1671
1931
|
type: "0x1::type_name::TypeName",
|
|
@@ -1680,7 +1940,7 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
|
|
|
1680
1940
|
riskModel = dynamicFields.value.fields;
|
|
1681
1941
|
}
|
|
1682
1942
|
const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
|
|
1683
|
-
const collateralStatDynamicFieldObjectResponse = await query.
|
|
1943
|
+
const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
1684
1944
|
parentId: collateralStatParentId,
|
|
1685
1945
|
name: {
|
|
1686
1946
|
type: "0x1::type_name::TypeName",
|
|
@@ -1736,7 +1996,7 @@ var getObligations = async (query, ownerAddress) => {
|
|
|
1736
1996
|
let hasNextPage = false;
|
|
1737
1997
|
let nextCursor = null;
|
|
1738
1998
|
do {
|
|
1739
|
-
const paginatedKeyObjectsResponse = await query.
|
|
1999
|
+
const paginatedKeyObjectsResponse = await query.cache.queryGetOwnedObjects({
|
|
1740
2000
|
owner,
|
|
1741
2001
|
filter: {
|
|
1742
2002
|
StructType: `${protocolObjectId}::obligation::ObligationKey`
|
|
@@ -1752,7 +2012,7 @@ var getObligations = async (query, ownerAddress) => {
|
|
|
1752
2012
|
}
|
|
1753
2013
|
} while (hasNextPage);
|
|
1754
2014
|
const keyObjectIds = keyObjectsResponse.map((ref) => ref?.data?.objectId).filter((id) => id !== void 0);
|
|
1755
|
-
const keyObjects = await query.
|
|
2015
|
+
const keyObjects = await query.cache.queryGetObjects(keyObjectIds);
|
|
1756
2016
|
const obligations = [];
|
|
1757
2017
|
for (const keyObject of keyObjects) {
|
|
1758
2018
|
const keyId = keyObject.objectId;
|
|
@@ -1766,12 +2026,10 @@ var getObligations = async (query, ownerAddress) => {
|
|
|
1766
2026
|
return obligations;
|
|
1767
2027
|
};
|
|
1768
2028
|
var getObligationLocked = async (query, obligationId) => {
|
|
1769
|
-
const obligationObjectResponse = await query.
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
}
|
|
1774
|
-
});
|
|
2029
|
+
const obligationObjectResponse = await query.cache.queryGetObject(
|
|
2030
|
+
obligationId,
|
|
2031
|
+
{ showContent: true }
|
|
2032
|
+
);
|
|
1775
2033
|
let obligationLocked = false;
|
|
1776
2034
|
if (obligationObjectResponse.data && obligationObjectResponse?.data?.content?.dataType === "moveObject" && "lock_key" in obligationObjectResponse.data.content.fields) {
|
|
1777
2035
|
obligationLocked = Boolean(
|
|
@@ -1783,186 +2041,64 @@ var getObligationLocked = async (query, obligationId) => {
|
|
|
1783
2041
|
var queryObligation = async (query, obligationId) => {
|
|
1784
2042
|
const packageId = query.address.get("core.packages.query.id");
|
|
1785
2043
|
const queryTarget = `${packageId}::obligation_query::obligation_data`;
|
|
1786
|
-
const
|
|
1787
|
-
|
|
1788
|
-
|
|
2044
|
+
const args = [obligationId];
|
|
2045
|
+
const queryResult = await query.cache.queryInspectTxn(
|
|
2046
|
+
{ queryTarget, args }
|
|
2047
|
+
// txBlock
|
|
2048
|
+
);
|
|
1789
2049
|
return queryResult.events[0].parsedJson;
|
|
1790
2050
|
};
|
|
1791
2051
|
var getCoinAmounts = async (query, assetCoinNames, ownerAddress) => {
|
|
1792
2052
|
assetCoinNames = assetCoinNames || [...SUPPORT_POOLS];
|
|
1793
2053
|
const owner = ownerAddress || query.suiKit.currentAddress();
|
|
1794
|
-
const
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
filter: {
|
|
1801
|
-
MatchAny: assetCoinNames.map((assetCoinName) => {
|
|
1802
|
-
const coinType = query.utils.parseCoinType(assetCoinName);
|
|
1803
|
-
return { StructType: `0x2::coin::Coin<${coinType}>` };
|
|
1804
|
-
})
|
|
1805
|
-
},
|
|
1806
|
-
options: {
|
|
1807
|
-
showType: true,
|
|
1808
|
-
showContent: true
|
|
1809
|
-
},
|
|
1810
|
-
cursor: nextCursor
|
|
1811
|
-
});
|
|
1812
|
-
coinObjectsResponse.push(...paginatedCoinObjectsResponse.data);
|
|
1813
|
-
if (paginatedCoinObjectsResponse.hasNextPage && paginatedCoinObjectsResponse.nextCursor) {
|
|
1814
|
-
hasNextPage = true;
|
|
1815
|
-
nextCursor = paginatedCoinObjectsResponse.nextCursor;
|
|
1816
|
-
} else {
|
|
1817
|
-
hasNextPage = false;
|
|
1818
|
-
}
|
|
1819
|
-
} while (hasNextPage);
|
|
1820
|
-
const coinAmounts = {};
|
|
1821
|
-
const coinObjects = coinObjectsResponse.map((response) => {
|
|
1822
|
-
return response.data;
|
|
1823
|
-
}).filter(
|
|
1824
|
-
(object) => object !== void 0 && object !== null
|
|
2054
|
+
const assetCoins2 = {};
|
|
2055
|
+
await Promise.allSettled(
|
|
2056
|
+
assetCoinNames.map(async (assetCoinName) => {
|
|
2057
|
+
const marketCoin = await getCoinAmount(query, assetCoinName, owner);
|
|
2058
|
+
assetCoins2[assetCoinName] = marketCoin;
|
|
2059
|
+
})
|
|
1825
2060
|
);
|
|
1826
|
-
|
|
1827
|
-
const type = coinObject.type;
|
|
1828
|
-
if (coinObject.content && "fields" in coinObject.content) {
|
|
1829
|
-
const fields = coinObject.content.fields;
|
|
1830
|
-
const poolCoinName = query.utils.parseCoinNameFromType(type);
|
|
1831
|
-
if (poolCoinName) {
|
|
1832
|
-
coinAmounts[poolCoinName] = BigNumber2(coinAmounts[poolCoinName] ?? 0).plus(fields.balance).toNumber();
|
|
1833
|
-
}
|
|
1834
|
-
}
|
|
1835
|
-
}
|
|
1836
|
-
return coinAmounts;
|
|
2061
|
+
return assetCoins2;
|
|
1837
2062
|
};
|
|
1838
2063
|
var getCoinAmount = async (query, assetCoinName, ownerAddress) => {
|
|
1839
2064
|
const owner = ownerAddress || query.suiKit.currentAddress();
|
|
1840
2065
|
const coinType = query.utils.parseCoinType(assetCoinName);
|
|
1841
|
-
const
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
owner,
|
|
1847
|
-
filter: { StructType: `0x2::coin::Coin<${coinType}>` },
|
|
1848
|
-
options: {
|
|
1849
|
-
showContent: true
|
|
1850
|
-
},
|
|
1851
|
-
cursor: nextCursor
|
|
1852
|
-
});
|
|
1853
|
-
coinObjectsResponse.push(...paginatedCoinObjectsResponse.data);
|
|
1854
|
-
if (paginatedCoinObjectsResponse.hasNextPage && paginatedCoinObjectsResponse.nextCursor) {
|
|
1855
|
-
hasNextPage = true;
|
|
1856
|
-
nextCursor = paginatedCoinObjectsResponse.nextCursor;
|
|
1857
|
-
} else {
|
|
1858
|
-
hasNextPage = false;
|
|
1859
|
-
}
|
|
1860
|
-
} while (hasNextPage);
|
|
1861
|
-
let coinAmount = 0;
|
|
1862
|
-
const coinObjects = coinObjectsResponse.map((response) => {
|
|
1863
|
-
return response.data;
|
|
1864
|
-
}).filter(
|
|
1865
|
-
(object) => object !== void 0 && object !== null
|
|
1866
|
-
);
|
|
1867
|
-
for (const coinObject of coinObjects) {
|
|
1868
|
-
if (coinObject.content && "fields" in coinObject.content) {
|
|
1869
|
-
const fields = coinObject.content.fields;
|
|
1870
|
-
coinAmount = BigNumber2(coinAmount).plus(fields.balance).toNumber();
|
|
1871
|
-
}
|
|
1872
|
-
}
|
|
1873
|
-
return coinAmount;
|
|
2066
|
+
const amount = await query.cache.queryGetCoinBalance({
|
|
2067
|
+
owner,
|
|
2068
|
+
coinType
|
|
2069
|
+
});
|
|
2070
|
+
return BigNumber2(amount).toNumber();
|
|
1874
2071
|
};
|
|
1875
2072
|
var getMarketCoinAmounts = async (query, marketCoinNames, ownerAddress) => {
|
|
1876
2073
|
marketCoinNames = marketCoinNames || [...SUPPORT_POOLS].map(
|
|
1877
2074
|
(poolCoinName) => query.utils.parseMarketCoinName(poolCoinName)
|
|
1878
2075
|
);
|
|
1879
2076
|
const owner = ownerAddress || query.suiKit.currentAddress();
|
|
1880
|
-
const
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
})
|
|
1891
|
-
},
|
|
1892
|
-
options: {
|
|
1893
|
-
showType: true,
|
|
1894
|
-
showContent: true
|
|
1895
|
-
},
|
|
1896
|
-
cursor: nextCursor
|
|
1897
|
-
});
|
|
1898
|
-
marketCoinObjectsResponse.push(...paginatedMarketCoinObjectsResponse.data);
|
|
1899
|
-
if (paginatedMarketCoinObjectsResponse.hasNextPage && paginatedMarketCoinObjectsResponse.nextCursor) {
|
|
1900
|
-
hasNextPage = true;
|
|
1901
|
-
nextCursor = paginatedMarketCoinObjectsResponse.nextCursor;
|
|
1902
|
-
} else {
|
|
1903
|
-
hasNextPage = false;
|
|
1904
|
-
}
|
|
1905
|
-
} while (hasNextPage);
|
|
1906
|
-
const marketCoinAmounts = {};
|
|
1907
|
-
const marketCoinObjects = marketCoinObjectsResponse.map((response) => {
|
|
1908
|
-
return response.data;
|
|
1909
|
-
}).filter(
|
|
1910
|
-
(object) => object !== void 0 && object !== null
|
|
2077
|
+
const marketCoins2 = {};
|
|
2078
|
+
Promise.allSettled(
|
|
2079
|
+
marketCoinNames.map(async (marketCoinName) => {
|
|
2080
|
+
const marketCoin = await getMarketCoinAmount(
|
|
2081
|
+
query,
|
|
2082
|
+
marketCoinName,
|
|
2083
|
+
owner
|
|
2084
|
+
);
|
|
2085
|
+
marketCoins2[marketCoinName] = marketCoin;
|
|
2086
|
+
})
|
|
1911
2087
|
);
|
|
1912
|
-
|
|
1913
|
-
const marketCoinType = marketCoinObject.type;
|
|
1914
|
-
if (marketCoinObject.content && "fields" in marketCoinObject.content) {
|
|
1915
|
-
const fields = marketCoinObject.content.fields;
|
|
1916
|
-
const marketCoinName = query.utils.parseCoinNameFromType(marketCoinType);
|
|
1917
|
-
if (marketCoinName) {
|
|
1918
|
-
marketCoinAmounts[marketCoinName] = BigNumber2(
|
|
1919
|
-
marketCoinAmounts[marketCoinName] ?? 0
|
|
1920
|
-
).plus(fields.balance).toNumber();
|
|
1921
|
-
}
|
|
1922
|
-
}
|
|
1923
|
-
}
|
|
1924
|
-
return marketCoinAmounts;
|
|
2088
|
+
return marketCoins2;
|
|
1925
2089
|
};
|
|
1926
2090
|
var getMarketCoinAmount = async (query, marketCoinName, ownerAddress) => {
|
|
1927
2091
|
const owner = ownerAddress || query.suiKit.currentAddress();
|
|
1928
2092
|
const marketCoinType = query.utils.parseMarketCoinType(marketCoinName);
|
|
1929
|
-
const
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
owner,
|
|
1935
|
-
filter: { StructType: `0x2::coin::Coin<${marketCoinType}>` },
|
|
1936
|
-
options: {
|
|
1937
|
-
showContent: true
|
|
1938
|
-
},
|
|
1939
|
-
cursor: nextCursor
|
|
1940
|
-
});
|
|
1941
|
-
marketCoinObjectsResponse.push(...paginatedMarketCoinObjectsResponse.data);
|
|
1942
|
-
if (paginatedMarketCoinObjectsResponse.hasNextPage && paginatedMarketCoinObjectsResponse.nextCursor) {
|
|
1943
|
-
hasNextPage = true;
|
|
1944
|
-
nextCursor = paginatedMarketCoinObjectsResponse.nextCursor;
|
|
1945
|
-
} else {
|
|
1946
|
-
hasNextPage = false;
|
|
1947
|
-
}
|
|
1948
|
-
} while (hasNextPage);
|
|
1949
|
-
let marketCoinAmount = 0;
|
|
1950
|
-
const marketCoinObjects = marketCoinObjectsResponse.map((response) => {
|
|
1951
|
-
return response.data;
|
|
1952
|
-
}).filter(
|
|
1953
|
-
(object) => object !== void 0 && object !== null
|
|
1954
|
-
);
|
|
1955
|
-
for (const marketCoinObject of marketCoinObjects) {
|
|
1956
|
-
if (marketCoinObject.content && "fields" in marketCoinObject.content) {
|
|
1957
|
-
const fields = marketCoinObject.content.fields;
|
|
1958
|
-
marketCoinAmount = BigNumber2(marketCoinAmount).plus(fields.balance).toNumber();
|
|
1959
|
-
}
|
|
1960
|
-
}
|
|
1961
|
-
return marketCoinAmount;
|
|
2093
|
+
const amount = await query.cache.queryGetCoinBalance({
|
|
2094
|
+
owner,
|
|
2095
|
+
coinType: marketCoinType
|
|
2096
|
+
});
|
|
2097
|
+
return BigNumber2(amount).toNumber();
|
|
1962
2098
|
};
|
|
1963
2099
|
|
|
1964
2100
|
// src/queries/spoolQuery.ts
|
|
1965
|
-
import { normalizeStructTag as
|
|
2101
|
+
import { normalizeStructTag as normalizeStructTag4 } from "@mysten/sui.js/utils";
|
|
1966
2102
|
var getSpools = async (query, stakeMarketCoinNames, indexer = false) => {
|
|
1967
2103
|
stakeMarketCoinNames = stakeMarketCoinNames || [...SUPPORT_SPOOLS];
|
|
1968
2104
|
const stakeCoinNames = stakeMarketCoinNames.map(
|
|
@@ -2028,17 +2164,17 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
|
|
|
2028
2164
|
spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName] || spoolIndexer.rewardCoinPrice;
|
|
2029
2165
|
return spoolIndexer;
|
|
2030
2166
|
}
|
|
2031
|
-
const spoolObjectResponse = await query.
|
|
2032
|
-
|
|
2033
|
-
|
|
2167
|
+
const spoolObjectResponse = await query.cache.queryGetObjects(
|
|
2168
|
+
[poolId, rewardPoolId],
|
|
2169
|
+
{
|
|
2034
2170
|
showContent: true
|
|
2035
2171
|
}
|
|
2036
|
-
|
|
2037
|
-
if (marketPool && spoolObjectResponse[0]
|
|
2172
|
+
);
|
|
2173
|
+
if (marketPool && spoolObjectResponse[0] && spoolObjectResponse[1]) {
|
|
2038
2174
|
const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
|
|
2039
2175
|
coinPrices = coinPrices || await query.utils.getCoinPrices([coinName, rewardCoinName]);
|
|
2040
|
-
const spoolObject = spoolObjectResponse[0]
|
|
2041
|
-
const rewardPoolObject = spoolObjectResponse[1]
|
|
2176
|
+
const spoolObject = spoolObjectResponse[0];
|
|
2177
|
+
const rewardPoolObject = spoolObjectResponse[1];
|
|
2042
2178
|
if (spoolObject.content && "fields" in spoolObject.content) {
|
|
2043
2179
|
const spoolFields = spoolObject.content.fields;
|
|
2044
2180
|
const parsedSpoolData = parseOriginSpoolData({
|
|
@@ -2110,7 +2246,7 @@ var getStakeAccounts = async (query, ownerAddress) => {
|
|
|
2110
2246
|
let hasNextPage = false;
|
|
2111
2247
|
let nextCursor = null;
|
|
2112
2248
|
do {
|
|
2113
|
-
const paginatedStakeObjectsResponse = await query.
|
|
2249
|
+
const paginatedStakeObjectsResponse = await query.cache.queryGetOwnedObjects({
|
|
2114
2250
|
owner,
|
|
2115
2251
|
filter: { StructType: stakeAccountType },
|
|
2116
2252
|
options: {
|
|
@@ -2148,7 +2284,7 @@ var getStakeAccounts = async (query, ownerAddress) => {
|
|
|
2148
2284
|
{}
|
|
2149
2285
|
);
|
|
2150
2286
|
const stakeObjectIds = stakeObjectsResponse.map((ref) => ref?.data?.objectId).filter((id) => id !== void 0);
|
|
2151
|
-
const stakeObjects = await query.
|
|
2287
|
+
const stakeObjects = await query.cache.queryGetObjects(stakeObjectIds);
|
|
2152
2288
|
for (const stakeObject of stakeObjects) {
|
|
2153
2289
|
const id = stakeObject.objectId;
|
|
2154
2290
|
const type = stakeObject.type;
|
|
@@ -2160,89 +2296,89 @@ var getStakeAccounts = async (query, ownerAddress) => {
|
|
|
2160
2296
|
const index = Number(fields.index);
|
|
2161
2297
|
const points = Number(fields.points);
|
|
2162
2298
|
const totalPoints = Number(fields.total_points);
|
|
2163
|
-
if (
|
|
2299
|
+
if (normalizeStructTag4(type) === stakeMarketCoinTypes.seth) {
|
|
2164
2300
|
stakeAccounts.seth.push({
|
|
2165
2301
|
id,
|
|
2166
|
-
type:
|
|
2302
|
+
type: normalizeStructTag4(type),
|
|
2167
2303
|
stakePoolId,
|
|
2168
|
-
stakeType:
|
|
2304
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2169
2305
|
staked,
|
|
2170
2306
|
index,
|
|
2171
2307
|
points,
|
|
2172
2308
|
totalPoints
|
|
2173
2309
|
});
|
|
2174
|
-
} else if (
|
|
2310
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.ssui) {
|
|
2175
2311
|
stakeAccounts.ssui.push({
|
|
2176
2312
|
id,
|
|
2177
|
-
type:
|
|
2313
|
+
type: normalizeStructTag4(type),
|
|
2178
2314
|
stakePoolId,
|
|
2179
|
-
stakeType:
|
|
2315
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2180
2316
|
staked,
|
|
2181
2317
|
index,
|
|
2182
2318
|
points,
|
|
2183
2319
|
totalPoints
|
|
2184
2320
|
});
|
|
2185
|
-
} else if (
|
|
2321
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.susdc) {
|
|
2186
2322
|
stakeAccounts.susdc.push({
|
|
2187
2323
|
id,
|
|
2188
|
-
type:
|
|
2324
|
+
type: normalizeStructTag4(type),
|
|
2189
2325
|
stakePoolId,
|
|
2190
|
-
stakeType:
|
|
2326
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2191
2327
|
staked,
|
|
2192
2328
|
index,
|
|
2193
2329
|
points,
|
|
2194
2330
|
totalPoints
|
|
2195
2331
|
});
|
|
2196
|
-
} else if (
|
|
2332
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.susdt) {
|
|
2197
2333
|
stakeAccounts.susdt.push({
|
|
2198
2334
|
id,
|
|
2199
|
-
type:
|
|
2335
|
+
type: normalizeStructTag4(type),
|
|
2200
2336
|
stakePoolId,
|
|
2201
|
-
stakeType:
|
|
2337
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2202
2338
|
staked,
|
|
2203
2339
|
index,
|
|
2204
2340
|
points,
|
|
2205
2341
|
totalPoints
|
|
2206
2342
|
});
|
|
2207
|
-
} else if (
|
|
2343
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.scetus) {
|
|
2208
2344
|
stakeAccounts.scetus.push({
|
|
2209
2345
|
id,
|
|
2210
|
-
type:
|
|
2346
|
+
type: normalizeStructTag4(type),
|
|
2211
2347
|
stakePoolId,
|
|
2212
|
-
stakeType:
|
|
2348
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2213
2349
|
staked,
|
|
2214
2350
|
index,
|
|
2215
2351
|
points,
|
|
2216
2352
|
totalPoints
|
|
2217
2353
|
});
|
|
2218
|
-
} else if (
|
|
2354
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.safsui) {
|
|
2219
2355
|
stakeAccounts.safsui.push({
|
|
2220
2356
|
id,
|
|
2221
|
-
type:
|
|
2357
|
+
type: normalizeStructTag4(type),
|
|
2222
2358
|
stakePoolId,
|
|
2223
|
-
stakeType:
|
|
2359
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2224
2360
|
staked,
|
|
2225
2361
|
index,
|
|
2226
2362
|
points,
|
|
2227
2363
|
totalPoints
|
|
2228
2364
|
});
|
|
2229
|
-
} else if (
|
|
2365
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.shasui) {
|
|
2230
2366
|
stakeAccounts.shasui.push({
|
|
2231
2367
|
id,
|
|
2232
|
-
type:
|
|
2368
|
+
type: normalizeStructTag4(type),
|
|
2233
2369
|
stakePoolId,
|
|
2234
|
-
stakeType:
|
|
2370
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2235
2371
|
staked,
|
|
2236
2372
|
index,
|
|
2237
2373
|
points,
|
|
2238
2374
|
totalPoints
|
|
2239
2375
|
});
|
|
2240
|
-
} else if (
|
|
2376
|
+
} else if (normalizeStructTag4(type) === stakeMarketCoinTypes.svsui) {
|
|
2241
2377
|
stakeAccounts.svsui.push({
|
|
2242
2378
|
id,
|
|
2243
|
-
type:
|
|
2379
|
+
type: normalizeStructTag4(type),
|
|
2244
2380
|
stakePoolId,
|
|
2245
|
-
stakeType:
|
|
2381
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2246
2382
|
staked,
|
|
2247
2383
|
index,
|
|
2248
2384
|
points,
|
|
@@ -2256,12 +2392,9 @@ var getStakeAccounts = async (query, ownerAddress) => {
|
|
|
2256
2392
|
var getStakePool = async (query, marketCoinName) => {
|
|
2257
2393
|
const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
|
|
2258
2394
|
let stakePool = void 0;
|
|
2259
|
-
const stakePoolObjectResponse = await query.
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
showContent: true,
|
|
2263
|
-
showType: true
|
|
2264
|
-
}
|
|
2395
|
+
const stakePoolObjectResponse = await query.cache.queryGetObject(poolId, {
|
|
2396
|
+
showContent: true,
|
|
2397
|
+
showType: true
|
|
2265
2398
|
});
|
|
2266
2399
|
if (stakePoolObjectResponse.data) {
|
|
2267
2400
|
const stakePoolObject = stakePoolObjectResponse.data;
|
|
@@ -2281,13 +2414,13 @@ var getStakePool = async (query, marketCoinName) => {
|
|
|
2281
2414
|
const lastUpdate = Number(fields.last_update);
|
|
2282
2415
|
stakePool = {
|
|
2283
2416
|
id,
|
|
2284
|
-
type:
|
|
2417
|
+
type: normalizeStructTag4(type),
|
|
2285
2418
|
maxPoint,
|
|
2286
2419
|
distributedPoint,
|
|
2287
2420
|
pointPerPeriod,
|
|
2288
2421
|
period,
|
|
2289
2422
|
maxStake,
|
|
2290
|
-
stakeType:
|
|
2423
|
+
stakeType: normalizeStructTag4(stakeType),
|
|
2291
2424
|
totalStaked,
|
|
2292
2425
|
index,
|
|
2293
2426
|
createdAt,
|
|
@@ -2302,13 +2435,13 @@ var getStakeRewardPool = async (query, marketCoinName) => {
|
|
|
2302
2435
|
`spool.pools.${marketCoinName}.rewardPoolId`
|
|
2303
2436
|
);
|
|
2304
2437
|
let stakeRewardPool = void 0;
|
|
2305
|
-
const stakeRewardPoolObjectResponse = await query.
|
|
2306
|
-
|
|
2307
|
-
|
|
2438
|
+
const stakeRewardPoolObjectResponse = await query.cache.queryGetObject(
|
|
2439
|
+
poolId,
|
|
2440
|
+
{
|
|
2308
2441
|
showContent: true,
|
|
2309
2442
|
showType: true
|
|
2310
2443
|
}
|
|
2311
|
-
|
|
2444
|
+
);
|
|
2312
2445
|
if (stakeRewardPoolObjectResponse.data) {
|
|
2313
2446
|
const stakeRewardPoolObject = stakeRewardPoolObjectResponse.data;
|
|
2314
2447
|
const id = stakeRewardPoolObject.objectId;
|
|
@@ -2324,7 +2457,7 @@ var getStakeRewardPool = async (query, marketCoinName) => {
|
|
|
2324
2457
|
const claimedRewards = Number(rewardPoolFields.claimed_rewards);
|
|
2325
2458
|
stakeRewardPool = {
|
|
2326
2459
|
id,
|
|
2327
|
-
type:
|
|
2460
|
+
type: normalizeStructTag4(type),
|
|
2328
2461
|
stakePoolId,
|
|
2329
2462
|
ratioNumerator,
|
|
2330
2463
|
ratioDenominator,
|
|
@@ -2337,18 +2470,16 @@ var getStakeRewardPool = async (query, marketCoinName) => {
|
|
|
2337
2470
|
};
|
|
2338
2471
|
|
|
2339
2472
|
// src/queries/borrowIncentiveQuery.ts
|
|
2340
|
-
import { normalizeStructTag as
|
|
2341
|
-
import { SuiTxBlock as SuiKitTxBlock2 } from "@scallop-io/sui-kit";
|
|
2473
|
+
import { normalizeStructTag as normalizeStructTag5 } from "@mysten/sui.js/utils";
|
|
2342
2474
|
var queryBorrowIncentivePools = async (query, borrowIncentiveCoinNames, indexer = false) => {
|
|
2343
2475
|
borrowIncentiveCoinNames = borrowIncentiveCoinNames || [
|
|
2344
2476
|
...SUPPORT_BORROW_INCENTIVE_POOLS
|
|
2345
2477
|
];
|
|
2346
2478
|
const queryPkgId = query.address.get("borrowIncentive.query");
|
|
2347
2479
|
const incentivePoolsId = query.address.get("borrowIncentive.incentivePools");
|
|
2348
|
-
const txBlock = new SuiKitTxBlock2();
|
|
2349
2480
|
const queryTarget = `${queryPkgId}::incentive_pools_query::incentive_pools_data`;
|
|
2350
|
-
|
|
2351
|
-
const queryResult = await query.
|
|
2481
|
+
const args = [incentivePoolsId];
|
|
2482
|
+
const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
|
|
2352
2483
|
const borrowIncentivePoolsQueryData = queryResult.events[0].parsedJson;
|
|
2353
2484
|
const borrowIncentivePools = {};
|
|
2354
2485
|
if (indexer) {
|
|
@@ -2364,7 +2495,7 @@ var queryBorrowIncentivePools = async (query, borrowIncentiveCoinNames, indexer
|
|
|
2364
2495
|
])
|
|
2365
2496
|
]
|
|
2366
2497
|
);
|
|
2367
|
-
const poolCoinType =
|
|
2498
|
+
const poolCoinType = normalizeStructTag5(pool.pool_type.name);
|
|
2368
2499
|
const poolCoinName = query.utils.parseCoinNameFromType(
|
|
2369
2500
|
poolCoinType
|
|
2370
2501
|
);
|
|
@@ -2376,7 +2507,7 @@ var queryBorrowIncentivePools = async (query, borrowIncentiveCoinNames, indexer
|
|
|
2376
2507
|
for (const [coinName, poolPoint] of Object.entries(
|
|
2377
2508
|
parsedBorrowIncentivePoolData.poolPoints
|
|
2378
2509
|
)) {
|
|
2379
|
-
const rewardCoinType =
|
|
2510
|
+
const rewardCoinType = normalizeStructTag5(poolPoint.pointType);
|
|
2380
2511
|
const rewardCoinName = query.utils.parseCoinNameFromType(
|
|
2381
2512
|
rewardCoinType
|
|
2382
2513
|
);
|
|
@@ -2425,9 +2556,8 @@ var queryBorrowIncentiveAccounts = async (query, obligationId, borrowIncentiveCo
|
|
|
2425
2556
|
"borrowIncentive.incentiveAccounts"
|
|
2426
2557
|
);
|
|
2427
2558
|
const queryTarget = `${queryPkgId}::incentive_account_query::incentive_account_data`;
|
|
2428
|
-
const
|
|
2429
|
-
|
|
2430
|
-
const queryResult = await query.suiKit.inspectTxn(txBlock);
|
|
2559
|
+
const args = [incentiveAccountsId, obligationId];
|
|
2560
|
+
const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
|
|
2431
2561
|
const borrowIncentiveAccountsQueryData = queryResult.events[0].parsedJson;
|
|
2432
2562
|
const borrowIncentiveAccounts = Object.values(
|
|
2433
2563
|
borrowIncentiveAccountsQueryData.pool_records
|
|
@@ -2445,7 +2575,7 @@ var queryBorrowIncentiveAccounts = async (query, obligationId, borrowIncentiveCo
|
|
|
2445
2575
|
var getBindedObligationId = async (query, veScaKeyId) => {
|
|
2446
2576
|
const borrowIncentiveObjectId = query.address.get("borrowIncentive.object");
|
|
2447
2577
|
const incentivePoolsId = query.address.get("borrowIncentive.incentivePools");
|
|
2448
|
-
const
|
|
2578
|
+
const veScaObjId = query.address.get("vesca.object");
|
|
2449
2579
|
const client = query.suiKit.client();
|
|
2450
2580
|
const incentivePoolsResponse = await client.getObject({
|
|
2451
2581
|
id: incentivePoolsId,
|
|
@@ -2457,7 +2587,7 @@ var getBindedObligationId = async (query, veScaKeyId) => {
|
|
|
2457
2587
|
return null;
|
|
2458
2588
|
const incentivePoolFields = incentivePoolsResponse.data.content.fields;
|
|
2459
2589
|
const veScaBindTableId = incentivePoolFields.ve_sca_bind.fields.id.id;
|
|
2460
|
-
const keyType = `${borrowIncentiveObjectId}::typed_id::TypedID<${
|
|
2590
|
+
const keyType = `${borrowIncentiveObjectId}::typed_id::TypedID<${veScaObjId}::ve_sca::VeScaKey>`;
|
|
2461
2591
|
const veScaBindTableResponse = await client.getDynamicFieldObject({
|
|
2462
2592
|
parentId: veScaBindTableId,
|
|
2463
2593
|
name: {
|
|
@@ -2501,18 +2631,13 @@ var getBindedVeScaKey = async (query, obliationId) => {
|
|
|
2501
2631
|
};
|
|
2502
2632
|
|
|
2503
2633
|
// src/queries/priceQuery.ts
|
|
2504
|
-
var getPythPrice = async (query, assetCoinName) => {
|
|
2634
|
+
var getPythPrice = async (query, assetCoinName, priceFeedObject) => {
|
|
2505
2635
|
const pythFeedObjectId = query.address.get(
|
|
2506
2636
|
`core.coins.${assetCoinName}.oracle.pyth.feedObject`
|
|
2507
2637
|
);
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
showContent: true
|
|
2512
|
-
}
|
|
2513
|
-
});
|
|
2514
|
-
if (priceFeedObjectResponse.data) {
|
|
2515
|
-
const priceFeedPoolObject = priceFeedObjectResponse.data;
|
|
2638
|
+
priceFeedObject = priceFeedObject || (await query.cache.queryGetObject(pythFeedObjectId, { showContent: true })).data;
|
|
2639
|
+
if (priceFeedObject) {
|
|
2640
|
+
const priceFeedPoolObject = priceFeedObject;
|
|
2516
2641
|
if (priceFeedPoolObject.content && "fields" in priceFeedPoolObject.content) {
|
|
2517
2642
|
const fields = priceFeedPoolObject.content.fields;
|
|
2518
2643
|
const expoMagnitude = Number(
|
|
@@ -2532,6 +2657,36 @@ var getPythPrice = async (query, assetCoinName) => {
|
|
|
2532
2657
|
}
|
|
2533
2658
|
return 0;
|
|
2534
2659
|
};
|
|
2660
|
+
var getPythPrices = async (query, assetCoinNames) => {
|
|
2661
|
+
const seen = {};
|
|
2662
|
+
const pythFeedObjectIds = assetCoinNames.map((assetCoinName) => {
|
|
2663
|
+
const pythFeedObjectId = query.address.get(
|
|
2664
|
+
`core.coins.${assetCoinName}.oracle.pyth.feedObject`
|
|
2665
|
+
);
|
|
2666
|
+
if (seen[pythFeedObjectId])
|
|
2667
|
+
return null;
|
|
2668
|
+
seen[pythFeedObjectId] = true;
|
|
2669
|
+
return pythFeedObjectId;
|
|
2670
|
+
}).filter((item) => !!item);
|
|
2671
|
+
const priceFeedObjects = await query.cache.queryGetObjects(
|
|
2672
|
+
pythFeedObjectIds,
|
|
2673
|
+
{
|
|
2674
|
+
showContent: true
|
|
2675
|
+
}
|
|
2676
|
+
);
|
|
2677
|
+
return (await Promise.all(
|
|
2678
|
+
priceFeedObjects.map(async (priceFeedObject, idx) => ({
|
|
2679
|
+
coinName: assetCoinNames[idx],
|
|
2680
|
+
price: await getPythPrice(query, assetCoinNames[idx], priceFeedObject)
|
|
2681
|
+
}))
|
|
2682
|
+
)).reduce(
|
|
2683
|
+
(prev, curr) => {
|
|
2684
|
+
prev[curr.coinName] = curr.price;
|
|
2685
|
+
return prev;
|
|
2686
|
+
},
|
|
2687
|
+
{}
|
|
2688
|
+
);
|
|
2689
|
+
};
|
|
2535
2690
|
|
|
2536
2691
|
// src/queries/portfolioQuery.ts
|
|
2537
2692
|
import BigNumber3 from "bignumber.js";
|
|
@@ -3033,10 +3188,12 @@ var getTotalValueLocked = async (query, indexer = false) => {
|
|
|
3033
3188
|
|
|
3034
3189
|
// src/queries/vescaQuery.ts
|
|
3035
3190
|
import BigNumber4 from "bignumber.js";
|
|
3191
|
+
import { SUI_CLOCK_OBJECT_ID, SuiTxBlock as SuiTxBlock2 } from "@scallop-io/sui-kit";
|
|
3192
|
+
import { bcs } from "@mysten/sui.js/bcs";
|
|
3036
3193
|
var getVescaKeys = async (query, ownerAddress) => {
|
|
3037
3194
|
const owner = ownerAddress || query.suiKit.currentAddress();
|
|
3038
|
-
const
|
|
3039
|
-
const veScaKeyType = `${
|
|
3195
|
+
const veScaObjId = query.address.get("vesca.object");
|
|
3196
|
+
const veScaKeyType = `${veScaObjId}::ve_sca::VeScaKey`;
|
|
3040
3197
|
const keyObjectsResponse = [];
|
|
3041
3198
|
let hasNextPage = false;
|
|
3042
3199
|
let nextCursor = null;
|
|
@@ -3062,19 +3219,21 @@ var getVescaKeys = async (query, ownerAddress) => {
|
|
|
3062
3219
|
var getVeScas = async (query, ownerAddress) => {
|
|
3063
3220
|
const keyObjectDatas = await getVescaKeys(query, ownerAddress);
|
|
3064
3221
|
const keyObjectId = keyObjectDatas.map((data) => data.objectId);
|
|
3065
|
-
const veScas =
|
|
3066
|
-
|
|
3222
|
+
const veScas = Array(keyObjectId.length).fill(null);
|
|
3223
|
+
const tasks = keyObjectId.map(async (keyId, idx) => {
|
|
3067
3224
|
const veSca = await getVeSca(query, keyId);
|
|
3068
|
-
if (veSca)
|
|
3069
|
-
veScas
|
|
3070
|
-
|
|
3071
|
-
|
|
3225
|
+
if (veSca) {
|
|
3226
|
+
veScas[idx] = veSca;
|
|
3227
|
+
}
|
|
3228
|
+
});
|
|
3229
|
+
await Promise.allSettled(tasks);
|
|
3230
|
+
return veScas.filter(Boolean).sort((a, b) => a.currentVeScaBalance - b.currentVeScaBalance);
|
|
3072
3231
|
};
|
|
3073
3232
|
var getVeSca = async (query, veScaKeyId, ownerAddress) => {
|
|
3074
|
-
const tableId =
|
|
3233
|
+
const tableId = query.address.get(`vesca.tableId`);
|
|
3075
3234
|
veScaKeyId = veScaKeyId || (await getVescaKeys(query, ownerAddress))[0].objectId;
|
|
3076
3235
|
let vesca = void 0;
|
|
3077
|
-
const veScaDynamicFieldObjectResponse = await query.
|
|
3236
|
+
const veScaDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
|
|
3078
3237
|
parentId: tableId,
|
|
3079
3238
|
name: {
|
|
3080
3239
|
type: "0x2::object::ID",
|
|
@@ -3102,11 +3261,79 @@ var getVeSca = async (query, veScaKeyId, ownerAddress) => {
|
|
|
3102
3261
|
}
|
|
3103
3262
|
return vesca;
|
|
3104
3263
|
};
|
|
3264
|
+
var getTotalVeScaTreasuryAmount = async (query) => {
|
|
3265
|
+
const veScaPkgId = query.address.get("vesca.id");
|
|
3266
|
+
const veScaConfig = query.address.get("vesca.config");
|
|
3267
|
+
const veScaTreasury = query.address.get("vesca.treasury");
|
|
3268
|
+
const refreshQueryTarget = `${veScaPkgId}::treasury::refresh`;
|
|
3269
|
+
const refreshArgs = [veScaConfig, veScaTreasury, SUI_CLOCK_OBJECT_ID];
|
|
3270
|
+
const veScaAmountQueryTarget = `${veScaPkgId}::treasury::total_ve_sca_amount`;
|
|
3271
|
+
const veScaAmountArgs = [veScaTreasury, SUI_CLOCK_OBJECT_ID];
|
|
3272
|
+
const resolvedRefreshArgs = await Promise.all(
|
|
3273
|
+
refreshArgs.map(async (arg) => {
|
|
3274
|
+
if (typeof arg === "string") {
|
|
3275
|
+
return (await query.cache.queryGetObject(arg, { showContent: true })).data;
|
|
3276
|
+
}
|
|
3277
|
+
return arg;
|
|
3278
|
+
})
|
|
3279
|
+
);
|
|
3280
|
+
const resolvedVeScaAmountArgs = await Promise.all(
|
|
3281
|
+
veScaAmountArgs.map(async (arg) => {
|
|
3282
|
+
if (typeof arg === "string") {
|
|
3283
|
+
return (await query.cache.queryGetObject(arg, { showContent: true })).data;
|
|
3284
|
+
}
|
|
3285
|
+
return arg;
|
|
3286
|
+
})
|
|
3287
|
+
);
|
|
3288
|
+
const txb = new SuiTxBlock2();
|
|
3289
|
+
txb.moveCall(refreshQueryTarget, resolvedRefreshArgs);
|
|
3290
|
+
txb.moveCall(veScaAmountQueryTarget, resolvedVeScaAmountArgs);
|
|
3291
|
+
const txBytes = await txb.txBlock.build({
|
|
3292
|
+
client: query.suiKit.client(),
|
|
3293
|
+
onlyTransactionKind: true,
|
|
3294
|
+
protocolConfig: await query.cache.getProtocolConfig()
|
|
3295
|
+
});
|
|
3296
|
+
const res = await query.cache.queryClient.fetchQuery({
|
|
3297
|
+
queryKey: [
|
|
3298
|
+
"getTotalVeScaTreasuryAmount",
|
|
3299
|
+
JSON.stringify([...refreshArgs, ...veScaAmountArgs])
|
|
3300
|
+
],
|
|
3301
|
+
queryFn: async () => {
|
|
3302
|
+
return await query.suiKit.inspectTxn(txBytes);
|
|
3303
|
+
},
|
|
3304
|
+
staleTime: 8e3
|
|
3305
|
+
});
|
|
3306
|
+
const results = res.results;
|
|
3307
|
+
if (results && results[1].returnValues) {
|
|
3308
|
+
const value = Uint8Array.from(results[1].returnValues[0][0]);
|
|
3309
|
+
const type = results[1].returnValues[0][1];
|
|
3310
|
+
return bcs.de(type, value);
|
|
3311
|
+
}
|
|
3312
|
+
return "0";
|
|
3313
|
+
};
|
|
3314
|
+
|
|
3315
|
+
// src/queries/referralQuery.ts
|
|
3316
|
+
var queryVeScaKeyIdFromReferralBindings = async (query, refereeAddress) => {
|
|
3317
|
+
const referralBindingTableId = query.address.get("referral.bindingTableId");
|
|
3318
|
+
const referralBindResponse = await query.cache.queryGetDynamicFieldObject({
|
|
3319
|
+
parentId: referralBindingTableId,
|
|
3320
|
+
name: {
|
|
3321
|
+
type: "address",
|
|
3322
|
+
value: refereeAddress
|
|
3323
|
+
}
|
|
3324
|
+
});
|
|
3325
|
+
if (referralBindResponse.data?.content?.dataType !== "moveObject")
|
|
3326
|
+
return null;
|
|
3327
|
+
const fields = referralBindResponse.data.content.fields;
|
|
3328
|
+
return fields.value;
|
|
3329
|
+
};
|
|
3105
3330
|
|
|
3106
3331
|
// src/models/scallopIndexer.ts
|
|
3107
3332
|
import axios2 from "axios";
|
|
3108
3333
|
var ScallopIndexer = class {
|
|
3109
|
-
constructor() {
|
|
3334
|
+
constructor(params, instance) {
|
|
3335
|
+
this.params = params;
|
|
3336
|
+
this._cache = instance?.cache ?? new ScallopCache();
|
|
3110
3337
|
this._requestClient = axios2.create({
|
|
3111
3338
|
baseURL: SDK_API_BASE_URL,
|
|
3112
3339
|
headers: {
|
|
@@ -3122,7 +3349,12 @@ var ScallopIndexer = class {
|
|
|
3122
3349
|
* @return Market data.
|
|
3123
3350
|
*/
|
|
3124
3351
|
async getMarket() {
|
|
3125
|
-
const response = await this.
|
|
3352
|
+
const response = await this._cache.queryClient.fetchQuery({
|
|
3353
|
+
queryKey: ["market"],
|
|
3354
|
+
queryFn: async () => {
|
|
3355
|
+
return await this._requestClient.get(`/api/market`);
|
|
3356
|
+
}
|
|
3357
|
+
});
|
|
3126
3358
|
if (response.status === 200) {
|
|
3127
3359
|
return {
|
|
3128
3360
|
pools: response.data.pools.reduce((marketPools, marketPool) => {
|
|
@@ -3147,15 +3379,8 @@ var ScallopIndexer = class {
|
|
|
3147
3379
|
* @return Market pools data.
|
|
3148
3380
|
*/
|
|
3149
3381
|
async getMarketPools() {
|
|
3150
|
-
const response = await this.
|
|
3151
|
-
|
|
3152
|
-
return response.data.pools.reduce((marketPools, marketPool) => {
|
|
3153
|
-
marketPools[marketPool.coinName] = marketPool;
|
|
3154
|
-
return marketPools;
|
|
3155
|
-
}, {});
|
|
3156
|
-
} else {
|
|
3157
|
-
throw Error("Failed to getMarketPools.");
|
|
3158
|
-
}
|
|
3382
|
+
const response = (await this.getMarket()).pools;
|
|
3383
|
+
return response;
|
|
3159
3384
|
}
|
|
3160
3385
|
/**
|
|
3161
3386
|
* Get market pool index data.
|
|
@@ -3163,12 +3388,7 @@ var ScallopIndexer = class {
|
|
|
3163
3388
|
* @return Market pool data.
|
|
3164
3389
|
*/
|
|
3165
3390
|
async getMarketPool(poolCoinName) {
|
|
3166
|
-
|
|
3167
|
-
if (response.status === 200) {
|
|
3168
|
-
return response.data.pool;
|
|
3169
|
-
} else {
|
|
3170
|
-
throw Error("Failed to getMarketPool.");
|
|
3171
|
-
}
|
|
3391
|
+
return (await this.getMarketPools())[poolCoinName];
|
|
3172
3392
|
}
|
|
3173
3393
|
/**
|
|
3174
3394
|
* Get market collaterals index data.
|
|
@@ -3176,18 +3396,7 @@ var ScallopIndexer = class {
|
|
|
3176
3396
|
* @return Market collaterals data.
|
|
3177
3397
|
*/
|
|
3178
3398
|
async getMarketCollaterals() {
|
|
3179
|
-
|
|
3180
|
-
if (response.status === 200) {
|
|
3181
|
-
return response.data.collaterals.reduce(
|
|
3182
|
-
(marketCollaterals, marketCollateral) => {
|
|
3183
|
-
marketCollaterals[marketCollateral.coinName] = marketCollateral;
|
|
3184
|
-
return marketCollaterals;
|
|
3185
|
-
},
|
|
3186
|
-
{}
|
|
3187
|
-
);
|
|
3188
|
-
} else {
|
|
3189
|
-
throw Error("Failed to getMarketCollaterals.");
|
|
3190
|
-
}
|
|
3399
|
+
return (await this.getMarket()).collaterals;
|
|
3191
3400
|
}
|
|
3192
3401
|
/**
|
|
3193
3402
|
* Get market collateral index data.
|
|
@@ -3195,12 +3404,7 @@ var ScallopIndexer = class {
|
|
|
3195
3404
|
* @return Market collateral data.
|
|
3196
3405
|
*/
|
|
3197
3406
|
async getMarketCollateral(collateralCoinName) {
|
|
3198
|
-
|
|
3199
|
-
if (response.status === 200) {
|
|
3200
|
-
return response.data.collateral;
|
|
3201
|
-
} else {
|
|
3202
|
-
throw Error("Failed to getMarketCollateral.");
|
|
3203
|
-
}
|
|
3407
|
+
return (await this.getMarketCollaterals())[collateralCoinName];
|
|
3204
3408
|
}
|
|
3205
3409
|
/**
|
|
3206
3410
|
* Get spools index data.
|
|
@@ -3208,7 +3412,12 @@ var ScallopIndexer = class {
|
|
|
3208
3412
|
* @return Spools data.
|
|
3209
3413
|
*/
|
|
3210
3414
|
async getSpools() {
|
|
3211
|
-
const response = await this.
|
|
3415
|
+
const response = await this._cache.queryClient.fetchQuery({
|
|
3416
|
+
queryKey: ["spools"],
|
|
3417
|
+
queryFn: async () => {
|
|
3418
|
+
return await this._requestClient.get(`/api/spools`);
|
|
3419
|
+
}
|
|
3420
|
+
});
|
|
3212
3421
|
if (response.status === 200) {
|
|
3213
3422
|
return response.data.spools.reduce((spools, spool) => {
|
|
3214
3423
|
spools[spool.marketCoinName] = spool;
|
|
@@ -3224,12 +3433,7 @@ var ScallopIndexer = class {
|
|
|
3224
3433
|
* @return Spool data.
|
|
3225
3434
|
*/
|
|
3226
3435
|
async getSpool(marketCoinName) {
|
|
3227
|
-
|
|
3228
|
-
if (response.status === 200) {
|
|
3229
|
-
return response.data.spool;
|
|
3230
|
-
} else {
|
|
3231
|
-
throw Error("Failed to getSpool.");
|
|
3232
|
-
}
|
|
3436
|
+
return (await this.getSpools())[marketCoinName];
|
|
3233
3437
|
}
|
|
3234
3438
|
/**
|
|
3235
3439
|
* Get borrow incentive pools index data.
|
|
@@ -3237,7 +3441,12 @@ var ScallopIndexer = class {
|
|
|
3237
3441
|
* @return Borrow incentive pools data.
|
|
3238
3442
|
*/
|
|
3239
3443
|
async getBorrowIncentivePools() {
|
|
3240
|
-
const response = await this.
|
|
3444
|
+
const response = await this._cache.queryClient.fetchQuery({
|
|
3445
|
+
queryKey: ["borrowIncentivePools"],
|
|
3446
|
+
queryFn: async () => {
|
|
3447
|
+
return await this._requestClient.get(`/api/borrowIncentivePools`);
|
|
3448
|
+
}
|
|
3449
|
+
});
|
|
3241
3450
|
if (response.status === 200) {
|
|
3242
3451
|
return response.data.borrowIncentivePools.reduce(
|
|
3243
3452
|
(borrowIncentivePools, borrowIncentivePool) => {
|
|
@@ -3256,14 +3465,7 @@ var ScallopIndexer = class {
|
|
|
3256
3465
|
* @return Borrow incentive pool data.
|
|
3257
3466
|
*/
|
|
3258
3467
|
async getBorrowIncentivePool(borrowIncentiveCoinName) {
|
|
3259
|
-
|
|
3260
|
-
`${SDK_API_BASE_URL}/api/borrowIncentivePool/${borrowIncentiveCoinName}`
|
|
3261
|
-
);
|
|
3262
|
-
if (response.status === 200) {
|
|
3263
|
-
return response.data.borrowIncentivePool;
|
|
3264
|
-
} else {
|
|
3265
|
-
throw Error("Failed to getSpool.");
|
|
3266
|
-
}
|
|
3468
|
+
return (await this.getBorrowIncentivePools())[borrowIncentiveCoinName];
|
|
3267
3469
|
}
|
|
3268
3470
|
/**
|
|
3269
3471
|
* Get total value locked index data.
|
|
@@ -3271,7 +3473,12 @@ var ScallopIndexer = class {
|
|
|
3271
3473
|
* @return Total value locked.
|
|
3272
3474
|
*/
|
|
3273
3475
|
async getTotalValueLocked() {
|
|
3274
|
-
const response = await this.
|
|
3476
|
+
const response = await this._cache.queryClient.fetchQuery({
|
|
3477
|
+
queryKey: ["totalValueLocked"],
|
|
3478
|
+
queryFn: async () => {
|
|
3479
|
+
return await this._requestClient.get(`/api/market/tvl`);
|
|
3480
|
+
}
|
|
3481
|
+
});
|
|
3275
3482
|
if (response.status === 200) {
|
|
3276
3483
|
return response.data;
|
|
3277
3484
|
} else {
|
|
@@ -3285,16 +3492,21 @@ var ScallopQuery = class {
|
|
|
3285
3492
|
constructor(params, instance) {
|
|
3286
3493
|
this.params = params;
|
|
3287
3494
|
this.suiKit = instance?.suiKit ?? new SuiKit(params);
|
|
3288
|
-
this.
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3495
|
+
this.cache = instance?.cache ?? new ScallopCache(DEFAULT_CACHE_OPTIONS, this.suiKit);
|
|
3496
|
+
this.address = instance?.address ?? new ScallopAddress(
|
|
3497
|
+
{
|
|
3498
|
+
id: params?.addressesId || ADDRESSES_ID,
|
|
3499
|
+
network: params?.networkType
|
|
3500
|
+
},
|
|
3501
|
+
this.cache
|
|
3502
|
+
);
|
|
3292
3503
|
this.utils = instance?.utils ?? new ScallopUtils(this.params, {
|
|
3293
3504
|
suiKit: this.suiKit,
|
|
3294
3505
|
address: this.address,
|
|
3506
|
+
cache: this.cache,
|
|
3295
3507
|
query: this
|
|
3296
3508
|
});
|
|
3297
|
-
this.indexer = new ScallopIndexer();
|
|
3509
|
+
this.indexer = new ScallopIndexer(this.params, { cache: this.cache });
|
|
3298
3510
|
}
|
|
3299
3511
|
/**
|
|
3300
3512
|
* Request the scallop API to initialize data.
|
|
@@ -3434,6 +3646,15 @@ var ScallopQuery = class {
|
|
|
3434
3646
|
async getPriceFromPyth(assetCoinName) {
|
|
3435
3647
|
return await getPythPrice(this, assetCoinName);
|
|
3436
3648
|
}
|
|
3649
|
+
/**
|
|
3650
|
+
* Get prices from pyth fee object.
|
|
3651
|
+
*
|
|
3652
|
+
* @param assetCoinNames - Array of supported asset coin names.
|
|
3653
|
+
* @return Array of asset coin prices.
|
|
3654
|
+
*/
|
|
3655
|
+
async getPricesFromPyth(assetCoinNames) {
|
|
3656
|
+
return await getPythPrices(this, assetCoinNames);
|
|
3657
|
+
}
|
|
3437
3658
|
/* ==================== Spool Query Methods ==================== */
|
|
3438
3659
|
/**
|
|
3439
3660
|
* Get spools data.
|
|
@@ -3632,6 +3853,29 @@ var ScallopQuery = class {
|
|
|
3632
3853
|
async getTvl(indexer = false) {
|
|
3633
3854
|
return await getTotalValueLocked(this, indexer);
|
|
3634
3855
|
}
|
|
3856
|
+
/**
|
|
3857
|
+
* Get all veSca from walletAdddress
|
|
3858
|
+
* @param walletAddress
|
|
3859
|
+
* @returns array of veSca
|
|
3860
|
+
*/
|
|
3861
|
+
async getVeScas(walletAddress) {
|
|
3862
|
+
return await getVeScas(this, walletAddress);
|
|
3863
|
+
}
|
|
3864
|
+
/**
|
|
3865
|
+
* Get total vesca treasury with movecall
|
|
3866
|
+
* @returns Promise<string | undefined>
|
|
3867
|
+
*/
|
|
3868
|
+
async getTotalVeScaTreasuryAmount() {
|
|
3869
|
+
return await getTotalVeScaTreasuryAmount(this);
|
|
3870
|
+
}
|
|
3871
|
+
/**
|
|
3872
|
+
* Return binded veScaKeyId of walletAddress if exist
|
|
3873
|
+
* @param walletAddress
|
|
3874
|
+
* @returns veScaKeyId
|
|
3875
|
+
*/
|
|
3876
|
+
async getVeScaKeyIdFromReferralBindings(walletAddress) {
|
|
3877
|
+
return await queryVeScaKeyIdFromReferralBindings(this, walletAddress);
|
|
3878
|
+
}
|
|
3635
3879
|
/**
|
|
3636
3880
|
* Get binded obligationId from a veScaKey if it exists.
|
|
3637
3881
|
* @param veScaKey
|
|
@@ -3680,13 +3924,18 @@ var ScallopUtils = class {
|
|
|
3680
3924
|
};
|
|
3681
3925
|
this.params = params;
|
|
3682
3926
|
this._suiKit = instance?.suiKit ?? new SuiKit2(params);
|
|
3683
|
-
this.
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3927
|
+
this._cache = instance?.cache ?? new ScallopCache(DEFAULT_CACHE_OPTIONS, this._suiKit);
|
|
3928
|
+
this._address = instance?.address ?? new ScallopAddress(
|
|
3929
|
+
{
|
|
3930
|
+
id: params?.addressesId || ADDRESSES_ID,
|
|
3931
|
+
network: params?.networkType
|
|
3932
|
+
},
|
|
3933
|
+
this._cache
|
|
3934
|
+
);
|
|
3687
3935
|
this._query = instance?.query ?? new ScallopQuery(params, {
|
|
3688
3936
|
suiKit: this._suiKit,
|
|
3689
|
-
address: this._address
|
|
3937
|
+
address: this._address,
|
|
3938
|
+
cache: this._cache
|
|
3690
3939
|
});
|
|
3691
3940
|
this.isTestnet = params.networkType ? params.networkType === "testnet" : false;
|
|
3692
3941
|
}
|
|
@@ -3738,7 +3987,7 @@ var ScallopUtils = class {
|
|
|
3738
3987
|
throw Error(`Coin ${coinName} is not supported`);
|
|
3739
3988
|
}
|
|
3740
3989
|
if (coinName === "sui")
|
|
3741
|
-
return
|
|
3990
|
+
return normalizeStructTag6(`${coinPackageId}::sui::SUI`);
|
|
3742
3991
|
const wormHolePckageIds = [
|
|
3743
3992
|
this._address.get("core.coins.usdc.id") ?? wormholeCoinIds.usdc,
|
|
3744
3993
|
this._address.get("core.coins.usdt.id") ?? wormholeCoinIds.usdt,
|
|
@@ -3771,7 +4020,7 @@ var ScallopUtils = class {
|
|
|
3771
4020
|
return `${protocolObjectId}::reserve::MarketCoin<${coinType}>`;
|
|
3772
4021
|
}
|
|
3773
4022
|
parseCoinNameFromType(coinType) {
|
|
3774
|
-
coinType =
|
|
4023
|
+
coinType = normalizeStructTag6(coinType);
|
|
3775
4024
|
const coinTypeRegex = new RegExp(`((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)`);
|
|
3776
4025
|
const coinTypeMatch = coinType.match(coinTypeRegex);
|
|
3777
4026
|
const isMarketCoinType = coinType.includes("reserve::MarketCoin");
|
|
@@ -3903,40 +4152,60 @@ var ScallopUtils = class {
|
|
|
3903
4152
|
}
|
|
3904
4153
|
if (lackPricesCoinNames.length > 0) {
|
|
3905
4154
|
const endpoints = this.params.pythEndpoints ?? PYTH_ENDPOINTS[this.isTestnet ? "testnet" : "mainnet"];
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3911
|
-
|
|
4155
|
+
const failedRequests = new Set(
|
|
4156
|
+
lackPricesCoinNames
|
|
4157
|
+
);
|
|
4158
|
+
for (const endpoint of endpoints) {
|
|
4159
|
+
const priceIds = Array.from(failedRequests.values()).reduce(
|
|
4160
|
+
(acc, coinName) => {
|
|
4161
|
+
const priceId = this._address.get(
|
|
4162
|
+
`core.coins.${coinName}.oracle.pyth.feed`
|
|
3912
4163
|
);
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
4164
|
+
acc[coinName] = priceId;
|
|
4165
|
+
return acc;
|
|
4166
|
+
},
|
|
4167
|
+
{}
|
|
4168
|
+
);
|
|
4169
|
+
await Promise.allSettled(
|
|
4170
|
+
Object.entries(priceIds).map(async ([coinName, priceId]) => {
|
|
4171
|
+
const pythConnection = new SuiPriceServiceConnection(endpoint);
|
|
4172
|
+
try {
|
|
4173
|
+
const feed = await this._cache.queryClient.fetchQuery({
|
|
4174
|
+
queryKey: [priceId],
|
|
4175
|
+
queryFn: async () => {
|
|
4176
|
+
return await pythConnection.getLatestPriceFeeds([priceId]);
|
|
4177
|
+
}
|
|
3920
4178
|
});
|
|
3921
|
-
|
|
4179
|
+
if (feed) {
|
|
4180
|
+
const data = parseDataFromPythPriceFeed(feed[0], this._address);
|
|
4181
|
+
this._priceMap.set(coinName, {
|
|
4182
|
+
price: data.price,
|
|
4183
|
+
publishTime: data.publishTime
|
|
4184
|
+
});
|
|
4185
|
+
coinPrices[coinName] = data.price;
|
|
4186
|
+
}
|
|
4187
|
+
failedRequests.delete(coinName);
|
|
4188
|
+
} catch (e) {
|
|
4189
|
+
console.warn(
|
|
4190
|
+
`Failed to get price ${coinName} feeds with endpoint ${endpoint}: ${e}`
|
|
4191
|
+
);
|
|
3922
4192
|
}
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
})
|
|
3938
|
-
|
|
3939
|
-
}
|
|
4193
|
+
})
|
|
4194
|
+
);
|
|
4195
|
+
if (failedRequests.size === 0)
|
|
4196
|
+
break;
|
|
4197
|
+
}
|
|
4198
|
+
if (failedRequests.size > 0) {
|
|
4199
|
+
await Promise.allSettled(
|
|
4200
|
+
Array.from(failedRequests.values()).map(async (coinName) => {
|
|
4201
|
+
const price = await this._query.getPriceFromPyth(coinName);
|
|
4202
|
+
this._priceMap.set(coinName, {
|
|
4203
|
+
price,
|
|
4204
|
+
publishTime: Date.now()
|
|
4205
|
+
});
|
|
4206
|
+
coinPrices[coinName] = price;
|
|
4207
|
+
})
|
|
4208
|
+
);
|
|
3940
4209
|
}
|
|
3941
4210
|
}
|
|
3942
4211
|
return coinPrices;
|
|
@@ -4001,11 +4270,11 @@ import { SuiKit as SuiKit3 } from "@scallop-io/sui-kit";
|
|
|
4001
4270
|
|
|
4002
4271
|
// src/builders/coreBuilder.ts
|
|
4003
4272
|
import { TransactionBlock } from "@mysten/sui.js/transactions";
|
|
4004
|
-
import { SUI_CLOCK_OBJECT_ID as
|
|
4005
|
-
import { SuiTxBlock as
|
|
4273
|
+
import { SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID3 } from "@mysten/sui.js/utils";
|
|
4274
|
+
import { SuiTxBlock as SuiKitTxBlock } from "@scallop-io/sui-kit";
|
|
4006
4275
|
|
|
4007
4276
|
// src/builders/oracle.ts
|
|
4008
|
-
import { SUI_CLOCK_OBJECT_ID } from "@mysten/sui.js/utils";
|
|
4277
|
+
import { SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID2 } from "@mysten/sui.js/utils";
|
|
4009
4278
|
import {
|
|
4010
4279
|
SuiPythClient,
|
|
4011
4280
|
SuiPriceServiceConnection as SuiPriceServiceConnection2
|
|
@@ -4122,27 +4391,27 @@ var priceUpdateRequest = (txBlock, packageId, xOracleId, coinType) => {
|
|
|
4122
4391
|
var confirmPriceUpdateRequest = (txBlock, packageId, xOracleId, request, coinType) => {
|
|
4123
4392
|
const target = `${packageId}::x_oracle::confirm_price_update_request`;
|
|
4124
4393
|
const typeArgs = [coinType];
|
|
4125
|
-
txBlock.moveCall(target, [xOracleId, request,
|
|
4394
|
+
txBlock.moveCall(target, [xOracleId, request, SUI_CLOCK_OBJECT_ID2], typeArgs);
|
|
4126
4395
|
return txBlock;
|
|
4127
4396
|
};
|
|
4128
4397
|
var updateSupraPrice = (txBlock, packageId, request, holderId, registryId, coinType) => {
|
|
4129
4398
|
txBlock.moveCall(
|
|
4130
4399
|
`${packageId}::rule::set_price`,
|
|
4131
|
-
[request, holderId, registryId,
|
|
4400
|
+
[request, holderId, registryId, SUI_CLOCK_OBJECT_ID2],
|
|
4132
4401
|
[coinType]
|
|
4133
4402
|
);
|
|
4134
4403
|
};
|
|
4135
4404
|
var updateSwitchboardPrice = (txBlock, packageId, request, aggregatorId, registryId, coinType) => {
|
|
4136
4405
|
txBlock.moveCall(
|
|
4137
4406
|
`${packageId}::rule::set_price`,
|
|
4138
|
-
[request, aggregatorId, registryId,
|
|
4407
|
+
[request, aggregatorId, registryId, SUI_CLOCK_OBJECT_ID2],
|
|
4139
4408
|
[coinType]
|
|
4140
4409
|
);
|
|
4141
4410
|
};
|
|
4142
4411
|
var updatePythPrice = (txBlock, packageId, request, stateId, feedObjectId, registryId, coinType) => {
|
|
4143
4412
|
txBlock.moveCall(
|
|
4144
4413
|
`${packageId}::rule::set_price`,
|
|
4145
|
-
[request, stateId, feedObjectId, registryId,
|
|
4414
|
+
[request, stateId, feedObjectId, registryId, SUI_CLOCK_OBJECT_ID2],
|
|
4146
4415
|
[coinType]
|
|
4147
4416
|
);
|
|
4148
4417
|
};
|
|
@@ -4175,6 +4444,8 @@ var generateCoreNormalMethod = ({
|
|
|
4175
4444
|
coinDecimalsRegistry: builder.address.get("core.coinDecimalsRegistry"),
|
|
4176
4445
|
xOracle: builder.address.get("core.oracles.xOracle")
|
|
4177
4446
|
};
|
|
4447
|
+
const referralPkgId = builder.address.get("referral.id");
|
|
4448
|
+
const referralWitnessType = `${referralPkgId}::scallop_referral_program::REFERRAL_WITNESS`;
|
|
4178
4449
|
return {
|
|
4179
4450
|
openObligation: () => txBlock.moveCall(
|
|
4180
4451
|
`${coreIds.protocolPkg}::open_obligation::open_obligation`,
|
|
@@ -4208,7 +4479,7 @@ var generateCoreNormalMethod = ({
|
|
|
4208
4479
|
coreIds.coinDecimalsRegistry,
|
|
4209
4480
|
amount,
|
|
4210
4481
|
coreIds.xOracle,
|
|
4211
|
-
|
|
4482
|
+
SUI_CLOCK_OBJECT_ID3
|
|
4212
4483
|
],
|
|
4213
4484
|
[coinType]
|
|
4214
4485
|
);
|
|
@@ -4217,7 +4488,7 @@ var generateCoreNormalMethod = ({
|
|
|
4217
4488
|
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4218
4489
|
return txBlock.moveCall(
|
|
4219
4490
|
`${coreIds.protocolPkg}::mint::mint`,
|
|
4220
|
-
[coreIds.version, coreIds.market, coin,
|
|
4491
|
+
[coreIds.version, coreIds.market, coin, SUI_CLOCK_OBJECT_ID3],
|
|
4221
4492
|
[coinType]
|
|
4222
4493
|
);
|
|
4223
4494
|
},
|
|
@@ -4225,7 +4496,7 @@ var generateCoreNormalMethod = ({
|
|
|
4225
4496
|
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4226
4497
|
return txBlock.moveCall(
|
|
4227
4498
|
`${coreIds.protocolPkg}::mint::mint_entry`,
|
|
4228
|
-
[coreIds.version, coreIds.market, coin,
|
|
4499
|
+
[coreIds.version, coreIds.market, coin, SUI_CLOCK_OBJECT_ID3],
|
|
4229
4500
|
[coinType]
|
|
4230
4501
|
);
|
|
4231
4502
|
},
|
|
@@ -4233,7 +4504,7 @@ var generateCoreNormalMethod = ({
|
|
|
4233
4504
|
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4234
4505
|
return txBlock.moveCall(
|
|
4235
4506
|
`${coreIds.protocolPkg}::redeem::redeem`,
|
|
4236
|
-
[coreIds.version, coreIds.market, marketCoin,
|
|
4507
|
+
[coreIds.version, coreIds.market, marketCoin, SUI_CLOCK_OBJECT_ID3],
|
|
4237
4508
|
[coinType]
|
|
4238
4509
|
);
|
|
4239
4510
|
},
|
|
@@ -4241,7 +4512,7 @@ var generateCoreNormalMethod = ({
|
|
|
4241
4512
|
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4242
4513
|
return txBlock.moveCall(
|
|
4243
4514
|
`${coreIds.protocolPkg}::redeem::redeem_entry`,
|
|
4244
|
-
[coreIds.version, coreIds.market, marketCoin,
|
|
4515
|
+
[coreIds.version, coreIds.market, marketCoin, SUI_CLOCK_OBJECT_ID3],
|
|
4245
4516
|
[coinType]
|
|
4246
4517
|
);
|
|
4247
4518
|
},
|
|
@@ -4257,11 +4528,29 @@ var generateCoreNormalMethod = ({
|
|
|
4257
4528
|
coreIds.coinDecimalsRegistry,
|
|
4258
4529
|
amount,
|
|
4259
4530
|
coreIds.xOracle,
|
|
4260
|
-
|
|
4531
|
+
SUI_CLOCK_OBJECT_ID3
|
|
4261
4532
|
],
|
|
4262
4533
|
[coinType]
|
|
4263
4534
|
);
|
|
4264
4535
|
},
|
|
4536
|
+
borrowWithReferral: (obligation, obligationKey, borrowReferral, amount, poolCoinName) => {
|
|
4537
|
+
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4538
|
+
return txBlock.moveCall(
|
|
4539
|
+
`${coreIds.protocolPkg}::borrow::borrow_with_referral`,
|
|
4540
|
+
[
|
|
4541
|
+
coreIds.version,
|
|
4542
|
+
obligation,
|
|
4543
|
+
obligationKey,
|
|
4544
|
+
coreIds.market,
|
|
4545
|
+
coreIds.coinDecimalsRegistry,
|
|
4546
|
+
borrowReferral,
|
|
4547
|
+
amount,
|
|
4548
|
+
coreIds.xOracle,
|
|
4549
|
+
SUI_CLOCK_OBJECT_ID3
|
|
4550
|
+
],
|
|
4551
|
+
[coinType, referralWitnessType]
|
|
4552
|
+
);
|
|
4553
|
+
},
|
|
4265
4554
|
borrowEntry: (obligation, obligationKey, amount, poolCoinName) => {
|
|
4266
4555
|
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
4267
4556
|
return txBlock.moveCall(
|
|
@@ -4274,7 +4563,7 @@ var generateCoreNormalMethod = ({
|
|
|
4274
4563
|
coreIds.coinDecimalsRegistry,
|
|
4275
4564
|
amount,
|
|
4276
4565
|
coreIds.xOracle,
|
|
4277
|
-
|
|
4566
|
+
SUI_CLOCK_OBJECT_ID3
|
|
4278
4567
|
],
|
|
4279
4568
|
[coinType]
|
|
4280
4569
|
);
|
|
@@ -4288,7 +4577,7 @@ var generateCoreNormalMethod = ({
|
|
|
4288
4577
|
obligation,
|
|
4289
4578
|
coreIds.market,
|
|
4290
4579
|
coin,
|
|
4291
|
-
|
|
4580
|
+
SUI_CLOCK_OBJECT_ID3
|
|
4292
4581
|
],
|
|
4293
4582
|
[coinType]
|
|
4294
4583
|
);
|
|
@@ -4402,6 +4691,26 @@ var generateCoreQuickMethod = ({
|
|
|
4402
4691
|
poolCoinName
|
|
4403
4692
|
);
|
|
4404
4693
|
},
|
|
4694
|
+
borrowWithReferralQuick: async (amount, poolCoinName, borrowReferral, obligationId, obligationKey) => {
|
|
4695
|
+
const obligationInfo = await requireObligationInfo(
|
|
4696
|
+
builder,
|
|
4697
|
+
txBlock,
|
|
4698
|
+
obligationId,
|
|
4699
|
+
obligationKey
|
|
4700
|
+
);
|
|
4701
|
+
const obligationCoinNames = await builder.utils.getObligationCoinNames(
|
|
4702
|
+
obligationInfo.obligationId
|
|
4703
|
+
);
|
|
4704
|
+
const updateCoinNames = [...obligationCoinNames, poolCoinName];
|
|
4705
|
+
await updateOracles(builder, txBlock, updateCoinNames);
|
|
4706
|
+
return txBlock.borrowWithReferral(
|
|
4707
|
+
obligationInfo.obligationId,
|
|
4708
|
+
obligationInfo.obligationKey,
|
|
4709
|
+
borrowReferral,
|
|
4710
|
+
amount,
|
|
4711
|
+
poolCoinName
|
|
4712
|
+
);
|
|
4713
|
+
},
|
|
4405
4714
|
repayQuick: async (amount, poolCoinName, obligationId) => {
|
|
4406
4715
|
const sender = requireSender(txBlock);
|
|
4407
4716
|
const obligationInfo = await requireObligationInfo(
|
|
@@ -4437,7 +4746,7 @@ var generateCoreQuickMethod = ({
|
|
|
4437
4746
|
};
|
|
4438
4747
|
};
|
|
4439
4748
|
var newCoreTxBlock = (builder, initTxBlock) => {
|
|
4440
|
-
const txBlock = initTxBlock instanceof TransactionBlock ? new
|
|
4749
|
+
const txBlock = initTxBlock instanceof TransactionBlock ? new SuiKitTxBlock(initTxBlock) : initTxBlock ? initTxBlock : new SuiKitTxBlock();
|
|
4441
4750
|
const normalMethod = generateCoreNormalMethod({
|
|
4442
4751
|
builder,
|
|
4443
4752
|
txBlock
|
|
@@ -4466,8 +4775,8 @@ var newCoreTxBlock = (builder, initTxBlock) => {
|
|
|
4466
4775
|
|
|
4467
4776
|
// src/builders/spoolBuilder.ts
|
|
4468
4777
|
import { TransactionBlock as TransactionBlock2 } from "@mysten/sui.js/transactions";
|
|
4469
|
-
import { SUI_CLOCK_OBJECT_ID as
|
|
4470
|
-
import { SuiTxBlock as
|
|
4778
|
+
import { SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID4 } from "@mysten/sui.js/utils";
|
|
4779
|
+
import { SuiTxBlock as SuiKitTxBlock2 } from "@scallop-io/sui-kit";
|
|
4471
4780
|
var requireStakeAccountIds = async (...params) => {
|
|
4472
4781
|
const [builder, txBlock, stakeMarketCoinName, stakeAccountId] = params;
|
|
4473
4782
|
if (params.length === 4 && stakeAccountId)
|
|
@@ -4506,7 +4815,7 @@ var generateSpoolNormalMethod = ({
|
|
|
4506
4815
|
);
|
|
4507
4816
|
return txBlock.moveCall(
|
|
4508
4817
|
`${spoolIds.spoolPkg}::user::new_spool_account`,
|
|
4509
|
-
[stakePoolId,
|
|
4818
|
+
[stakePoolId, SUI_CLOCK_OBJECT_ID4],
|
|
4510
4819
|
[marketCoinType]
|
|
4511
4820
|
);
|
|
4512
4821
|
},
|
|
@@ -4517,7 +4826,7 @@ var generateSpoolNormalMethod = ({
|
|
|
4517
4826
|
);
|
|
4518
4827
|
txBlock.moveCall(
|
|
4519
4828
|
`${spoolIds.spoolPkg}::user::stake`,
|
|
4520
|
-
[stakePoolId, stakeAccount, coin,
|
|
4829
|
+
[stakePoolId, stakeAccount, coin, SUI_CLOCK_OBJECT_ID4],
|
|
4521
4830
|
[marketCoinType]
|
|
4522
4831
|
);
|
|
4523
4832
|
},
|
|
@@ -4528,7 +4837,7 @@ var generateSpoolNormalMethod = ({
|
|
|
4528
4837
|
);
|
|
4529
4838
|
return txBlock.moveCall(
|
|
4530
4839
|
`${spoolIds.spoolPkg}::user::unstake`,
|
|
4531
|
-
[stakePoolId, stakeAccount, amount,
|
|
4840
|
+
[stakePoolId, stakeAccount, amount, SUI_CLOCK_OBJECT_ID4],
|
|
4532
4841
|
[marketCoinType]
|
|
4533
4842
|
);
|
|
4534
4843
|
},
|
|
@@ -4544,7 +4853,7 @@ var generateSpoolNormalMethod = ({
|
|
|
4544
4853
|
const rewardCoinType = builder.utils.parseCoinType(rewardCoinName);
|
|
4545
4854
|
return txBlock.moveCall(
|
|
4546
4855
|
`${spoolIds.spoolPkg}::user::redeem_rewards`,
|
|
4547
|
-
[stakePoolId, rewardPoolId, stakeAccount,
|
|
4856
|
+
[stakePoolId, rewardPoolId, stakeAccount, SUI_CLOCK_OBJECT_ID4],
|
|
4548
4857
|
[marketCoinType, rewardCoinType]
|
|
4549
4858
|
);
|
|
4550
4859
|
}
|
|
@@ -4625,7 +4934,7 @@ var generateSpoolQuickMethod = ({
|
|
|
4625
4934
|
};
|
|
4626
4935
|
};
|
|
4627
4936
|
var newSpoolTxBlock = (builder, initTxBlock) => {
|
|
4628
|
-
const txBlock = initTxBlock instanceof TransactionBlock2 ? new
|
|
4937
|
+
const txBlock = initTxBlock instanceof TransactionBlock2 ? new SuiKitTxBlock2(initTxBlock) : initTxBlock ? initTxBlock : new SuiKitTxBlock2();
|
|
4629
4938
|
const normalMethod = generateSpoolNormalMethod({
|
|
4630
4939
|
builder,
|
|
4631
4940
|
txBlock
|
|
@@ -4654,14 +4963,14 @@ var newSpoolTxBlock = (builder, initTxBlock) => {
|
|
|
4654
4963
|
|
|
4655
4964
|
// src/builders/borrowIncentiveBuilder.ts
|
|
4656
4965
|
import { TransactionBlock as TransactionBlock4 } from "@mysten/sui.js/transactions";
|
|
4657
|
-
import { SUI_CLOCK_OBJECT_ID as
|
|
4658
|
-
import { SuiTxBlock as
|
|
4966
|
+
import { SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID6 } from "@mysten/sui.js/utils";
|
|
4967
|
+
import { SuiTxBlock as SuiKitTxBlock4 } from "@scallop-io/sui-kit";
|
|
4659
4968
|
|
|
4660
4969
|
// src/builders/vescaBuilder.ts
|
|
4661
4970
|
import {
|
|
4662
|
-
SUI_CLOCK_OBJECT_ID as
|
|
4971
|
+
SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID5,
|
|
4663
4972
|
TransactionBlock as TransactionBlock3,
|
|
4664
|
-
SuiTxBlock as
|
|
4973
|
+
SuiTxBlock as SuiKitTxBlock3
|
|
4665
4974
|
} from "@scallop-io/sui-kit";
|
|
4666
4975
|
var requireVeSca = async (...params) => {
|
|
4667
4976
|
const [builder, txBlock, veScaKey] = params;
|
|
@@ -4677,10 +4986,7 @@ var requireVeSca = async (...params) => {
|
|
|
4677
4986
|
if (veScas.length === 0) {
|
|
4678
4987
|
return void 0;
|
|
4679
4988
|
}
|
|
4680
|
-
return veScas
|
|
4681
|
-
(prev, acc) => acc.currentVeScaBalance > prev.currentVeScaBalance ? acc : prev,
|
|
4682
|
-
veScas[0]
|
|
4683
|
-
);
|
|
4989
|
+
return veScas[0];
|
|
4684
4990
|
};
|
|
4685
4991
|
var generateNormalVeScaMethod = ({
|
|
4686
4992
|
builder,
|
|
@@ -4702,7 +5008,7 @@ var generateNormalVeScaMethod = ({
|
|
|
4702
5008
|
veScaIds.treasury,
|
|
4703
5009
|
scaCoin,
|
|
4704
5010
|
unlockAtInSecondTimestamp,
|
|
4705
|
-
|
|
5011
|
+
SUI_CLOCK_OBJECT_ID5
|
|
4706
5012
|
],
|
|
4707
5013
|
[]
|
|
4708
5014
|
);
|
|
@@ -4716,7 +5022,7 @@ var generateNormalVeScaMethod = ({
|
|
|
4716
5022
|
veScaIds.table,
|
|
4717
5023
|
veScaIds.treasury,
|
|
4718
5024
|
newUnlockAtInSecondTimestamp,
|
|
4719
|
-
|
|
5025
|
+
SUI_CLOCK_OBJECT_ID5
|
|
4720
5026
|
],
|
|
4721
5027
|
[]
|
|
4722
5028
|
);
|
|
@@ -4730,7 +5036,7 @@ var generateNormalVeScaMethod = ({
|
|
|
4730
5036
|
veScaIds.table,
|
|
4731
5037
|
veScaIds.treasury,
|
|
4732
5038
|
scaCoin,
|
|
4733
|
-
|
|
5039
|
+
SUI_CLOCK_OBJECT_ID5
|
|
4734
5040
|
],
|
|
4735
5041
|
[]
|
|
4736
5042
|
);
|
|
@@ -4745,7 +5051,7 @@ var generateNormalVeScaMethod = ({
|
|
|
4745
5051
|
veScaIds.treasury,
|
|
4746
5052
|
scaCoin,
|
|
4747
5053
|
newUnlockAtInSecondTimestamp,
|
|
4748
|
-
|
|
5054
|
+
SUI_CLOCK_OBJECT_ID5
|
|
4749
5055
|
],
|
|
4750
5056
|
[]
|
|
4751
5057
|
);
|
|
@@ -4758,10 +5064,17 @@ var generateNormalVeScaMethod = ({
|
|
|
4758
5064
|
veScaKey,
|
|
4759
5065
|
veScaIds.table,
|
|
4760
5066
|
veScaIds.treasury,
|
|
4761
|
-
|
|
5067
|
+
SUI_CLOCK_OBJECT_ID5
|
|
4762
5068
|
],
|
|
4763
5069
|
[]
|
|
4764
5070
|
);
|
|
5071
|
+
},
|
|
5072
|
+
mintEmptyVeSca: () => {
|
|
5073
|
+
return txBlock.moveCall(
|
|
5074
|
+
`${veScaIds.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,
|
|
5075
|
+
[veScaIds.config, veScaIds.table],
|
|
5076
|
+
[]
|
|
5077
|
+
);
|
|
4765
5078
|
}
|
|
4766
5079
|
};
|
|
4767
5080
|
};
|
|
@@ -4904,7 +5217,7 @@ var generateQuickVeScaMethod = ({
|
|
|
4904
5217
|
};
|
|
4905
5218
|
};
|
|
4906
5219
|
var newVeScaTxBlock = (builder, initTxBlock) => {
|
|
4907
|
-
const txBlock = initTxBlock instanceof TransactionBlock3 ? new
|
|
5220
|
+
const txBlock = initTxBlock instanceof TransactionBlock3 ? new SuiKitTxBlock3(initTxBlock) : initTxBlock ? initTxBlock : new SuiKitTxBlock3();
|
|
4908
5221
|
const normalMethod = generateNormalVeScaMethod({
|
|
4909
5222
|
builder,
|
|
4910
5223
|
txBlock
|
|
@@ -4957,7 +5270,7 @@ var requireObligationInfo2 = async (...params) => {
|
|
|
4957
5270
|
};
|
|
4958
5271
|
var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
4959
5272
|
const borrowIncentiveIds = {
|
|
4960
|
-
borrowIncentivePkg:
|
|
5273
|
+
borrowIncentivePkg: builder.address.get("borrowIncentive.id"),
|
|
4961
5274
|
query: builder.address.get("borrowIncentive.query"),
|
|
4962
5275
|
config: builder.address.get("borrowIncentive.config"),
|
|
4963
5276
|
incentivePools: builder.address.get("borrowIncentive.incentivePools"),
|
|
@@ -4982,7 +5295,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
|
4982
5295
|
obligationKey,
|
|
4983
5296
|
obligationId,
|
|
4984
5297
|
borrowIncentiveIds.obligationAccessStore,
|
|
4985
|
-
|
|
5298
|
+
SUI_CLOCK_OBJECT_ID6
|
|
4986
5299
|
]
|
|
4987
5300
|
);
|
|
4988
5301
|
},
|
|
@@ -5000,7 +5313,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
|
5000
5313
|
veScaIds.treasury,
|
|
5001
5314
|
veScaIds.table,
|
|
5002
5315
|
veScaKey,
|
|
5003
|
-
|
|
5316
|
+
SUI_CLOCK_OBJECT_ID6
|
|
5004
5317
|
],
|
|
5005
5318
|
[]
|
|
5006
5319
|
);
|
|
@@ -5014,12 +5327,12 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
|
5014
5327
|
borrowIncentiveIds.incentiveAccounts,
|
|
5015
5328
|
obligationKey,
|
|
5016
5329
|
obligationId,
|
|
5017
|
-
|
|
5330
|
+
SUI_CLOCK_OBJECT_ID6
|
|
5018
5331
|
]
|
|
5019
5332
|
);
|
|
5020
5333
|
},
|
|
5021
5334
|
claimBorrowIncentive: (obligationId, obligationKey, coinName, rewardCoinName) => {
|
|
5022
|
-
const rewardCoinNames =
|
|
5335
|
+
const rewardCoinNames = builder.utils.getBorrowIncentiveRewardCoinName(coinName);
|
|
5023
5336
|
if (rewardCoinNames.includes(rewardCoinName) === false) {
|
|
5024
5337
|
throw new Error(`Invalid reward coin name ${rewardCoinName}`);
|
|
5025
5338
|
}
|
|
@@ -5032,7 +5345,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
|
5032
5345
|
borrowIncentiveIds.incentiveAccounts,
|
|
5033
5346
|
obligationKey,
|
|
5034
5347
|
obligationId,
|
|
5035
|
-
|
|
5348
|
+
SUI_CLOCK_OBJECT_ID6
|
|
5036
5349
|
],
|
|
5037
5350
|
[rewardType]
|
|
5038
5351
|
);
|
|
@@ -5046,7 +5359,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
|
|
|
5046
5359
|
borrowIncentiveIds.incentiveAccounts,
|
|
5047
5360
|
obligation,
|
|
5048
5361
|
veScaKey,
|
|
5049
|
-
|
|
5362
|
+
SUI_CLOCK_OBJECT_ID6
|
|
5050
5363
|
]
|
|
5051
5364
|
);
|
|
5052
5365
|
}
|
|
@@ -5066,9 +5379,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
|
|
|
5066
5379
|
obligationKey
|
|
5067
5380
|
);
|
|
5068
5381
|
const unstakeObligationBeforeStake = !!txBlock.txBlock.blockData.transactions.find(
|
|
5069
|
-
(txn) => txn.kind === "MoveCall" && (txn.target === `${OLD_BORROW_INCENTIVE_PROTOCOL_ID}::user::unstake` || txn.target ===
|
|
5070
|
-
"borrowIncentive.id"
|
|
5071
|
-
)}::user::unstake`))
|
|
5382
|
+
(txn) => txn.kind === "MoveCall" && (txn.target === `${OLD_BORROW_INCENTIVE_PROTOCOL_ID}::user::unstake` || txn.target === `${builder.address.get("borrowIncentive.id")}::user::unstake`)
|
|
5072
5383
|
);
|
|
5073
5384
|
if (!obligationLocked || unstakeObligationBeforeStake) {
|
|
5074
5385
|
txBlock.stakeObligation(obligationArg, obligationtKeyArg);
|
|
@@ -5086,9 +5397,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
|
|
|
5086
5397
|
obligationKey
|
|
5087
5398
|
);
|
|
5088
5399
|
const unstakeObligationBeforeStake = !!txBlock.txBlock.blockData.transactions.find(
|
|
5089
|
-
(txn) => txn.kind === "MoveCall" && (txn.target === `${OLD_BORROW_INCENTIVE_PROTOCOL_ID}::user::unstake` || txn.target ===
|
|
5090
|
-
"borrowIncentive.id"
|
|
5091
|
-
)}::user::unstake`))
|
|
5400
|
+
(txn) => txn.kind === "MoveCall" && (txn.target === `${OLD_BORROW_INCENTIVE_PROTOCOL_ID}::user::unstake` || txn.target === `${builder.address.get("borrowIncentive.id")}::user::unstake`)
|
|
5092
5401
|
);
|
|
5093
5402
|
if (!obligationLocked || unstakeObligationBeforeStake) {
|
|
5094
5403
|
const veSca = await requireVeSca(builder, txBlock, veScaKey);
|
|
@@ -5097,7 +5406,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
|
|
|
5097
5406
|
builder.query,
|
|
5098
5407
|
veSca.keyId
|
|
5099
5408
|
);
|
|
5100
|
-
if (!bindedObligationId || bindedObligationId === obligationArg) {
|
|
5409
|
+
if ((!bindedObligationId || bindedObligationId === obligationArg) && veSca.currentVeScaBalance > 0) {
|
|
5101
5410
|
txBlock.stakeObligationWithVesca(
|
|
5102
5411
|
obligationArg,
|
|
5103
5412
|
obligationtKeyArg,
|
|
@@ -5146,7 +5455,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
|
|
|
5146
5455
|
};
|
|
5147
5456
|
};
|
|
5148
5457
|
var newBorrowIncentiveTxBlock = (builder, initTxBlock) => {
|
|
5149
|
-
const txBlock = initTxBlock instanceof TransactionBlock4 ? new
|
|
5458
|
+
const txBlock = initTxBlock instanceof TransactionBlock4 ? new SuiKitTxBlock4(initTxBlock) : initTxBlock ? initTxBlock : new SuiKitTxBlock4();
|
|
5150
5459
|
const normalMethod = generateBorrowIncentiveNormalMethod({
|
|
5151
5460
|
builder,
|
|
5152
5461
|
txBlock
|
|
@@ -5173,6 +5482,142 @@ var newBorrowIncentiveTxBlock = (builder, initTxBlock) => {
|
|
|
5173
5482
|
});
|
|
5174
5483
|
};
|
|
5175
5484
|
|
|
5485
|
+
// src/builders/referralBuilder.ts
|
|
5486
|
+
import {
|
|
5487
|
+
SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID7,
|
|
5488
|
+
SuiTxBlock as SuiKitTxBlock5,
|
|
5489
|
+
TransactionBlock as TransactionBlock5
|
|
5490
|
+
} from "@scallop-io/sui-kit";
|
|
5491
|
+
var generateReferralNormalMethod = ({
|
|
5492
|
+
builder,
|
|
5493
|
+
txBlock
|
|
5494
|
+
}) => {
|
|
5495
|
+
const referralIds = {
|
|
5496
|
+
referralPgkId: builder.address.get("referral.id"),
|
|
5497
|
+
referralBindings: builder.address.get("referral.referralBindings"),
|
|
5498
|
+
referralRevenuePool: builder.address.get("referral.referralRevenuePool"),
|
|
5499
|
+
authorizedWitnessList: builder.address.get(
|
|
5500
|
+
"referral.authorizedWitnessList"
|
|
5501
|
+
),
|
|
5502
|
+
referralTiers: builder.address.get("referral.referralTiers"),
|
|
5503
|
+
version: builder.address.get("referral.version")
|
|
5504
|
+
};
|
|
5505
|
+
const veScaTable = builder.address.get("vesca.table");
|
|
5506
|
+
return {
|
|
5507
|
+
bindToReferral: (veScaKeyId) => {
|
|
5508
|
+
return txBlock.moveCall(
|
|
5509
|
+
`${referralIds.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,
|
|
5510
|
+
[
|
|
5511
|
+
referralIds.referralBindings,
|
|
5512
|
+
txBlock.pure(veScaKeyId),
|
|
5513
|
+
veScaTable,
|
|
5514
|
+
SUI_CLOCK_OBJECT_ID7
|
|
5515
|
+
],
|
|
5516
|
+
[]
|
|
5517
|
+
);
|
|
5518
|
+
},
|
|
5519
|
+
claimReferralTicket: (poolCoinName) => {
|
|
5520
|
+
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
5521
|
+
return txBlock.moveCall(
|
|
5522
|
+
`${referralIds.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,
|
|
5523
|
+
[
|
|
5524
|
+
referralIds.version,
|
|
5525
|
+
veScaTable,
|
|
5526
|
+
referralIds.referralBindings,
|
|
5527
|
+
referralIds.authorizedWitnessList,
|
|
5528
|
+
referralIds.referralTiers,
|
|
5529
|
+
SUI_CLOCK_OBJECT_ID7
|
|
5530
|
+
],
|
|
5531
|
+
[coinType]
|
|
5532
|
+
);
|
|
5533
|
+
},
|
|
5534
|
+
burnReferralTicket: (ticket, poolCoinName) => {
|
|
5535
|
+
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
5536
|
+
return txBlock.moveCall(
|
|
5537
|
+
`${referralIds.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,
|
|
5538
|
+
[
|
|
5539
|
+
referralIds.version,
|
|
5540
|
+
ticket,
|
|
5541
|
+
referralIds.referralRevenuePool,
|
|
5542
|
+
SUI_CLOCK_OBJECT_ID7
|
|
5543
|
+
],
|
|
5544
|
+
[coinType]
|
|
5545
|
+
);
|
|
5546
|
+
},
|
|
5547
|
+
claimReferralRevenue: (veScaKey, poolCoinName) => {
|
|
5548
|
+
const coinType = builder.utils.parseCoinType(poolCoinName);
|
|
5549
|
+
return txBlock.moveCall(
|
|
5550
|
+
`${referralIds.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,
|
|
5551
|
+
[
|
|
5552
|
+
referralIds.version,
|
|
5553
|
+
referralIds.referralRevenuePool,
|
|
5554
|
+
veScaKey,
|
|
5555
|
+
SUI_CLOCK_OBJECT_ID7
|
|
5556
|
+
],
|
|
5557
|
+
[coinType]
|
|
5558
|
+
);
|
|
5559
|
+
}
|
|
5560
|
+
};
|
|
5561
|
+
};
|
|
5562
|
+
var generateReferralQuickMethod = ({
|
|
5563
|
+
builder,
|
|
5564
|
+
txBlock
|
|
5565
|
+
}) => {
|
|
5566
|
+
return {
|
|
5567
|
+
claimReferralRevenueQuick: async (veScaKey, coinNames = [...SUPPORT_POOLS]) => {
|
|
5568
|
+
const sender = requireSender(txBlock);
|
|
5569
|
+
const objToTransfer = [];
|
|
5570
|
+
for (const coinName of coinNames) {
|
|
5571
|
+
if (coinName === "sui") {
|
|
5572
|
+
const rewardCoin = txBlock.claimReferralRevenue(veScaKey, coinName);
|
|
5573
|
+
objToTransfer.push(rewardCoin);
|
|
5574
|
+
} else {
|
|
5575
|
+
const coins = await builder.suiKit.suiInteractor.selectCoins(
|
|
5576
|
+
sender,
|
|
5577
|
+
Infinity,
|
|
5578
|
+
builder.utils.parseCoinType(coinName)
|
|
5579
|
+
);
|
|
5580
|
+
const rewardCoin = txBlock.claimReferralRevenue(veScaKey, coinName);
|
|
5581
|
+
if (coins.length > 0) {
|
|
5582
|
+
txBlock.mergeCoins(rewardCoin, coins);
|
|
5583
|
+
}
|
|
5584
|
+
objToTransfer.push(rewardCoin);
|
|
5585
|
+
}
|
|
5586
|
+
}
|
|
5587
|
+
if (objToTransfer.length > 0) {
|
|
5588
|
+
txBlock.transferObjects(objToTransfer, sender);
|
|
5589
|
+
}
|
|
5590
|
+
}
|
|
5591
|
+
};
|
|
5592
|
+
};
|
|
5593
|
+
var newReferralTxBlock = (builder, initTxBlock) => {
|
|
5594
|
+
const txBlock = initTxBlock instanceof TransactionBlock5 ? new SuiKitTxBlock5(initTxBlock) : initTxBlock ? initTxBlock : new SuiKitTxBlock5();
|
|
5595
|
+
const normalMethod = generateReferralNormalMethod({
|
|
5596
|
+
builder,
|
|
5597
|
+
txBlock
|
|
5598
|
+
});
|
|
5599
|
+
const normalTxBlock = new Proxy(txBlock, {
|
|
5600
|
+
get: (target, prop) => {
|
|
5601
|
+
if (prop in normalMethod) {
|
|
5602
|
+
return Reflect.get(normalMethod, prop);
|
|
5603
|
+
}
|
|
5604
|
+
return Reflect.get(target, prop);
|
|
5605
|
+
}
|
|
5606
|
+
});
|
|
5607
|
+
const quickMethod = generateReferralQuickMethod({
|
|
5608
|
+
builder,
|
|
5609
|
+
txBlock: normalTxBlock
|
|
5610
|
+
});
|
|
5611
|
+
return new Proxy(normalTxBlock, {
|
|
5612
|
+
get: (target, prop) => {
|
|
5613
|
+
if (prop in quickMethod) {
|
|
5614
|
+
return Reflect.get(quickMethod, prop);
|
|
5615
|
+
}
|
|
5616
|
+
return Reflect.get(target, prop);
|
|
5617
|
+
}
|
|
5618
|
+
});
|
|
5619
|
+
};
|
|
5620
|
+
|
|
5176
5621
|
// src/builders/index.ts
|
|
5177
5622
|
var newScallopTxBlock = (builder, initTxBlock) => {
|
|
5178
5623
|
const vescaTxBlock = newVeScaTxBlock(builder, initTxBlock);
|
|
@@ -5180,7 +5625,8 @@ var newScallopTxBlock = (builder, initTxBlock) => {
|
|
|
5180
5625
|
builder,
|
|
5181
5626
|
vescaTxBlock
|
|
5182
5627
|
);
|
|
5183
|
-
const
|
|
5628
|
+
const referralTxBlock = newReferralTxBlock(builder, borrowIncentiveTxBlock);
|
|
5629
|
+
const spoolTxBlock = newSpoolTxBlock(builder, referralTxBlock);
|
|
5184
5630
|
const coreTxBlock = newCoreTxBlock(builder, spoolTxBlock);
|
|
5185
5631
|
return new Proxy(coreTxBlock, {
|
|
5186
5632
|
get: (target, prop) => {
|
|
@@ -5188,6 +5634,8 @@ var newScallopTxBlock = (builder, initTxBlock) => {
|
|
|
5188
5634
|
return Reflect.get(vescaTxBlock, prop);
|
|
5189
5635
|
} else if (prop in borrowIncentiveTxBlock) {
|
|
5190
5636
|
return Reflect.get(borrowIncentiveTxBlock, prop);
|
|
5637
|
+
} else if (prop in referralTxBlock) {
|
|
5638
|
+
return Reflect.get(referralTxBlock, prop);
|
|
5191
5639
|
} else if (prop in spoolTxBlock) {
|
|
5192
5640
|
return Reflect.get(spoolTxBlock, prop);
|
|
5193
5641
|
}
|
|
@@ -5201,18 +5649,24 @@ var ScallopBuilder = class {
|
|
|
5201
5649
|
constructor(params, instance) {
|
|
5202
5650
|
this.params = params;
|
|
5203
5651
|
this.suiKit = instance?.suiKit ?? new SuiKit3(params);
|
|
5204
|
-
this.
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5652
|
+
this.cache = instance?.cache ?? new ScallopCache(DEFAULT_CACHE_OPTIONS, this.suiKit);
|
|
5653
|
+
this.address = instance?.address ?? new ScallopAddress(
|
|
5654
|
+
{
|
|
5655
|
+
id: params?.addressesId || ADDRESSES_ID,
|
|
5656
|
+
network: params?.networkType
|
|
5657
|
+
},
|
|
5658
|
+
this.cache
|
|
5659
|
+
);
|
|
5208
5660
|
this.query = instance?.query ?? new ScallopQuery(params, {
|
|
5209
5661
|
suiKit: this.suiKit,
|
|
5210
|
-
address: this.address
|
|
5662
|
+
address: this.address,
|
|
5663
|
+
cache: this.cache
|
|
5211
5664
|
});
|
|
5212
5665
|
this.utils = instance?.utils ?? new ScallopUtils(this.params, {
|
|
5213
5666
|
suiKit: this.suiKit,
|
|
5214
5667
|
address: this.address,
|
|
5215
|
-
query: this.query
|
|
5668
|
+
query: this.query,
|
|
5669
|
+
cache: this.cache
|
|
5216
5670
|
});
|
|
5217
5671
|
this.walletAddress = normalizeSuiAddress(
|
|
5218
5672
|
params?.walletAddress || this.suiKit.currentAddress()
|
|
@@ -5294,24 +5748,31 @@ var ScallopClient = class {
|
|
|
5294
5748
|
constructor(params, instance) {
|
|
5295
5749
|
this.params = params;
|
|
5296
5750
|
this.suiKit = instance?.suiKit ?? new SuiKit4(params);
|
|
5297
|
-
this.
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5751
|
+
this.cache = instance?.cache ?? new ScallopCache(DEFAULT_CACHE_OPTIONS, this.suiKit);
|
|
5752
|
+
this.address = instance?.address ?? new ScallopAddress(
|
|
5753
|
+
{
|
|
5754
|
+
id: params?.addressesId || ADDRESSES_ID,
|
|
5755
|
+
network: params?.networkType
|
|
5756
|
+
},
|
|
5757
|
+
this.cache
|
|
5758
|
+
);
|
|
5301
5759
|
this.query = instance?.query ?? new ScallopQuery(params, {
|
|
5302
5760
|
suiKit: this.suiKit,
|
|
5303
|
-
address: this.address
|
|
5761
|
+
address: this.address,
|
|
5762
|
+
cache: this.cache
|
|
5304
5763
|
});
|
|
5305
5764
|
this.utils = instance?.utils ?? new ScallopUtils(params, {
|
|
5306
5765
|
suiKit: this.suiKit,
|
|
5307
5766
|
address: this.address,
|
|
5308
|
-
query: this.query
|
|
5767
|
+
query: this.query,
|
|
5768
|
+
cache: this.cache
|
|
5309
5769
|
});
|
|
5310
5770
|
this.builder = instance?.builder ?? new ScallopBuilder(params, {
|
|
5311
5771
|
suiKit: this.suiKit,
|
|
5312
5772
|
address: this.address,
|
|
5313
5773
|
query: this.query,
|
|
5314
|
-
utils: this.utils
|
|
5774
|
+
utils: this.utils,
|
|
5775
|
+
cache: this.cache
|
|
5315
5776
|
});
|
|
5316
5777
|
this.walletAddress = normalizeSuiAddress2(
|
|
5317
5778
|
params?.walletAddress || this.suiKit.currentAddress()
|
|
@@ -5817,13 +6278,20 @@ var ScallopClient = class {
|
|
|
5817
6278
|
|
|
5818
6279
|
// src/models/scallop.ts
|
|
5819
6280
|
var Scallop = class {
|
|
5820
|
-
constructor(params) {
|
|
6281
|
+
constructor(params, cacheOptions) {
|
|
5821
6282
|
this.params = params;
|
|
5822
6283
|
this.suiKit = new SuiKit5(params);
|
|
5823
|
-
this.
|
|
5824
|
-
|
|
5825
|
-
|
|
5826
|
-
|
|
6284
|
+
this.cache = new ScallopCache(
|
|
6285
|
+
cacheOptions ?? DEFAULT_CACHE_OPTIONS,
|
|
6286
|
+
this.suiKit
|
|
6287
|
+
);
|
|
6288
|
+
this._address = new ScallopAddress(
|
|
6289
|
+
{
|
|
6290
|
+
id: params?.addressesId || ADDRESSES_ID,
|
|
6291
|
+
network: params?.networkType
|
|
6292
|
+
},
|
|
6293
|
+
this.cache
|
|
6294
|
+
);
|
|
5827
6295
|
}
|
|
5828
6296
|
/**
|
|
5829
6297
|
* Get a scallop address instance that already has read addresses.
|
|
@@ -5845,7 +6313,8 @@ var Scallop = class {
|
|
|
5845
6313
|
await this._address.read();
|
|
5846
6314
|
const scallopBuilder = new ScallopBuilder(this.params, {
|
|
5847
6315
|
suiKit: this.suiKit,
|
|
5848
|
-
address: this._address
|
|
6316
|
+
address: this._address,
|
|
6317
|
+
cache: this.cache
|
|
5849
6318
|
});
|
|
5850
6319
|
return scallopBuilder;
|
|
5851
6320
|
}
|
|
@@ -5860,7 +6329,7 @@ var Scallop = class {
|
|
|
5860
6329
|
await this._address.read();
|
|
5861
6330
|
const scallopClient = new ScallopClient(
|
|
5862
6331
|
{ ...this.params, walletAddress },
|
|
5863
|
-
{ suiKit: this.suiKit, address: this._address }
|
|
6332
|
+
{ suiKit: this.suiKit, address: this._address, cache: this.cache }
|
|
5864
6333
|
);
|
|
5865
6334
|
return scallopClient;
|
|
5866
6335
|
}
|
|
@@ -5874,7 +6343,8 @@ var Scallop = class {
|
|
|
5874
6343
|
await this._address.read();
|
|
5875
6344
|
const scallopQuery = new ScallopQuery(this.params, {
|
|
5876
6345
|
suiKit: this.suiKit,
|
|
5877
|
-
address: this._address
|
|
6346
|
+
address: this._address,
|
|
6347
|
+
cache: this.cache
|
|
5878
6348
|
});
|
|
5879
6349
|
return scallopQuery;
|
|
5880
6350
|
}
|
|
@@ -5884,7 +6354,9 @@ var Scallop = class {
|
|
|
5884
6354
|
* @return Scallop Indexer.
|
|
5885
6355
|
*/
|
|
5886
6356
|
async createScallopIndexer() {
|
|
5887
|
-
const scallopIndexer = new ScallopIndexer(
|
|
6357
|
+
const scallopIndexer = new ScallopIndexer(this.params, {
|
|
6358
|
+
cache: this.cache
|
|
6359
|
+
});
|
|
5888
6360
|
return scallopIndexer;
|
|
5889
6361
|
}
|
|
5890
6362
|
/**
|
|
@@ -5897,7 +6369,8 @@ var Scallop = class {
|
|
|
5897
6369
|
await this._address.read();
|
|
5898
6370
|
const scallopUtils = new ScallopUtils(this.params, {
|
|
5899
6371
|
suiKit: this.suiKit,
|
|
5900
|
-
address: this._address
|
|
6372
|
+
address: this._address,
|
|
6373
|
+
cache: this.cache
|
|
5901
6374
|
});
|
|
5902
6375
|
return scallopUtils;
|
|
5903
6376
|
}
|
|
@@ -5926,6 +6399,7 @@ export {
|
|
|
5926
6399
|
Scallop,
|
|
5927
6400
|
ScallopAddress,
|
|
5928
6401
|
ScallopBuilder,
|
|
6402
|
+
ScallopCache,
|
|
5929
6403
|
ScallopClient,
|
|
5930
6404
|
ScallopIndexer,
|
|
5931
6405
|
ScallopQuery,
|