@scallop-io/sui-scallop-sdk 2.0.13-merge-split-ve-sca-alpha.5 → 2.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +622 -697
- package/dist/index.d.ts +622 -697
- package/dist/index.js +32 -33
- package/dist/index.mjs +10 -10
- package/package.json +8 -18
- package/src/builders/borrowIncentiveBuilder.ts +9 -21
- package/src/builders/coreBuilder.ts +2 -2
- package/src/builders/index.ts +2 -2
- package/src/builders/oracles/index.ts +2 -3
- package/src/builders/oracles/pyth.ts +2 -2
- package/src/builders/spoolBuilder.ts +2 -2
- package/src/builders/vescaBuilder.ts +14 -132
- package/src/constants/queryKeys.ts +29 -54
- package/src/constants/testAddress.ts +6 -12
- package/src/index.ts +11 -1
- package/src/models/index.ts +11 -9
- package/src/models/interface.ts +36 -0
- package/src/models/scallop.ts +38 -133
- package/src/models/scallopAddress.ts +127 -142
- package/src/models/scallopAxios.ts +185 -0
- package/src/models/scallopBuilder.ts +45 -75
- package/src/models/scallopClient.ts +124 -154
- package/src/models/scallopConstants.ts +248 -323
- package/src/models/scallopIndexer.ts +54 -98
- package/src/models/scallopQuery.ts +145 -190
- package/src/models/scallopQueryClient.ts +29 -0
- package/src/models/scallopSuiKit.ts +432 -0
- package/src/models/scallopUtils.ts +260 -164
- package/src/queries/borrowIncentiveQuery.ts +28 -16
- package/src/queries/borrowLimitQuery.ts +1 -1
- package/src/queries/coreQuery.ts +148 -107
- package/src/queries/flashloanFeeQuery.ts +12 -6
- package/src/queries/index.ts +0 -1
- package/src/queries/isolatedAssetQuery.ts +3 -3
- package/src/queries/loyaltyProgramQuery.ts +10 -8
- package/src/queries/ownerQuery.ts +32 -0
- package/src/queries/portfolioQuery.ts +4 -5
- package/src/queries/priceQuery.ts +14 -8
- package/src/queries/referralQuery.ts +9 -3
- package/src/queries/sCoinQuery.ts +4 -4
- package/src/queries/spoolQuery.ts +11 -11
- package/src/queries/supplyLimitQuery.ts +1 -1
- package/src/queries/switchboardQuery.ts +1 -1
- package/src/queries/vescaQuery.ts +31 -27
- package/src/queries/xOracleQuery.ts +13 -8
- package/src/types/address.ts +0 -3
- package/src/types/builder/core.ts +1 -1
- package/src/types/builder/vesca.ts +10 -20
- package/src/types/constant/queryKeys.ts +48 -0
- package/src/types/index.ts +0 -1
- package/src/utils/builder.ts +1 -1
- package/src/utils/util.ts +1 -33
- package/src/models/scallopCache.ts +0 -428
- package/src/queries/objectsQuery.ts +0 -18
- package/src/types/model.ts +0 -117
package/dist/index.js
CHANGED
|
@@ -1,48 +1,47 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var client = require('@mysten/sui/client');
|
|
4
|
-
var
|
|
5
|
-
var suiKit = require('@scallop-io/sui-kit');
|
|
6
|
-
var Ms = require('axios');
|
|
4
|
+
var transactions = require('@mysten/sui/transactions');
|
|
7
5
|
var utils = require('@mysten/sui/utils');
|
|
8
|
-
var
|
|
6
|
+
var suiKit = require('@scallop-io/sui-kit');
|
|
9
7
|
var h = require('bignumber.js');
|
|
10
8
|
var zod = require('zod');
|
|
11
9
|
var bcs = require('@mysten/sui/bcs');
|
|
12
|
-
var
|
|
13
|
-
var
|
|
10
|
+
var ns = require('assert');
|
|
11
|
+
var pythSuiJs = require('@pythnetwork/pyth-sui-js');
|
|
12
|
+
var sa = require('axios');
|
|
13
|
+
var queryCore = require('@tanstack/query-core');
|
|
14
14
|
|
|
15
15
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
16
|
|
|
17
|
-
var Ms__default = /*#__PURE__*/_interopDefault(Ms);
|
|
18
17
|
var h__default = /*#__PURE__*/_interopDefault(h);
|
|
19
|
-
var
|
|
18
|
+
var ns__default = /*#__PURE__*/_interopDefault(ns);
|
|
19
|
+
var sa__default = /*#__PURE__*/_interopDefault(sa);
|
|
20
20
|
|
|
21
|
-
var lt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var dt="https://sui.apis.scallop.io",ut="https://sdk.api.scallop.io",lo=!1,Le=!1,ke="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Ee="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var j={api:{getAddresses:t=>["api","getAddresses",{addressId:t}],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:(t,e,s)=>["rpc","getInspectTxn",{queryTarget:t,args:JSON.stringify(e),typeArgs:s?JSON.stringify(s):void 0}],getObject:(t,e)=>["rpc","getObject",{objectId:t,options:e}],getObjects:t=>["rpc","getObjects",{objectIds:JSON.stringify(t??void 0)}],getOwnedObjects:t=>["rpc","getOwnedObjects",{walletAddress:t?.owner,cursor:t?.cursor??void 0,options:t?.options??void 0,filter:JSON.stringify(t?.filter??void 0),limit:t?.limit??void 0}],getDynamicFields:t=>["rpc","getDynamicFields",{parentId:t?.parentId,cursor:t?.cursor??void 0,limit:t?.limit??void 0}],getDynamicFieldObject:t=>["rpc","getDynamicFieldObject",{parentId:t?.parentId,name:JSON.stringify(t?.name??void 0)}],getTotalVeScaTreasuryAmount:(t,e)=>["rpc","getTotalVeScaTreasuryAmount",{refreshArgs:JSON.stringify(t),vescaAmountArgs:JSON.stringify(e)}],getAllCoinBalances:t=>["rpc","getAllCoinBalances",{owner:t}],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var Ve=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"];var Ue={core:{version:"0xee15d07800e2ad4852505c57cd86afea774af02c17388f8bd907de75f915b4f4",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",market:"0xa7f41efe3b551c20ad6d6cea6ccd0fd68d2e2eaaacdca5e62d956209f6a51312",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0xb7d7e1464936fbdcdd4913308b40335e662401029635289bdb317c7dde9d6c68",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xaebdb50e0a95c5aa20c60bde5f574dac90aef83b508d64146cf29b5f63c35d4f",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryTableId:"0x9f75c071b0db2e80da3f5c98686ffdedf3a633684290499501595277a5350b8c",state:"",registryCap:""},pyth:{registry:"0xdcf813893649521abd27816ba8d946b0cb7fc98d776cc9adcecba54688ccc109",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x3a0dbce719fc56a96bf8e8dd53cd57eb9c313642a88d99b86f51208762eba258",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",object:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",object:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",object:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"}},config:""},borrowIncentive:{id:"0x8fe05c796e779c71e7739dcaecefb8757ff9482f62e419dbd0dd9c35b740054f",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x8fe05c796e779c71e7739dcaecefb8757ff9482f62e419dbd0dd9c35b740054f",query:"0x5fba54ac5862f087112c54c02339623bd245721f5e21ea3330fc8c8afc8f51f4",incentivePools:"0xcace4f4736229043d9f897667d046370b8a4d6534bfd307787c40b4c9f42514a",incentiveAccounts:"0x41ff558f580ca0f711910fd6ef687fce9df76ee8e7fc5e150bdfae08e17fae62",config:"0x9636e7b947b806b9fe438d037f02bb24026c5b2691d2f6bad349c2e117f77cc3"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0x924b56d383b45445984a80002185b670aa2e72cd7df496d345f45f9407a12c07",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",bindingTableId:"0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",referralRevenuePool:"0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",revenueTableId:"0x669dfb0f47fccbbe2ae8a0bfce2672a994ef3f1c7049621405cce2f91733bdc1",referralTiers:"0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",tiersTableId:"0xad5e36fce7358a3ef94a56eb89ee7f1968100c1a9d967c1731154083e1dda1fb",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",metaData:"",symbol:"sSUI",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"sSCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},susdc:{coinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",treasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",symbol:"sUSDC",metaData:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"sDEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"sFUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"}}}};var oe=86400,pe=1460,J=126144e3,Qe=1e10,qe=1e9;var pt={usdc:{primary:["pyth"],secondary:[]},sbeth:{primary:["pyth"],secondary:[]},sbusdt:{primary:["pyth"],secondary:[]},sbwbtc:{primary:["pyth"],secondary:[]},weth:{primary:["pyth"],secondary:[]},wbtc:{primary:["pyth"],secondary:[]},wusdc:{primary:["pyth"],secondary:[]},wusdt:{primary:["pyth"],secondary:[]},sui:{primary:["pyth"],secondary:[]},wapt:{primary:["pyth"],secondary:[]},wsol:{primary:["pyth"],secondary:[]},cetus:{primary:["pyth"],secondary:[]},afsui:{primary:["pyth"],secondary:[]},hasui:{primary:["pyth"],secondary:[]},vsui:{primary:["pyth"],secondary:[]},sca:{primary:["pyth"],secondary:[]},fud:{primary:["pyth"],secondary:[]},deep:{primary:["pyth"],secondary:[]},fdusd:{primary:["pyth"],secondary:[]},blub:{primary:["pyth"],secondary:[]},musd:{primary:["pyth"],secondary:[]},ns:{primary:["pyth"],secondary:[]},usdy:{primary:["pyth"],secondary:[]}};var U=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??Ve:Ve},new suiKit.SuiKit({...t,...e})};var Bs=10,Ae=(t,e)=>{let s={...t};for(let a in e)e[a]&&typeof e[a]=="object"&&!Array.isArray(e[a])?s[a]=Ae(t[a]||{},e[a]):s[a]=e[a];return s},$e=class{constructor(e=10){this.capacity=e;this.refillRate=this.capacity/1e3,this.tokens=this.capacity,this.lastRefillTime=Date.now();}tokens;lastRefillTime;refillRate;refill(){let e=Date.now(),a=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+a),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(s=>setTimeout(s,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}},F=class{params;queryClient;suiKit;walletAddress;limiter;constructor(e={},s){this.params=e,this.suiKit=s?.suiKit??U(e),this.queryClient=s?.queryClient??new queryCore.QueryClient(e?.cacheOptions??lt),this.limiter=new $e(this.params.tokensPerSecond??Bs),this.walletAddress=e.walletAddress??this.suiKit.currentAddress();}get client(){return this.suiKit.client()}async queryInspectTxn({queryTarget:e,args:s,typeArgs:a}){let i=new suiKit.SuiTxBlock,o=await this.queryGetNormalizedMoveFunction(e);if(!o)throw new Error("Invalid query target");let{parameters:r}=o,n=await Promise.all((s??[]).map(async(d,l)=>{if(typeof d!="string")return d;let u=(await this.queryGetObject(d))?.data;if(!u)return d;let m=u.owner;if(!m||typeof m!="object"||!("Shared"in m))return {objectId:u.objectId,version:u.version,digest:u.digest};let b=r[l];return typeof b!="object"||!("MutableReference"in b||"Reference"in b)?d:{objectId:u.objectId,initialSharedVersion:m.Shared.initial_shared_version,mutable:"MutableReference"in b}}));return i.moveCall(e,n,a),await this.queryClient.fetchQuery({queryKey:j.rpc.getInspectTxn(e,s,a),queryFn:async()=>await this.limiter.execute(()=>this.suiKit.inspectTxn(i))})}async queryGetNormalizedMoveFunction(e){let{address:s,module:a,name:i}=suiKit.parseStructTag(e);return this.queryClient.fetchQuery({queryKey:j.rpc.getNormalizedMoveFunction(e),queryFn:async()=>await this.limiter.execute(()=>this.client.getNormalizedMoveFunction({package:s,module:a,function:i}))})}async queryGetObject(e,s){return s={...s,showOwner:!0,showContent:!0,showType:!0},this.queryClient.fetchQuery({queryKey:j.rpc.getObject(e,s),queryFn:async()=>await this.limiter.execute(()=>this.client.getObject({id:e,options:s}))})}async queryGetObjects(e){if(e.length===0)return [];let s={showContent:!0,showOwner:!0,showType:!0};return this.queryClient.fetchQuery({queryKey:j.rpc.getObjects(e),queryFn:async()=>{let a=await this.limiter.execute(()=>this.suiKit.getObjects(e,s));return a&&a.forEach(i=>{let o=j.rpc.getObject(i.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:o}).forEach(([n,c])=>{this.queryClient.setQueryData(n,Ae(c,{data:i,error:null}),{updatedAt:Date.now()});});}),a}})}async queryGetOwnedObjects(e){return this.queryClient.fetchQuery({queryKey:j.rpc.getOwnedObjects(e),queryFn:async()=>{let s=await this.limiter.execute(()=>this.client.getOwnedObjects(e));return s&&s.data.length>0&&s.data.filter(a=>!!a.data).forEach(a=>{let i=j.rpc.getObject(a.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:i}).forEach(([r,n])=>{this.queryClient.setQueryData(r,Ae(n,{data:a.data,error:null}),{updatedAt:Date.now()});});}),s}})}async queryGetDynamicFields(e){return this.queryClient.fetchQuery({queryKey:j.rpc.getDynamicFields(e),queryFn:async()=>await this.limiter.execute(()=>this.client.getDynamicFields(e))})}async queryGetDynamicFieldObject(e){return this.queryClient.fetchQuery({queryKey:j.rpc.getDynamicFieldObject(e),queryFn:async()=>{let s=await this.limiter.execute(()=>this.client.getDynamicFieldObject(e));if(s?.data){let a=j.rpc.getObject(s.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:a}).forEach(([o,r])=>{this.queryClient.setQueryData(o,Ae(r,{data:s.data,error:null}),{updatedAt:Date.now()});});}return s}})}async queryGetAllCoinBalances(e){return this.queryClient.fetchQuery({queryKey:j.rpc.getAllCoinBalances(e),queryFn:async()=>{let s=await this.limiter.execute(()=>this.client.getAllBalances({owner:e}));return s?s.reduce((i,o)=>(o.totalBalance!=="0"&&(i[suiKit.normalizeStructTag(o.coinType)]=o),i),{}):{}}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}};var bt={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:""}},packages:{coinDecimalsRegistry:{id:"",upgradeCap:""},math:{id:"",upgradeCap:""},whitelist:{id:"",upgradeCap:""},x:{id:"",upgradeCap:""},protocol:{id:"",upgradeCap:""},protocolWhitelist:{id:"",upgradeCap:""},query:{id:"",upgradeCap:""},supra:{id:"",upgradeCap:""},pyth:{id:"",upgradeCap:""},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},scoin:{id:"",coins:{ssui:{coinType:"",treasury:"",metaData:"",symbol:""},scetus:{coinType:"",treasury:"",metaData:"",symbol:""},ssca:{coinType:"",treasury:"",metaData:"",symbol:""},swusdc:{coinType:"",treasury:"",metaData:"",symbol:""},swusdt:{coinType:"",treasury:"",metaData:"",symbol:""},sweth:{coinType:"",treasury:"",metaData:"",symbol:""},safsui:{coinType:"",treasury:"",metaData:"",symbol:""},shasui:{coinType:"",treasury:"",metaData:"",symbol:""},svsui:{coinType:"",treasury:"",metaData:"",symbol:""}}}},Q=class{_auth;_requestClient;_id;_network;_currentAddresses;_addressesMap;cache;constructor(e,s){let{addressId:a,auth:i,network:o,forceAddressesInterface:r}=e;if(this.cache=s?.cache??new F(e),this._requestClient=Ms__default.default.create({baseURL:dt,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),i&&(this._auth=i),this._id=a,this._network=o??"mainnet",this._addressesMap=new Map,r)for(let[n,c]of Object.entries(r))["localnet","devnet","testnet","mainnet"].includes(n)&&(n===this._network&&(this._currentAddresses=c),this._addressesMap.set(n,c));}getId(){return this._id||void 0}get(e){if(this._currentAddresses)return e.split(".").reduce((a,i)=>typeof a=="object"?a[i]:a,this._currentAddresses)||void 0}set(e,s){if(this._currentAddresses){let a=e.split(".");a.reduce((i,o,r)=>{if(r===a.length-1)i[o]=s;else return i[o]},this._currentAddresses);}return this._currentAddresses}switchCurrentAddresses(e){return this._addressesMap.has(e)&&(this._currentAddresses=this._addressesMap.get(e),this._network=e),this._currentAddresses}getAddresses(e){return e?this._addressesMap.get(e):this._currentAddresses??this._addressesMap.get(this._network)}setAddresses(e,s){let a=s||this._network;a===this._network&&(this._currentAddresses=e),this._addressesMap.set(a,e);}getAllAddresses(){return Object.fromEntries(this._addressesMap)}async create(e){let{addresses:s,network:a,auth:i,memo:o}=e??{},r=i||this._auth||void 0,n=a||this._network,c=s||this._currentAddresses||this._addressesMap.get(n)||bt;if(r!==void 0){this._addressesMap.clear(),this.setAddresses(c,n);let d=await this._requestClient.post("/addresses",JSON.stringify({...Object.fromEntries(this._addressesMap),memo:o}),{headers:{"Content-Type":"application/json","api-key":i||this._auth}});if(d.status===201){for(let[l,u]of Object.entries(d.data))["localnet","devnet","testnet","mainnet"].includes(l)&&(l===this._network&&(this._currentAddresses=u),this._addressesMap.set(l,u));return this._id=d.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("You don't have permission to access this request.")}async read(e){let s=e||this._id||void 0;if(s!==void 0){let a=await this.cache.queryClient.fetchQuery({queryKey:j.api.getAddresses(s),queryFn:async()=>await this._requestClient.get(`/addresses/${s}`,{headers:{"Content-Type":"application/json"}})});if(a.status===200){for(let[i,o]of Object.entries(a.data))["localnet","devnet","testnet","mainnet"].includes(i)&&(i===this._network&&(this._currentAddresses=o),this._addressesMap.set(i,o));return this._id=a.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("Please provide API addresses id.")}async update(e){let{id:s,addresses:a,network:i,auth:o,memo:r}=e??{},n=o||this._auth||void 0,c=s||this._id||void 0,d=i||this._network,l=a||this._currentAddresses||this._addressesMap.get(d)||bt;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(n!==void 0){s!==this._id&&this._addressesMap.clear(),this.setAddresses(l,d);let u=await this._requestClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this._addressesMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":o||this._auth}});if(u.status===200){for(let[m,b]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(m)&&(m===this._network&&(this._currentAddresses=b),this._addressesMap.set(m,b));return this._id=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,s){let a=s||this._auth||void 0,i=e||this._id||void 0;if(i===void 0)throw Error("Require specific addresses id to be deleted.");if(a!==void 0)if((await this._requestClient.delete(`/addresses/${i}`,{headers:{"Content-Type":"application/json","api-key":s||this._auth}})).status===200)this._id=void 0,this._currentAddresses=void 0,this._addressesMap.clear();else throw Error("Failed to delete addresses.");else throw Error("You don't have permission to access this request.")}};var x=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},me=t=>{if(t===void 0)throw new Error("veSca not found")},We=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Ge=(t,e,s)=>{me(s),We(s);let a=Math.floor(s/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let i=Math.floor((e-a)/86400);if(t>i)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-i}`)},ft=(t,e,s,a)=>{let i=a?Math.floor(a/1e3):void 0,o=!i,r=!o&&i*1e3<=new Date().getTime();if(o||r)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${r?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${r?"renewing expired veSca":"initial lock"}`);else {if(me(a),We(a),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");s&&e&&Ge(e,s,a);}},yt=(t,e)=>{if(me(e),We(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},gt=(t,e,s)=>{if(!s||s>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var ze=t=>({coinType:utils.normalizeStructTag(t.type.name),maxBorrowRate:Number(t.maxBorrowRate.value)/2**32,borrowRate:Number(t.interestRate.value)/2**32,borrowRateScale:Number(t.interestRateScale),borrowIndex:Number(t.borrowIndex),lastUpdated:Number(t.lastUpdated),cashAmount:Number(t.cash),debtAmount:Number(t.debt),marketCoinSupplyAmount:Number(t.marketCoinSupply),reserveAmount:Number(t.reserve),reserveFactor:Number(t.reserveFactor.value)/2**32,borrowWeight:Number(t.borrowWeight.value)/2**32,borrowFee:Number(t.borrowFeeRate.value)/2**32,baseBorrowRate:Number(t.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(t.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(t.borrowRateOnMidKink.value)/2**32,highKink:Number(t.highKink.value)/2**32,midKink:Number(t.midKink.value)/2**32,minBorrowAmount:Number(t.minBorrowAmount),isIsolated:t.isIsolated,supplyLimit:Number(t.supplyLimit),borrowLimit:Number(t.borrowLimit)}),Ye=(t,e)=>{let s=t.parseCoinNameFromType(e.coinType),a=t.getCoinDecimal(s);if(a===void 0)throw new Error(`Coin decimal not found for ${s}`);let i=24*365*3600,o=e.baseBorrowRate*i/e.borrowRateScale,r=e.borrowRateOnHighKink*i/e.borrowRateScale,n=e.borrowRateOnMidKink*i/e.borrowRateScale,c=e.maxBorrowRate*i/e.borrowRateScale,d=e.borrowRate*i/e.borrowRateScale,l=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=h__default.default(e.borrowIndex).multipliedBy(h__default.default(l).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),m=h__default.default(e.borrowIndex).plus(u),b=h__default.default(m).dividedBy(e.borrowIndex).minus(1),f=h__default.default(e.debtAmount).multipliedBy(b),y=f.plus(e.debtAmount),p=y.shiftedBy(-1*a),g=h__default.default(e.reserveAmount).plus(f.multipliedBy(e.reserveFactor)),w=g.shiftedBy(-1*a),T=h__default.default(y).plus(Math.max(e.cashAmount-g.toNumber(),0)),I=T.shiftedBy(-1*a),K=h__default.default(y).dividedBy(T);K=K.isFinite()?K:h__default.default(0);let C=h__default.default(d).multipliedBy(K).multipliedBy(1-e.reserveFactor);C=C.isFinite()?C:h__default.default(0);let R=T.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:h__default.default(1),{baseBorrowApr:o,baseBorrowApy:t.parseAprToApy(o),borrowAprOnHighKink:r,borrowApyOnHighKink:t.parseAprToApy(r),borrowAprOnMidKink:n,borrowApyOnMidKink:t.parseAprToApy(n),coinDecimal:a,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(t.parseAprToApy(d),t.parseAprToApy(c)),borrowIndex:m.toNumber(),growthInterest:b.toNumber(),supplyAmount:T.toNumber(),supplyCoin:I.toNumber(),borrowAmount:y.toNumber(),borrowCoin:p.toNumber(),reserveAmount:g.toNumber(),reserveCoin:w.toNumber(),utilizationRate:K.toNumber(),supplyApr:C.toNumber(),supplyApy:t.parseAprToApy(C.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:h__default.default(e.supplyLimit).shiftedBy(-a).toNumber(),maxBorrowCoin:h__default.default(e.borrowLimit).shiftedBy(-a).toNumber()}},Pe=t=>({coinType:utils.normalizeStructTag(t.type.name),isIsolated:t.isIsolated,collateralFactor:Number(t.collateralFactor.value)/4294967296,liquidationFactor:Number(t.liquidationFactor.value)/4294967296,liquidationDiscount:Number(t.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(t.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(t.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(t.maxCollateralAmount),totalCollateralAmount:Number(t.totalCollateralAmount)}),Oe=(t,e)=>{let s=t.parseCoinNameFromType(e.coinType),a=t.getCoinDecimal(s);if(a===void 0)throw new Error(`Coin decimal not found for ${s}`);let i=h__default.default(e.maxCollateralAmount).shiftedBy(-1*a),o=h__default.default(e.totalCollateralAmount).shiftedBy(-1*a);return {coinDecimal:a,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:i.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:o.toNumber()}},ht=t=>({stakeType:utils.normalizeStructTag(t.stakeType.fields.name),maxPoint:Number(t.maxDistributedPoint),distributedPoint:Number(t.distributedPoint),pointPerPeriod:Number(t.distributedPointPerPeriod),period:Number(t.pointDistributionTime),maxStake:Number(t.maxStake),staked:Number(t.stakes),index:Number(t.index),createdAt:Number(t.createdAt),lastUpdate:Number(t.lastUpdate)}),wt=(t,e,s)=>{let i=h__default.default(t.pointPerPeriod).dividedBy(t.period),o=h__default.default(t.pointPerPeriod).dividedBy(t.period),r=o.gt(0)?h__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(o):h__default.default(0),n=t.createdAt,c=r.plus(t.lastUpdate).integerValue().toNumber(),d=h__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),l=h__default.default(t.maxPoint).minus(t.distributedPoint),u=h__default.default.minimum(h__default.default(d).multipliedBy(t.pointPerPeriod),l),m=h__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?h__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),b=h__default.default(t.distributedPoint).plus(u),f=h__default.default(t.staked),y=f.shiftedBy(-1*s),p=y.multipliedBy(e);return {distributedPointPerSec:i.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:m.toNumber(),currentTotalDistributedPoint:b.toNumber(),startDate:new Date(n*1e3),endDate:new Date(c*1e3),stakedAmount:f.toNumber(),stakedCoin:y.toNumber(),stakedValue:p.toNumber()}},St=t=>({claimedRewards:Number(t.claimed_rewards),exchangeRateDenominator:Number(t.exchange_rate_denominator),exchangeRateNumerator:Number(t.exchange_rate_numerator),rewards:Number(t.rewards),spoolId:String(t.spool_id)}),Ct=(t,e,s,a,i)=>{let r=h__default.default(s.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),n=h__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=n.shiftedBy(-1*i),d=c.multipliedBy(a),l=h__default.default(e.rewards),u=l.shiftedBy(-1*i),m=u.multipliedBy(a),b=h__default.default(e.claimedRewards),f=b.shiftedBy(-1*i),y=f.multipliedBy(a),p=h__default.default(r).shiftedBy(-1*i).multipliedBy(31536e3).multipliedBy(a),g=p.dividedBy(s.stakedValue).isFinite()?p.dividedBy(s.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(g=1/0),{rewardApr:g,totalRewardAmount:n.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:m.toNumber(),claimedRewardAmount:b.toNumber(),claimedRewardCoin:f.toNumber(),claimedRewardValue:y.toNumber(),rewardPerSec:r.toNumber()}},Ds=t=>({pointType:utils.normalizeStructTag(t.point_type.name),distributedPointPerPeriod:Number(t.distributed_point_per_period),period:Number(t.point_distribution_time),distributedPoint:Number(t.distributed_point),points:Number(t.points),index:Number(t.index),baseWeight:Number(t.base_weight),weightedAmount:Number(t.weighted_amount),lastUpdate:Number(t.last_update),createdAt:Number(t.created_at)}),Tt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((s,a)=>{let i=Ds(a),o=t.parseCoinNameFromType(i.pointType);return s[o]=i,s},{})}),kt=(t,e,s,a,i)=>{let r=h__default.default(t.distributedPointPerPeriod).dividedBy(t.period),n=h__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=h__default.default.minimum(h__default.default(n).multipliedBy(t.distributedPointPerPeriod),h__default.default(t.points)),d=h__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?h__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),l=h__default.default(t.distributedPoint).plus(c),u=h__default.default(t.baseWeight),m=h__default.default(t.weightedAmount),b=m.shiftedBy(-1*i),f=b.multipliedBy(a),y=365*24*60*60,p=h__default.default(r).shiftedBy(-1*s),g=h__default.default(p).multipliedBy(y).multipliedBy(e),w=h__default.default(1e12),T=g.multipliedBy(h__default.default(t.baseWeight).dividedBy(w)).dividedBy(f).isFinite()&&t.points>0?g.multipliedBy(h__default.default(t.baseWeight).dividedBy(w)).dividedBy(f).toNumber():1/0;return {distributedPointPerSec:r.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:m.toNumber(),weightedStakedCoin:b.toNumber(),weightedStakedValue:f.toNumber(),rewardApr:T,rewardPerSec:p.toNumber()}},Fs=t=>({pointType:utils.normalizeStructTag(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),At=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((s,a)=>{let i=Fs(a),o=t.parseCoinNameFromType(i.pointType);return s[o]=i,s},{})}),be=(...t)=>h__default.default(t.reduce((e,s)=>new h__default.default(s).lt(e)?s:e));var xe=(t,e,s)=>{let a=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),i=Math.max(Math.floor((a-1)/e),1)+1,o=Math.pow(10,-i);return o=s==="increase"?1-o:1+o,o};var Pt=(t,e)=>{let a=[...e.whitelist.lending].find(i=>e.address.get(`core.coins.${i}.oracle.pyth.feed`)===t.id);if(a){let i=t.price.price*10**t.price.expo;return {coinName:a,price:i,publishTime:Number(t.price.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${t.id}`)},Ot=t=>{let e=new Date(t*1e3),s=new Date(t*1e3);s.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&s.setUTCDate(s.getUTCDate()+1);let a=new Date().getTime();return s.getTime()-a>126144e3*1e3&&s.setUTCDate(s.getUTCDate()-1),Math.floor(s.getTime()/1e3)},xt=(t,e)=>{let s=[];for(let a=0;a<t.length;a+=e)s.push(t.slice(a,a+e));return s};async function Ks(t,e,...s){let a=s[s.length-1];if(typeof a=="object"&&a.indexer)try{return await t.apply(e,s)}catch(i){return console.warn(`Indexer requests failed: ${i.message}. Retrying without indexer..`),await t.apply(e,[...s.slice(0,-1),{...a,indexer:!1}])}return await t.apply(e,s)}function q(t){return (...e)=>Ks(t,this,...e)}var z=t=>{if(!(t&&t.content&&"fields"in t.content))throw new Error(`Failed to parse object ${t}`);let e=t.content.fields;if(typeof e=="object"&&"value"in e){let s=e.value;return typeof s=="object"&&"fields"in s?s.fields:s}else if(typeof e=="object")return e;return e};var Vs=async t=>{let e=t.get("borrowIncentive.query"),s=t.get("borrowIncentive.incentivePools"),a=`${e}::incentive_pools_query::incentive_pools_data`,i=[s];return (await t.cache.queryInspectTxn({queryTarget:a,args:i}))?.events[0].parsedJson},It=async(t,e=[...t.constants.whitelist.lending],s=!1,a,i)=>{let o={};a=a??(await t.getMarketPools(void 0,{coinPrices:i,indexer:s})).pools,i=i??await t.getAllCoinPrices({marketPools:a});let r=await Vs(t.address);for(let n of r?.incentive_pools??[]){let c={},d=Tt(t.utils,n),l=utils.normalizeStructTag(n.pool_type.name),u=t.utils.parseCoinNameFromType(l),m=i?.[u]??0,b=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[g,w]of Object.entries(d.poolPoints)){if(!w)continue;let T=w.pointType,I=t.utils.parseCoinNameFromType(T),K=t.utils.getCoinDecimal(I);if(K===void 0)throw new Error(`Coin decimal not found for ${I}`);let C=i?.[I]??0,R=t.utils.parseSymbol(I),N=t.utils.getCoinDecimal(I),D=kt(w,C,K,m,b);c[g]={symbol:R,coinName:I,coinType:T,coinDecimal:N,coinPrice:C,points:w.points,distributedPoint:w.distributedPoint,weightedAmount:w.weightedAmount,...D};}let f=h__default.default(d.staked),y=f.shiftedBy(-1*b),p=y.multipliedBy(m);o[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:l,coinDecimal:b,coinPrice:m,stakedAmount:f.toNumber(),stakedCoin:y.toNumber(),stakedValue:p.toNumber(),points:c};}return o},Rt=async({utils:t},e,s=[...t.constants.whitelist.lending])=>{let a=t.address.get("borrowIncentive.query"),i=t.address.get("borrowIncentive.incentiveAccounts"),o=`${a}::incentive_account_query::incentive_account_data`,r=[i,e],c=(await t.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let m=At(t,u),b=m.poolType,f=t.parseCoinNameFromType(b);return s&&s.includes(f)&&(l[f]=m),l},{})},vt=async({address:t},e)=>{let s=t.get("borrowIncentive.object"),a=t.get("borrowIncentive.incentivePools"),i=t.get("vesca.object"),o=await t.cache.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let n=o.data.content.fields.ve_sca_bind.fields.id.id,c=`${s}::typed_id::TypedID<${i}::ve_sca::VeScaKey>`,d=await t.cache.queryGetDynamicFieldObject({parentId:n,name:{type:c,value:e}});return d?.data?.content?.dataType!=="moveObject"?null:d.data.content.fields.value.fields.id},_t=async({address:t},e)=>{let s=t.get("borrowIncentive.object"),a=t.get("borrowIncentive.incentiveAccounts"),i=t.get("core.object"),o=await t.cache.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let r=o.data.content.fields.accounts.fields.id.id,n=await t.cache.queryGetDynamicFieldObject({parentId:r,name:{type:`${s}::typed_id::TypedID<${i}::obligation::Obligation>`,value:e}});return n?.data?.content?.dataType!=="moveObject"?null:n.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var Us=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),Qs="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Ie=async(t,e)=>{try{let s=t.parseCoinType(e).slice(2),a=t.address.get("core.market");if(!a)return null;let i=await t.cache.queryGetDynamicFieldObject({parentId:a,name:{type:Qs,value:s}}),o=Us.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(s){return console.error(`Error in getSupplyLimit for ${e}: ${s.message}`),"0"}};var qs=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.boolean()})}),jt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",Nt=async(t,e=!1)=>{if(!e)return t.utils.getSupportedPoolAddresses().filter(s=>!!s.isolatedAssetKey).map(s=>s.coinName);try{let s=t.address.get("core.market"),a=[];if(!s)return a;let i=!1,o=null,r=n=>n.name.type===jt;do{let n=await t.cache.queryGetDynamicFields({parentId:s,cursor:o,limit:10});if(!n)break;let c=n.data.filter(r).map(({name:d})=>`0x${d.value.type.name}`);a.push(...c),n&&n.hasNextPage&&n.nextCursor?(i=!0,o=n.nextCursor):i=!1;}while(i);return a}catch(s){return console.error(s),[]}},ce=async(t,e)=>{let s=t.constants.poolAddresses[e];if(s)return s.isIsolated;let a=t.address.get("core.market"),i=t.address.cache.queryClient.getQueryData(["getDynamicFields",a]);if(i){let c=t.parseCoinType(e);return i.includes(c)}let o=t.parseCoinType(e).slice(2),r=await t.cache.queryGetDynamicFieldObject({parentId:a,name:{type:jt,value:o}}),n=qs.safeParse(r?.data?.content);return n.success?n.data.fields.value:!1};var $s=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),Ws="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Re=async(t,e)=>{try{let s=t.parseCoinType(e).slice(2),a=t.address.get("core.market");if(!a)return null;let i=await t.cache.queryGetDynamicFieldObject({parentId:a,name:{type:Ws,value:s}}),o=$s.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(s){return console.error(`Error in getBorrowLimit for ${e}: ${s.message}`),"0"}};var E=async(t,e,s=50)=>{let a=xt(e,s),i=[];for(let o of a){let r=await t.queryGetObjects(o);i.push(...r);}return i};var Gs="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",Bt=async(t,e,s)=>{let a=new Set(e),i=Object.fromEntries(Object.entries(t.constants.coinTypeToCoinNameMap).filter(([c,d])=>a.has(d))),o=null,r=!1,n=[];do{let c=await t.cache.queryGetDynamicFields({parentId:Gs,limit:10,cursor:o});if(!c)break;let{data:d,hasNextPage:l,nextCursor:u}=c,m=d.filter(b=>{let f=`0x${b.name.value.name}`;return !!i[f]}).map(b=>b.objectId)??[];n.push(...await t.cache.queryGetObjects(m)),r=l,o=u;}while(r);return n.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=`0x${d.content.fields.name.fields.name}`,u=i[l];if(!u)return c;let b=+d.content.fields.value;c[u]=b/s;}return c},{})};var Ft=async(t,e=!1,s)=>{s=s??await t.utils.getCoinPrices()??{};let a={},i={};if(e){let u=await t.indexer.getMarket(),m=f=>{f.coinPrice=s[f.coinName]??f.coinPrice,f.coinWrappedType=t.utils.getCoinWrappedType(f.coinName),a[f.coinName]=f;},b=f=>{f.coinPrice=s[f.coinName]??f.coinPrice,f.coinWrappedType=t.utils.getCoinWrappedType(f.coinName),i[f.coinName]=f;};return Object.values(u.pools).filter(f=>!!f).forEach(m),Object.values(u.collaterals).filter(f=>!!f).forEach(b),{pools:a,collaterals:i}}let o=t.address.get("core.packages.query.id"),r=t.address.get("core.market"),n=`${o}::market_query::market_data`,c=[r],l=(await t.cache.queryInspectTxn({queryTarget:n,args:c}))?.events[0]?.parsedJson;for(let u of l?.pools??[]){let m=utils.normalizeStructTag(u.type.name),b=t.utils.parseCoinNameFromType(m),f=s[b]??0;if(!t.constants.whitelist.lending.has(b))continue;let y=ze({type:u.type,maxBorrowRate:u.maxBorrowRate,interestRate:u.interestRate,interestRateScale:u.interestRateScale,borrowIndex:u.borrowIndex,lastUpdated:u.lastUpdated,cash:u.cash,debt:u.debt,marketCoinSupply:u.marketCoinSupply,reserve:u.reserve,reserveFactor:u.reserveFactor,borrowWeight:u.borrowWeight,borrowFeeRate:u.borrowFeeRate,baseBorrowRatePerSec:u.baseBorrowRatePerSec,borrowRateOnHighKink:u.borrowRateOnHighKink,borrowRateOnMidKink:u.borrowRateOnMidKink,highKink:u.highKink,midKink:u.midKink,minBorrowAmount:u.minBorrowAmount,isIsolated:await ce(t.utils,b),supplyLimit:await Ie(t.utils,b)??"0",borrowLimit:await Re(t.utils,b)??"0"}),p=Ye(t.utils,y);a[b]={coinName:b,symbol:t.utils.parseSymbol(b),coinType:m,marketCoinType:t.utils.parseMarketCoinType(b),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(b))??"",coinWrappedType:t.utils.getCoinWrappedType(b),coinPrice:f,highKink:y.highKink,midKink:y.midKink,reserveFactor:y.reserveFactor,borrowWeight:y.borrowWeight,borrowFee:y.borrowFee,marketCoinSupplyAmount:y.marketCoinSupplyAmount,minBorrowAmount:y.minBorrowAmount,...p};}for(let u of l?.collaterals??[]){let m=utils.normalizeStructTag(u.type.name),b=t.utils.parseCoinNameFromType(m),f=s[b]??0;if(!t.constants.whitelist.collateral.has(b))continue;let y=Pe({type:u.type,collateralFactor:u.collateralFactor,liquidationFactor:u.liquidationFactor,liquidationDiscount:u.liquidationDiscount,liquidationPenalty:u.liquidationPanelty,liquidationReserveFactor:u.liquidationReserveFactor,maxCollateralAmount:u.maxCollateralAmount,totalCollateralAmount:u.totalCollateralAmount,isIsolated:await ce(t.utils,b)}),p=Oe(t.utils,y);i[b]={coinName:b,symbol:t.utils.parseSymbol(b),coinType:m,marketCoinType:t.utils.parseMarketCoinType(b),coinWrappedType:t.utils.getCoinWrappedType(b),coinPrice:f,collateralFactor:y.collateralFactor,liquidationFactor:y.liquidationFactor,liquidationDiscount:y.liquidationDiscount,liquidationPenalty:y.liquidationPenalty,liquidationReserveFactor:y.liquidationReserveFactor,...p};}return {pools:a,collaterals:i}},Kt=async(t,e)=>{let s={balanceSheet:[],collateralStat:[],borrowDynamic:[],interestModel:[],riskModel:[],borrowFeeKey:[],supplyLimitKey:[],borrowLimitKey:[]},a=new Map;for(let n of e){let c=t.constants.poolAddresses[n],d={balanceSheet:c?.lendingPoolAddress,collateralStat:c?.collateralPoolAddress,borrowDynamic:c?.borrowDynamic,interestModel:c?.interestModel,riskModel:c?.riskModel,borrowFeeKey:c?.borrowFeeKey,supplyLimitKey:c?.supplyLimitKey,borrowLimitKey:c?.borrowLimitKey};Object.entries(d).forEach(([l,u])=>{u&&s[l].push(u);}),a.set(n,d);}let i=await Promise.all([E(t.cache,s.balanceSheet),E(t.cache,s.collateralStat),E(t.cache,s.borrowDynamic),E(t.cache,s.interestModel),E(t.cache,s.riskModel),E(t.cache,s.borrowFeeKey),E(t.cache,s.supplyLimitKey),E(t.cache,s.borrowLimitKey)]),o={balanceSheet:new Map,collateralStat:new Map,borrowDynamic:new Map,interestModel:new Map,riskModel:new Map,borrowFeeKey:new Map,supplyLimitKey:new Map,borrowLimitKey:new Map,isIsolated:new Map};i.forEach((n,c)=>{let d=Object.keys(o)[c];n.forEach(l=>{o[d].set(l.objectId,l);});});let r={};for(let[n,c]of a)r[n]={balanceSheet:c.balanceSheet?o.balanceSheet.get(c.balanceSheet):void 0,collateralStat:c.collateralStat?o.collateralStat.get(c.collateralStat):void 0,borrowDynamic:c.borrowDynamic?o.borrowDynamic.get(c.borrowDynamic):void 0,interestModel:c.interestModel?o.interestModel.get(c.interestModel):void 0,riskModel:c.riskModel?o.riskModel.get(c.riskModel):void 0,borrowFeeKey:c.borrowFeeKey?o.borrowFeeKey.get(c.borrowFeeKey):void 0,supplyLimitKey:c.supplyLimitKey?o.supplyLimitKey.get(c.supplyLimitKey):void 0,borrowLimitKey:c.borrowLimitKey?o.borrowLimitKey.get(c.borrowLimitKey):void 0,isolatedAssetKey:t.constants.poolAddresses[n]?.isIsolated};return r},Lt=async(t,e,s=!1,a)=>{a=a??await t.utils.getCoinPrices();let i={},o={};if(s){let n=await t.indexer.getMarket(),c=l=>{l.coinPrice=a[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),i[l.coinName]=l;},d=l=>{l.coinPrice=a[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),o[l.coinName]=l;};return Object.values(n.pools).filter(l=>!!l).forEach(c),Object.values(n.collaterals).filter(l=>!!l).forEach(d),{pools:i,collaterals:o}}let r=await Kt(t,e);return await Promise.allSettled(e.map(async n=>{try{let c=await Js(t,n,s,a?.[n]??0,r[n]);c?.marketPool&&(i[n]=c?.marketPool),c?.collateral&&(o[n]=c.collateral);}catch(c){console.error(c);}})),{pools:i,collaterals:o}},Ys=({balanceSheet:t,borrowDynamic:e,collateralStat:s,interestModel:a,riskModel:i,borrowFeeKey:o,supplyLimitKey:r,borrowLimitKey:n,isIsolated:c})=>{if(!t||!e||!a)throw new Error("Missing required market objects");let d=z(t),l=z(a),u=z(e),m=o?z(o):{value:"0"},b=r?z(r):"0",f=n?z(n):"0",y=i?z(i):void 0,p=s?z(s):void 0,g=y&&p?{type:l.type.fields,isIsolated:c,collateralFactor:y.collateral_factor.fields,liquidationFactor:y.liquidation_factor.fields,liquidationPenalty:y.liquidation_penalty.fields,liquidationDiscount:y.liquidation_discount.fields,liquidationReserveFactor:y.liquidation_revenue_factor.fields,maxCollateralAmount:y.max_collateral_amount,totalCollateralAmount:p.amount}:void 0;return {type:l.type.fields,maxBorrowRate:l.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:l.revenue_factor.fields,borrowWeight:l.borrow_weight.fields,borrowFeeRate:m,baseBorrowRatePerSec:l.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:l.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:l.borrow_rate_on_mid_kink.fields,highKink:l.high_kink.fields,midKink:l.mid_kink.fields,minBorrowAmount:l.min_borrow_amount,isIsolated:c,supplyLimit:b,borrowLimit:f,parsedOriginMarketCollateral:g}},Js=async(t,e,s=!1,a,i)=>{if(a=a??(await t.utils.getCoinPrices())?.[e],s){let l=await t.indexer.getMarketPool(e);if(!l)return;l.coinPrice=a??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=a??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}if(i??=(await Kt(t,[e]))[e],!i)throw new Error(`Failed to fetch required market objects for ${e}`);let o=Ys(i),r=ze(o),n=Ye(t.utils,r),c=o.parsedOriginMarketCollateral?Pe(o.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:a??0,highKink:r.highKink,midKink:r.midKink,reserveFactor:r.reserveFactor,borrowWeight:r.borrowWeight,borrowFee:r.borrowFee,marketCoinSupplyAmount:r.marketCoinSupplyAmount,minBorrowAmount:r.minBorrowAmount,...n},collateral:c?{...d(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:a,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Oe(t.utils,c)}:void 0}},Et=async(t,e=[...t.constants.whitelist.collateral],s=!1)=>{let a=t.address.get("core.market"),i=await t.utils.getCoinPrices()??{},o={};if(s){let n=await t.indexer.getMarketCollaterals(),c=d=>{e.includes(d.coinName)&&(d.coinPrice=i[d.coinName]??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName),o[d.coinName]=d);};return Object.values(n).filter(d=>!!d).forEach(c),o}let r=await t.cache.queryGetObject(a);return await Promise.allSettled(e.map(async n=>{let c=await Je(t,n,s,r?.data,i?.[n]);c&&(o[n]=c);})),o},Je=async(t,e,s=!1,a,i)=>{if(i=i??(await t.utils.getCoinPrices())?.[e],s){let w=await t.indexer.getMarketCollateral(e);return w.coinPrice=i??w.coinPrice,w.coinWrappedType=t.utils.getCoinWrappedType(w.coinName),w}let o=t.address.get("core.market");if(a=a||(await t.cache.queryGetObject(o))?.data,!(a&&a.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let r=a.content.fields,n=t.utils.parseCoinType(e),c=r.risk_models.fields.table.fields.id.id,d=await t.cache.queryGetDynamicFieldObject({parentId:c,name:{type:"0x1::type_name::TypeName",value:{name:n.substring(2)}}}),l=d?.data;if(!(l&&l.content&&"fields"in l.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${d?.error?.code.toString()}: `);let u=l.content.fields.value.fields,m=r.collateral_stats.fields.table.fields.id.id,b=await t.cache.queryGetDynamicFieldObject({parentId:m,name:{type:"0x1::type_name::TypeName",value:{name:n.substring(2)}}}),f=b?.data;if(!(f&&f.content&&"fields"in f.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${e}: ${b?.error?.code.toString()}`);let y=f.content.fields.value.fields,p=Pe({type:u.type.fields,collateralFactor:u.collateral_factor.fields,liquidationFactor:u.liquidation_factor.fields,liquidationDiscount:u.liquidation_discount.fields,liquidationPenalty:u.liquidation_penalty.fields,liquidationReserveFactor:u.liquidation_revenue_factor.fields,maxCollateralAmount:u.max_collateral_amount,totalCollateralAmount:y.amount,isIsolated:await ce(t.utils,e)}),g=Oe(t.utils,p);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:i??0,collateralFactor:p.collateralFactor,liquidationFactor:p.liquidationFactor,liquidationDiscount:p.liquidationDiscount,liquidationPenalty:p.liquidationPenalty,liquidationReserveFactor:p.liquidationReserveFactor,...g}},le=async({constants:t},e)=>{let s=e,a=t.protocolObjectId,i=[],o=!1,r=null;do{let l=await t.cache.queryGetOwnedObjects({owner:s,filter:{StructType:`${a}::obligation::ObligationKey`},options:{showContent:!0},cursor:r,limit:10});if(!l)break;i.push(...l.data),l.hasNextPage&&l.nextCursor?(o=!0,r=l.nextCursor):o=!1;}while(o);let n=i.filter(l=>!!l.data),c=[],d=await E(t.cache,n.map(l=>l.data?.content).filter(l=>l?.dataType==="moveObject").map(l=>l.fields.ownership.fields.of));return await Promise.allSettled(n.map(async({data:l},u)=>{let m=l?.objectId,b=l?.content;if(m&&b&&"fields"in b){let f=b.fields,y=String(f.ownership.fields.of),p=await Xe(t.cache,d[u]);c.push({id:y,keyId:m,locked:p});}})),c},Xe=async(t,e)=>{let s=typeof e=="string"?(await t.queryGetObject(e))?.data:e,a=!1;return s&&s?.content?.dataType==="moveObject"&&"lock_key"in s.content.fields&&(a=!!s.content.fields.lock_key),a},ve=async({address:t},e)=>{let s=t.get("core.packages.query.id"),a=t.get("core.version"),i=t.get("core.market"),o=`${s}::obligation_query::obligation_data`,r=[a,i,e,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}];return (await t.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson},Vt=async(t,e=[...t.constants.whitelist.lending],s)=>{let a=s??t.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await He(t,o,a);i[o]=r;})),i},He=async(t,e,s)=>{let a=s??t.suiKit.currentAddress(),i=t.utils.parseCoinType(e),o=await t.cache.queryGetCoinBalance({owner:a,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Ut=async(t,e,s)=>{e=e||[...t.constants.whitelist.lending].map(o=>t.utils.parseMarketCoinName(o));let a=s??t.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await Ze(t,o,a);i[o]=r;})),i},Ze=async(t,e,s)=>{let a=s??t.suiKit.currentAddress(),i=t.utils.parseMarketCoinType(e),o=await t.cache.queryGetCoinBalance({owner:a,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Qt=async(t,e,s=1e4)=>{let a=[],i={},o=e.reduce((c,d)=>{let l=t.utils.parseCoinType(d).slice(2);return c[l]=d,c},{}),r=e.map(c=>{let d=t.constants.poolAddresses[c]?.flashloanFeeObject;return d||(a.push(c),null)}).filter(c=>!!c),n=await E(t.cache,r);if(a.length>0){let c=await Bt(t.utils,a,s);i={...i,...c};}return i={...i,...n.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=d.content.fields,u=d.content.fields.name.fields.name,m=+l.value;c[o[u]]=m/s;}return c},{})},i};var Xs=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(t=>({totalPoolReward:h__default.default(t.balance).shiftedBy(-9).toNumber(),isClaimEnabled:t.enable_claim})),Hs=zod.z.object({value:zod.z.string()}).transform(t=>h__default.default(t.value).shiftedBy(-9).toNumber()),$t=async(t,e)=>{let s=t.address.get("loyaltyProgram.rewardPool"),a=await t.cache.queryGetObject(s);if(a?.data?.content?.dataType!=="moveObject")return null;let i=a.data.content.fields,{isClaimEnabled:o,totalPoolReward:r}=Xs.parse(i),n={pendingReward:0,totalPoolReward:r,isClaimEnabled:o};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return n;let c=t.address.get("loyaltyProgram.userRewardTableId"),d=await t.cache.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return n;let l=d.data.content.fields;return n.pendingReward=Hs.parse(l),n};var Wt=async(t,e=[...t.constants.whitelist.lending],s,a,i,o=!1)=>{let r=e.map(b=>t.utils.parseMarketCoinName(b)),n=r.filter(b=>t.constants.whitelist.spool.has(b));i=i??await t.utils.getCoinPrices(),a=a??(await t.getMarketPools(e,{indexer:o,coinPrices:i})).pools;let c=await t.getSpools(n,{indexer:o,marketPools:a,coinPrices:i}),[d,l,u]=await Promise.all([t.getCoinAmounts(e,s),t.getMarketCoinAmounts(r,s),t.getAllStakeAccounts(s)]),m={};return await Promise.allSettled(e.map(async b=>{let f=n.find(p=>p===t.utils.parseMarketCoinName(b)),y=t.utils.parseMarketCoinName(b);m[b]=await et(t,b,s,o,a?.[b],f?c[f]:void 0,f?u[f]:[],d?.[b],l?.[y],i?.[b]??0);})),m},et=async(t,e,s,a=!1,i,o,r,n,c,d,l)=>{let u=t.utils.parseMarketCoinName(e);if(d=d??(await t.utils.getCoinPrices())?.[e]??0,i=i??await t.getMarketPool(e,{indexer:a,coinPrice:d}),!i)throw new Error(`Failed to fetch marketPool for ${e}`);o=o??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:a,marketPool:i,coinPrices:{[e]:d}}):void 0,r=r||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,s):[],n=n||await t.getCoinAmount(e,s),c=c||await t.getMarketCoinAmount(u,s),l=l||await t.getSCoinAmount(u,s);let m=t.utils.getCoinDecimal(e),b=h__default.default(0),f=h__default.default(0),y=h__default.default(0),p=h__default.default(0),g=h__default.default(0),w=h__default.default(0),T=h__default.default(0),I=h__default.default(0),K=h__default.default(0);if(o)for(let V of r){let v=h__default.default(V.staked),_=v.shiftedBy(-1*o.coinDecimal),L=v.multipliedBy(i?.conversionRate??1),W=L.shiftedBy(-1*o.coinDecimal),M=W.multipliedBy(o.coinPrice);b=b.plus(v),f=f.plus(_),y=y.plus(L),p=p.plus(W),g=g.plus(M),w=w.plus(v),T=w.shiftedBy(-1*o.coinDecimal);let te=o.currentPointIndex?h__default.default(o.currentPointIndex-V.index).dividedBy(1e9):1;I=I.plus(v.multipliedBy(te).plus(V.points).multipliedBy(o.exchangeRateNumerator).dividedBy(o.exchangeRateDenominator)),K=I.shiftedBy(-1*o.rewardCoinDecimal);}let C=h__default.default(c).plus(h__default.default(l)).multipliedBy(i?.conversionRate??1),R=C.shiftedBy(-1*m),N=R.multipliedBy(d??0),D=h__default.default(d??0).multipliedBy(i?.conversionRate??1),re=h__default.default(c).plus(h__default.default(l)),$=re.shiftedBy(-1*m),k=h__default.default(n),A=k.shiftedBy(-1*m),P=be(C,i?.supplyAmount??1/0).plus(y),O=be(R,i?.supplyCoin??1/0).plus(p);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:i?.sCoinType??"",coinDecimal:m,coinPrice:d??0,conversionRate:i?.conversionRate??1,marketCoinPrice:D.toNumber(),supplyApr:i?.supplyApr??0,supplyApy:i?.supplyApy??0,rewardApr:o?.rewardApr??0,suppliedAmount:C.plus(y).toNumber(),suppliedCoin:R.plus(p).toNumber(),suppliedValue:N.plus(g).toNumber(),stakedMarketAmount:b.toNumber(),stakedMarketCoin:f.toNumber(),stakedAmount:y.toNumber(),stakedCoin:p.toNumber(),stakedValue:g.toNumber(),unstakedMarketAmount:re.toNumber(),unstakedMarketCoin:$.toNumber(),unstakedAmount:C.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:N.toNumber(),availableSupplyAmount:k.toNumber(),availableSupplyCoin:A.toNumber(),availableWithdrawAmount:P.toNumber(),availableWithdrawCoin:O.toNumber(),availableStakeAmount:re.toNumber(),availableStakeCoin:$.toNumber(),availableUnstakeAmount:w.toNumber(),availableUnstakeCoin:T.toNumber(),availableClaimAmount:I.toNumber(),availableClaimCoin:K.toNumber(),isIsolated:i?i.isIsolated:!1}},Gt=async(t,e,s,a,i=!1)=>{s=s??await t.getMarketPools(void 0,{indexer:i}),a=a??await t.getAllCoinPrices({marketPools:s.pools});let[o,r]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),n=await E(t.cache,r.map(d=>d.id)),c={};return await Promise.allSettled(r.map(async(d,l)=>{c[d.keyId]=await ta(t,n[l]??d.id,e,i,s,a,o);})),c},ta=async(t,e,s,a=!1,i,o,r)=>{i=i??await t.getMarketPools(void 0,{indexer:a}),o=o??await t.getAllCoinPrices({marketPools:i.pools}),r=r??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),s);let[n,c,d]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:o,marketPools:i.pools}),t.getBorrowIncentiveAccounts(e)]),l={},u={},m={},b=0,f=h__default.default(0),y=h__default.default(0),p=h__default.default(0),g=0,w=0,T=h__default.default(0),I=h__default.default(0);for(let k of Array.from(t.constants.whitelist.collateral)){let A=n?.collaterals.find(v=>{let _=t.utils.parseCoinNameFromType(v.type.name);return k===_}),P=i.collaterals[k],O=t.utils.getCoinDecimal(k),B=o?.[k],V=r?.[k]??0;if(P&&B){let v=h__default.default(A?.amount??0),_=v.shiftedBy(-1*O),L=_.multipliedBy(B),W=L.multipliedBy(P.collateralFactor),M=L.multipliedBy(P.liquidationFactor),G=h__default.default(V),te=G.shiftedBy(-1*O);f=f.plus(L),y=y.plus(W),p=p.plus(M),v.isGreaterThan(0)&&b++,l[k]={coinName:k,coinType:t.utils.parseCoinType(k),symbol:t.utils.parseSymbol(k),coinDecimal:O,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:_.toNumber(),depositedValue:L.toNumber(),borrowCapacityValue:W.toNumber(),requiredCollateralValue:M.toNumber(),availableDepositAmount:G.toNumber(),availableDepositCoin:te.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let K=[...new Set([...Object.values(i.pools).filter(k=>!!k).map(k=>k.coinName)])];for(let k of K){let A=n?.debts.find(v=>{let _=t.utils.parseCoinNameFromType(v.type.name);return k===_}),P=i.pools[k],O=t.utils.getCoinDecimal(k),B=o?.[k],V=r?.[k]??0;if(P&&B){let v=A?.borrowIndex?P.borrowIndex/Number(A.borrowIndex)-1:0,_=h__default.default(A?.amount??0).multipliedBy(v+1),L=_.shiftedBy(-1*O),W=_,M=W.shiftedBy(-1*O),G=h__default.default(V),te=G.shiftedBy(-1*O),ae=M.multipliedBy(B),Te=ae.multipliedBy(P.borrowWeight);T=T.plus(ae),I=I.plus(Te),_.isGreaterThan(0)&&g++,u[k]={coinName:k,coinType:t.utils.parseCoinType(k),symbol:t.utils.parseSymbol(k),coinDecimal:O,coinPrice:B,borrowedAmount:_.toNumber(),borrowedCoin:L.toNumber(),borrowedValue:ae.toNumber(),borrowedValueWithWeight:Te.toNumber(),borrowIndex:Number(A?.borrowIndex??0),requiredRepayAmount:W.toNumber(),requiredRepayCoin:M.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:G.toNumber(),availableRepayCoin:te.toNumber()};}}for(let[k,A]of Object.entries(d)){if(!A)continue;let P=k,O=c[P];if(O){let B=[];Object.entries(A.pointList).forEach(([V,v])=>{let _=O.points[t.utils.parseSCoinTypeNameToMarketCoinName(V)];if(v&&_){let L=h__default.default(0),W=h__default.default(0),M=h__default.default(v.weightedAmount),te=_.currentPointIndex?Math.max(h__default.default(_.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;L=L.plus(M.multipliedBy(te).plus(v.points)),W=L.shiftedBy(-1*_.coinDecimal);let ae=h__default.default(1e12),Te=h__default.default(v.weightedAmount).div(h__default.default(A.debtAmount).multipliedBy(_.baseWeight).dividedBy(ae)).isFinite()?h__default.default(v.weightedAmount).div(h__default.default(A.debtAmount).multipliedBy(_.baseWeight).dividedBy(ae)).toNumber():1;L.isGreaterThanOrEqualTo(0)&&B.push({coinName:_.coinName,coinType:_.coinType,symbol:_.symbol,coinDecimal:_.coinDecimal,coinPrice:_.coinPrice,weightedBorrowAmount:M.toNumber(),availableClaimAmount:L.toNumber(),availableClaimCoin:W.toNumber(),boostValue:Te});}}),Object.keys(O.points).some(V=>{let v=O.points[V]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&A.debtAmount>0&&w++,m[P]={coinName:O.coinName,coinType:O.coinType,symbol:O.symbol,coinDecimal:O.coinDecimal,coinPrice:O.coinPrice,rewards:B};}}let C=p.isZero()?I.isGreaterThan(0)?h__default.default(100):h__default.default(0):I.dividedBy(p);C=C.isLessThan(1)?C:h__default.default(1);let R=f.minus(T).isGreaterThan(0)?f.minus(T):h__default.default(0),N=y.minus(I).isGreaterThan(0)?y.minus(I):h__default.default(0),D=I.isGreaterThan(0)?p:h__default.default(0),re=I.minus(D).isGreaterThan(0)?I.minus(D):h__default.default(0),$={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:f.toNumber(),totalBorrowedValue:T.toNumber(),totalBalanceValue:R.toNumber(),totalBorrowCapacityValue:y.toNumber(),totalAvailableCollateralValue:N.toNumber(),totalBorrowedValueWithWeight:I.toNumber(),totalRequiredCollateralValue:D.toNumber(),totalUnhealthyCollateralValue:re.toNumber(),totalRiskLevel:C.toNumber(),totalDepositedPools:b,totalBorrowedPools:g,totalRewardedPools:w,collaterals:l,debts:u,borrowIncentives:m};for(let[k,A]of Object.entries($.collaterals)){if(!A)continue;let P=i.collaterals[k];if(P){let O=h__default.default($.totalAvailableCollateralValue).dividedBy(P.collateralFactor).dividedBy(P.coinPrice).shiftedBy(P.coinDecimal);O=$.totalBorrowedValueWithWeight===0?h__default.default(A.depositedAmount):be(O.multipliedBy(xe(h__default.default($.totalAvailableCollateralValue).dividedBy(P.collateralFactor).toNumber(),3,"increase")).toNumber(),A.depositedAmount,P.depositAmount),A.availableWithdrawAmount=O.toNumber(),A.availableWithdrawCoin=O.shiftedBy(-1*A.coinDecimal).toNumber();}}for(let[k,A]of Object.entries($.debts)){if(!A)continue;let P=i.pools[k];if(P){let O=h__default.default(A.requiredRepayAmount).multipliedBy(xe(A.borrowedValue,3,"decrease")),B=h__default.default($.totalAvailableCollateralValue).dividedBy(P.borrowWeight).shiftedBy(P.coinDecimal).dividedBy(P.coinPrice);B=$.totalAvailableCollateralValue!==0&&h__default.default(P.maxBorrowCoin).isGreaterThan(P.borrowCoin)?be(B.multipliedBy(xe(B.shiftedBy(-1*P.coinDecimal).multipliedBy(P.coinPrice).toNumber(),3,"increase")).toNumber(),P.supplyAmount):h__default.default(0),A.availableBorrowAmount=B.toNumber(),A.availableBorrowCoin=B.shiftedBy(-1*A.coinDecimal).toNumber(),A.requiredRepayAmount=O.toNumber(),A.requiredRepayCoin=O.shiftedBy(-1*A.coinDecimal).toNumber();}}return $},zt=async(t,e=!1)=>{let s=await t.getMarketPools(void 0,{indexer:e}),a=h__default.default(0),i=h__default.default(0),o=h__default.default(0);if(e){let n=await t.indexer.getTotalValueLocked();return {supplyValue:n.supplyValue,supplyValueChangeRatio:n.supplyValueChangeRatio,borrowValue:n.borrowValue,borrowValueChangeRatio:n.borrowValueChangeRatio,totalValue:n.totalValue,totalValueChangeRatio:n.totalValueChangeRatio,supplyLendingValue:n.supplyLendingValue,supplyLendingValueChangeRatio:n.supplyLendingValueChangeRatio,supplyCollateralValue:n.supplyCollateralValue,supplyCollateralValueChangeRatio:n.supplyCollateralValueChangeRatio}}for(let n of Object.values(s.pools))n&&(a=a.plus(h__default.default(n.supplyCoin).multipliedBy(n.coinPrice)),o=o.plus(h__default.default(n.borrowCoin).multipliedBy(n.coinPrice)));for(let n of Object.values(s.collaterals))n&&(i=i.plus(h__default.default(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:a.plus(i).toNumber(),supplyLendingValue:a.toNumber(),supplyCollateralValue:i.toNumber(),borrowValue:o.toNumber(),totalValue:a.plus(i).minus(o).toNumber()}},Yt=async(t,e,s=!1)=>{let a=await t.getAllCoinPrices({indexer:s}),i=await t.getMarketPools(void 0,{indexer:s,coinPrices:a}),[o,r,n,c]=await Promise.all([t.getLendings(void 0,e,{indexer:s,marketPools:i.pools,coinPrices:a}),t.getObligationAccounts(e,{indexer:s,market:i,coinPrices:a}),t.getBorrowIncentivePools(void 0,{marketPools:i.pools,coinPrices:a}),t.getVeScas({walletAddress:e,excludeEmpty:!0})]),d=Object.values(o).filter(p=>!!p&&p.availableWithdrawCoin>0).map(p=>({suppliedCoin:p.availableWithdrawCoin,suppliedValue:p.suppliedValue,stakedCoin:p.availableUnstakeCoin,coinName:p.coinName,symbol:p.symbol,coinType:p.coinType,coinPrice:p.coinPrice,coinDecimals:p.coinDecimal,supplyApr:p.supplyApr,supplyApy:p.supplyApy,incentiveApr:isFinite(p.rewardApr)?p.rewardApr:0})),l=Object.values(r).filter(p=>!!p&&(p.totalBorrowedValueWithWeight>0||p.totalDepositedValue>0)).map(p=>({obligationId:p.obligationId,totalDebtsInUsd:p.totalBorrowedValueWithWeight,totalCollateralInUsd:p.totalDepositedValue,riskLevel:p.totalRiskLevel,availableCollateralInUsd:p.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:p.totalUnhealthyCollateralValue,collaterals:Object.values(p.collaterals).filter(g=>!!g&&g.depositedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,depositedCoin:g.depositedCoin,depositedValueInUsd:g.depositedValue})),borrowedPools:Object.values(p.debts).filter(g=>!!g&&g.borrowedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,borrowedCoin:g.borrowedCoin,borrowedValueInUsd:g.borrowedValueWithWeight,borrowApr:i.pools[g.coinName]?.borrowApr,borrowApy:i.pools[g.coinName]?.borrowApy,incentiveInfos:Object.values(n[g.coinName]?.points??{}).filter(w=>!!w&&isFinite(w.rewardApr)).map(w=>({coinName:w.coinName,symbol:w.symbol,coinType:w.coinType,incentiveApr:w.rewardApr}))}))})),u="sui",m="SUI",b=Object.values(o).reduce((p,g)=>{if(g){if(g.availableClaimCoin===0)return p;p[u]?p[u].pendingRewardInCoin+=g.availableClaimCoin:p[u]={symbol:m,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:a[u]??0,pendingRewardInCoin:g.availableClaimCoin};}return p},{}),f=Object.values(r).filter(p=>!!p).reduce((p,g)=>(Object.values(g.borrowIncentives).forEach(w=>{w?.rewards.forEach(T=>{if(T.availableClaimCoin===0)return p;p[T.coinName]?p[T.coinName].pendingRewardInCoin+=T.availableClaimCoin:p[T.coinName]={symbol:T.symbol,coinType:T.coinType,coinPrice:T.coinPrice,pendingRewardInCoin:T.availableClaimCoin};});}),p),{}),y=c.map(({keyId:p,lockedScaCoin:g,currentVeScaBalance:w,unlockAt:T})=>({veScaKey:p,coinPrice:a.sca??0,lockedScaInCoin:g,lockedScaInUsd:g*(a.sca??0),currentVeScaBalance:w,remainingLockPeriodInDays:T-Date.now()>0?(T-Date.now())/864e5:0,unlockAt:T}));return {totalSupplyValue:d.reduce((p,g)=>(p+=g.suppliedValue,p),0),...l.reduce((p,g)=>(p.totalDebtValue+=g.totalDebtsInUsd,p.totalCollateralValue+=g.totalCollateralInUsd,p),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:y.reduce((p,g)=>(p+=g.lockedScaInUsd,p),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(b).reduce((p,[g,w])=>(p.push({...w,coinName:"sui",pendingRewardInUsd:w.coinPrice*w.pendingRewardInCoin}),p),[]),borrowIncentives:Object.entries(f).reduce((p,[g,w])=>(p.push({coinName:g,...w,pendingRewardInUsd:w.coinPrice*w.pendingRewardInCoin}),p),[])},veScas:y}};var tt=async({address:t},e,s)=>{let a=t.get(`core.coins.${e}.oracle.pyth.feedObject`);if(s=s||(await t.cache.queryGetObject(a))?.data,s){let i=s;if(i.content&&"fields"in i.content){let o=i.content.fields,r=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),n=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((n?-1:1)*r)*(d?-1:1)}}return 0},_e=async({constants:t},e)=>{let s=e.reduce((o,r)=>{let n=t.address.get(`core.coins.${r}.oracle.pyth.feedObject`);return n&&(o[n]?o[n].push(r):o[n]=[r]),o},{}),i=(await t.address.cache.queryGetObjects(Object.keys(s))).reduce((o,r)=>(s[r.objectId].forEach(n=>{o[n]=r;}),o),{});return (await Promise.all(Object.entries(i).map(async([o,r])=>({coinName:o,price:await tt(t,o,r)})))).reduce((o,r)=>(o[r.coinName]=r.price,o),{})},Jt=async(t,e,s,a=!1)=>{if(s=s??(a?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:s,indexer:a})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let i={};return t.constants.whitelist.scoin.forEach(o=>{let r=t.utils.parseCoinName(o);i[o]=h__default.default(s[r]??0).multipliedBy(e[r]?.conversionRate??1).toNumber();}),{...s,...i}};var Xt=async(t,e)=>{let s=t.get("referral.bindingTableId"),a=await t.cache.queryGetDynamicFieldObject({parentId:s,name:{type:"address",value:e}});return a?.data?.content?.dataType!=="moveObject"?null:a.data.content.fields.value};var Ht=async({utils:t},e)=>{let s=t.address.get("scoin.id"),a=[t.getSCoinTreasury(e)],i=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],o=`${s}::s_coin_converter::total_supply`,n=(await t.cache.queryInspectTxn({queryTarget:o,args:a,typeArgs:i}))?.results;if(n&&n[0]?.returnValues){let c=Uint8Array.from(n[0].returnValues[0][0]),d=n[0].returnValues[0][1];return oa__default.default(d==="u64","Result type is not u64"),h__default.default(bcs.bcs.u64().parse(c)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},Zt=async({utils:t},e=[...t.constants.whitelist.scoin],s)=>{let a=s||t.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await at({utils:t},o,a);i[o]=r;})),i},at=async({utils:t},e,s)=>{let a=s||t.suiKit.currentAddress(),i=t.parseSCoinType(e),o=await t.cache.queryGetCoinBalance({owner:a,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},ia=(t,e,s)=>{if(e===s)throw new Error("fromAsset and toAsset must be different");if(!t.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!t.constants.whitelist.scoin.has(s))throw new Error("toAsset is not supported")},es=async(t,e,s,a)=>{ia(t.utils,e,s);let i=t.utils.parseCoinName(e),o=t.utils.parseCoinName(s),r=await Promise.all([t.getMarketPool(i),t.getMarketPool(o)]);if(r.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(r.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let n=r[0].conversionRate,c=1/r[1].conversionRate,l=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[i]||!u[o])throw new Error("Failed to fetch the coin prices");if(u[o]===0)throw new Error("Price of toCoin cannot be zero");return u[i]/u[o]})();return h__default.default(n).multipliedBy(l).multipliedBy(c).toNumber()};var ts=async(t,e)=>{let s={spool:[],spoolReward:[],sCoinTreasury:[]},a=new Map;for(let l of e){let u=t.constants.poolAddresses[l],m={spool:u?.spool,spoolReward:u?.spoolReward,sCoinTreasury:u?.sCoinTreasury};Object.entries(m).forEach(([b,f])=>{f&&s[b].push(f);}),a.set(l,m);}let[i,o,r]=await Promise.all([E(t.cache,s.spool),E(t.cache,s.spoolReward),E(t.cache,s.sCoinTreasury)]),n=l=>new Map(l.map(u=>[u.objectId,u])),c={spool:n(i),spoolReward:n(o),sCoinTreasury:n(r)},d={};for(let[l,u]of a)d[l]={spool:u.spool?c.spool.get(u.spool):void 0,spoolReward:u.spoolReward?c.spoolReward.get(u.spoolReward):void 0,sCoinTreasury:u.sCoinTreasury?c.sCoinTreasury.get(u.sCoinTreasury):void 0};return d},ra=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let s=z(t),a=z(e);return {stakeType:s.stake_type,maxDistributedPoint:s.max_distributed_point,distributedPoint:s.distributed_point,distributedPointPerPeriod:s.distributed_point_per_period,pointDistributionTime:s.point_distribution_time,maxStake:s.max_stakes,stakes:s.stakes,index:s.index,createdAt:s.created_at,lastUpdate:s.last_update,...a}},ss=async(t,e=[...t.constants.whitelist.spool],s=!1,a,i)=>{let o=e.map(c=>t.utils.parseCoinName(c));if(a=a??(await t.getMarketPools(o,{indexer:s})).pools,i=i??await t.getAllCoinPrices({marketPools:a})??{},!a)throw new Error(`Fail to fetch marketPools for ${o}`);let r={};if(s){let c=await t.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=t.utils.parseCoinName(l.marketCoinName),m=t.utils.getSpoolRewardCoinName();l.coinPrice=i[u]??l.coinPrice,l.marketCoinPrice=i[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=i[m]??l.rewardCoinPrice,r[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),r}let n=await ts(t,o);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=o[d],u=await na(t,c,s,i,n[l]);u&&(r[c]=u);}catch(l){console.error(l);}})),r},na=async(t,e,s=!1,a,i)=>{let o=t.utils.parseCoinName(e);if(a=a||await t.getAllCoinPrices(),s){let p=await t.indexer.getSpool(e),g=t.utils.parseCoinName(e),w=t.utils.getSpoolRewardCoinName();return p.coinPrice=a?.[g]??p.coinPrice,p.marketCoinPrice=a?.[e]??p.marketCoinPrice,p.rewardCoinPrice=a?.[w]??p.rewardCoinPrice,p}i??=(await ts(t,[o]))[o];let r=t.utils.getSpoolRewardCoinName();a=a||await t.utils.getCoinPrices();let n=ra(i),c=ht(n),d=a?.[e]??0,l=t.utils.getCoinDecimal(e),u=wt(c,d,l),m=St(n),b=a?.[r]??0,f=t.utils.getCoinDecimal(r),y=Ct(c,m,u,b,f);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(o),marketCoinType:t.utils.parseMarketCoinType(o),rewardCoinType:t.utils.isMarketCoin(r)?t.utils.parseMarketCoinType(r):t.utils.parseCoinType(r),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(o),rewardCoinDecimal:t.utils.getCoinDecimal(r),coinPrice:a?.[o]??0,marketCoinPrice:d,rewardCoinPrice:b,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:m.exchangeRateNumerator,exchangeRateDenominator:m.exchangeRateDenominator,...y}},ge=async({utils:t},e)=>{let s=e||t.suiKit.currentAddress(),a=t.address.get("spool.object"),i=`${a}::spool_account::SpoolAccount`,o=[],r=!1,n=null;do{let u=await t.cache.queryGetOwnedObjects({owner:s,filter:{StructType:i},options:{showContent:!0,showType:!0},cursor:n,limit:10});u&&(o.push(...u.data),u.hasNextPage&&u.nextCursor?(r=!0,n=u.nextCursor):r=!1);}while(r);let c=[...t.constants.whitelist.spool].reduce((u,m)=>(u[m]=[],u),{}),d=Object.keys(c).reduce((u,m)=>{let b=t.parseCoinName(m),f=t.parseMarketCoinType(b);return u[m]=`${a}::spool_account::SpoolAccount<${f}>`,u},{}),l=Object.entries(d).reduce((u,[m,b])=>(u[b]=m,u),{});for(let u of o.map(m=>m.data)){let m=u?.objectId,b=u?.type;if(m&&u?.content&&"fields"in u.content){let f=u.content.fields,y=String(f.spool_id),p=String(f.stake_type.fields.name),g=Number(f.stakes),w=Number(f.index),T=Number(f.points),I=Number(f.total_points),K={sweth:c.sweth,ssui:c.ssui,swusdc:c.swusdc,swusdt:c.swusdt,scetus:c.scetus,safsui:c.safsui,shasui:c.shasui,svsui:c.svsui,susdc:c.susdc},C=utils.normalizeStructTag(b),R=K[l[C]];R&&R.push({id:m,type:C,stakePoolId:y,stakeType:utils.normalizeStructTag(p),staked:g,index:w,points:T,totalPoints:I});}}return c},ot=async({utils:t},e)=>{let s=t.address.get(`spool.pools.${e}.id`),a,i=await t.cache.queryGetObject(s);if(i?.data){let o=i.data,r=o.objectId,n=o.type;if(o.content&&"fields"in o.content){let c=o.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),m=Number(c.point_distribution_time),b=Number(c.max_stakes),f=String(c.stake_type.fields.name),y=Number(c.stakes),p=Number(c.index),g=Number(c.created_at),w=Number(c.last_update);a={id:r,type:utils.normalizeStructTag(n),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:m,maxStake:b,stakeType:utils.normalizeStructTag(f),totalStaked:y,index:p,createdAt:g,lastUpdate:w};}}return a},it=async({utils:t},e)=>{let s=t.address.get(`spool.pools.${e}.rewardPoolId`),a,i=await t.cache.queryGetObject(s);if(i?.data){let o=i.data,r=o.objectId,n=o.type;if(o.content&&"fields"in o.content){let c=o.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),m=Number(c.rewards),b=Number(c.claimed_rewards);a={id:r,type:utils.normalizeStructTag(n),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:m,claimedRewards:b};}}return a};var pa=async(t,e)=>{let s=e||t.suiKit.currentAddress(),i=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,o=[],r=!1,n=null;do{let d=await t.cache.queryGetOwnedObjects({owner:s,filter:{StructType:i},cursor:n,limit:10});d&&(o.push(...d.data),d&&d.hasNextPage&&d.nextCursor?(r=!0,n=d.nextCursor):r=!1);}while(r);return o.map(d=>d.data).filter(d=>!!d)},Be=async({utils:t},e,s)=>{let a=await pa(t,e),i=Array(a.length).fill(null),o=a.map(async(n,c)=>{let d=await he(t,n);d&&(i[c]=d);});await Promise.allSettled(o);let r=i.filter(Boolean).sort((n,c)=>c.currentVeScaBalance-n.currentVeScaBalance);return s?r.filter(n=>n.lockedScaAmount!=="0"):r},as=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),he=async(t,e)=>{let s=t.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=as.parse(e));let a,i=await t.cache.queryGetDynamicFieldObject({parentId:s,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!i)return;let o=i.data;if(o&&o.content&&o.content.dataType==="moveObject"&&"fields"in o.content){let r=o.content.fields.value.fields,n=Math.max(+r.unlock_at*1e3-Date.now(),0),c=String(r.locked_sca_amount),d=h__default.default(r.locked_sca_amount).shiftedBy(-9).toNumber(),l=d*(Math.floor(n/1e3)/126144e3);a={id:o.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:as.parse(i.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:h__default.default(r.unlock_at*1e3).toNumber()};}return a},ma=async(t,e)=>{let s=t.address.get("vesca.id"),a=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let i=new suiKit.SuiTxBlock,o=i.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}),r=`${s}::treasury::refresh`,n=[a,e,o],c=`${s}::treasury::total_ve_sca_amount`,d=[e,o],l=await Promise.all(n.map(async y=>typeof y=="string"?(await t.cache.queryGetObject(y))?.data:y)),u=await Promise.all(d.map(async y=>typeof y=="string"?(await t.cache.queryGetObject(y))?.data:y));i.moveCall(r,l),i.moveCall(c,u);let m=await i.txBlock.build({client:t.suiKit.client(),onlyTransactionKind:!0}),f=(await t.cache.queryClient.fetchQuery({queryKey:j.rpc.getTotalVeScaTreasuryAmount(n,d),queryFn:async()=>await t.suiKit.inspectTxn(m)})).results;if(f&&f[1]?.returnValues){let y=Uint8Array.from(f[1].returnValues[0][0]),p=f[1].returnValues[0][1];return oa__default.default(p==="u64","Result type is not u64"),bcs.bcs.u64().parse(y)}return "0"},os=async t=>{let e=t.address.get("vesca.treasury"),s=await t.cache.queryGetObject(e);if(!s||s.data?.content?.dataType!=="moveObject")return null;let a=s.data.content.fields,i=h__default.default(a.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),o=h__default.default(await ma(t,s.data)??0).shiftedBy(-9).toNumber(),r=i>0?o/i*4:0;return {totalLockedSca:i,totalVeSca:o,averageLockingPeriod:r,averageLockingPeriodUnit:"year"}};var ya=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"],Me=async t=>{for(let e of ya)try{return await t(new client.SuiClient({url:e}))}catch(s){if(s.status!==429)throw s;await new Promise(a=>setTimeout(a,500));}throw new Error("Failed to fetch data")},ga=async(t,e,s="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let a=null,i=!1,o={};do{let r=await t.getDynamicFields({parentId:s,limit:10,cursor:a});if(!r)break;let{data:n,hasNextPage:c,nextCursor:d}=r;n.forEach(l=>{let u=`0x${l.name.value.name}`;e.has(u)&&(o[u]=l.objectId);}),i=c,a=d;}while(i);return o},se=async(t,e,s,a=!0)=>{let i=(await Me(async o=>await o.getDynamicFieldObject({parentId:t,name:{type:e,value:s}}))).data;return a?i?.objectId:i?.content},is=async(t,e=[])=>{let s=new Set(e),a={},o=(await fetch(`https://sui.apis.scallop.io/addresses/${t}`).then(C=>C.json())).mainnet;if(!o)throw new Error("Failed to fetch addresses");let r=Object.keys(o.core.coins);if(r.length===0)throw new Error("Pools empty");let n=r.reduce((C,R)=>{if(s.size>0&&!s.has(R))return C;let N=o.core.coins[R];return N&&N.coinType&&C.push([R,N.coinType]),C},[]);if(n.length===0)throw new Error("No coinTypesPairs");let c=o.core.market,d=(await Me(async C=>await C.getObject({id:c,options:{showContent:!0}}))).data;if(!(d&&d.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let l=d.content.fields,u=l.vault.fields.balance_sheets.fields.table.fields.id.id,m=l.collateral_stats.fields.table.fields.id.id,b=l.borrow_dynamics.fields.table.fields.id.id,f=l.interest_models.fields.table.fields.id.id,y=l.risk_models.fields.table.fields.id.id,p="0x1::type_name::TypeName",g="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",w="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",T="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",I="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",K=await Me(async C=>await ga(C,new Set(n.map(([,R])=>R))));return await Promise.all(n.map(async([C,R])=>{let N=R.slice(2),D=await Promise.all([se(u,p,{name:N},!0),se(m,p,{name:N},!0),se(b,p,{name:N},!0),se(f,p,{name:N},!0),se(y,p,{name:N},!0),se(c,g,N,!0),se(c,w,N,!0),se(c,T,N,!0),se(c,I,N,!1)]),{symbol:re,metaData:$}=o.core.coins[C],k={spool:"",spoolReward:""},A=o.spool.pools[`s${C}`];if(A){let{id:M,rewardPoolId:G}=A;k={spool:M,spoolReward:G};}let P={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},O=`s${C}`,B=o.scoin.coins[O];if(B){let{coinType:M,treasury:G,metaData:te,symbol:ae}=B;P={sCoinType:M,sCoinTreasury:G,sCoinMetadataId:te,sCoinSymbol:ae};}let V={pythFeed:"",pythFeedObjectId:""};if(o.core.coins[C]?.oracle.pyth){let{feed:M,feedObject:G}=o.core.coins[C].oracle.pyth;V={pythFeed:M,pythFeedObjectId:G};}o.core.coins[C].oracle.pyth;let L=(await Me(async M=>await M.getCoinMetadata({coinType:R})))?.decimals??0,W=k?`s${C}`:void 0;a[C]={coinName:C,symbol:re,lendingPoolAddress:D[0]??"",collateralPoolAddress:D[1]??"",borrowDynamic:D[2]??"",interestModel:D[3]??"",riskModel:D[4],borrowFeeKey:D[5]??"",supplyLimitKey:D[6]??"",borrowLimitKey:D[7]??"",isolatedAssetKey:D[8]?.fields?.id.id??"",isIsolated:D[8]?.fields?.value??!1,...k,...P,sCoinName:O,coinMetadataId:$,coinType:R,spoolName:W,decimals:L,...V,flashloanFeeObject:K[R]??""},await new Promise(M=>setTimeout(M,1e3));})),a};var rs=async(t,e,s=t.address.get("core.oracles.switchboard.registryTableId"))=>{let a=[],i=e.map((n,c)=>{let d=t.utils.address.get(`core.coins.${n}.oracle.switchboard`);return d||(a.push({idx:c,coinName:n}),null)});if(a.length===0)return i;let r=a.map(n=>n.coinName).map(n=>{let c=t.utils.parseCoinType(n);if(!c)throw new Error(`Invalid coin name: ${n}`);return c});return await Promise.all(r.map(async(n,c)=>{let d={type:"0x1::type_name::TypeName",value:{name:n.slice(2)}},l=await t.cache.queryGetDynamicFieldObject({parentId:s,name:d});if(!l?.data?.content||l.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${n}`);let u=l.data.content;i[c]=u.fields.value;})),i};var ns=async t=>{let e=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[s,a]=await Promise.all([t.cache.queryGetDynamicFieldObject({parentId:t.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:e,value:{dummy_field:!1}}}),t.cache.queryGetDynamicFieldObject({parentId:t.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:e,value:{dummy_field:!1}}})]);return {primary:s,secondary:a}},rt=async(t,e)=>{if(e==="primary"&&!t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"))return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"))return console.error("Secondary price update policy vecset id is not set"),null;let s={[`${t.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${t.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${t.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},a={},i=null;do{let o=await t.cache.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:i,limit:10});if(!o)break;let{data:r,hasNextPage:n,nextCursor:c}=o;i=c;let d=r.map(u=>u.objectId);if((await t.cache.queryGetObjects(d)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let m=u.content.fields,b=m.name.fields.name,f=t.parseCoinNameFromType(`0x${b}`);if(!f)throw new Error(`Invalid asset name: ${f}`);a[f]||(a[f]=[]),m.value.fields.contents.forEach(p=>{a[f].push(s[`0x${p.fields.name}`]);});}),!n)break}while(i);return a};var Y=class{constructor(e,s){this.params=e;this.params=e,this._requestClient=Ms__default.default.create({headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),this.cache=s?.address?.cache??s?.cache??new F(this.params,{suiKit:U(this.params)}),this.address=s?.address??new Q(this.params,{cache:this.cache}),e.forcePoolAddressInterface&&(this._poolAddresses=e.forcePoolAddressInterface),e.forceWhitelistInterface&&(this._whitelist=e.forceWhitelistInterface);}_requestClient;address;cache;_poolAddresses={};_whitelist={lending:new Set,borrowing:new Set,collateral:new Set,packages:new Set,scoin:new Set,spool:new Set,borrowIncentiveRewards:new Set,rewardsAsPoint:new Set,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set};_coinDecimals={};_coinNameToOldMarketCoinTypeMap={};_scoinRawNameToSCoinNameMap={};_scoinTypeToSCoinNameMap={};_wormholeCoinTypeToCoinNameMap={};_voloCoinTypeToCoinNameMap={};_suiBridgeCoinTypeToCoinNameMap={};_coinTypes={};_sCoinTypes={};_coinTypeToCoinNameMap={};_supportedBorrowIncentiveRewards=new Set;get isAddressInitialized(){return !this.isEmptyObject(this.address.getAllAddresses())}get isInitialized(){let e=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"];return this.isAddressInitialized&&!this.isEmptyObject(this._poolAddresses)&&e.every(s=>this.whitelist[s]&&this.whitelist[s].size>0)}get queryClient(){return this.cache.queryClient}get poolAddresses(){return this._poolAddresses}get whitelist(){return this._whitelist}parseToOldMarketCoin(e){return `${this.protocolObjectId}::reserve::MarketCoin<${e}>`}get protocolObjectId(){return this.address.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get coinDecimals(){return this.isEmptyObject(this._coinDecimals)&&(this._coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([e,s])=>!!s).map(([e,s])=>[e,s.decimals]),...Object.entries(this.poolAddresses).filter(([e,s])=>!!s?.sCoinName).map(([e,s])=>[s.sCoinName,s.decimals])])),this._coinDecimals}get coinTypes(){return this.isEmptyObject(this._coinTypes)&&(this._coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([e,s])=>!!s).map(([e,s])=>[e,s?.coinType]),...Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([e,s])=>[s.sCoinName,s.sCoinType])])),this._coinTypes}get coinTypeToCoinNameMap(){return this.isEmptyObject(this._coinTypeToCoinNameMap)&&(this._coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([e,s])=>[s,e]))),this._coinTypeToCoinNameMap}get wormholeCoinTypeToCoinName(){return this.isEmptyObject(this._wormholeCoinTypeToCoinNameMap)&&(this._wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&this.whitelist.wormhole.has(e)).map(([e,s])=>[s.coinType,s.coinName]))),this._wormholeCoinTypeToCoinNameMap}get coinNameToOldMarketCoinTypeMap(){return this.isEmptyObject(this._coinNameToOldMarketCoinTypeMap)&&(this._coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s).map(([e,s])=>[s.coinName,this.parseToOldMarketCoin(s.coinType)]))),this._coinNameToOldMarketCoinTypeMap}get sCoinRawNameToScoinNameMap(){return this.isEmptyObject(this._scoinRawNameToSCoinNameMap)&&(this._scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([e,s])=>[suiKit.parseStructTag(s.sCoinType).name,s.sCoinName]))),this._scoinRawNameToSCoinNameMap}get sCoinTypeToSCoinNameMap(){return this.isEmptyObject(this._scoinTypeToSCoinNameMap)&&(this._scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([e,s])=>[s.sCoinType,s.sCoinName]))),this._scoinTypeToSCoinNameMap}get voloCoinTypeToCoinNameMap(){return this.isEmptyObject(this._voloCoinTypeToCoinNameMap)&&(this._voloCoinTypeToCoinNameMap={[this.poolAddresses.vsui.coinType]:"vsui"}),this._voloCoinTypeToCoinNameMap}get suiBridgeCoinTypeToCoinNameMap(){return this.isEmptyObject(this._suiBridgeCoinTypeToCoinNameMap)&&(this._suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&this.whitelist.suiBridge.has(s.coinName)).map(([e,s])=>[s.coinType,s.coinName]))),this._suiBridgeCoinTypeToCoinNameMap}get sCoinTypes(){return this.isEmptyObject(this._sCoinTypes)&&(this._sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([e,s])=>[s.sCoinName,s.sCoinType]))),this._sCoinTypes}get supportedBorrowIncentiveRewards(){return this._supportedBorrowIncentiveRewards.size||(this._supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(e=>!!e).map(e=>e.sCoinName?[e.coinName,e.sCoinName]:[e.coinName]).flat()])),this._supportedBorrowIncentiveRewards}isEmptyObject(e){return Object.keys(e).length===0}async readApi({url:e,queryKey:s}){let a=await this.queryClient.fetchQuery({queryKey:s,queryFn:async()=>await this._requestClient.get(e,{timeout:4e3})});if(a.status===200)return a.data;throw Error(`Error: ${a.status}; Failed to read ${e} ${a.statusText}`)}async readWhiteList(){let e=await this.readApi({url:this.params.whitelistApiUrl??"https://sui.apis.scallop.io/pool/whitelist",queryKey:j.api.getWhiteList()});return Object.fromEntries(Object.entries(e).filter(([s,a])=>Array.isArray(a)).map(([s,a])=>[s,new Set(a)]))}async readPoolAddresses(){return await this.readApi({url:this.params.poolAddressesApiUrl??"https://sui.apis.scallop.io/pool/addresses",queryKey:j.api.getPoolAddresses()})}async init(e){if(this.isAddressInitialized||await this.address.read(),e?.forcePoolAddressInterface&&(this._poolAddresses=e?.forcePoolAddressInterface),e?.forceWhitelistInterface&&(this._whitelist=e?.forceWhitelistInterface),this.isInitialized)return;let[s,a]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((i,o)=>{let r=o,n=s[r];return i[r]=n instanceof Set?n:Array.isArray(n)?new Set(n):new Set,i},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(a).filter(([i])=>Object.values(this.whitelist).some(o=>o.has(i))).map(([i,o])=>{let r=Object.fromEntries(Object.entries(o).map(([n,c])=>[n,typeof c=="boolean"?c??!1:c||void 0]));return [i,r]})));}};var cs={mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]},ee=class{params;suiKit;address;cache;constants;walletAddress;constructor(e,s){this.params={pythEndpoints:e.pythEndpoints??cs.mainnet,...e},this.walletAddress=e.walletAddress??s?.suiKit?.currentAddress()??"",this.suiKit=s?.suiKit??s?.constants?.cache.suiKit??U(e),this.cache=s?.constants?.cache??s?.cache??new F(this.params,{suiKit:this.suiKit}),this.address=s?.constants?.address??new Q(this.params,{cache:this.cache}),this.constants=s?.constants??new Y(this.params,{address:this.address});}get whitelist(){return this.constants.whitelist}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isMarketCoin(e){let s=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.whitelist.lending.has(s)}async init(e=!1){(e||!this.constants.isInitialized)&&await this.constants.init();}parseSymbol(e){return this.isMarketCoin(e)?this.constants.poolAddresses[this.parseCoinName(e)]?.sCoinSymbol??"":this.constants.poolAddresses[e]?.symbol??""}parseCoinType(e,s=!1){return s?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.whitelist.scoin.has(e))return e;{let s=`s${e}`;return this.whitelist.scoin.has(s)?s:void 0}}parseSCoinTypeNameToMarketCoinName(e){return this.constants.sCoinRawNameToScoinNameMap[e]??e}parseSCoinType(e){return this.constants.sCoinTypes[e]??""}parseSCoinNameFromType(e){return this.constants.sCoinTypeToSCoinNameMap[e]}parseUnderlyingSCoinType(e){let s=this.parseCoinName(e);return this.parseCoinType(s)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,!0)}parseCoinNameFromType(e){e=utils.normalizeStructTag(e);let{address:s,module:a,name:i,typeParams:o}=utils.parseStructTag(e);return s===this.constants.protocolObjectId&&a==="reserve"&&i==="MarketCoin"?this.parseMarketCoinName((typeof o[0]=="string"?utils.parseStructTag(o[0]):o[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.sCoinTypeToSCoinNameMap[e]||utils.parseStructTag(e).name.toLowerCase()}parseCoinName(e){return e.slice(1)}parseMarketCoinName(e){return `s${e}`}getSpoolRewardCoinName=()=>"sui";getCoinDecimal(e){return this.constants.coinDecimals[e]??0}getCoinWrappedType(e){if(this.isSuiBridgeAsset(e))return {from:"Sui Bridge",type:"Asset from Sui Bridge"};if(this.isWormholeAsset(e))return {from:"Wormhole",type:"Portal from Ethereum"}}async selectCoins(e,s=utils.SUI_TYPE_ARG,a){return a=a??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(a,e,s)}async mergeSimilarCoins(e,s,a,i=this.walletAddress){try{let o=await this.selectCoins(Number.MAX_SAFE_INTEGER,a,i);o.length>0&&e.mergeCoins(s,o.slice(0,500));}catch{}}async getObligationCoinNames(e){let s=await ve(this,e);if(!s)return;let a=s.collaterals.map(n=>`0x${n.type.name}`),i=s.debts.map(n=>`0x${n.type.name}`);return [...new Set([...a,...i])].map(n=>this.parseCoinNameFromType(n))}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let s={},a=this.params.pythEndpoints??cs.mainnet,i=new Set(e);for(let o of a){let r=Array.from(i.values()).reduce((d,l)=>{let u=this.address.get(`core.coins.${l}.oracle.pyth.feed`)??this.constants.poolAddresses[l]?.pythFeed;return d.push([l,u]),d},[]);if(r.length===0)break;let n=r.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(o,{timeout:4e3});try{let d=await this.cache.queryClient.fetchQuery({queryKey:j.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(n),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let m=r[u][0],b=Pt(l,this.constants);s[m]=b.price,i.delete(m);});}catch(d){console.error(d.message);}if(i.size===0)break}return i.size>0&&(s={...s,...await _e(this,Array.from(i.values()))},i.clear()),s}parseAprToApy(e,s=365){return (1+e/s)**s-1}parseApyToApr(e,s=365){return ((1+e)**(1/s)-1)*s}getUnlockAt(e,s){let a=Math.floor(new Date().getTime()/1e3),i=s?Math.max(Math.floor(s/1e3)-a,0):0,o=0;if(i===0){let r=(e??1)*86400;o=Math.min(a+r,a+126144e3);}else {let r=Math.min(e?e*86400+i:i,126144e3);o=a+r;}return Ot(o)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}};var ls=async(t,e,s)=>{let a=new pythSuiJs.SuiPythClient(t.suiKit.client(),t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState")),i=e.map(r=>t.address.get(`core.coins.${r}.oracle.pyth.feed`)),o=t.params.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let r of o)try{let c=await new pythSuiJs.SuiPriceServiceConnection(r).getPriceFeedsUpdateData(i);await a.updatePriceFeeds(s.txBlock,c,i);break}catch(n){console.warn(`Failed to update price feeds with endpoint ${r}: ${n}`);}};var we=async(t,e,s=[...t.constants.whitelist.lending],a={usePythPullModel:!0,useOnChainXOracleList:!0})=>{let i=t.params.usePythPullModel??a.usePythPullModel,r=t.params.useOnChainXOracleList??a.useOnChainXOracleList?await t.query.getAssetOracles():pt,n=new Set(Object.values(r).flatMap(({primary:l,secondary:u})=>[...l,...u])),c=(l,u)=>{let m=r[l];return m&&(m.primary.includes(u)||m.secondary.includes(u))};n.has("pyth")&&i&&s.filter(u=>c(u,"pyth")).length>0&&await ls(t,s,e);let d=[...new Set(s)];for(let l of d)Pa(t,e,l,r[l]);},Pa=(t,e,s,a)=>{let i=t.utils.parseCoinType(s);Oa(e,a,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${s}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${s}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),i);},Oa=(t,e,s,a,i,o,r,n,c,d,l,u,m,b,f)=>{let y=xa(t,s,a,f);return Object.entries(e).forEach(([p,g])=>{g.includes("pyth")&&_a(p,t,i,y,r,n,o,f),g.includes("supra")&&Ra(p,t,u,y,b,m,f),g.includes("switchboard")&&va(p,t,c,y,l,d,f);}),Ia(t,s,a,y,f),t},xa=(t,e,s,a)=>{let i=`${e}::x_oracle::price_update_request`,o=[a];return t.moveCall(i,[s],o)},Ia=(t,e,s,a,i)=>{let o=`${e}::x_oracle::confirm_price_update_request`,r=[i];return t.moveCall(o,[s,a,t.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],r),t},Ra=(t,e,s,a,i,o,r)=>{e.moveCall(`${s}::rule::set_price_as_${t}`,[a,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},va=(t,e,s,a,i,o,r)=>{e.moveCall(`${s}::rule::set_as_${t}_price`,[a,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},_a=(t,e,s,a,i,o,r,n)=>{e.moveCall(`${s}::rule::set_price_as_${t}`,[a,i,o,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[n]);};var Se=async(...t)=>{let[e,s,a,i]=t;if(t.length===3&&a)return {obligationId:a};if(t.length===4&&a&&i)return {obligationId:a,obligationKey:i};let o=x(s),r=await le(e,o);if(r.length===0)throw new Error(`No obligation found for sender ${o}`);return {obligationId:r[0].id,obligationKey:r[0].keyId}},Ba=({builder:t,txBlock:e})=>{let s={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")},i=`${t.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,o=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {openObligation:()=>{let[r,n,c]=t.moveCall(e,`${s.protocolPkg}::open_obligation::open_obligation`,[s.version]);return [r,n,c]},returnObligation:(r,n)=>{t.moveCall(e,`${s.protocolPkg}::open_obligation::return_obligation`,[s.version,r,n]);},openObligationEntry:()=>{t.moveCall(e,`${s.protocolPkg}::open_obligation::open_obligation_entry`,[s.version]);},addCollateral:(r,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${s.protocolPkg}::deposit_collateral::deposit_collateral`,[s.version,r,s.market,n],[d]);},takeCollateral:(r,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${s.protocolPkg}::withdraw_collateral::withdraw_collateral`,[s.version,r,n,s.market,s.coinDecimalsRegistry,e.pure.u64(c),s.xOracle,o],[l])},deposit:(r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.protocolPkg}::mint::mint`,[s.version,s.market,r,o],[c])},depositEntry:(r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.protocolPkg}::mint::mint_entry`,[s.version,s.market,r,o],[c])},withdraw:(r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.protocolPkg}::redeem::redeem`,[s.version,s.market,r,o],[c])},withdrawEntry:(r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.protocolPkg}::redeem::redeem_entry`,[s.version,s.market,r,o],[c])},borrow:(r,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${s.protocolPkg}::borrow::borrow`,[s.version,r,n,s.market,s.coinDecimalsRegistry,c,s.xOracle,o],[l])},borrowWithReferral:(r,n,c,d,l)=>{let u=t.utils.parseCoinType(l);return t.moveCall(e,`${s.protocolPkg}::borrow::borrow_with_referral`,[s.version,r,n,s.market,s.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,s.xOracle,o],[u,i])},borrowEntry:(r,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${s.protocolPkg}::borrow::borrow_entry`,[s.version,r,n,s.market,s.coinDecimalsRegistry,e.pure.u64(c),s.xOracle,o],[l])},repay:(r,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${s.protocolPkg}::repay::repay`,[s.version,r,s.market,n,o],[d]);},borrowFlashLoan:(r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.protocolPkg}::flash_loan::borrow_flash_loan`,[s.version,s.market,r],[c])},repayFlashLoan:(r,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${s.protocolPkg}::flash_loan::repay_flash_loan`,[s.version,s.market,r,n],[d]);}}},Ma=({builder:t,txBlock:e})=>({addCollateralQuick:async(s,a,i)=>{let o=x(e),{obligationId:r}=await Se(t,e,i);if(a==="sui"){let[n]=e.splitSUIFromGas([s]);e.addCollateral(r,n,a);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,a,s,o);e.addCollateral(r,c,a),e.transferObjects([n],o);}},takeCollateralQuick:async(s,a,i,o)=>{let r=await Se(t,e,i,o),n=await t.utils.getObligationCoinNames(r.obligationId);return await we(t,e,n),e.takeCollateral(r.obligationId,r.obligationKey,s,a)},depositQuick:async(s,a,i=!0)=>{let o=x(e),r;if(a==="sui"){let[n]=e.splitSUIFromGas([s]);r=e.deposit(n,a);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,a,s,o);e.transferObjects([n],o),r=e.deposit(c,a);}return i?e.mintSCoin(t.utils.parseMarketCoinName(a),r):r},withdrawQuick:async(s,a)=>{let i=x(e),o=t.utils.parseSCoinName(a);if(!o)throw new Error(`No sCoin for ${a}`);let{sCoin:r,marketCoin:n}=await t.selectSCoinOrMarketCoin(e,o,s,i);if(r){let c=e.burnSCoin(o,r);n?e.mergeCoins(n,[c]):n=c;}if(!n)throw new Error(`No market coin for ${a}`);return e.withdraw(n,a)},borrowQuick:async(s,a,i,o)=>{let r=await Se(t,e,i,o),c=[...await t.utils.getObligationCoinNames(r.obligationId)??[],a];return await we(t,e,c),e.borrow(r.obligationId,r.obligationKey,s,a)},borrowWithReferralQuick:async(s,a,i,o,r)=>{let n=await Se(t,e,o,r),d=[...await t.utils.getObligationCoinNames(n.obligationId)??[],a];return await we(t,e,d),e.borrowWithReferral(n.obligationId,n.obligationKey,i,s,a)},repayQuick:async(s,a,i)=>{let o=x(e),r=await Se(t,e,i);if(a==="sui"){let[n]=e.splitSUIFromGas([s]);return e.repay(r.obligationId,n,a)}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,a,s,o);return e.transferObjects([n],o),e.repay(r.obligationId,c,a)}},updateAssetPricesQuick:async s=>await we(t,e,s)}),us=(t,e)=>{let s=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=Ba({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=Ma({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var ms=async(...t)=>{let[e,s,a,i]=t;if(t.length===4&&i)return [i];let o=x(s),r=await ge(e,o);if(r[a].length===0)throw new Error(`No stake account id found for sender ${o}`);return r[a].map(n=>n.id)},Ka=async(...t)=>{let[e,s,a,i]=t,o=x(s),r=await ge(e,o);if(r[a].length===0)throw new Error(`No stake account found for sender ${o}`);return i?r[a].filter(c=>c.id===i):r[a]},bs=async(t,e,s,a,i,o,r=!1)=>{try{let{takeCoin:n,leftCoin:c,totalAmount:d}=r?await t.selectSCoin(e,a,i,o):await t.selectMarketCoin(e,a,i,o);if(r){let l=e.burnSCoin(a,n);e.stake(s,l,a);}else e.stake(s,n,a);return e.transferObjects([c],o),d}catch{return 0}},La=({builder:t,txBlock:e})=>{let s={spoolPkg:t.address.get("spool.id")},a=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {createStakeAccount:i=>{let o=t.utils.parseMarketCoinType(i),r=t.address.get(`spool.pools.${i}.id`);return t.moveCall(e,`${s.spoolPkg}::user::new_spool_account`,[r,a],[o])},stake:(i,o,r)=>{let n=t.utils.parseMarketCoinType(r),c=t.address.get(`spool.pools.${r}.id`);t.moveCall(e,`${s.spoolPkg}::user::stake`,[c,i,o,a],[n]);},unstake:(i,o,r)=>{let n=t.utils.parseMarketCoinType(r),c=t.address.get(`spool.pools.${r}.id`);return t.moveCall(e,`${s.spoolPkg}::user::unstake`,[c,i,o,a],[n])},claim:(i,o)=>{let r=t.address.get(`spool.pools.${o}.id`),n=t.address.get(`spool.pools.${o}.rewardPoolId`),c=t.utils.parseMarketCoinType(o),d=t.utils.getSpoolRewardCoinName(),l=t.utils.parseCoinType(d);return t.moveCall(e,`${s.spoolPkg}::user::redeem_rewards`,[r,n,i,a],[c,l])}}},Ea=({builder:t,txBlock:e})=>({stakeQuick:async(s,a,i)=>{let o=x(e),r=await ms(t,e,a,i);if(r.length===0)throw new Error(`No stakeAccountIds found for user ${o}`);if(typeof s=="number"){let n=await bs(t,e,r[0],a,s,o);s-=n,s>0&&await bs(t,e,r[0],a,s,o,!0);}else e.stake(r[0],s,a);},unstakeQuick:async(s,a,i,o=!0)=>{let r=await Ka(t,e,a,i),n=[];for(let c of r){if(c.staked===0)continue;let d=Math.min(s,c.staked),l=await e.unstake(c.id,d,a);if(o){let u=await e.mintSCoin(a,l);n.push(u);}else n.push(l);if(s-=d,s<=0)break}if(n.length>0){let c=n[0];return n.length>1&&e.mergeCoins(c,n.slice(1)),c}},claimQuick:async(s,a)=>{let i=await ms(t,e,s,a),o=[];for(let r of i){let n=await e.claim(r,s);o.push(n);}return o}}),fs=(t,e)=>{let s=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=La({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=Ea({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Fe=async(...t)=>{let[e,s,a,i]=t;if(t.length===4&&a&&i&&typeof a=="string"){let c=await Xe(e.cache,a);return {obligationId:a,obligationKey:i,obligationLocked:c}}let o=x(s),r=await le(e,o);if(r.length===0)throw new Error(`No obligation found for sender ${o}`);let n=r.find(c=>c.id===a||c.keyId===i)??r[0];return {obligationId:n.id,obligationKey:n.keyId,obligationLocked:n.locked}},Qa=({builder:t,txBlock:e})=>{let s={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),config:t.address.get("borrowIncentive.config"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore")},a={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {stakeObligation:(o,r)=>{t.moveCall(e,`${s.borrowIncentivePkg}::user::stake`,[s.config,s.incentivePools,s.incentiveAccounts,r,o,s.obligationAccessStore,i]);},stakeObligationWithVesca:(o,r,n)=>{t.moveCall(e,`${s.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[s.config,s.incentivePools,s.incentiveAccounts,r,o,s.obligationAccessStore,a.config,a.treasury,a.table,n,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),i],[]);},unstakeObligation:(o,r)=>{t.moveCall(e,`${s.borrowIncentivePkg}::user::unstake_v2`,[s.config,s.incentivePools,s.incentiveAccounts,r,o,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),i]);},claimBorrowIncentive:(o,r,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${s.borrowIncentivePkg}::user::redeem_rewards`,[s.config,s.incentivePools,s.incentiveAccounts,r,o,i],[c])},deactivateBoost:(o,r)=>{t.moveCall(e,`${s.borrowIncentivePkg}::user::deactivate_boost_v2`,[s.config,s.incentivePools,s.incentiveAccounts,o,r,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),i]);}}},qa=({builder:t,txBlock:e})=>({stakeObligationQuick:async(s,a)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await Fe(t,e,s,a),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${Ee}::user::unstake`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!r||n)&&e.stakeObligation(i,o);},stakeObligationWithVeScaQuick:async(s,a,i)=>{let{obligationId:o,obligationKey:r,obligationLocked:n}=await Fe(t,e,s,a),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Ee}::user::unstake`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!n||c){let l=await t.query.getBindedVeScaKey(o)??i;l?e.stakeObligationWithVesca(o,r,l):e.stakeObligation(o,r);}},unstakeObligationQuick:async(s,a)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await Fe(t,e,s,a);r&&e.unstakeObligation(i,o);},claimBorrowIncentiveQuick:async(s,a,i)=>{let{obligationId:o,obligationKey:r}=await Fe(t,e,a,i);return e.claimBorrowIncentive(o,r,s)}}),gs=(t,e)=>{let s=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=Qa({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=qa({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Ce=async(...t)=>{let[e,s,a]=t;if(t.length===3&&a&&typeof a=="string"){let r=await he(e.utils,a);return r||void 0}let i=x(s),o=await Be(e,i);if(o.length!==0)return a?o.find(({keyId:r})=>a===r):o[0]},ct=async(...t)=>{let[e,s,a]=t;try{return !!(await e.cache.queryGetDynamicFieldObject({parentId:a,name:{type:"0x2::object::ID",value:s}}))?.data}catch(i){return console.error(i),!1}},Wa=({builder:t,txBlock:e})=>{let s={id:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config"),subsTable:t.address.get("vesca.subsTable")},a=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {lockSca:(i,o)=>t.moveCall(e,`${s.id}::ve_sca::mint_ve_sca_key`,[s.config,s.table,s.treasury,i,o,a],[]),extendLockPeriod:(i,o)=>{t.moveCall(e,`${s.id}::ve_sca::extend_lock_period`,[s.config,i,s.table,s.treasury,o,a],[]);},extendLockAmount:(i,o)=>{t.moveCall(e,`${s.id}::ve_sca::lock_more_sca`,[s.config,i,s.table,s.treasury,o,a],[]);},renewExpiredVeSca:(i,o,r)=>{t.moveCall(e,`${s.id}::ve_sca::renew_expired_ve_sca`,[s.config,i,s.table,s.treasury,o,r,a],[]);},redeemSca:i=>t.moveCall(e,`${s.id}::ve_sca::redeem`,[s.config,i,s.table,s.treasury,a],[]),mintEmptyVeSca:()=>t.moveCall(e,`${s.id}::ve_sca::mint_ve_sca_placeholder_key`,[s.config,s.table],[]),splitVeSca:(i,o)=>t.moveCall(e,`${s.id}::ve_sca::split`,[s.config,i,s.table,s.subsTable,e.pure.u64(o)]),mergeVeSca:(i,o)=>t.moveCall(e,`${s.id}::ve_sca::merge`,[s.config,i,o,s.table,s.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],[])}},Ga=({builder:t,txBlock:e})=>({lockScaQuick:async(s,a,i=!0)=>{let o=x(e),r=await Ce(t,e),n,c=[];if(s!==void 0&&typeof s=="number"){let m=await t.utils.selectCoins(s,ke,o),[b,f]=e.takeAmountFromCoins(m,s);n=b,c.push(f);}else n=s;let d=t.utils.getUnlockAt(a,r?.unlockAt);i&&ft(s,a,d,r?.unlockAt);let l=!r?.unlockAt,u=!l&&r.unlockAt*1e3<=new Date().getTime();if(l||u){if(n)if(l){let m=e.lockSca(n,d);c.push(m);}else {if(r.lockedScaCoin!==0){let m=e.redeemSca(r.keyId);c.push(m);}e.renewExpiredVeSca(r.keyId,n,d);}}else n&&a?(e.extendLockPeriod(r.keyId,d),e.extendLockAmount(r.keyId,n)):a?e.extendLockPeriod(r.keyId,d):n&&e.extendLockAmount(r.keyId,n);c.length>0&&e.transferObjects(c,o);},extendLockPeriodQuick:async(s,a,i=!0)=>{let o=await Ce(t,e,a),r=t.utils.getUnlockAt(s,o?.unlockAt);i&&Ge(s,r,o?.unlockAt),o&&e.extendLockPeriod(o.keyId,r);},extendLockAmountQuick:async(s,a,i=!0)=>{let o=x(e),r=await Ce(t,e,a);if(i&&yt(s,r?.unlockAt),r){let n=await t.utils.selectCoins(s,ke,o),[c,d]=e.takeAmountFromCoins(n,s);e.extendLockAmount(r.keyId,c),e.transferObjects([d],o);}},renewExpiredVeScaQuick:async(s,a,i,o=!0)=>{let r=x(e),n=await Ce(t,e,i),c=t.utils.getUnlockAt(a,n?.unlockAt);if(o&>(s,a,n?.unlockAt),n){let d=[];if(n.lockedScaCoin!==0){let b=e.redeemSca(n.keyId);d.push(b);}let l=await t.utils.selectCoins(s,ke,r),[u,m]=e.takeAmountFromCoins(l,s);d.push(m),e.renewExpiredVeSca(n.keyId,u,c),e.transferObjects(d,r);}},redeemScaQuick:async(s,a=!0)=>{let i=x(e),o=await Ce(t,e,s);if(me(o?.unlockAt),o){let r=e.redeemSca(o.keyId);if(a){e.transferObjects([r],i);return}return r}},splitVeScaQuick:async(s,a,i=!0)=>{let o=await ct(t,a,t.address.get("vesca.subsTable")),r=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(o&&!r)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let n=e.splitVeSca(a,s);if(i){e.transferObjects([n],x(e));return}else return n},mergeVeScaQuick:async(s,a)=>{let[i,o]=await Promise.all([ct(t,s,t.address.get("vesca.subsTableId")),ct(t,a,t.address.get("vesca.subsTableId"))]),r=!!e.txBlock.blockData.transactions.find(n=>n.kind==="MoveCall"&&n.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((i||o)&&!r)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");return e.mergeVeSca(s,a)}}),Ss=(t,e)=>{let s=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=Wa({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=Ga({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Ja=({builder:t,txBlock:e})=>{let s={referralPgkId:t.address.get("referral.id"),referralBindings:t.address.get("referral.referralBindings"),referralRevenuePool:t.address.get("referral.referralRevenuePool"),authorizedWitnessList:t.address.get("referral.authorizedWitnessList"),referralTiers:t.address.get("referral.referralTiers"),version:t.address.get("referral.version")},a=t.address.get("vesca.table"),i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {bindToReferral:o=>{t.moveCall(e,`${s.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[s.referralBindings,e.pure.id(o),a,i],[]);},claimReferralTicket:o=>{let r=t.utils.parseCoinType(o);return t.moveCall(e,`${s.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[s.version,a,s.referralBindings,s.authorizedWitnessList,s.referralTiers,i],[r])},burnReferralTicket:(o,r)=>{let n=t.utils.parseCoinType(r);t.moveCall(e,`${s.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[s.version,o,s.referralRevenuePool,i],[n]);},claimReferralRevenue:(o,r)=>{let n=t.utils.parseCoinType(r);return t.moveCall(e,`${s.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[s.version,s.referralRevenuePool,o,i],[n])}}},Xa=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(s,a=[...t.constants.whitelist.lending])=>{let i=x(e),o=[];for(let r of a)if(r==="sui"){let n=await e.claimReferralRevenue(s,r);o.push(n);}else {let n=await e.claimReferralRevenue(s,r);try{let c=await t.suiKit.suiInteractor.selectCoins(i,1/0,t.utils.parseCoinType(r));e.mergeCoins(n,c.slice(0,500));}catch{}finally{o.push(n);}}o.length>0&&e.transferObjects(o,i);}}),Ts=(t,e)=>{let s=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=Ja({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=Xa({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Za=({builder:t,txBlock:e})=>{let s={loyaltyProgramPkgId:t.address.get("loyaltyProgram.id"),rewardPool:t.address.get("loyaltyProgram.rewardPool"),userRewardTableId:t.address.get("loyaltyProgram.userRewardTableId")};return {claimLoyaltyRevenue:a=>t.moveCall(e,`${s.loyaltyProgramPkgId}::reward_pool::redeem_reward`,[s.rewardPool,a])}},eo=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async s=>{s=s??(await t.query.getVeScas())[0]?.keyObject;let a=x(e);if(!s)throw new Error(`No veScaKey found for user ${a}`);let i=e.claimLoyaltyRevenue(s),o=t.constants.coinTypes.sca;if(!o)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,i,o,x(e)),e.transferObjects([i],a);}}),As=(t,e)=>{let s=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=Za({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=eo({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var so=({builder:t,txBlock:e})=>{let s={pkgId:t.address.get("scoin.id")};return {mintSCoin:(a,i)=>{let o=t.utils.parseSCoinType(a);if(!o)throw new Error(`Invalid marketCoinName name: ${a}`);return t.moveCall(e,`${s.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(a),i],[o,t.utils.parseUnderlyingSCoinType(a)])},burnSCoin:(a,i)=>{let o=t.utils.parseSCoinType(a);if(!o)throw new Error(`Invalid sCoin name: ${a}`);return t.moveCall(e,`${s.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(a),i],[o,t.utils.parseUnderlyingSCoinType(a)])}}},ao=({builder:t,txBlock:e})=>({mintSCoinQuick:async(s,a)=>{let i=x(e),{leftCoin:o,takeCoin:r}=await t.selectMarketCoin(e,s,a,i);return e.transferObjects([o],i),e.mintSCoin(s,r)},burnSCoinQuick:async(s,a)=>{let i=x(e),{leftCoin:o,takeCoin:r}=await t.selectSCoin(e,s,a,i);return e.transferObjects([o],i),e.burnSCoin(s,r)}}),Os=(t,e)=>{let s=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,a=so({builder:t,txBlock:s}),i=new Proxy(s,{get:(r,n)=>n in a?Reflect.get(a,n):Reflect.get(r,n)}),o=ao({builder:t,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var xs=(t,e)=>{let s=Ss(t,e),a=As(t,s),i=gs(t,a),o=Ts(t,i),r=Os(t,o),n=fs(t,r),c=us(t,n);return new Proxy(c,{get:(d,l)=>l in s?Reflect.get(s,l):l in i?Reflect.get(i,l):l in o?Reflect.get(o,l):l in n?Reflect.get(n,l):l in a?Reflect.get(a,l):l in r?Reflect.get(r,l):Reflect.get(d,l)})};var de=class{cache;params;_requestClient;constructor(e,s){this.params=e,this.cache=s?.cache??new F(this.params),this._requestClient=Ms__default.default.create({baseURL:e.indexerApiUrl??ut,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:3e4});}async getMarket(){let e=await this.cache.queryClient.fetchQuery({queryKey:j.api.getMarket(),queryFn:async()=>await this._requestClient.get("/api/market/migrate")});if(e.status===200)return {pools:e.data.pools.reduce((s,a)=>(s[a.coinName]=a,s),{}),collaterals:e.data.collaterals.reduce((s,a)=>(s[a.coinName]=a,s),{})};throw Error("Failed to getMarket.")}async getMarketPools(){return (await this.getMarket()).pools}async getMarketPool(e){return (await this.getMarketPools())[e]}async getMarketCollaterals(){return (await this.getMarket()).collaterals}async getMarketCollateral(e){return (await this.getMarketCollaterals())[e]}async getSpools(){let e=await this.cache.queryClient.fetchQuery({queryKey:j.api.getSpools(),queryFn:async()=>await this._requestClient.get("/api/spools/migrate")});if(e.status===200)return e.data.spools.reduce((s,a)=>(s[a.marketCoinName]=a,s),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.cache.queryClient.fetchQuery({queryKey:j.api.getBorrowIncentivePool(),queryFn:async()=>await this._requestClient.get("/api/borrowIncentivePools/migrate")});if(e.status===200)return e.data.borrowIncentivePools.reduce((s,a)=>(Array.isArray(a.points)&&(a.points=a.points.reduce((i,o)=>(i[o.coinName]=o,i),{})),s[a.coinName]=a,s),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.cache.queryClient.fetchQuery({queryKey:j.api.getTotalValueLocked(),queryFn:async()=>await this._requestClient.get("/api/market/tvl")});if(e.status===200)return e.data;throw Error("Failed to getTotalValueLocked.")}async getCoinPrice(e){return (await this.getMarketPool(e))?.coinPrice??0}async getCoinPrices(){let e=await this.getMarketPools();return Object.entries(e).reduce((s,[a,i])=>(i&&(s[a]=i.coinPrice),s),{})}};var ie=class{params;suiKit;address;utils;constants;indexer;cache;walletAddress;constructor(e,s){this.params=e,this.suiKit=s?.suiKit??s?.utils?.suiKit??U(e),this.walletAddress=utils.normalizeSuiAddress(e.walletAddress??this.suiKit.currentAddress()),this.cache=s?.utils?.cache??s?.cache??new F(this.params,{suiKit:this.suiKit}),this.address=s?.utils?.address??new Q(this.params,{cache:this.cache}),this.constants=s?.utils?.constants??new Y(this.params,{address:this.address}),this.utils=s?.utils??new ee(this.params,{constants:this.constants}),this.indexer=s?.indexer??new de(this.params,{cache:this.cache}),this.queryMarket=q.call(this,this.queryMarket),this.getMarketPools=q.call(this,this.getMarketPools),this.getMarketPool=q.call(this,this.getMarketPool),this.getMarketCollaterals=q.call(this,this.getMarketCollaterals),this.getMarketCollateral=q.call(this,this.getMarketCollateral),this.getSpools=q.call(this,this.getSpools),this.getSpool=q.call(this,this.getSpool),this.getBorrowIncentivePools=q.call(this,this.getBorrowIncentivePools),this.getLendings=q.call(this,this.getLendings),this.getLending=q.call(this,this.getLending),this.getObligationAccounts=q.call(this,this.getObligationAccounts),this.getObligationAccount=q.call(this,this.getObligationAccount),this.getTvl=q.call(this,this.getTvl);}async init(e=!1){(e||!this.constants.isInitialized)&&await this.constants.init(),await this.utils.init(e);}async queryMarket(e){return await Ft(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],s){return await Lt(this,e,s?.indexer,s?.coinPrices)}async getMarketPool(e,s){return (await this.getMarketPools(void 0,s)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],s){return await Et(this,e,s?.indexer)}async getMarketCollateral(e,s){return await Je(this,e,s?.indexer)}async getObligations(e=this.walletAddress){return await le(this,e)}async queryObligation(e){return ve(this,e)}async getCoinAmounts(e,s=this.walletAddress){return await Vt(this,e,s)}async getCoinAmount(e,s=this.walletAddress){return await He(this,e,s)}async getMarketCoinAmounts(e,s=this.walletAddress){return await Ut(this,e,s)}async getMarketCoinAmount(e,s=this.walletAddress){return await Ze(this,e,s)}async getPriceFromPyth(e){return await tt(this,e)}async getPricesFromPyth(e){return await _e(this,e)}async getSpools(e,s){return await ss(this,e,s?.indexer,s?.marketPools,s?.coinPrices)}async getSpool(e,s){return (await this.getSpools(void 0,s))[e]}async getAllStakeAccounts(e=this.walletAddress){return await ge(this,e)}async getStakeAccounts(e,s=this.walletAddress){return (await this.getAllStakeAccounts(s))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let s={};for(let a of e){let i=await ot(this,a);i&&(s[a]=i);}return s}async getStakePool(e){return await ot(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let s={};return await Promise.allSettled(e.map(async a=>{let i=await it(this,a);i&&(s[a]=i);})),s}async getStakeRewardPool(e){return await it(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],s){return await It(this,e,s?.indexer,s?.marketPools,s?.coinPrices)}async getBorrowIncentiveAccounts(e,s){return await Rt(this,e,s)}async getLendings(e,s=this.walletAddress,a){return await Wt(this,e,s,a?.marketPools,a?.coinPrices,a?.indexer)}async getLending(e,s=this.walletAddress,a){return await et(this,e,s,a?.indexer)}async getObligationAccounts(e=this.walletAddress,s){return await Gt(this,e,s?.market,s?.coinPrices,s?.indexer)}async getObligationAccount(e,s=this.walletAddress,a){let i=await this.getObligationAccounts(s,a);return Object.values(i).find(o=>o?.obligationId===e)}async getTvl(e){return await zt(this,e?.indexer)}async getVeSca(e){return await he(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:s=!1}={}){return await Be(this,e,s)}async getVeScaTreasuryInfo(){return await os(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await Xt(this.address,e)}async getBindedObligationId(e){return await vt(this,e)}async getBindedVeScaKey(e){return await _t(this,e)}async getLoyaltyProgramInfos(e){return await $t(this,e)}async getSCoinTotalSupply(e){return await Ht(this,e)}async getSCoinAmounts(e,s=this.walletAddress){return await Zt(this,e,s)}async getSCoinAmount(e,s=this.walletAddress){let a=this.utils.parseSCoinName(e);return a?await at(this,a,s):0}async getSCoinSwapRate(e,s){return await es(this,e,s)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await Qt(this,e)}async getPoolSupplyLimit(e){return await Ie(this.utils,e)}async getPoolBorrowLimit(e){return await Re(this.utils,e)}async getIsolatedAssets(){return await Nt(this)}async isIsolatedAsset(e){return ce(this.utils,e)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return Jt(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return is(e)}async getUserPortfolio(e){return Yt(this,e?.walletAddress??this.walletAddress,e?.indexer??!1)}async getPriceUpdatePolicies(){return await ns(this.address)}async getAssetOracles(){let[e,s]=await Promise.all([rt(this.utils,"primary"),rt(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((a,i)=>(a[i]={primary:e?.[i]??[],secondary:s?.[i]??[]},a),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await rs(this,e)}};var ue=class{params;isTestnet;suiKit;address;constants;query;utils;walletAddress;cache;constructor(e,s){this.suiKit=s?.suiKit??U(e),this.params=e,this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=s?.query?.cache??new F(this.params,{suiKit:this.suiKit}),this.address=s?.query?.address??new Q(this.params,{cache:this.cache}),this.constants=s?.query?.constants??new Y(this.params,{address:this.address}),this.utils=s?.query?.utils??new ee(this.params,{constants:this.constants}),this.query=s?.query??new ie(this.params,{utils:this.utils}),this.isTestnet=e.networkType?e.networkType==="testnet":!1;}async init(e=!1){(e||!this.constants.isInitialized)&&await this.constants.init(),await this.query.init(e);}createTxBlock(e){return xs(this,e)}async selectCoin(e,s,a,i=this.walletAddress){if(s==="sui"){let[o]=e.splitSUIFromGas([a]);return {takeCoin:o}}else {let o=this.utils.parseCoinType(s),r=await this.utils.selectCoins(a,o,i),[n,c]=e.takeAmountFromCoins(r,a);return {takeCoin:n,leftCoin:c}}}async selectMarketCoin(e,s,a,i=this.walletAddress){let o=this.utils.parseMarketCoinType(s),r=await this.utils.selectCoins(a,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(a,n));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoin(e,s,a,i=this.walletAddress){let o=this.utils.parseSCoinType(s),r=await this.utils.selectCoins(a,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(n,a));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoinOrMarketCoin(e,s,a,i=this.walletAddress){let o=a,r={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:d,takeCoin:l,totalAmount:u}=await this.selectSCoin(e,s,o,i);if(r.leftCoins.push(d),r.sCoins.push(l),o-=u,o>0){let{leftCoin:m,takeCoin:b}=await this.selectMarketCoin(e,s,a,i);e.transferObjects([m],i),r.marketCoins.push(b);}}catch{let{takeCoin:l,leftCoin:u}=await this.selectMarketCoin(e,s,a,i);r.leftCoins.push(u),r.marketCoins.push(l);}e.transferObjects(r.leftCoins,i);let n=r.marketCoins.length>0?r.marketCoins.length>1?e.mergeCoins(r.marketCoins[0],r.marketCoins.slice(1)):r.marketCoins[0]:void 0;return {sCoin:r.sCoins.length>0?r.sCoins.length>1?e.mergeCoins(r.sCoins[0],r.sCoins.slice(1)):r.sCoins[0]:void 0,marketCoin:n}}async signAndSendTxBlock(e){return await this.suiKit.signAndSendTxn(e)}moveCall(e,s,a,i){return e.moveCall(s,a,i)}};var Ke=class{params;suiKit;address;constants;builder;query;utils;cache;walletAddress;constructor(e,s){this.params=e,this.suiKit=s?.suiKit??s?.builder?.suiKit??U(e),this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=s?.builder?.cache??s?.cache??new F(this.params,{suiKit:this.suiKit}),this.address=s?.builder?.address??new Q(this.params,{cache:this.cache}),this.constants=s?.builder?.constants??new Y(this.params,{address:this.address}),this.utils=s?.builder?.utils??new ee(this.params,{constants:this.constants}),this.query=s?.builder?.query??new ie(this.params,{utils:this.utils}),this.builder=s?.builder??new ue(this.params,{query:this.query});}async init(e=!1){(e||!this.constants.isInitialized)&&await this.constants.init(),await this.builder.init(e),await this.query.init(e),await this.utils.init(e);}async queryMarket(){return await this.query.queryMarket()}async getObligations(e){let s=e??this.walletAddress;return await this.query.getObligations(s)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let s=e??this.walletAddress;return await this.query.getAllStakeAccounts(s)}async getStakeAccounts(e,s){let a=s??this.walletAddress;return await this.query.getStakeAccounts(e,a)}async getStakePool(e){return await this.query.getStakePool(e)}async getStakeRewardPool(e){return await this.query.getStakeRewardPool(e)}async openObligation(e=!0){let s=this.builder.createTxBlock();return s.openObligationEntry(),e?await this.suiKit.signAndSendTxn(s):s.txBlock}async depositCollateral(e,s,a=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await this.query.getObligations(n),d=i??c[0]?.id;if(d)await r.addCollateralQuick(s,e,d);else {let[l,u,m]=r.openObligation();await r.addCollateralQuick(s,e,l),r.returnObligation(l,m),r.transferObjects([u],n);}return a?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdrawCollateral(e,s,a=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=await n.takeCollateralQuick(s,e,i,o);return n.transferObjects([d],c),a?await this.suiKit.signAndSendTxn(n):n.txBlock}async deposit(e,s,a=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.depositQuick(s,e);return o.transferObjects([n],r),a?await this.suiKit.signAndSendTxn(o):o.txBlock}async depositAndStake(e,s,a=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=this.utils.parseMarketCoinName(e),d=await this.query.getStakeAccounts(c),l=i??d[0]?.id,u=await r.depositQuick(s,e,!1);if(l)await r.stakeQuick(u,c,l);else {let m=r.createStakeAccount(c);await r.stakeQuick(u,c,m),r.transferObjects([m],n);}return a?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdraw(e,s,a=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.withdrawQuick(s,e);return o.transferObjects([n],r),a?await this.suiKit.signAndSendTxn(o):o.txBlock}async borrow(e,s,a=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);a&&d&&await n.unstakeObligationQuick(i,o);let l=await n.borrowQuick(s,e,i,o);return n.transferObjects([l],c),a&&d&&await n.stakeObligationWithVeScaQuick(i,o),a?await this.suiKit.signAndSendTxn(n):n.txBlock}async repay(e,s,a=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);return a&&d&&await n.unstakeObligationQuick(i,o),await n.repayQuick(s,e,i),a&&d&&await n.stakeObligationWithVeScaQuick(i,o),a?await this.suiKit.signAndSendTxn(n):n.txBlock}async flashLoan(e,s,a,i=!0,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let[c,d]=r.borrowFlashLoan(s,e);return r.repayFlashLoan(await a(r,c),d,e),i?await this.suiKit.signAndSendTxn(r):r.txBlock}async createStakeAccount(e,s=!0,a){let i=this.builder.createTxBlock(),o=a??this.walletAddress;i.setSender(o);let r=i.createStakeAccount(e);return i.transferObjects([r],o),s?await this.suiKit.signAndSendTxn(i):i.txBlock}async stake(e,s,a=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await this.query.getStakeAccounts(e),d=i??c[0]?.id;if(d)await r.stakeQuick(s,e,d);else {let l=r.createStakeAccount(e);await r.stakeQuick(s,e,l),r.transferObjects([l],n);}return a?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstake(e,s,a=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(s,e,i);if(c){let d=this.utils.parseSCoinType(e);if(!d)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(r,c,d,x(r));}return r.transferObjects([c],n),a?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstakeAndWithdraw(e,s,a=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(s,e,i,!1),d=this.utils.parseCoinName(e);if(c){let l=r.withdraw(c,d);await this.utils.mergeSimilarCoins(r,l,this.utils.parseCoinType(d),x(r)),r.transferObjects([l],n);}else throw new Error(`No stake found for ${e}`);return a?await this.suiKit.signAndSendTxn(r):r.txBlock}async claim(e,s=!0,a,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.claimQuick(e,a);return o.transferObjects(n,r),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async stakeObligation(e,s,a=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.stakeObligationWithVeScaQuick(e,s),a?await this.suiKit.signAndSendTxn(o):o.txBlock}async unstakeObligation(e,s,a=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.unstakeObligationQuick(e,s),a?await this.suiKit.signAndSendTxn(o):o.txBlock}async claimBorrowIncentive(e,s,a=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n={},c=await this.query.getObligationAccount(e);if(!c)throw new Error("Obligation not found");let d=Object.values(c.borrowIncentives).filter(l=>!!l).flatMap(({rewards:l})=>l.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:l})=>l);for(let l of d){let u=await o.claimBorrowIncentiveQuick(l,e,s);n[l]?n[l].push(u):n[l]=[u];}return o.transferObjects(Object.values(n).map(l=>{let u=l[0];return l.length>1&&o.mergeCoins(u,l.slice(1)),u}),r),a?await this.suiKit.signAndSendTxn(o):o.txBlock}async migrateAllMarketCoin(e=!0,s=!0,a){let i=a??this.walletAddress,o=this.builder.createTxBlock();o.setSender(i);let r=[];for(let n of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:d}=await this.builder.selectMarketCoin(o,n,Number.MAX_SAFE_INTEGER,i);if(d){let l=o.mintSCoin(n,d);c.push(l);}}catch(d){if(!d.toString().includes("No valid coins found for the transaction"))throw d}if(e&&this.constants.whitelist.spool.has(n))try{let d=await o.unstakeQuick(Number.MAX_SAFE_INTEGER,n);d&&c.push(d);}catch{}if(c.length>0){let d=c[0];c.length>1&&o.mergeCoins(d,c.slice(1));let l=this.utils.parseSCoinType(n);await this.utils.mergeSimilarCoins(o,d,l,i),r.push(d);}}return r.length>0&&o.transferObjects(r,i),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async claimAllUnlockedSca(e=!0,s){let a=s??this.walletAddress,i=(await this.query.getVeScas({walletAddress:a})??[]).map(({keyObject:n})=>n);if(i.length===0)throw new Error("No veSCA found in the wallet");let o=[],r=this.builder.createTxBlock();if(r.setSender(a),await Promise.all(i.map(async n=>{try{let c=await r.redeemScaQuick(n,!1);if(!c)return;o.push(c);}catch{}})),o.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return o.length>1&&r.mergeCoins(o[0],o.slice(1)),await this.utils.mergeSimilarCoins(r,o[0],"sca",a),e?await this.suiKit.signAndSendTxn(r):{tx:r.txBlock,scaCoin:o[0]}}async mintTestCoin(e,s,a=!0,i){if(!(this.params.networkType?this.params.networkType==="testnet":!1))throw new Error("Only be used on the test network.");let r=this.builder.createTxBlock(),n=i??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),d=this.address.get(`core.coins.${e}.treasury`),l=`${c}::${e}::mint`,u=r.moveCall(l,[d,s]);return r.transferObjects([u],n),a?await this.suiKit.signAndSendTxn(r):r.txBlock}};var Is=class{params;suiKit;cache;address;constants;constructor(e,s,a){this.params=e,this.suiKit=U(e),this.cache=new F({...this.params,cacheOptions:s},{suiKit:this.suiKit,queryClient:a}),this.address=new Q(e,{cache:this.cache}),this.constants=new Y(e,{address:this.address});}async initConstants(e){this.constants.isInitialized||await this.constants.init(e);}async getScallopAddress(e=this.params.addressId){return await this.address.read(e),this.address}async getScallopConstants(e){return await this.initConstants({...this.params,...e}),this.constants}async createScallopBuilder(e){await this.initConstants(e);let s={...this.params,...e};return new ue(s,{query:await this.createScallopQuery(s)})}async createScallopClient(e){await this.initConstants(e);let s={...this.params,...e};return new Ke(s,{builder:await this.createScallopBuilder(s)})}async createScallopQuery(e){await this.initConstants(e);let s={...this.params,...e};return new ie(s,{utils:await this.createScallopUtils(s)})}async createScallopIndexer(){return new de(this.params,{cache:this.cache})}async createScallopUtils(e){return await this.initConstants(e),new ee({...this.params,...e},{constants:this.constants,suiKit:this.suiKit})}};
|
|
21
|
+
var bt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var gt="https://sui.apis.scallop.io",ht="https://sdk.api.scallop.io",ma=!1,ya=!1,be="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Le="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var N={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:t=>["rpc","getInspectTxn",t],getObject:t=>["rpc","getObject",t],getObjects:t=>["rpc","getObjects",t],getOwnedObjects:t=>["rpc","getOwnedObjects",{...t,filter:JSON.stringify(t?.filter??void 0)}],getDynamicFields:t=>["rpc","getDynamicFields",t],getDynamicFieldObject:t=>["rpc","getDynamicFieldObject",t],getTotalVeScaTreasuryAmount:t=>["rpc","getTotalVeScaTreasuryAmount",{...t,refreshArgs:t?.refreshArgs?JSON.stringify(t?.refreshArgs):void 0,vescaAmountArgs:t?.vescaAmountArgs?JSON.stringify(t?.vescaAmountArgs):void 0}],getAllCoinBalances:t=>["rpc","getAllCoinBalances",t],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var Ee=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"];var wa={core:{version:"0xee15d07800e2ad4852505c57cd86afea774af02c17388f8bd907de75f915b4f4",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",market:"0xa7f41efe3b551c20ad6d6cea6ccd0fd68d2e2eaaacdca5e62d956209f6a51312",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0xb7d7e1464936fbdcdd4913308b40335e662401029635289bdb317c7dde9d6c68",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xaebdb50e0a95c5aa20c60bde5f574dac90aef83b508d64146cf29b5f63c35d4f",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryTableId:"0x9f75c071b0db2e80da3f5c98686ffdedf3a633684290499501595277a5350b8c",state:"",registryCap:""},pyth:{registry:"0xdcf813893649521abd27816ba8d946b0cb7fc98d776cc9adcecba54688ccc109",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x3a0dbce719fc56a96bf8e8dd53cd57eb9c313642a88d99b86f51208762eba258",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",object:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",object:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",object:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"}},config:""},borrowIncentive:{id:"0x8fe05c796e779c71e7739dcaecefb8757ff9482f62e419dbd0dd9c35b740054f",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x8fe05c796e779c71e7739dcaecefb8757ff9482f62e419dbd0dd9c35b740054f",query:"0x5fba54ac5862f087112c54c02339623bd245721f5e21ea3330fc8c8afc8f51f4",incentivePools:"0xcace4f4736229043d9f897667d046370b8a4d6534bfd307787c40b4c9f42514a",incentiveAccounts:"0x41ff558f580ca0f711910fd6ef687fce9df76ee8e7fc5e150bdfae08e17fae62",config:"0x9636e7b947b806b9fe438d037f02bb24026c5b2691d2f6bad349c2e117f77cc3"},vesca:{id:"0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",object:"0xcfe2d87aa5712b67cad2732edb6a2201bfdf592377e5c0968b7cb02099bd8e21",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",table:"0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",treasury:"0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",config:"0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"},referral:{id:"0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",bindingTableId:"0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",referralRevenuePool:"0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",revenueTableId:"0x669dfb0f47fccbbe2ae8a0bfce2672a994ef3f1c7049621405cce2f91733bdc1",referralTiers:"0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",tiersTableId:"0xad5e36fce7358a3ef94a56eb89ee7f1968100c1a9d967c1731154083e1dda1fb",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",metaData:"",symbol:"sSUI",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"sSCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},susdc:{coinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",treasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",symbol:"sUSDC",metaData:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"sDEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"sFUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"}}}};var J=86400,ae=1460,$=126144e3,Ve=1e10,qe=1e9;var wt={usdc:{primary:["pyth"],secondary:[]},sbeth:{primary:["pyth"],secondary:[]},sbusdt:{primary:["pyth"],secondary:[]},sbwbtc:{primary:["pyth"],secondary:[]},weth:{primary:["pyth"],secondary:[]},wbtc:{primary:["pyth"],secondary:[]},wusdc:{primary:["pyth"],secondary:[]},wusdt:{primary:["pyth"],secondary:[]},sui:{primary:["pyth"],secondary:[]},wapt:{primary:["pyth"],secondary:[]},wsol:{primary:["pyth"],secondary:[]},cetus:{primary:["pyth"],secondary:[]},afsui:{primary:["pyth"],secondary:[]},hasui:{primary:["pyth"],secondary:[]},vsui:{primary:["pyth"],secondary:[]},sca:{primary:["pyth"],secondary:[]},fud:{primary:["pyth"],secondary:[]},deep:{primary:["pyth"],secondary:[]},fdusd:{primary:["pyth"],secondary:[]},blub:{primary:["pyth"],secondary:[]},musd:{primary:["pyth"],secondary:[]},ns:{primary:["pyth"],secondary:[]},usdy:{primary:["pyth"],secondary:[]}};var R=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},re=t=>{if(t===void 0)throw new Error("veSca not found")},Ue=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Qe=(t,e,o)=>{re(o),Ue(o);let s=Math.floor(o/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let a=Math.floor((e-s)/86400);if(t>a)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-a}`)},St=(t,e,o,s)=>{let a=s?Math.floor(s/1e3):void 0,r=!a,n=!r&&a*1e3<=new Date().getTime();if(r||n)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${n?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${n?"renewing expired veSca":"initial lock"}`);else {if(re(s),Ue(s),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");o&&e&&Qe(e,o,s);}},Ct=(t,e)=>{if(re(e),Ue(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},kt=(t,e,o)=>{if(!o||o>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var $e=t=>({coinType:utils.normalizeStructTag(t.type.name),maxBorrowRate:Number(t.maxBorrowRate.value)/2**32,borrowRate:Number(t.interestRate.value)/2**32,borrowRateScale:Number(t.interestRateScale),borrowIndex:Number(t.borrowIndex),lastUpdated:Number(t.lastUpdated),cashAmount:Number(t.cash),debtAmount:Number(t.debt),marketCoinSupplyAmount:Number(t.marketCoinSupply),reserveAmount:Number(t.reserve),reserveFactor:Number(t.reserveFactor.value)/2**32,borrowWeight:Number(t.borrowWeight.value)/2**32,borrowFee:Number(t.borrowFeeRate.value)/2**32,baseBorrowRate:Number(t.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(t.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(t.borrowRateOnMidKink.value)/2**32,highKink:Number(t.highKink.value)/2**32,midKink:Number(t.midKink.value)/2**32,minBorrowAmount:Number(t.minBorrowAmount),isIsolated:t.isIsolated,supplyLimit:Number(t.supplyLimit),borrowLimit:Number(t.borrowLimit)}),We=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(o);if(s===void 0)throw new Error(`Coin decimal not found for ${o}`);let a=24*365*3600,r=e.baseBorrowRate*a/e.borrowRateScale,n=e.borrowRateOnHighKink*a/e.borrowRateScale,i=e.borrowRateOnMidKink*a/e.borrowRateScale,c=e.maxBorrowRate*a/e.borrowRateScale,d=e.borrowRate*a/e.borrowRateScale,l=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=h__default.default(e.borrowIndex).multipliedBy(h__default.default(l).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=h__default.default(e.borrowIndex).plus(u),f=h__default.default(p).dividedBy(e.borrowIndex).minus(1),y=h__default.default(e.debtAmount).multipliedBy(f),b=y.plus(e.debtAmount),m=b.shiftedBy(-1*s),g=h__default.default(e.reserveAmount).plus(y.multipliedBy(e.reserveFactor)),w=g.shiftedBy(-1*s),k=h__default.default(b).plus(Math.max(e.cashAmount-g.toNumber(),0)),A=k.shiftedBy(-1*s),F=h__default.default(b).dividedBy(k);F=F.isFinite()?F:h__default.default(0);let C=h__default.default(d).multipliedBy(F).multipliedBy(1-e.reserveFactor);C=C.isFinite()?C:h__default.default(0);let I=k.dividedBy(e.marketCoinSupplyAmount);return I=I.isFinite()&&!I.isNaN()?I:h__default.default(1),{baseBorrowApr:r,baseBorrowApy:t.parseAprToApy(r),borrowAprOnHighKink:n,borrowApyOnHighKink:t.parseAprToApy(n),borrowAprOnMidKink:i,borrowApyOnMidKink:t.parseAprToApy(i),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(t.parseAprToApy(d),t.parseAprToApy(c)),borrowIndex:p.toNumber(),growthInterest:f.toNumber(),supplyAmount:k.toNumber(),supplyCoin:A.toNumber(),borrowAmount:b.toNumber(),borrowCoin:m.toNumber(),reserveAmount:g.toNumber(),reserveCoin:w.toNumber(),utilizationRate:F.toNumber(),supplyApr:C.toNumber(),supplyApy:t.parseAprToApy(C.toNumber()),conversionRate:I.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:h__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:h__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},ge=t=>({coinType:utils.normalizeStructTag(t.type.name),isIsolated:t.isIsolated,collateralFactor:Number(t.collateralFactor.value)/4294967296,liquidationFactor:Number(t.liquidationFactor.value)/4294967296,liquidationDiscount:Number(t.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(t.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(t.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(t.maxCollateralAmount),totalCollateralAmount:Number(t.totalCollateralAmount)}),he=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(o);if(s===void 0)throw new Error(`Coin decimal not found for ${o}`);let a=h__default.default(e.maxCollateralAmount).shiftedBy(-1*s),r=h__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:a.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:r.toNumber()}},Tt=t=>({stakeType:utils.normalizeStructTag(t.stakeType.fields.name),maxPoint:Number(t.maxDistributedPoint),distributedPoint:Number(t.distributedPoint),pointPerPeriod:Number(t.distributedPointPerPeriod),period:Number(t.pointDistributionTime),maxStake:Number(t.maxStake),staked:Number(t.stakes),index:Number(t.index),createdAt:Number(t.createdAt),lastUpdate:Number(t.lastUpdate)}),At=(t,e,o)=>{let a=h__default.default(t.pointPerPeriod).dividedBy(t.period),r=h__default.default(t.pointPerPeriod).dividedBy(t.period),n=r.gt(0)?h__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(r):h__default.default(0),i=t.createdAt,c=n.plus(t.lastUpdate).integerValue().toNumber(),d=h__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),l=h__default.default(t.maxPoint).minus(t.distributedPoint),u=h__default.default.minimum(h__default.default(d).multipliedBy(t.pointPerPeriod),l),p=h__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?h__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),f=h__default.default(t.distributedPoint).plus(u),y=h__default.default(t.staked),b=y.shiftedBy(-1*o),m=b.multipliedBy(e);return {distributedPointPerSec:a.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:f.toNumber(),startDate:new Date(i*1e3),endDate:new Date(c*1e3),stakedAmount:y.toNumber(),stakedCoin:b.toNumber(),stakedValue:m.toNumber()}},Pt=t=>({claimedRewards:Number(t.claimed_rewards),exchangeRateDenominator:Number(t.exchange_rate_denominator),exchangeRateNumerator:Number(t.exchange_rate_numerator),rewards:Number(t.rewards),spoolId:String(t.spool_id)}),xt=(t,e,o,s,a)=>{let n=h__default.default(o.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),i=h__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=i.shiftedBy(-1*a),d=c.multipliedBy(s),l=h__default.default(e.rewards),u=l.shiftedBy(-1*a),p=u.multipliedBy(s),f=h__default.default(e.claimedRewards),y=f.shiftedBy(-1*a),b=y.multipliedBy(s),m=h__default.default(n).shiftedBy(-1*a).multipliedBy(31536e3).multipliedBy(s),g=m.dividedBy(o.stakedValue).isFinite()?m.dividedBy(o.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(g=1/0),{rewardApr:g,totalRewardAmount:i.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:p.toNumber(),claimedRewardAmount:f.toNumber(),claimedRewardCoin:y.toNumber(),claimedRewardValue:b.toNumber(),rewardPerSec:n.toNumber()}},Ko=t=>({pointType:utils.normalizeStructTag(t.point_type.name),distributedPointPerPeriod:Number(t.distributed_point_per_period),period:Number(t.point_distribution_time),distributedPoint:Number(t.distributed_point),points:Number(t.points),index:Number(t.index),baseWeight:Number(t.base_weight),weightedAmount:Number(t.weighted_amount),lastUpdate:Number(t.last_update),createdAt:Number(t.created_at)}),Ot=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((o,s)=>{let a=Ko(s),r=t.parseCoinNameFromType(a.pointType);return o[r]=a,o},{})}),Rt=(t,e,o,s,a)=>{let n=h__default.default(t.distributedPointPerPeriod).dividedBy(t.period),i=h__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=h__default.default.minimum(h__default.default(i).multipliedBy(t.distributedPointPerPeriod),h__default.default(t.points)),d=h__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?h__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),l=h__default.default(t.distributedPoint).plus(c),u=h__default.default(t.baseWeight),p=h__default.default(t.weightedAmount),f=p.shiftedBy(-1*a),y=f.multipliedBy(s),b=365*24*60*60,m=h__default.default(n).shiftedBy(-1*o),g=h__default.default(m).multipliedBy(b).multipliedBy(e),w=h__default.default(1e12),k=g.multipliedBy(h__default.default(t.baseWeight).dividedBy(w)).dividedBy(y).isFinite()&&t.points>0?g.multipliedBy(h__default.default(t.baseWeight).dividedBy(w)).dividedBy(y).toNumber():1/0;return {distributedPointPerSec:n.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:f.toNumber(),weightedStakedValue:y.toNumber(),rewardApr:k,rewardPerSec:m.toNumber()}},Lo=t=>({pointType:utils.normalizeStructTag(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),It=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((o,s)=>{let a=Lo(s),r=t.parseCoinNameFromType(a.pointType);return o[r]=a,o},{})}),ne=(...t)=>h__default.default(t.reduce((e,o)=>new h__default.default(o).lt(e)?o:e));var we=(t,e,o)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),a=Math.max(Math.floor((s-1)/e),1)+1,r=Math.pow(10,-a);return r=o==="increase"?1-r:1+r,r};var vt=t=>{let e=new Date(t*1e3),o=new Date(t*1e3);o.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&o.setUTCDate(o.getUTCDate()+1);let s=new Date().getTime();return o.getTime()-s>126144e3*1e3&&o.setUTCDate(o.getUTCDate()-1),Math.floor(o.getTime()/1e3)};async function Eo(t,e,...o){let s=o[o.length-1];if(typeof s=="object"&&s.indexer)try{return await t.apply(e,o)}catch(a){return console.warn(`Indexer requests failed: ${a.message}. Retrying without indexer..`),await t.apply(e,[...o.slice(0,-1),{...s,indexer:!1}])}return await t.apply(e,o)}function E(t){return (...e)=>Eo(t,this,...e)}var Q=t=>{if(!(t&&t.content&&"fields"in t.content))throw new Error(`Failed to parse object ${t}`);let e=t.content.fields;if(typeof e=="object"&&"value"in e){let o=e.value;return typeof o=="object"&&"fields"in o?o.fields:o}else if(typeof e=="object")return e;return e};var Uo=async({address:t,scallopSuiKit:e})=>{let o=t.get("borrowIncentive.query"),s=t.get("borrowIncentive.incentivePools"),a=`${o}::incentive_pools_query::incentive_pools_data`,r=[s];return (await e.queryInspectTxn({queryTarget:a,args:r}))?.events[0].parsedJson},jt=async(t,e=[...t.constants.whitelist.lending],o=!1,s,a)=>{let r={};s=s??(await t.getMarketPools(void 0,{coinPrices:a,indexer:o})).pools,a=a??await t.getAllCoinPrices({marketPools:s});let n=await Uo(t);for(let i of n?.incentive_pools??[]){let c={},d=Ot(t.utils,i),l=utils.normalizeStructTag(i.pool_type.name),u=t.utils.parseCoinNameFromType(l),p=a?.[u]??0,f=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[g,w]of Object.entries(d.poolPoints)){if(!w)continue;let k=w.pointType,A=t.utils.parseCoinNameFromType(k),F=t.utils.getCoinDecimal(A);if(F===void 0)throw new Error(`Coin decimal not found for ${A}`);let C=a?.[A]??0,I=t.utils.parseSymbol(A),_=t.utils.getCoinDecimal(A),D=Rt(w,C,F,p,f);c[g]={symbol:I,coinName:A,coinType:k,coinDecimal:_,coinPrice:C,points:w.points,distributedPoint:w.distributedPoint,weightedAmount:w.weightedAmount,...D};}let y=h__default.default(d.staked),b=y.shiftedBy(-1*f),m=b.multipliedBy(p);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:l,coinDecimal:f,coinPrice:p,stakedAmount:y.toNumber(),stakedCoin:b.toNumber(),stakedValue:m.toNumber(),points:c};}return r},Nt=async({utils:t},e,o=[...t.constants.whitelist.lending])=>{let s=t.address.get("borrowIncentive.query"),a=t.address.get("borrowIncentive.incentiveAccounts"),r=`${s}::incentive_account_query::incentive_account_data`,n=[a,e],c=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:n}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let p=It(t,u),f=p.poolType,y=t.parseCoinNameFromType(f);return o&&o.includes(y)&&(l[y]=p),l},{})},_t=async({address:t,scallopSuiKit:e},o)=>{let s=t.get("borrowIncentive.object"),a=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),n=await e.queryGetObject(a);if(n?.data?.content?.dataType!=="moveObject")return null;let c=n.data.content.fields.ve_sca_bind.fields.id.id,d=`${s}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,l=await e.queryGetDynamicFieldObject({parentId:c,name:{type:d,value:o}});return l?.data?.content?.dataType!=="moveObject"?null:l.data.content.fields.value.fields.id},Bt=async({address:t,scallopSuiKit:e},o)=>{let s=t.get("borrowIncentive.object"),a=t.get("borrowIncentive.incentiveAccounts"),r=t.get("core.object"),n=await e.queryGetObject(a);if(n?.data?.content?.dataType!=="moveObject")return null;let i=n.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:i,name:{type:`${s}::typed_id::TypedID<${r}::obligation::Obligation>`,value:o}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var Qo=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),$o="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Se=async(t,e)=>{try{let o=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let a=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:$o,value:o}}),r=Qo.safeParse(a?.data?.content);return r.success?r.data.fields.value:"0"}catch(o){return console.error(`Error in getSupplyLimit for ${e}: ${o.message}`),"0"}};var Wo=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.boolean()})}),Mt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",Dt=async(t,e=!1)=>{if(!e)return t.utils.getSupportedPoolAddresses().filter(o=>!!o.isolatedAssetKey).map(o=>o.coinName);try{let o=t.address.get("core.market"),s=[];if(!o)return s;let a=!1,r=null,n=i=>i.name.type===Mt;do{let i=await t.scallopSuiKit.queryGetDynamicFields({parentId:o,cursor:r,limit:10});if(!i)break;let c=i.data.filter(n).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),i&&i.hasNextPage&&i.nextCursor?(a=!0,r=i.nextCursor):a=!1;}while(a);return s}catch(o){return console.error(o),[]}},oe=async(t,e)=>{let o=t.constants.poolAddresses[e];if(o)return o.isIsolated;let s=t.address.get("core.market"),a=t.queryClient.getQueryData(["getDynamicFields",s]);if(a){let c=t.parseCoinType(e);return a.includes(c)}let r=t.parseCoinType(e).slice(2),n=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Mt,value:r}}),i=Wo.safeParse(n?.data?.content);return i.success?i.data.fields.value:!1};var Go=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),zo="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Ce=async(t,e)=>{try{let o=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let a=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:zo,value:o}}),r=Go.safeParse(a?.data?.content);return r.success?r.data.fields.value:"0"}catch(o){return console.error(`Error in getBorrowLimit for ${e}: ${o.message}`),"0"}};var Xo="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",Ft=async({constants:t,scallopSuiKit:e},o,s)=>{let a=new Set(o),r=Object.fromEntries(Object.entries(t.coinTypeToCoinNameMap).filter(([d,l])=>a.has(l))),n=null,i=!1,c=[];do{let d=await e.queryGetDynamicFields({parentId:Xo,limit:10,cursor:n});if(!d)break;let{data:l,hasNextPage:u,nextCursor:p}=d,f=l.filter(y=>{let b=`0x${y.name.value.name}`;return !!r[b]}).map(y=>y.objectId)??[];c.push(...await e.queryGetObjects(f)),i=u,n=p;}while(i);return c.reduce((d,l)=>{if(l.content?.dataType==="moveObject"){let u=`0x${l.content.fields.name.fields.name}`,p=r[u];if(!p)return d;let y=+l.content.fields.value;d[p]=y/s;}return d},{})};var Et=async({utils:t,indexer:e},o=!1,s)=>{s=s??await t.getCoinPrices()??{};let a={},r={};if(o){let p=await e.getMarket(),f=b=>{b.coinPrice=s[b.coinName]??b.coinPrice,b.coinWrappedType=t.getCoinWrappedType(b.coinName),a[b.coinName]=b;},y=b=>{b.coinPrice=s[b.coinName]??b.coinPrice,b.coinWrappedType=t.getCoinWrappedType(b.coinName),r[b.coinName]=b;};return Object.values(p.pools).filter(b=>!!b).forEach(f),Object.values(p.collaterals).filter(b=>!!b).forEach(y),{pools:a,collaterals:r}}let n=t.address.get("core.packages.query.id"),i=t.address.get("core.market"),c=`${n}::market_query::market_data`,d=[i],u=(await t.scallopSuiKit.queryInspectTxn({queryTarget:c,args:d}))?.events[0]?.parsedJson;for(let p of u?.pools??[]){let f=utils.normalizeStructTag(p.type.name),y=t.parseCoinNameFromType(f),b=s[y]??0;if(!t.constants.whitelist.lending.has(y))continue;let m=$e({type:p.type,maxBorrowRate:p.maxBorrowRate,interestRate:p.interestRate,interestRateScale:p.interestRateScale,borrowIndex:p.borrowIndex,lastUpdated:p.lastUpdated,cash:p.cash,debt:p.debt,marketCoinSupply:p.marketCoinSupply,reserve:p.reserve,reserveFactor:p.reserveFactor,borrowWeight:p.borrowWeight,borrowFeeRate:p.borrowFeeRate,baseBorrowRatePerSec:p.baseBorrowRatePerSec,borrowRateOnHighKink:p.borrowRateOnHighKink,borrowRateOnMidKink:p.borrowRateOnMidKink,highKink:p.highKink,midKink:p.midKink,minBorrowAmount:p.minBorrowAmount,isIsolated:await oe(t,y),supplyLimit:await Se(t,y)??"0",borrowLimit:await Ce(t,y)??"0"}),g=We(t,m);a[y]={coinName:y,symbol:t.parseSymbol(y),coinType:f,marketCoinType:t.parseMarketCoinType(y),sCoinType:t.parseSCoinType(t.parseMarketCoinName(y))??"",coinWrappedType:t.getCoinWrappedType(y),coinPrice:b,highKink:m.highKink,midKink:m.midKink,reserveFactor:m.reserveFactor,borrowWeight:m.borrowWeight,borrowFee:m.borrowFee,marketCoinSupplyAmount:m.marketCoinSupplyAmount,minBorrowAmount:m.minBorrowAmount,...g};}for(let p of u?.collaterals??[]){let f=utils.normalizeStructTag(p.type.name),y=t.parseCoinNameFromType(f),b=s[y]??0;if(!t.constants.whitelist.collateral.has(y))continue;let m=ge({type:p.type,collateralFactor:p.collateralFactor,liquidationFactor:p.liquidationFactor,liquidationDiscount:p.liquidationDiscount,liquidationPenalty:p.liquidationPanelty,liquidationReserveFactor:p.liquidationReserveFactor,maxCollateralAmount:p.maxCollateralAmount,totalCollateralAmount:p.totalCollateralAmount,isIsolated:await oe(t,y)}),g=he(t,m);r[y]={coinName:y,symbol:t.parseSymbol(y),coinType:f,marketCoinType:t.parseMarketCoinType(y),coinWrappedType:t.getCoinWrappedType(y),coinPrice:b,collateralFactor:m.collateralFactor,liquidationFactor:m.liquidationFactor,liquidationDiscount:m.liquidationDiscount,liquidationPenalty:m.liquidationPenalty,liquidationReserveFactor:m.liquidationReserveFactor,...g};}return {pools:a,collaterals:r}},Vt=async({utils:t,scallopSuiKit:e},o)=>{let s={balanceSheet:[],collateralStat:[],borrowDynamic:[],interestModel:[],riskModel:[],borrowFeeKey:[],supplyLimitKey:[],borrowLimitKey:[]},a=new Map;for(let d of o){let l=t.constants.poolAddresses[d],u={balanceSheet:l?.lendingPoolAddress,collateralStat:l?.collateralPoolAddress,borrowDynamic:l?.borrowDynamic,interestModel:l?.interestModel,riskModel:l?.riskModel,borrowFeeKey:l?.borrowFeeKey,supplyLimitKey:l?.supplyLimitKey,borrowLimitKey:l?.borrowLimitKey};Object.entries(u).forEach(([p,f])=>{f&&s[p].push(f);}),a.set(d,u);}let r={showContent:!0},n=await Promise.all([e.queryGetObjects(s.balanceSheet,r),e.queryGetObjects(s.collateralStat,r),e.queryGetObjects(s.borrowDynamic,r),e.queryGetObjects(s.interestModel,r),e.queryGetObjects(s.riskModel,r),e.queryGetObjects(s.borrowFeeKey,r),e.queryGetObjects(s.supplyLimitKey,r),e.queryGetObjects(s.borrowLimitKey,r)]),i={balanceSheet:new Map,collateralStat:new Map,borrowDynamic:new Map,interestModel:new Map,riskModel:new Map,borrowFeeKey:new Map,supplyLimitKey:new Map,borrowLimitKey:new Map,isIsolated:new Map};n.forEach((d,l)=>{let u=Object.keys(i)[l];d.forEach(p=>{i[u].set(p.objectId,p);});});let c={};for(let[d,l]of a)c[d]={balanceSheet:l.balanceSheet?i.balanceSheet.get(l.balanceSheet):void 0,collateralStat:l.collateralStat?i.collateralStat.get(l.collateralStat):void 0,borrowDynamic:l.borrowDynamic?i.borrowDynamic.get(l.borrowDynamic):void 0,interestModel:l.interestModel?i.interestModel.get(l.interestModel):void 0,riskModel:l.riskModel?i.riskModel.get(l.riskModel):void 0,borrowFeeKey:l.borrowFeeKey?i.borrowFeeKey.get(l.borrowFeeKey):void 0,supplyLimitKey:l.supplyLimitKey?i.supplyLimitKey.get(l.supplyLimitKey):void 0,borrowLimitKey:l.borrowLimitKey?i.borrowLimitKey.get(l.borrowLimitKey):void 0,isolatedAssetKey:t.constants.poolAddresses[d]?.isIsolated};return c},qt=async(t,e,o=!1,s)=>{s=s??await t.utils.getCoinPrices();let a={},r={};if(o){let i=await t.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),a[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),r[l.coinName]=l;};return Object.values(i.pools).filter(l=>!!l).forEach(c),Object.values(i.collaterals).filter(l=>!!l).forEach(d),{pools:a,collaterals:r}}let n=await Vt(t,e);return await Promise.allSettled(e.map(async i=>{try{let c=await Jo(t,i,o,s?.[i]??0,n[i]);c?.marketPool&&(a[i]=c?.marketPool),c?.collateral&&(r[i]=c.collateral);}catch(c){console.error(c);}})),{pools:a,collaterals:r}},Ho=({balanceSheet:t,borrowDynamic:e,collateralStat:o,interestModel:s,riskModel:a,borrowFeeKey:r,supplyLimitKey:n,borrowLimitKey:i,isIsolated:c})=>{if(!t||!e||!s)throw new Error("Missing required market objects");let d=Q(t),l=Q(s),u=Q(e),p=r?Q(r):{value:"0"},f=n?Q(n):"0",y=i?Q(i):"0",b=a?Q(a):void 0,m=o?Q(o):void 0,g=b&&m?{type:l.type.fields,isIsolated:c,collateralFactor:b.collateral_factor.fields,liquidationFactor:b.liquidation_factor.fields,liquidationPenalty:b.liquidation_penalty.fields,liquidationDiscount:b.liquidation_discount.fields,liquidationReserveFactor:b.liquidation_revenue_factor.fields,maxCollateralAmount:b.max_collateral_amount,totalCollateralAmount:m.amount}:void 0;return {type:l.type.fields,maxBorrowRate:l.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:l.revenue_factor.fields,borrowWeight:l.borrow_weight.fields,borrowFeeRate:p,baseBorrowRatePerSec:l.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:l.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:l.borrow_rate_on_mid_kink.fields,highKink:l.high_kink.fields,midKink:l.mid_kink.fields,minBorrowAmount:l.min_borrow_amount,isIsolated:c,supplyLimit:f,borrowLimit:y,parsedOriginMarketCollateral:g}},Jo=async(t,e,o=!1,s,a)=>{if(s=s??(await t.utils.getCoinPrices())?.[e],o){let l=await t.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}if(a??=(await Vt(t,[e]))[e],!a)throw new Error(`Failed to fetch required market objects for ${e}`);let r=Ho(a),n=$e(r),i=We(t.utils,n),c=r.parsedOriginMarketCollateral?ge(r.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s??0,highKink:n.highKink,midKink:n.midKink,reserveFactor:n.reserveFactor,borrowWeight:n.borrowWeight,borrowFee:n.borrowFee,marketCoinSupplyAmount:n.marketCoinSupplyAmount,minBorrowAmount:n.minBorrowAmount,...i},collateral:c?{...d(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...he(t.utils,c)}:void 0}},Ut=async({utils:t,indexer:e,scallopSuiKit:o},s=[...t.constants.whitelist.collateral],a=!1)=>{let r=t.address.get("core.market"),n=await t.getCoinPrices()??{},i={};if(a){let d=await e.getMarketCollaterals(),l=u=>{s.includes(u.coinName)&&(u.coinPrice=n[u.coinName]??u.coinPrice,u.coinWrappedType=t.getCoinWrappedType(u.coinName),i[u.coinName]=u);};return Object.values(d).filter(u=>!!u).forEach(l),i}let c=await o.queryGetObject(r);return await Promise.allSettled(s.map(async d=>{let l=await Ge({utils:t,indexer:e,scallopSuiKit:o},d,a,c?.data,n?.[d]);l&&(i[d]=l);})),i},Ge=async({utils:t,indexer:e,scallopSuiKit:o},s,a=!1,r,n)=>{if(n=n??(await t.getCoinPrices())?.[s],a){let A=await e.getMarketCollateral(s);return A.coinPrice=n??A.coinPrice,A.coinWrappedType=t.getCoinWrappedType(A.coinName),A}let i=t.address.get("core.market");if(r=r||(await o.queryGetObject(i))?.data,!(r&&r.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=r.content.fields,d=t.parseCoinType(s),l=c.risk_models.fields.table.fields.id.id,u=await o.queryGetDynamicFieldObject({parentId:l,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),p=u?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${u?.error?.code.toString()}: `);let f=p.content.fields.value.fields,y=c.collateral_stats.fields.table.fields.id.id,b=await o.queryGetDynamicFieldObject({parentId:y,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),m=b?.data;if(!(m&&m.content&&"fields"in m.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${s}: ${b?.error?.code.toString()}`);let g=m.content.fields.value.fields,w=ge({type:f.type.fields,collateralFactor:f.collateral_factor.fields,liquidationFactor:f.liquidation_factor.fields,liquidationDiscount:f.liquidation_discount.fields,liquidationPenalty:f.liquidation_penalty.fields,liquidationReserveFactor:f.liquidation_revenue_factor.fields,maxCollateralAmount:f.max_collateral_amount,totalCollateralAmount:g.amount,isIsolated:await oe(t,s)}),k=he(t,w);return {coinName:s,symbol:t.parseSymbol(s),coinType:t.parseCoinType(s),marketCoinType:t.parseMarketCoinType(s),coinWrappedType:t.getCoinWrappedType(s),coinPrice:n??0,collateralFactor:w.collateralFactor,liquidationFactor:w.liquidationFactor,liquidationDiscount:w.liquidationDiscount,liquidationPenalty:w.liquidationPenalty,liquidationReserveFactor:w.liquidationReserveFactor,...k}},se=async({utils:t},e)=>{let o=e,s=t.constants.protocolObjectId,a=[],r=!1,n=null;do{let l=await t.scallopSuiKit.queryGetOwnedObjects({owner:o,filter:{StructType:`${s}::obligation::ObligationKey`},options:{showContent:!0},cursor:n,limit:10});if(!l)break;a.push(...l.data),l.hasNextPage&&l.nextCursor?(r=!0,n=l.nextCursor):r=!1;}while(r);let i=a.filter(l=>!!l.data),c=[],d=await t.scallopSuiKit.queryGetObjects(i.map(l=>l.data?.content).filter(l=>l?.dataType==="moveObject").map(l=>l.fields.ownership.fields.of));return await Promise.allSettled(i.map(async({data:l},u)=>{let p=l?.objectId,f=l?.content;if(p&&f&&"fields"in f){let y=f.fields,b=String(y.ownership.fields.of),m=await ze(t,d[u]);c.push({id:b,keyId:p,locked:m});}})),c},ze=async({scallopSuiKit:t},e)=>{let o=typeof e=="string"?(await t.queryGetObject(e))?.data:e,s=!1;return o&&o?.content?.dataType==="moveObject"&&"lock_key"in o.content.fields&&(s=!!o.content.fields.lock_key),s},ke=async({address:t,scallopSuiKit:e},o)=>{let s=t.get("core.packages.query.id"),a=t.get("core.version"),r=t.get("core.market"),n=`${s}::obligation_query::obligation_data`,i=[a,r,o,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:n,args:i}))?.events[0]?.parsedJson},Qt=async({utils:t},e=[...t.constants.whitelist.lending],o)=>{let s=o??t.walletAddress,a={};return await Promise.allSettled(e.map(async r=>{let n=await Xe({utils:t},r,s);a[r]=n;})),a},Xe=async({utils:t},e,o)=>{let s=o??t.walletAddress,a=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:a});return h__default.default(r?.totalBalance??"0").toNumber()},$t=async({utils:t},e,o)=>{e=e||[...t.constants.whitelist.lending].map(r=>t.parseMarketCoinName(r));let s=o??t.walletAddress,a={};return await Promise.allSettled(e.map(async r=>{let n=await Ye({utils:t},r,s);a[r]=n;})),a},Ye=async({utils:t},e,o)=>{let s=o??t.walletAddress,a=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:a});return h__default.default(r?.totalBalance??"0").toNumber()},Wt=async({utils:t},e,o=1e4)=>{let s=[],a={},r=e.reduce((c,d)=>{let l=t.parseCoinType(d).slice(2);return c[l]=d,c},{}),n=e.map(c=>{let d=t.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),i=await t.scallopSuiKit.queryGetObjects(n);if(s.length>0){let c=await Ft(t,s,o);a={...a,...c};}return a={...a,...i.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=d.content.fields,u=d.content.fields.name.fields.name,p=+l.value;c[r[u]]=p/o;}return c},{})},a};var Zo=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(t=>({totalPoolReward:h__default.default(t.balance).shiftedBy(-9).toNumber(),isClaimEnabled:t.enable_claim})),es=zod.z.object({value:zod.z.string()}).transform(t=>h__default.default(t.value).shiftedBy(-9).toNumber()),zt=async(t,e)=>{let o=t.address.get("loyaltyProgram.rewardPool"),s=await t.scallopSuiKit.queryGetObject(o);if(s?.data?.content?.dataType!=="moveObject")return null;let a=s.data.content.fields,{isClaimEnabled:r,totalPoolReward:n}=Zo.parse(a),i={pendingReward:0,totalPoolReward:n,isClaimEnabled:r};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return i;let c=t.address.get("loyaltyProgram.userRewardTableId"),d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return i;let l=d.data.content.fields;return i.pendingReward=es.parse(l),i};var Xt=async(t,e=[...t.constants.whitelist.lending],o,s,a,r=!1)=>{let n=e.map(f=>t.utils.parseMarketCoinName(f)),i=n.filter(f=>t.constants.whitelist.spool.has(f));a=a??await t.utils.getCoinPrices(),s=s??(await t.getMarketPools(e,{indexer:r,coinPrices:a})).pools;let c=await t.getSpools(i,{indexer:r,marketPools:s,coinPrices:a}),[d,l,u]=await Promise.all([t.getCoinAmounts(e,o),t.getMarketCoinAmounts(n,o),t.getAllStakeAccounts(o)]),p={};return await Promise.allSettled(e.map(async f=>{let y=i.find(m=>m===t.utils.parseMarketCoinName(f)),b=t.utils.parseMarketCoinName(f);p[f]=await He(t,f,o,r,s?.[f],y?c[y]:void 0,y?u[y]:[],d?.[f],l?.[b],a?.[f]??0);})),p},He=async(t,e,o,s=!1,a,r,n,i,c,d,l)=>{let u=t.utils.parseMarketCoinName(e);if(d=d??(await t.utils.getCoinPrices())?.[e]??0,a=a??await t.getMarketPool(e,{indexer:s,coinPrice:d}),!a)throw new Error(`Failed to fetch marketPool for ${e}`);r=r??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:s,marketPool:a,coinPrices:{[e]:d}}):void 0,n=n||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,o):[],i=i||await t.getCoinAmount(e,o),c=c||await t.getMarketCoinAmount(u,o),l=l||await t.getSCoinAmount(u,o);let p=t.utils.getCoinDecimal(e),f=h__default.default(0),y=h__default.default(0),b=h__default.default(0),m=h__default.default(0),g=h__default.default(0),w=h__default.default(0),k=h__default.default(0),A=h__default.default(0),F=h__default.default(0);if(r)for(let L of n){let v=h__default.default(L.staked),j=v.shiftedBy(-1*r.coinDecimal),K=v.multipliedBy(a?.conversionRate??1),q=K.shiftedBy(-1*r.coinDecimal),M=q.multipliedBy(r.coinPrice);f=f.plus(v),y=y.plus(j),b=b.plus(K),m=m.plus(q),g=g.plus(M),w=w.plus(v),k=w.shiftedBy(-1*r.coinDecimal);let X=r.currentPointIndex?h__default.default(r.currentPointIndex-L.index).dividedBy(1e9):1;A=A.plus(v.multipliedBy(X).plus(L.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),F=A.shiftedBy(-1*r.rewardCoinDecimal);}let C=h__default.default(c).plus(h__default.default(l)).multipliedBy(a?.conversionRate??1),I=C.shiftedBy(-1*p),_=I.multipliedBy(d??0),D=h__default.default(d??0).multipliedBy(a?.conversionRate??1),Z=h__default.default(c).plus(h__default.default(l)),V=Z.shiftedBy(-1*p),T=h__default.default(i),P=T.shiftedBy(-1*p),x=ne(C,a?.supplyAmount??1/0).plus(b),O=ne(I,a?.supplyCoin??1/0).plus(m);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:a?.sCoinType??"",coinDecimal:p,coinPrice:d??0,conversionRate:a?.conversionRate??1,marketCoinPrice:D.toNumber(),supplyApr:a?.supplyApr??0,supplyApy:a?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:C.plus(b).toNumber(),suppliedCoin:I.plus(m).toNumber(),suppliedValue:_.plus(g).toNumber(),stakedMarketAmount:f.toNumber(),stakedMarketCoin:y.toNumber(),stakedAmount:b.toNumber(),stakedCoin:m.toNumber(),stakedValue:g.toNumber(),unstakedMarketAmount:Z.toNumber(),unstakedMarketCoin:V.toNumber(),unstakedAmount:C.toNumber(),unstakedCoin:I.toNumber(),unstakedValue:_.toNumber(),availableSupplyAmount:T.toNumber(),availableSupplyCoin:P.toNumber(),availableWithdrawAmount:x.toNumber(),availableWithdrawCoin:O.toNumber(),availableStakeAmount:Z.toNumber(),availableStakeCoin:V.toNumber(),availableUnstakeAmount:w.toNumber(),availableUnstakeCoin:k.toNumber(),availableClaimAmount:A.toNumber(),availableClaimCoin:F.toNumber(),isIsolated:a?a.isIsolated:!1}},Yt=async(t,e,o,s,a=!1)=>{o=o??await t.getMarketPools(void 0,{indexer:a}),s=s??await t.getAllCoinPrices({marketPools:o.pools});let[r,n]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),i=await t.scallopSuiKit.queryGetObjects(n.map(d=>d.id)),c={};return await Promise.allSettled(n.map(async(d,l)=>{c[d.keyId]=await ss(t,i[l]??d.id,e,a,o,s,r);})),c},ss=async(t,e,o,s=!1,a,r,n)=>{a=a??await t.getMarketPools(void 0,{indexer:s}),r=r??await t.getAllCoinPrices({marketPools:a.pools}),n=n??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),o);let[i,c,d]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:r,marketPools:a.pools}),t.getBorrowIncentiveAccounts(e)]),l={},u={},p={},f=0,y=h__default.default(0),b=h__default.default(0),m=h__default.default(0),g=0,w=0,k=h__default.default(0),A=h__default.default(0);for(let T of Array.from(t.constants.whitelist.collateral)){let P=i?.collaterals.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),x=a.collaterals[T],O=t.utils.getCoinDecimal(T),B=r?.[T],L=n?.[T]??0;if(x&&B){let v=h__default.default(P?.amount??0),j=v.shiftedBy(-1*O),K=j.multipliedBy(B),q=K.multipliedBy(x.collateralFactor),M=K.multipliedBy(x.liquidationFactor),U=h__default.default(L),X=U.shiftedBy(-1*O);y=y.plus(K),b=b.plus(q),m=m.plus(M),v.isGreaterThan(0)&&f++,l[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:j.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:q.toNumber(),requiredCollateralValue:M.toNumber(),availableDepositAmount:U.toNumber(),availableDepositCoin:X.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let F=[...new Set([...Object.values(a.pools).filter(T=>!!T).map(T=>T.coinName)])];for(let T of F){let P=i?.debts.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),x=a.pools[T],O=t.utils.getCoinDecimal(T),B=r?.[T],L=n?.[T]??0;if(x&&B){let v=P?.borrowIndex?x.borrowIndex/Number(P.borrowIndex)-1:0,j=h__default.default(P?.amount??0).multipliedBy(v+1),K=j.shiftedBy(-1*O),q=j,M=q.shiftedBy(-1*O),U=h__default.default(L),X=U.shiftedBy(-1*O),H=M.multipliedBy(B),fe=H.multipliedBy(x.borrowWeight);k=k.plus(H),A=A.plus(fe),j.isGreaterThan(0)&&g++,u[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,borrowedAmount:j.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:H.toNumber(),borrowedValueWithWeight:fe.toNumber(),borrowIndex:Number(P?.borrowIndex??0),requiredRepayAmount:q.toNumber(),requiredRepayCoin:M.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:U.toNumber(),availableRepayCoin:X.toNumber()};}}for(let[T,P]of Object.entries(d)){if(!P)continue;let x=T,O=c[x];if(O){let B=[];Object.entries(P.pointList).forEach(([L,v])=>{let j=O.points[t.utils.parseSCoinTypeNameToMarketCoinName(L)];if(v&&j){let K=h__default.default(0),q=h__default.default(0),M=h__default.default(v.weightedAmount),X=j.currentPointIndex?Math.max(h__default.default(j.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(M.multipliedBy(X).plus(v.points)),q=K.shiftedBy(-1*j.coinDecimal);let H=h__default.default(1e12),fe=h__default.default(v.weightedAmount).div(h__default.default(P.debtAmount).multipliedBy(j.baseWeight).dividedBy(H)).isFinite()?h__default.default(v.weightedAmount).div(h__default.default(P.debtAmount).multipliedBy(j.baseWeight).dividedBy(H)).toNumber():1;K.isGreaterThanOrEqualTo(0)&&B.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,weightedBorrowAmount:M.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:q.toNumber(),boostValue:fe});}}),Object.keys(O.points).some(L=>{let v=O.points[L]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&P.debtAmount>0&&w++,p[x]={coinName:O.coinName,coinType:O.coinType,symbol:O.symbol,coinDecimal:O.coinDecimal,coinPrice:O.coinPrice,rewards:B};}}let C=m.isZero()?A.isGreaterThan(0)?h__default.default(100):h__default.default(0):A.dividedBy(m);C=C.isLessThan(1)?C:h__default.default(1);let I=y.minus(k).isGreaterThan(0)?y.minus(k):h__default.default(0),_=b.minus(A).isGreaterThan(0)?b.minus(A):h__default.default(0),D=A.isGreaterThan(0)?m:h__default.default(0),Z=A.minus(D).isGreaterThan(0)?A.minus(D):h__default.default(0),V={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:y.toNumber(),totalBorrowedValue:k.toNumber(),totalBalanceValue:I.toNumber(),totalBorrowCapacityValue:b.toNumber(),totalAvailableCollateralValue:_.toNumber(),totalBorrowedValueWithWeight:A.toNumber(),totalRequiredCollateralValue:D.toNumber(),totalUnhealthyCollateralValue:Z.toNumber(),totalRiskLevel:C.toNumber(),totalDepositedPools:f,totalBorrowedPools:g,totalRewardedPools:w,collaterals:l,debts:u,borrowIncentives:p};for(let[T,P]of Object.entries(V.collaterals)){if(!P)continue;let x=a.collaterals[T];if(x){let O=h__default.default(V.totalAvailableCollateralValue).dividedBy(x.collateralFactor).dividedBy(x.coinPrice).shiftedBy(x.coinDecimal);O=V.totalBorrowedValueWithWeight===0?h__default.default(P.depositedAmount):ne(O.multipliedBy(we(h__default.default(V.totalAvailableCollateralValue).dividedBy(x.collateralFactor).toNumber(),3,"increase")).toNumber(),P.depositedAmount,x.depositAmount),P.availableWithdrawAmount=O.toNumber(),P.availableWithdrawCoin=O.shiftedBy(-1*P.coinDecimal).toNumber();}}for(let[T,P]of Object.entries(V.debts)){if(!P)continue;let x=a.pools[T];if(x){let O=h__default.default(P.requiredRepayAmount).multipliedBy(we(P.borrowedValue,3,"decrease")),B=h__default.default(V.totalAvailableCollateralValue).dividedBy(x.borrowWeight).shiftedBy(x.coinDecimal).dividedBy(x.coinPrice);B=V.totalAvailableCollateralValue!==0&&h__default.default(x.maxBorrowCoin).isGreaterThan(x.borrowCoin)?ne(B.multipliedBy(we(B.shiftedBy(-1*x.coinDecimal).multipliedBy(x.coinPrice).toNumber(),3,"increase")).toNumber(),x.supplyAmount):h__default.default(0),P.availableBorrowAmount=B.toNumber(),P.availableBorrowCoin=B.shiftedBy(-1*P.coinDecimal).toNumber(),P.requiredRepayAmount=O.toNumber(),P.requiredRepayCoin=O.shiftedBy(-1*P.coinDecimal).toNumber();}}return V},Ht=async(t,e=!1)=>{let o=await t.getMarketPools(void 0,{indexer:e}),s=h__default.default(0),a=h__default.default(0),r=h__default.default(0);if(e){let i=await t.indexer.getTotalValueLocked();return {supplyValue:i.supplyValue,supplyValueChangeRatio:i.supplyValueChangeRatio,borrowValue:i.borrowValue,borrowValueChangeRatio:i.borrowValueChangeRatio,totalValue:i.totalValue,totalValueChangeRatio:i.totalValueChangeRatio,supplyLendingValue:i.supplyLendingValue,supplyLendingValueChangeRatio:i.supplyLendingValueChangeRatio,supplyCollateralValue:i.supplyCollateralValue,supplyCollateralValueChangeRatio:i.supplyCollateralValueChangeRatio}}for(let i of Object.values(o.pools))i&&(s=s.plus(h__default.default(i.supplyCoin).multipliedBy(i.coinPrice)),r=r.plus(h__default.default(i.borrowCoin).multipliedBy(i.coinPrice)));for(let i of Object.values(o.collaterals))i&&(a=a.plus(h__default.default(i.depositCoin).multipliedBy(i.coinPrice)));return {supplyValue:s.plus(a).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:a.toNumber(),borrowValue:r.toNumber(),totalValue:s.plus(a).minus(r).toNumber()}},Jt=async(t,e,o=!1)=>{let s=await t.getAllCoinPrices({indexer:o}),a=await t.getMarketPools(void 0,{indexer:o,coinPrices:s}),[r,n,i,c]=await Promise.all([t.getLendings(void 0,e,{indexer:o,marketPools:a.pools,coinPrices:s}),t.getObligationAccounts(e,{indexer:o,market:a,coinPrices:s}),t.getBorrowIncentivePools(void 0,{marketPools:a.pools,coinPrices:s}),t.getVeScas({walletAddress:e,excludeEmpty:!0})]),d=Object.values(r).filter(m=>!!m&&m.availableWithdrawCoin>0).map(m=>({suppliedCoin:m.availableWithdrawCoin,suppliedValue:m.suppliedValue,stakedCoin:m.availableUnstakeCoin,coinName:m.coinName,symbol:m.symbol,coinType:m.coinType,coinPrice:m.coinPrice,coinDecimals:m.coinDecimal,supplyApr:m.supplyApr,supplyApy:m.supplyApy,incentiveApr:isFinite(m.rewardApr)?m.rewardApr:0})),l=Object.values(n).filter(m=>!!m&&(m.totalBorrowedValueWithWeight>0||m.totalDepositedValue>0)).map(m=>({obligationId:m.obligationId,totalDebtsInUsd:m.totalBorrowedValueWithWeight,totalCollateralInUsd:m.totalDepositedValue,riskLevel:m.totalRiskLevel,availableCollateralInUsd:m.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:m.totalUnhealthyCollateralValue,collaterals:Object.values(m.collaterals).filter(g=>!!g&&g.depositedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,depositedCoin:g.depositedCoin,depositedValueInUsd:g.depositedValue})),borrowedPools:Object.values(m.debts).filter(g=>!!g&&g.borrowedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,borrowedCoin:g.borrowedCoin,borrowedValueInUsd:g.borrowedValueWithWeight,borrowApr:a.pools[g.coinName]?.borrowApr,borrowApy:a.pools[g.coinName]?.borrowApy,incentiveInfos:Object.values(i[g.coinName]?.points??{}).filter(w=>!!w&&isFinite(w.rewardApr)).map(w=>({coinName:w.coinName,symbol:w.symbol,coinType:w.coinType,incentiveApr:w.rewardApr}))}))})),u="sui",p="SUI",f=Object.values(r).reduce((m,g)=>{if(g){if(g.availableClaimCoin===0)return m;m[u]?m[u].pendingRewardInCoin+=g.availableClaimCoin:m[u]={symbol:p,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:s[u]??0,pendingRewardInCoin:g.availableClaimCoin};}return m},{}),y=Object.values(n).filter(m=>!!m).reduce((m,g)=>(Object.values(g.borrowIncentives).forEach(w=>{w?.rewards.forEach(k=>{if(k.availableClaimCoin===0)return m;m[k.coinName]?m[k.coinName].pendingRewardInCoin+=k.availableClaimCoin:m[k.coinName]={symbol:k.symbol,coinType:k.coinType,coinPrice:k.coinPrice,pendingRewardInCoin:k.availableClaimCoin};});}),m),{}),b=c.map(({keyId:m,lockedScaCoin:g,currentVeScaBalance:w,unlockAt:k})=>({veScaKey:m,coinPrice:s.sca??0,lockedScaInCoin:g,lockedScaInUsd:g*(s.sca??0),currentVeScaBalance:w,remainingLockPeriodInDays:k-Date.now()>0?(k-Date.now())/864e5:0,unlockAt:k}));return {totalSupplyValue:d.reduce((m,g)=>(m+=g.suppliedValue,m),0),...l.reduce((m,g)=>(m.totalDebtValue+=g.totalDebtsInUsd,m.totalCollateralValue+=g.totalCollateralInUsd,m),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:b.reduce((m,g)=>(m+=g.lockedScaInUsd,m),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(f).reduce((m,[g,w])=>(m.push({...w,coinName:"sui",pendingRewardInUsd:w.coinPrice*w.pendingRewardInCoin}),m),[]),borrowIncentives:Object.entries(y).reduce((m,[g,w])=>(m.push({coinName:g,...w,pendingRewardInUsd:w.coinPrice*w.pendingRewardInCoin}),m),[])},veScas:b}};var Je=async({address:t,scallopSuiKit:e},o,s)=>{let a=t.get(`core.coins.${o}.oracle.pyth.feedObject`);if(s=s||(await e.queryGetObject(a))?.data,s){let r=s;if(r.content&&"fields"in r.content){let n=r.content.fields,i=Number(n.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),c=Number(n.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),d=Number(n.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(n.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return d*10**((c?-1:1)*i)*(l?-1:1)}}return 0},Zt=async({address:t,scallopSuiKit:e},o)=>{let s=o.reduce((n,i)=>{let c=t.get(`core.coins.${i}.oracle.pyth.feedObject`);return c&&(n[c]?n[c].push(i):n[c]=[i]),n},{}),r=(await e.queryGetObjects(Object.keys(s))).reduce((n,i)=>(s[i.objectId].forEach(c=>{n[c]=i;}),n),{});return (await Promise.all(Object.entries(r).map(async([n,i])=>({coinName:n,price:await Je({address:t,scallopSuiKit:e},n,i)})))).reduce((n,i)=>(n[i.coinName]=i.price,n),{})},eo=async(t,e,o,s=!1)=>{if(o=o??(s?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:o,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let a={};return t.constants.whitelist.scoin.forEach(r=>{let n=t.utils.parseCoinName(r);a[r]=h__default.default(o[n]??0).multipliedBy(e[n]?.conversionRate??1).toNumber();}),{...o,...a}};var to=async({address:t,scallopSuiKit:e},o)=>{let s=t.get("referral.bindingTableId"),a=await e.queryGetDynamicFieldObject({parentId:s,name:{type:"address",value:o}});return a?.data?.content?.dataType!=="moveObject"?null:a.data.content.fields.value};var oo=async({utils:t},e)=>{let o=t.address.get("scoin.id"),s=[t.getSCoinTreasury(e)],a=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],r=`${o}::s_coin_converter::total_supply`,i=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:s,typeArgs:a}))?.results;if(i&&i[0]?.returnValues){let c=Uint8Array.from(i[0].returnValues[0][0]),d=i[0].returnValues[0][1];return ns__default.default(d==="u64","Result type is not u64"),h__default.default(bcs.bcs.u64().parse(c)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},so=async({utils:t},e=[...t.constants.whitelist.scoin],o)=>{let s=o||t.suiKit.currentAddress,a={};return await Promise.allSettled(e.map(async r=>{let n=await et({utils:t},r,s);a[r]=n;})),a},et=async({utils:t},e,o)=>{let s=o||t.suiKit.currentAddress,a=t.parseSCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:a});return h__default.default(r?.totalBalance??"0").toNumber()},is=(t,e,o)=>{if(e===o)throw new Error("fromAsset and toAsset must be different");if(!t.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!t.constants.whitelist.scoin.has(o))throw new Error("toAsset is not supported")},ao=async(t,e,o,s)=>{is(t.utils,e,o);let a=t.utils.parseCoinName(e),r=t.utils.parseCoinName(o),n=await Promise.all([t.getMarketPool(a),t.getMarketPool(r)]);if(n.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(n.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let i=n[0].conversionRate,c=1/n[1].conversionRate,l=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[a]||!u[r])throw new Error("Failed to fetch the coin prices");if(u[r]===0)throw new Error("Price of toCoin cannot be zero");return u[a]/u[r]})();return h__default.default(i).multipliedBy(l).multipliedBy(c).toNumber()};var ro=async(t,e)=>{let o={spool:[],spoolReward:[],sCoinTreasury:[]},s=new Map;for(let l of e){let u=t.constants.poolAddresses[l],p={spool:u?.spool,spoolReward:u?.spoolReward,sCoinTreasury:u?.sCoinTreasury};Object.entries(p).forEach(([f,y])=>{y&&o[f].push(y);}),s.set(l,p);}let[a,r,n]=await Promise.all([t.scallopSuiKit.queryGetObjects(o.spool),t.scallopSuiKit.queryGetObjects(o.spoolReward),t.scallopSuiKit.queryGetObjects(o.sCoinTreasury)]),i=l=>new Map(l.map(u=>[u.objectId,u])),c={spool:i(a),spoolReward:i(r),sCoinTreasury:i(n)},d={};for(let[l,u]of s)d[l]={spool:u.spool?c.spool.get(u.spool):void 0,spoolReward:u.spoolReward?c.spoolReward.get(u.spoolReward):void 0,sCoinTreasury:u.sCoinTreasury?c.sCoinTreasury.get(u.sCoinTreasury):void 0};return d},cs=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let o=Q(t),s=Q(e);return {stakeType:o.stake_type,maxDistributedPoint:o.max_distributed_point,distributedPoint:o.distributed_point,distributedPointPerPeriod:o.distributed_point_per_period,pointDistributionTime:o.point_distribution_time,maxStake:o.max_stakes,stakes:o.stakes,index:o.index,createdAt:o.created_at,lastUpdate:o.last_update,...s}},no=async(t,e=[...t.constants.whitelist.spool],o=!1,s,a)=>{let r=e.map(c=>t.utils.parseCoinName(c));if(s=s??(await t.getMarketPools(r,{indexer:o})).pools,a=a??await t.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${r}`);let n={};if(o){let c=await t.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=t.utils.parseCoinName(l.marketCoinName),p=t.utils.getSpoolRewardCoinName();l.coinPrice=a[u]??l.coinPrice,l.marketCoinPrice=a[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=a[p]??l.rewardCoinPrice,n[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),n}let i=await ro(t,r);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=r[d],u=await ls(t,c,o,a,i[l]);u&&(n[c]=u);}catch(l){console.error(l);}})),n},ls=async(t,e,o=!1,s,a)=>{let r=t.utils.parseCoinName(e);if(s=s||await t.getAllCoinPrices(),o){let m=await t.indexer.getSpool(e),g=t.utils.parseCoinName(e),w=t.utils.getSpoolRewardCoinName();return m.coinPrice=s?.[g]??m.coinPrice,m.marketCoinPrice=s?.[e]??m.marketCoinPrice,m.rewardCoinPrice=s?.[w]??m.rewardCoinPrice,m}a??=(await ro(t,[r]))[r];let n=t.utils.getSpoolRewardCoinName();s=s||await t.utils.getCoinPrices();let i=cs(a),c=Tt(i),d=s?.[e]??0,l=t.utils.getCoinDecimal(e),u=At(c,d,l),p=Pt(i),f=s?.[n]??0,y=t.utils.getCoinDecimal(n),b=xt(c,p,u,f,y);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(r),marketCoinType:t.utils.parseMarketCoinType(r),rewardCoinType:t.utils.isMarketCoin(n)?t.utils.parseMarketCoinType(n):t.utils.parseCoinType(n),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(r),rewardCoinDecimal:t.utils.getCoinDecimal(n),coinPrice:s?.[r]??0,marketCoinPrice:d,rewardCoinPrice:f,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:p.exchangeRateNumerator,exchangeRateDenominator:p.exchangeRateDenominator,...b}},le=async({utils:t},e)=>{let o=e||t.suiKit.currentAddress,s=t.address.get("spool.object"),a=`${s}::spool_account::SpoolAccount`,r=[],n=!1,i=null;do{let u=await t.scallopSuiKit.queryGetOwnedObjects({owner:o,filter:{StructType:a},options:{showContent:!0,showType:!0},cursor:i,limit:10});u&&(r.push(...u.data),u.hasNextPage&&u.nextCursor?(n=!0,i=u.nextCursor):n=!1);}while(n);let c=[...t.constants.whitelist.spool].reduce((u,p)=>(u[p]=[],u),{}),d=Object.keys(c).reduce((u,p)=>{let f=t.parseCoinName(p),y=t.parseMarketCoinType(f);return u[p]=`${s}::spool_account::SpoolAccount<${y}>`,u},{}),l=Object.entries(d).reduce((u,[p,f])=>(u[f]=p,u),{});for(let u of r.map(p=>p.data)){let p=u?.objectId,f=u?.type;if(p&&u?.content&&"fields"in u.content){let y=u.content.fields,b=String(y.spool_id),m=String(y.stake_type.fields.name),g=Number(y.stakes),w=Number(y.index),k=Number(y.points),A=Number(y.total_points),F={sweth:c.sweth,ssui:c.ssui,swusdc:c.swusdc,swusdt:c.swusdt,scetus:c.scetus,safsui:c.safsui,shasui:c.shasui,svsui:c.svsui,susdc:c.susdc},C=utils.normalizeStructTag(f),I=F[l[C]];I&&I.push({id:p,type:C,stakePoolId:b,stakeType:utils.normalizeStructTag(m),staked:g,index:w,points:k,totalPoints:A});}}return c},tt=async({utils:t},e)=>{let o=t.address.get(`spool.pools.${e}.id`),s,a=await t.scallopSuiKit.queryGetObject(o);if(a?.data){let r=a.data,n=r.objectId,i=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),f=Number(c.max_stakes),y=String(c.stake_type.fields.name),b=Number(c.stakes),m=Number(c.index),g=Number(c.created_at),w=Number(c.last_update);s={id:n,type:utils.normalizeStructTag(i),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:f,stakeType:utils.normalizeStructTag(y),totalStaked:b,index:m,createdAt:g,lastUpdate:w};}}return s},ot=async({utils:t},e)=>{let o=t.address.get(`spool.pools.${e}.rewardPoolId`),s,a=await t.scallopSuiKit.queryGetObject(o);if(a?.data){let r=a.data,n=r.objectId,i=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),f=Number(c.claimed_rewards);s={id:n,type:utils.normalizeStructTag(i),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:f};}}return s};var ys=async(t,e)=>{let o=e||t.suiKit.currentAddress,a=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,r=[],n=!1,i=null;do{let d=await t.scallopSuiKit.queryGetOwnedObjects({owner:o,filter:{StructType:a},cursor:i,limit:10});d&&(r.push(...d.data),d&&d.hasNextPage&&d.nextCursor?(n=!0,i=d.nextCursor):n=!1);}while(n);return r.map(d=>d.data).filter(d=>!!d)},Pe=async({utils:t},e,o)=>{let s=await ys(t,e),a=Array(s.length).fill(null),r=s.map(async(i,c)=>{let d=await de(t,i);d&&(a[c]=d);});await Promise.allSettled(r);let n=a.filter(Boolean).sort((i,c)=>c.currentVeScaBalance-i.currentVeScaBalance);return o?n.filter(i=>i.lockedScaAmount!=="0"):n},io=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),de=async(t,e)=>{let o=t.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=io.parse(e));let s,a=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!a)return;let r=a.data;if(r&&r.content&&r.content.dataType==="moveObject"&&"fields"in r.content){let n=r.content.fields.value.fields,i=Math.max(+n.unlock_at*1e3-Date.now(),0),c=String(n.locked_sca_amount),d=h__default.default(n.locked_sca_amount).shiftedBy(-9).toNumber(),l=d*(Math.floor(i/1e3)/126144e3);s={id:r.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:io.parse(a.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:h__default.default(n.unlock_at*1e3).toNumber()};}return s},fs=async(t,e)=>{let o=t.address.get("vesca.id"),s=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let a=new suiKit.SuiTxBlock,r=a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}),n=`${o}::treasury::refresh`,i=[s,e,r],c=`${o}::treasury::total_ve_sca_amount`,d=[e,r],l=await Promise.all(i.map(async b=>typeof b=="string"?(await t.scallopSuiKit.queryGetObject(b))?.data:b)),u=await Promise.all(d.map(async b=>typeof b=="string"?(await t.scallopSuiKit.queryGetObject(b))?.data:b));a.moveCall(n,l),a.moveCall(c,u);let p=await a.txBlock.build({client:t.suiKit.client,onlyTransactionKind:!0}),y=(await t.scallopSuiKit.queryClient.fetchQuery({queryKey:N.rpc.getTotalVeScaTreasuryAmount({refreshArgs:i,vescaAmountArgs:d,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(p)})).results;if(y&&y[1]?.returnValues){let b=Uint8Array.from(y[1].returnValues[0][0]),m=y[1].returnValues[0][1];return ns__default.default(m==="u64","Result type is not u64"),bcs.bcs.u64().parse(b)}return "0"},co=async t=>{let e=t.address.get("vesca.treasury"),o=await t.scallopSuiKit.queryGetObject(e);if(!o||o.data?.content?.dataType!=="moveObject")return null;let s=o.data.content.fields,a=h__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),r=h__default.default(await fs(t,o.data)??0).shiftedBy(-9).toNumber(),n=a>0?r/a*4:0;return {totalLockedSca:a,totalVeSca:r,averageLockingPeriod:n,averageLockingPeriodUnit:"year"}};var hs=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"],xe=async t=>{for(let e of hs)try{return await t(new client.SuiClient({url:e}))}catch(o){if(o.status!==429)throw o;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},ws=async(t,e,o="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,a=!1,r={};do{let n=await t.getDynamicFields({parentId:o,limit:10,cursor:s});if(!n)break;let{data:i,hasNextPage:c,nextCursor:d}=n;i.forEach(l=>{let u=`0x${l.name.value.name}`;e.has(u)&&(r[u]=l.objectId);}),a=c,s=d;}while(a);return r},Y=async(t,e,o,s=!0)=>{let a=(await xe(async r=>await r.getDynamicFieldObject({parentId:t,name:{type:e,value:o}}))).data;return s?a?.objectId:a?.content},lo=async(t,e=[])=>{let o=new Set(e),s={},r=(await fetch(`https://sui.apis.scallop.io/addresses/${t}`).then(C=>C.json())).mainnet;if(!r)throw new Error("Failed to fetch addresses");let n=Object.keys(r.core.coins);if(n.length===0)throw new Error("Pools empty");let i=n.reduce((C,I)=>{if(o.size>0&&!o.has(I))return C;let _=r.core.coins[I];return _&&_.coinType&&C.push([I,_.coinType]),C},[]);if(i.length===0)throw new Error("No coinTypesPairs");let c=r.core.market,d=(await xe(async C=>await C.getObject({id:c,options:{showContent:!0}}))).data;if(!(d&&d.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let l=d.content.fields,u=l.vault.fields.balance_sheets.fields.table.fields.id.id,p=l.collateral_stats.fields.table.fields.id.id,f=l.borrow_dynamics.fields.table.fields.id.id,y=l.interest_models.fields.table.fields.id.id,b=l.risk_models.fields.table.fields.id.id,m="0x1::type_name::TypeName",g="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",w="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",k="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",A="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",F=await xe(async C=>await ws(C,new Set(i.map(([,I])=>I))));return await Promise.all(i.map(async([C,I])=>{let _=I.slice(2),D=await Promise.all([Y(u,m,{name:_},!0),Y(p,m,{name:_},!0),Y(f,m,{name:_},!0),Y(y,m,{name:_},!0),Y(b,m,{name:_},!0),Y(c,g,_,!0),Y(c,w,_,!0),Y(c,k,_,!0),Y(c,A,_,!1)]),{symbol:Z,metaData:V}=r.core.coins[C],T={spool:"",spoolReward:""},P=r.spool.pools[`s${C}`];if(P){let{id:M,rewardPoolId:U}=P;T={spool:M,spoolReward:U};}let x={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},O=`s${C}`,B=r.scoin.coins[O];if(B){let{coinType:M,treasury:U,metaData:X,symbol:H}=B;x={sCoinType:M,sCoinTreasury:U,sCoinMetadataId:X,sCoinSymbol:H};}let L={pythFeed:"",pythFeedObjectId:""};if(r.core.coins[C]?.oracle.pyth){let{feed:M,feedObject:U}=r.core.coins[C].oracle.pyth;L={pythFeed:M,pythFeedObjectId:U};}r.core.coins[C].oracle.pyth;let K=(await xe(async M=>await M.getCoinMetadata({coinType:I})))?.decimals??0,q=T?`s${C}`:void 0;s[C]={coinName:C,symbol:Z,lendingPoolAddress:D[0]??"",collateralPoolAddress:D[1]??"",borrowDynamic:D[2]??"",interestModel:D[3]??"",riskModel:D[4],borrowFeeKey:D[5]??"",supplyLimitKey:D[6]??"",borrowLimitKey:D[7]??"",isolatedAssetKey:D[8]?.fields?.id.id??"",isIsolated:D[8]?.fields?.value??!1,...T,...x,sCoinName:O,coinMetadataId:V,coinType:I,spoolName:q,decimals:K,...L,flashloanFeeObject:F[I]??""},await new Promise(M=>setTimeout(M,1e3));})),s};var uo=async(t,e,o=t.address.get("core.oracles.switchboard.registryTableId"))=>{let s=[],a=e.map((i,c)=>{let d=t.utils.address.get(`core.coins.${i}.oracle.switchboard`);return d||(s.push({idx:c,coinName:i}),null)});if(s.length===0)return a;let n=s.map(i=>i.coinName).map(i=>{let c=t.utils.parseCoinType(i);if(!c)throw new Error(`Invalid coin name: ${i}`);return c});return await Promise.all(n.map(async(i,c)=>{let d={type:"0x1::type_name::TypeName",value:{name:i.slice(2)}},l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:d});if(!l?.data?.content||l.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${i}`);let u=l.data.content;a[c]=u.fields.value;})),a};var po=async({address:t,scallopSuiKit:e})=>{let o=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[s,a]=await Promise.all([e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:o,value:{dummy_field:!1}}}),e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:o,value:{dummy_field:!1}}})]);return {primary:s,secondary:a}},st=async(t,e)=>{if(e==="primary"&&!t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"))return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"))return console.error("Secondary price update policy vecset id is not set"),null;let o={[`${t.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${t.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${t.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},s={},a=null;do{let r=await t.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:a,limit:10});if(!r)break;let{data:n,hasNextPage:i,nextCursor:c}=r;a=c;let d=n.map(u=>u.objectId);if((await t.scallopSuiKit.queryGetObjects(d)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let p=u.content.fields,f=p.name.fields.name,y=t.parseCoinNameFromType(`0x${f}`);if(!y)throw new Error(`Invalid asset name: ${y}`);s[y]||(s[y]=[]),p.value.fields.contents.forEach(m=>{s[y].push(o[`0x${m.fields.name}`]);});}),!i)break}while(a);return s};var mo=async(t,e,o)=>{let s=new pythSuiJs.SuiPythClient(t.suiKit.client,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState")),a=e.map(n=>t.address.get(`core.coins.${n}.oracle.pyth.feed`)),r=t.utils.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let n of r)try{let c=await new pythSuiJs.SuiPriceServiceConnection(n).getPriceFeedsUpdateData(a);await s.updatePriceFeeds(o.txBlock,c,a);break}catch(i){console.warn(`Failed to update price feeds with endpoint ${n}: ${i}`);}};var ue=async(t,e,o=[...t.constants.whitelist.lending],s={usePythPullModel:!0,useOnChainXOracleList:!0})=>{let a=t.usePythPullModel??s.usePythPullModel,n=t.useOnChainXOracleList??s.useOnChainXOracleList?await t.query.getAssetOracles():wt,i=new Set(Object.values(n).flatMap(({primary:l,secondary:u})=>[...l,...u])),c=(l,u)=>{let p=n[l];return p&&(p.primary.includes(u)||p.secondary.includes(u))};i.has("pyth")&&a&&o.filter(u=>c(u,"pyth")).length>0&&await mo(t,o,e);let d=[...new Set(o)];for(let l of d)ks(t,e,l,n[l]);},ks=(t,e,o,s)=>{let a=t.utils.parseCoinType(o);Ts(e,s,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${o}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${o}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),a);},Ts=(t,e,o,s,a,r,n,i,c,d,l,u,p,f,y)=>{let b=As(t,o,s,y);return Object.entries(e).forEach(([m,g])=>{g.includes("pyth")&&Rs(m,t,a,b,n,i,r,y),g.includes("supra")&&xs(m,t,u,b,f,p,y),g.includes("switchboard")&&Os(m,t,c,b,l,d,y);}),Ps(t,o,s,b,y),t},As=(t,e,o,s)=>{let a=`${e}::x_oracle::price_update_request`,r=[s];return t.moveCall(a,[o],r)},Ps=(t,e,o,s,a)=>{let r=`${e}::x_oracle::confirm_price_update_request`,n=[a];return t.moveCall(r,[o,s,t.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],n),t},xs=(t,e,o,s,a,r,n)=>{e.moveCall(`${o}::rule::set_price_as_${t}`,[s,a,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[n]);},Os=(t,e,o,s,a,r,n)=>{e.moveCall(`${o}::rule::set_as_${t}_price`,[s,a,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[n]);},Rs=(t,e,o,s,a,r,n,i)=>{e.moveCall(`${o}::rule::set_price_as_${t}`,[s,a,r,n,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[i]);};var pe=async(...t)=>{let[e,o,s,a]=t;if(t.length===3&&s)return {obligationId:s};if(t.length===4&&s&&a)return {obligationId:s,obligationKey:a};let r=R(o),n=await se(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);return {obligationId:n[0].id,obligationKey:n[0].keyId}},js=({builder:t,txBlock:e})=>{let o={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")},a=`${t.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,r=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {openObligation:()=>{let[n,i,c]=t.moveCall(e,`${o.protocolPkg}::open_obligation::open_obligation`,[o.version]);return [n,i,c]},returnObligation:(n,i)=>{t.moveCall(e,`${o.protocolPkg}::open_obligation::return_obligation`,[o.version,n,i]);},openObligationEntry:()=>{t.moveCall(e,`${o.protocolPkg}::open_obligation::open_obligation_entry`,[o.version]);},addCollateral:(n,i,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${o.protocolPkg}::deposit_collateral::deposit_collateral`,[o.version,n,o.market,i],[d]);},takeCollateral:(n,i,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${o.protocolPkg}::withdraw_collateral::withdraw_collateral`,[o.version,n,i,o.market,o.coinDecimalsRegistry,e.pure.u64(c),o.xOracle,r],[l])},deposit:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.protocolPkg}::mint::mint`,[o.version,o.market,n,r],[c])},depositEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.protocolPkg}::mint::mint_entry`,[o.version,o.market,n,r],[c])},withdraw:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.protocolPkg}::redeem::redeem`,[o.version,o.market,n,r],[c])},withdrawEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.protocolPkg}::redeem::redeem_entry`,[o.version,o.market,n,r],[c])},borrow:(n,i,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow`,[o.version,n,i,o.market,o.coinDecimalsRegistry,c,o.xOracle,r],[l])},borrowWithReferral:(n,i,c,d,l)=>{let u=t.utils.parseCoinType(l);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow_with_referral`,[o.version,n,i,o.market,o.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,o.xOracle,r],[u,a])},borrowEntry:(n,i,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow_entry`,[o.version,n,i,o.market,o.coinDecimalsRegistry,e.pure.u64(c),o.xOracle,r],[l])},repay:(n,i,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${o.protocolPkg}::repay::repay`,[o.version,n,o.market,i,r],[d]);},borrowFlashLoan:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.protocolPkg}::flash_loan::borrow_flash_loan`,[o.version,o.market,n],[c])},repayFlashLoan:(n,i,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${o.protocolPkg}::flash_loan::repay_flash_loan`,[o.version,o.market,n,i],[d]);}}},Ns=({builder:t,txBlock:e})=>({addCollateralQuick:async(o,s,a)=>{let r=R(e),{obligationId:n}=await pe(t,e,a);if(s==="sui"){let[i]=e.splitSUIFromGas([o]);e.addCollateral(n,i,s);}else {let{leftCoin:i,takeCoin:c}=await t.selectCoin(e,s,o,r);e.addCollateral(n,c,s),e.transferObjects([i],r);}},takeCollateralQuick:async(o,s,a,r)=>{let n=await pe(t,e,a,r),i=await t.utils.getObligationCoinNames(n.obligationId);return await ue(t,e,i),e.takeCollateral(n.obligationId,n.obligationKey,o,s)},depositQuick:async(o,s,a=!0)=>{let r=R(e),n;if(s==="sui"){let[i]=e.splitSUIFromGas([o]);n=e.deposit(i,s);}else {let{leftCoin:i,takeCoin:c}=await t.selectCoin(e,s,o,r);e.transferObjects([i],r),n=e.deposit(c,s);}return a?e.mintSCoin(t.utils.parseMarketCoinName(s),n):n},withdrawQuick:async(o,s)=>{let a=R(e),r=t.utils.parseSCoinName(s);if(!r)throw new Error(`No sCoin for ${s}`);let{sCoin:n,marketCoin:i}=await t.selectSCoinOrMarketCoin(e,r,o,a);if(n){let c=e.burnSCoin(r,n);i?e.mergeCoins(i,[c]):i=c;}if(!i)throw new Error(`No market coin for ${s}`);return e.withdraw(i,s)},borrowQuick:async(o,s,a,r)=>{let n=await pe(t,e,a,r),c=[...await t.utils.getObligationCoinNames(n.obligationId)??[],s];return await ue(t,e,c),e.borrow(n.obligationId,n.obligationKey,o,s)},borrowWithReferralQuick:async(o,s,a,r,n)=>{let i=await pe(t,e,r,n),d=[...await t.utils.getObligationCoinNames(i.obligationId)??[],s];return await ue(t,e,d),e.borrowWithReferral(i.obligationId,i.obligationKey,a,o,s)},repayQuick:async(o,s,a)=>{let r=R(e),n=await pe(t,e,a);if(s==="sui"){let[i]=e.splitSUIFromGas([o]);return e.repay(n.obligationId,i,s)}else {let{leftCoin:i,takeCoin:c}=await t.selectCoin(e,s,o,r);return e.transferObjects([i],r),e.repay(n.obligationId,c,s)}},updateAssetPricesQuick:async o=>await ue(t,e,o)}),fo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=js({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=Ns({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var go=async(...t)=>{let[e,o,s,a]=t;if(t.length===4&&a)return [a];let r=R(o),n=await le(e,r);if(n[s].length===0)throw new Error(`No stake account id found for sender ${r}`);return n[s].map(i=>i.id)},Ms=async(...t)=>{let[e,o,s,a]=t,r=R(o),n=await le(e,r);if(n[s].length===0)throw new Error(`No stake account found for sender ${r}`);return a?n[s].filter(c=>c.id===a):n[s]},ho=async(t,e,o,s,a,r,n=!1)=>{try{let{takeCoin:i,leftCoin:c,totalAmount:d}=n?await t.selectSCoin(e,s,a,r):await t.selectMarketCoin(e,s,a,r);if(n){let l=e.burnSCoin(s,i);e.stake(o,l,s);}else e.stake(o,i,s);return e.transferObjects([c],r),d}catch{return 0}},Ds=({builder:t,txBlock:e})=>{let o={spoolPkg:t.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {createStakeAccount:a=>{let r=t.utils.parseMarketCoinType(a),n=t.address.get(`spool.pools.${a}.id`);return t.moveCall(e,`${o.spoolPkg}::user::new_spool_account`,[n,s],[r])},stake:(a,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);t.moveCall(e,`${o.spoolPkg}::user::stake`,[c,a,r,s],[i]);},unstake:(a,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);return t.moveCall(e,`${o.spoolPkg}::user::unstake`,[c,a,r,s],[i])},claim:(a,r)=>{let n=t.address.get(`spool.pools.${r}.id`),i=t.address.get(`spool.pools.${r}.rewardPoolId`),c=t.utils.parseMarketCoinType(r),d=t.utils.getSpoolRewardCoinName(),l=t.utils.parseCoinType(d);return t.moveCall(e,`${o.spoolPkg}::user::redeem_rewards`,[n,i,a,s],[c,l])}}},Fs=({builder:t,txBlock:e})=>({stakeQuick:async(o,s,a)=>{let r=R(e),n=await go(t,e,s,a);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof o=="number"){let i=await ho(t,e,n[0],s,o,r);o-=i,o>0&&await ho(t,e,n[0],s,o,r,!0);}else e.stake(n[0],o,s);},unstakeQuick:async(o,s,a,r=!0)=>{let n=await Ms(t,e,s,a),i=[];for(let c of n){if(c.staked===0)continue;let d=Math.min(o,c.staked),l=await e.unstake(c.id,d,s);if(r){let u=await e.mintSCoin(s,l);i.push(u);}else i.push(l);if(o-=d,o<=0)break}if(i.length>0){let c=i[0];return i.length>1&&e.mergeCoins(c,i.slice(1)),c}},claimQuick:async(o,s)=>{let a=await go(t,e,o,s),r=[];for(let n of a){let i=await e.claim(n,o);r.push(i);}return r}}),wo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ds({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=Fs({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Re=async(...t)=>{let[e,o,s,a]=t;if(t.length===4&&s&&a&&typeof s=="string"){let c=await ze(e,s);return {obligationId:s,obligationKey:a,obligationLocked:c}}let r=R(o),n=await se(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);let i=n.find(c=>c.id===s||c.keyId===a)??n[0];return {obligationId:i.id,obligationKey:i.keyId,obligationLocked:i.locked}},Es=({builder:t,txBlock:e})=>{let o={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),config:t.address.get("borrowIncentive.config"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore")},s={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},a=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {stakeObligation:(r,n)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::stake`,[o.config,o.incentivePools,o.incentiveAccounts,n,r,o.obligationAccessStore,a]);},stakeObligationWithVesca:(r,n,i)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::stake_with_ve_sca`,[o.config,o.incentivePools,o.incentiveAccounts,n,r,o.obligationAccessStore,s.config,s.treasury,s.table,i,a],[]);},unstakeObligation:(r,n)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::unstake`,[o.config,o.incentivePools,o.incentiveAccounts,n,r,a]);},claimBorrowIncentive:(r,n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${o.borrowIncentivePkg}::user::redeem_rewards`,[o.config,o.incentivePools,o.incentiveAccounts,n,r,a],[c])},deactivateBoost:(r,n)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::deactivate_boost`,[o.config,o.incentivePools,o.incentiveAccounts,r,n,a]);}}},Vs=({builder:t,txBlock:e})=>({stakeObligationQuick:async(o,s)=>{let{obligationId:a,obligationKey:r,obligationLocked:n}=await Re(t,e,o,s),i=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${Le}::user::unstake`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!n||i)&&e.stakeObligation(a,r);},stakeObligationWithVeScaQuick:async(o,s,a)=>{let{obligationId:r,obligationKey:n,obligationLocked:i}=await Re(t,e,o,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Le}::user::unstake`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!i||c){let l=await t.query.getBindedVeScaKey(r)??a;l?e.stakeObligationWithVesca(r,n,l):e.stakeObligation(r,n);}},unstakeObligationQuick:async(o,s)=>{let{obligationId:a,obligationKey:r,obligationLocked:n}=await Re(t,e,o,s);n&&e.unstakeObligation(a,r);},claimBorrowIncentiveQuick:async(o,s,a)=>{let{obligationId:r,obligationKey:n}=await Re(t,e,s,a);return e.claimBorrowIncentive(r,n,o)}}),Co=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Es({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=Vs({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var me=async(...t)=>{let[e,o,s]=t;if(t.length===3&&s&&typeof s=="string"){let n=await de(e.utils,s);return n||void 0}let a=R(o),r=await Pe(e,a);if(r.length!==0)return s?r.find(({keyId:n})=>s===n):r[0]},Qs=({builder:t,txBlock:e})=>{let o={pkgId:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {lockSca:(a,r)=>t.moveCall(e,`${o.pkgId}::ve_sca::mint_ve_sca_key`,[o.config,o.table,o.treasury,a,r,s],[]),extendLockPeriod:(a,r)=>{t.moveCall(e,`${o.pkgId}::ve_sca::extend_lock_period`,[o.config,a,o.table,o.treasury,r,s],[]);},extendLockAmount:(a,r)=>{t.moveCall(e,`${o.pkgId}::ve_sca::lock_more_sca`,[o.config,a,o.table,o.treasury,r,s],[]);},renewExpiredVeSca:(a,r,n)=>{t.moveCall(e,`${o.pkgId}::ve_sca::renew_expired_ve_sca`,[o.config,a,o.table,o.treasury,r,n,s],[]);},redeemSca:a=>t.moveCall(e,`${o.pkgId}::ve_sca::redeem`,[o.config,a,o.table,o.treasury,s],[]),mintEmptyVeSca:()=>t.moveCall(e,`${o.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,[o.config,o.table],[])}},$s=({builder:t,txBlock:e})=>({lockScaQuick:async(o,s,a=!0)=>{let r=R(e),n=await me(t,e),i,c=[];if(o!==void 0&&typeof o=="number"){let p=await t.utils.selectCoins(o,be,r),[f,y]=e.takeAmountFromCoins(p,o);i=f,c.push(y);}else i=o;let d=t.utils.getUnlockAt(s,n?.unlockAt);a&&St(o,s,d,n?.unlockAt);let l=!n?.unlockAt,u=!l&&n.unlockAt*1e3<=new Date().getTime();if(l||u){if(i)if(l){let p=e.lockSca(i,d);c.push(p);}else {if(n.lockedScaCoin!==0){let p=e.redeemSca(n.keyId);c.push(p);}e.renewExpiredVeSca(n.keyId,i,d);}}else i&&s?(e.extendLockPeriod(n.keyId,d),e.extendLockAmount(n.keyId,i)):s?e.extendLockPeriod(n.keyId,d):i&&e.extendLockAmount(n.keyId,i);c.length>0&&e.transferObjects(c,r);},extendLockPeriodQuick:async(o,s,a=!0)=>{let r=await me(t,e,s),n=t.utils.getUnlockAt(o,r?.unlockAt);a&&Qe(o,n,r?.unlockAt),r&&e.extendLockPeriod(r.keyId,n);},extendLockAmountQuick:async(o,s,a=!0)=>{let r=R(e),n=await me(t,e,s);if(a&&Ct(o,n?.unlockAt),n){let i=await t.utils.selectCoins(o,be,r),[c,d]=e.takeAmountFromCoins(i,o);e.extendLockAmount(n.keyId,c),e.transferObjects([d],r);}},renewExpiredVeScaQuick:async(o,s,a,r=!0)=>{let n=R(e),i=await me(t,e,a),c=t.utils.getUnlockAt(s,i?.unlockAt);if(r&&kt(o,s,i?.unlockAt),i){let d=[];if(i.lockedScaCoin!==0){let f=e.redeemSca(i.keyId);d.push(f);}let l=await t.utils.selectCoins(o,be,n),[u,p]=e.takeAmountFromCoins(l,o);d.push(p),e.renewExpiredVeSca(i.keyId,u,c),e.transferObjects(d,n);}},redeemScaQuick:async(o,s=!0)=>{let a=R(e),r=await me(t,e,o);if(re(r?.unlockAt),r){let n=e.redeemSca(r.keyId);if(s){e.transferObjects([n],a);return}return n}}}),To=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Qs({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=$s({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var zs=({builder:t,txBlock:e})=>{let o={referralPgkId:t.address.get("referral.id"),referralBindings:t.address.get("referral.referralBindings"),referralRevenuePool:t.address.get("referral.referralRevenuePool"),authorizedWitnessList:t.address.get("referral.authorizedWitnessList"),referralTiers:t.address.get("referral.referralTiers"),version:t.address.get("referral.version")},s=t.address.get("vesca.table"),a=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {bindToReferral:r=>{t.moveCall(e,`${o.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[o.referralBindings,e.pure.id(r),s,a],[]);},claimReferralTicket:r=>{let n=t.utils.parseCoinType(r);return t.moveCall(e,`${o.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[o.version,s,o.referralBindings,o.authorizedWitnessList,o.referralTiers,a],[n])},burnReferralTicket:(r,n)=>{let i=t.utils.parseCoinType(n);t.moveCall(e,`${o.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[o.version,r,o.referralRevenuePool,a],[i]);},claimReferralRevenue:(r,n)=>{let i=t.utils.parseCoinType(n);return t.moveCall(e,`${o.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[o.version,o.referralRevenuePool,r,a],[i])}}},Xs=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(o,s=[...t.constants.whitelist.lending])=>{let a=R(e),r=[];for(let n of s)if(n==="sui"){let i=await e.claimReferralRevenue(o,n);r.push(i);}else {let i=await e.claimReferralRevenue(o,n);try{let c=await t.suiKit.suiInteractor.selectCoins(a,1/0,t.utils.parseCoinType(n));e.mergeCoins(i,c.slice(0,500));}catch{}finally{r.push(i);}}r.length>0&&e.transferObjects(r,a);}}),Po=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=zs({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=Xs({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Hs=({builder:t,txBlock:e})=>{let o={loyaltyProgramPkgId:t.address.get("loyaltyProgram.id"),rewardPool:t.address.get("loyaltyProgram.rewardPool"),userRewardTableId:t.address.get("loyaltyProgram.userRewardTableId")};return {claimLoyaltyRevenue:s=>t.moveCall(e,`${o.loyaltyProgramPkgId}::reward_pool::redeem_reward`,[o.rewardPool,s])}},Js=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async o=>{o=o??(await t.query.getVeScas())[0]?.keyObject;let s=R(e);if(!o)throw new Error(`No veScaKey found for user ${s}`);let a=e.claimLoyaltyRevenue(o),r=t.constants.coinTypes.sca;if(!r)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,a,r,R(e)),e.transferObjects([a],s);}}),Oo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Hs({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=Js({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ea=({builder:t,txBlock:e})=>{let o={pkgId:t.address.get("scoin.id")};return {mintSCoin:(s,a)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid marketCoinName name: ${s}`);return t.moveCall(e,`${o.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(s),a],[r,t.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,a)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid sCoin name: ${s}`);return t.moveCall(e,`${o.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(s),a],[r,t.utils.parseUnderlyingSCoinType(s)])}}},ta=({builder:t,txBlock:e})=>({mintSCoinQuick:async(o,s)=>{let a=R(e),{leftCoin:r,takeCoin:n}=await t.selectMarketCoin(e,o,s,a);return e.transferObjects([r],a),e.mintSCoin(o,n)},burnSCoinQuick:async(o,s)=>{let a=R(e),{leftCoin:r,takeCoin:n}=await t.selectSCoin(e,o,s,a);return e.transferObjects([r],a),e.burnSCoin(o,n)}}),Io=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=ea({builder:t,txBlock:o}),a=new Proxy(o,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),r=ta({builder:t,txBlock:a});return new Proxy(a,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var vo=(t,e)=>{let o=To(t,e),s=Oo(t,o),a=Co(t,s),r=Po(t,a),n=Io(t,r),i=wo(t,n),c=fo(t,i);return new Proxy(c,{get:(d,l)=>l in o?Reflect.get(o,l):l in a?Reflect.get(a,l):l in r?Reflect.get(r,l):l in i?Reflect.get(i,l):l in s?Reflect.get(s,l):l in n?Reflect.get(n,l):Reflect.get(d,l)})};var at=class{_queryClient;constructor(e={}){this._queryClient=e.queryClient??new queryCore.QueryClient(this.defaultQueryClientConfig);}get queryClient(){return this._queryClient}set queryClient(e){this._queryClient=e;}get defaultQueryClientConfig(){return bt}},ye=at;var rt=class extends ye{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??sa__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,o,s,a){if(Array.isArray(o)){let r=o,n=s,i=a;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.post(e,n,i).then(c=>c)})}else {let r=o,n=s;return this.axiosInstance.post(e,r,n)}}async get(e,o,s){if(Array.isArray(o)){let a=o,r=s;return this.queryClient.fetchQuery({queryKey:a,queryFn:()=>this.axiosInstance.get(e,r).then(n=>n)})}else {let a=o;return this.axiosInstance.get(e,a)}}async put(e,o,s,a){if(Array.isArray(o)){let r=o,n=s,i=a;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.put(e,n,i).then(c=>c)})}else {let r=o,n=s;return this.axiosInstance.put(e,r,n)}}async delete(e,o,s){if(Array.isArray(o)){let a=o,r=s;return this.queryClient.fetchQuery({queryKey:a,queryFn:()=>this.axiosInstance.delete(e,r).then(n=>n)})}else {let a=o;return this.axiosInstance.delete(e,a)}}},te=rt;var jo={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:""}},packages:{coinDecimalsRegistry:{id:"",upgradeCap:""},math:{id:"",upgradeCap:""},whitelist:{id:"",upgradeCap:""},x:{id:"",upgradeCap:""},protocol:{id:"",upgradeCap:""},protocolWhitelist:{id:"",upgradeCap:""},query:{id:"",upgradeCap:""},supra:{id:"",upgradeCap:""},pyth:{id:"",upgradeCap:""},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},scoin:{id:"",coins:{ssui:{coinType:"",treasury:"",metaData:"",symbol:""},scetus:{coinType:"",treasury:"",metaData:"",symbol:""},ssca:{coinType:"",treasury:"",metaData:"",symbol:""},swusdc:{coinType:"",treasury:"",metaData:"",symbol:""},swusdt:{coinType:"",treasury:"",metaData:"",symbol:""},sweth:{coinType:"",treasury:"",metaData:"",symbol:""},safsui:{coinType:"",treasury:"",metaData:"",symbol:""},shasui:{coinType:"",treasury:"",metaData:"",symbol:""},svsui:{coinType:"",treasury:"",metaData:"",symbol:""}}}},nt=class{currentAddresses;addressId;network;auth;scallopAxios;addressMap=new Map;defaultParamValues={addressId:"67c44a103fe1b8c454eb9699",network:"mainnet"};constructor(e={}){this.scallopAxios=new te({...this.defaultParamValues,baseUrl:e.addressApiUrl||gt,...e}),this.network=e.network??"mainnet",this.addressId=e.addressId??this.defaultParamValues.addressId,this.auth=e.auth??"",e.forceAddressesInterface&&this.initializeForcedAddresses(e.forceAddressesInterface);}initializeForcedAddresses(e){let o=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([s,a])=>{if(o.includes(s)){let r=s;this.addressMap.set(r,a),r===this.network&&(this.currentAddresses=a);}});}get axiosClient(){return this.scallopAxios}get queryClient(){return this.axiosClient.queryClient}getId(){return this.addressId}get(e){if(this.currentAddresses)return e.split(".").reduce((s,a)=>typeof s=="object"?s[a]:s,this.currentAddresses)||void 0}set(e,o){if(this.currentAddresses){let s=e.split(".");s.reduce((a,r,n)=>{if(n===s.length-1)a[r]=o;else return a[r]},this.currentAddresses);}return this.currentAddresses}switchCurrentAddresses(e){return this.addressMap.has(e)&&(this.currentAddresses=this.addressMap.get(e),this.network=e),this.currentAddresses}getAddresses(e){return e?this.addressMap.get(e):this.currentAddresses??this.addressMap.get(this.network)}setAddresses(e,o){let s=o||this.network;s===this.network&&(this.currentAddresses=e),this.addressMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:o,network:s,auth:a,memo:r}=e??{},n=a||this.auth||void 0,i=s||this.network,c=o||this.currentAddresses||this.addressMap.get(i)||jo;if(n!==void 0){this.addressMap.clear(),this.setAddresses(c,i);let d=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":a||this.auth}});if(d.status===201){for(let[l,u]of Object.entries(d.data))["localnet","devnet","testnet","mainnet"].includes(l)&&(l===this.network&&(this.currentAddresses=u),this.addressMap.set(l,u));return this.addressId=d.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("You don't have permission to access this request.")}async read(e){let o=e||this.addressId||void 0;if(o!==void 0){let s=await this.axiosClient.get(`/addresses/${o}`,N.api.getAddresses({addressId:o}));if(s.status===200){for(let[a,r]of Object.entries(s.data))["localnet","devnet","testnet","mainnet"].includes(a)&&(a===this.network&&(this.currentAddresses=r),this.addressMap.set(a,r));return this.addressId=s.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("Please provide API addresses id.")}async update(e){let{id:o,addresses:s,network:a,auth:r,memo:n}=e??{},i=r||this.auth||void 0,c=o||this.addressId||void 0,d=a||this.network,l=s||this.currentAddresses||this.addressMap.get(d)||jo;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(i!==void 0){o!==this.addressId&&this.addressMap.clear(),this.setAddresses(l,d);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:n}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(u.status===200){for(let[p,f]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(p)&&(p===this.network&&(this.currentAddresses=f),this.addressMap.set(p,f));return this.addressId=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,o){let s=o||this.auth||void 0,a=e||this.addressId||void 0;if(a===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this.axiosClient.delete(`/addresses/${a}`,{headers:{"Content-Type":"application/json","api-key":o||this.auth}})).status===200)this.addressId=void 0,this.currentAddresses=void 0,this.addressMap.clear();else throw Error("Failed to delete addresses.");else throw Error("You don't have permission to access this request.")}},Ie=nt;var No=t=>Object.keys(t).length===0,_o={lending:new Set,borrowing:new Set,collateral:new Set,packages:new Set,scoin:new Set,spool:new Set,borrowIncentiveRewards:new Set,rewardsAsPoint:new Set,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},it=class extends Ie{constructor(o={}){super(o);this.params=o;this.scallopConstantAxios=new te;}_poolAddresses={};_whitelist=_o;coinDecimals={};coinNameToOldMarketCoinTypeMap={};scoinRawNameToSCoinNameMap={};scoinTypeToSCoinNameMap={};wormholeCoinTypeToCoinNameMap={};voloCoinTypeToCoinNameMap={};suiBridgeCoinTypeToCoinNameMap={};coinTypes={};sCoinTypes={};coinTypeToCoinNameMap={};supportedBorrowIncentiveRewards=new Set;scallopConstantAxios;get protocolObjectId(){return this.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){let o=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"];return this.isAddressInitialized()&&!No(this.poolAddresses)&&o.every(s=>this.whitelist[s].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(o,s)=>o[s]??_o[s]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(o,s)=>o[s]??void 0})}isAddressInitialized({networkType:o="mainnet"}={}){let s=this.getAddresses(o);return !s||No(s)}parseToOldMarketCoin(o){return `${this.protocolObjectId}::reserve::MarketCoin<${o}>`}async init({networkType:o="mainnet",force:s=!1,addressId:a,constantsParams:r=this.params}={}){let n=this.getAddresses(o);if((!n||Object.keys(n).length===0||s)&&await this.read(a),r.forcePoolAddressInterface&&(this._poolAddresses=r.forcePoolAddressInterface),r.forceWhitelistInterface&&(this._whitelist=r.forceWhitelistInterface),this.isInitialized&&!s)return;let[i,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((d,l)=>{let u=l,p=i[u];return d[u]=p instanceof Set?p:Array.isArray(p)?new Set(p):new Set,d},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([d])=>Object.values(this._whitelist).some(l=>l.has(d))).map(([d,l])=>{let u=Object.fromEntries(Object.entries(l).map(([p,f])=>[p,typeof f=="boolean"?f??!1:f||void 0]));return [d,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,a])=>!!a).map(([s,a])=>[s,a.decimals]),...Object.entries(this.poolAddresses).filter(([s,a])=>!!a?.sCoinName).map(([s,a])=>[a.sCoinName,a.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,a])=>!!a).map(([s,a])=>[s,a?.coinType]),...Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&a.sCoinName&&a.sCoinType).map(([s,a])=>[a.sCoinName,a.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([s,a])=>[a,s])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&this.whitelist.wormhole.has(s)).map(([s,a])=>[a.coinType,a.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a).map(([s,a])=>[a.coinName,this.parseToOldMarketCoin(a.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&a.sCoinType&&a.sCoinName).map(([s,a])=>[suiKit.parseStructTag(a.sCoinType).name,a.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&a.sCoinType&&a.sCoinName).map(([s,a])=>[a.sCoinType,a.sCoinName]));let o=this.poolAddresses.vsui?.coinType;o&&(this.voloCoinTypeToCoinNameMap={[o]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&this.whitelist.suiBridge.has(a.coinName)).map(([s,a])=>[a.coinType,a.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,a])=>!!a&&a.sCoinName&&a.sCoinType).map(([s,a])=>[a.sCoinName,a.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(s=>!!s).map(s=>s.sCoinName?[s.coinName,s.sCoinName]:[s.coinName]).flat()]);}async readApi({url:o,queryKey:s}){let a=await this.scallopConstantAxios.get(o,s);if(a.status===200)return a.data;throw Error(`Error: ${a.status}; Failed to read ${o} ${a.statusText}`)}async readWhiteList(){let o=await this.readApi({url:this.params.whitelistApiUrl??"https://sui.apis.scallop.io/pool/whitelist",queryKey:N.api.getWhiteList()});return Object.fromEntries(Object.entries(o).filter(([s,a])=>Array.isArray(a)).map(([s,a])=>[s,new Set(a)]))}async readPoolAddresses(){return await this.readApi({url:this.params.poolAddressesApiUrl??"https://sui.apis.scallop.io/pool/addresses",queryKey:N.api.getPoolAddresses()})}},ve=it;var Bo=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??Ee:Ee},new suiKit.SuiKit({...t,...e})};var ca=10,je=(t,e)=>{let o={...t};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?o[s]=je(t[s]||{},e[s]):o[s]=e[s];return o},Ne=class{constructor(e=10){this.capacity=e;this.refillRate=this.capacity/1e3,this.tokens=this.capacity,this.lastRefillTime=Date.now();}tokens;lastRefillTime;refillRate;refill(){let e=Date.now(),s=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+s),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(o=>setTimeout(o,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}},ct=class extends ye{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Bo(e),this._tokensPerSecond=e.tokensPerSecond??ca,this.rateLimiter=new Ne(this._tokensPerSecond),this._walletAddress=e.walletAddress??this.suiKit.currentAddress;}switchFullNodes(e){this.suiKit.suiInteractor.switchFullNodes(e);}get client(){return this.suiKit.client}get walletAddress(){return this._walletAddress}set walletAddress(e){this._walletAddress=e;}get tokensPerSecond(){return this._tokensPerSecond}set tokensPerSecond(e){this._tokensPerSecond=e,this.rateLimiter=new Ne(this._tokensPerSecond);}get currentFullNode(){return this.suiKit.suiInteractor.currentFullNode}signAndSendTxn(e,o){return this.suiKit.signAndSendTxn(e,o)}async callWithRateLimiter(e,o){return await this.queryClient.fetchQuery({queryKey:e,queryFn:()=>this.rateLimiter.execute(o)})}async queryGetNormalizedMoveFunction(e){let{address:o,module:s,name:a}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(N.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:o,module:s,function:a}))}async queryGetObject(e,o){return o={...o,showOwner:!0,showContent:!0,showType:!0},await this.callWithRateLimiter(N.rpc.getObject({objectId:e,options:o,node:this.currentFullNode}),()=>this.client.getObject({id:e,options:o}))}async queryGetObjects(e,o){if(e.length===0)return [];o??={showContent:!0,showOwner:!0,showType:!0};let s=await this.callWithRateLimiter(N.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:o?.showOwner,showContent:o?.showContent,showType:o?.showType}));return s.forEach(a=>{let r=N.rpc.getObject({objectId:a.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:r}).forEach(([i,c])=>{this.queryClient.setQueryData(i,je(c,{data:a,error:null}),{updatedAt:Date.now()});});}),s}async queryGetOwnedObjects(e){let o=await this.callWithRateLimiter(N.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return o&&o.data.length>0&&o.data.filter(s=>!!s.data).forEach(s=>{let a=N.rpc.getObject({objectId:s.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:a}).forEach(([n,i])=>{this.queryClient.setQueryData(n,je(i,{data:s.data,error:null}),{updatedAt:Date.now()});});}),o}async queryGetDynamicFields(e){return await this.callWithRateLimiter(N.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let o=await this.callWithRateLimiter(N.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(o?.data){let s=N.rpc.getObject({objectId:o.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:s}).forEach(([r,n])=>{this.queryClient.setQueryData(r,je(n,{data:o.data,error:null}),{updatedAt:Date.now()});});}return o}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(N.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let o=await this.client.getAllBalances({owner:e});return o?o.reduce((a,r)=>(r.totalBalance!=="0"&&(a[suiKit.normalizeStructTag(r.coinType)]=r),a),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:o,typeArgs:s}){let a=new suiKit.SuiTxBlock;if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");let n=await Promise.all((o??[]).map(async i=>{if(typeof i!="string")return i;let c=(await this.queryGetObject(i))?.data;return c||i}));return a.moveCall(e,n,s),await this.callWithRateLimiter(N.rpc.getInspectTxn({queryTarget:e,args:o,typeArgs:s,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(a))}},_e=ct;var dt=class{pythEndpoints;scallopSuiKit;constants;constructor(e={}){this.constants=e.scallopConstants??new ve(e),this.scallopSuiKit=e.scallopSuiKit??new _e({queryClient:this.constants.queryClient,...e}),this.pythEndpoints=e.pythEndpoints??["https://hermes.pyth.network","https://scallop.rpc.p2p.world"];}get walletAddress(){return this.scallopSuiKit.walletAddress}get suiKit(){return this.scallopSuiKit.suiKit}get queryClient(){return this.constants.queryClient}get address(){return this.constants}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isMarketCoin(e){let o=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(o)}async init({force:e=!1}={}){await this.constants.init({force:e});}parseCoinName(e){return e.slice(1)}parseSymbol(e){return this.isMarketCoin(e)?this.constants.poolAddresses[this.parseCoinName(e)]?.sCoinSymbol??"":this.constants.poolAddresses[e]?.symbol??""}parseCoinType(e,o=!1){return o?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let o=`s${e}`;return this.constants.whitelist.scoin.has(o)?o:void 0}}parseSCoinTypeNameToMarketCoinName(e){return this.constants.scoinRawNameToSCoinNameMap[e]??e}parseSCoinType(e){return this.constants.sCoinTypes[e]??""}parseSCoinNameFromType(e){return this.constants.scoinTypeToSCoinNameMap[e]}parseUnderlyingSCoinType(e){let o=this.parseCoinName(e);return this.parseCoinType(o)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,!0)}parseMarketCoinName(e){return `s${e}`}getSpoolRewardCoinName=()=>"sui";getCoinDecimal(e){return this.constants.coinDecimals[e]??0}getCoinWrappedType(e){if(this.isSuiBridgeAsset(e))return {from:"Sui Bridge",type:"Asset from Sui Bridge"};if(this.isWormholeAsset(e))return {from:"Wormhole",type:"Portal from Ethereum"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:o,module:s,name:a,typeParams:r}=suiKit.parseStructTag(e);return o===this.constants.protocolObjectId&&s==="reserve"&&a==="MarketCoin"?this.parseMarketCoinName((typeof r[0]=="string"?suiKit.parseStructTag(r[0]):r[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||suiKit.parseStructTag(e).name.toLowerCase()}async selectCoins(e,o=suiKit.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,o)}async mergeSimilarCoins(e,o,s,a=this.walletAddress){try{let r=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,a);r.length>0&&e.mergeCoins(o,r.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let o=await ke(this,e);if(!o)return;let s=o.collaterals.map(i=>`0x${i.type.name}`),a=o.debts.map(i=>`0x${i.type.name}`);return [...new Set([...s,...a])].map(i=>this.parseCoinNameFromType(i))}parseDataFromPythPriceFeed(e){let s=[...this.constants.whitelist.lending].find(a=>this.address.get(`core.coins.${a}.oracle.pyth.feed`)===e.id);if(s){let a=e.getEmaPriceUnchecked();return {coinName:s,price:a.getPriceAsNumberUnchecked(),publishTime:Number(a.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,o){let s=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(o=o||(await this.scallopSuiKit.queryGetObject(s))?.data,o){let a=o;if(a.content&&"fields"in a.content){let r=a.content.fields,n=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((i?-1:1)*n)*(d?-1:1)}}return 0}async getPythPrices(e){let o=e.reduce((r,n)=>{let i=this.address.get(`core.coins.${n}.oracle.pyth.feedObject`);return i&&(r[i]?r[i].push(n):r[i]=[n]),r},{}),a=(await this.scallopSuiKit.queryGetObjects(Object.keys(o))).reduce((r,n)=>(o[n.objectId].forEach(i=>{r[i]=n;}),r),{});return (await Promise.all(Object.entries(a).map(async([r,n])=>({coinName:r,price:await this.getPythPrice(r,n)})))).reduce((r,n)=>(r[n.coinName]=n.price,r),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let o={},s=this.pythEndpoints,a=new Set(e);for(let r of s){let n=Array.from(a.values()).reduce((d,l)=>{let u=this.address.get(`core.coins.${l}.oracle.pyth.feed`)??this.constants.poolAddresses[l]?.pythFeed;return d.push([l,u]),d},[]);if(n.length===0)break;let i=n.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(r,{timeout:4e3});try{let d=await this.queryClient.fetchQuery({queryKey:N.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(i),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let p=n[u][0],f=this.parseDataFromPythPriceFeed(l);o[p]=f.price,a.delete(p);});}catch(d){console.error(d.message);}if(a.size===0)break}return a.size>0&&(o={...o,...await this.getPythPrices(Array.from(a.values()))},a.clear()),o}parseAprToApy(e,o=365){return (1+e/o)**o-1}parseApyToApr(e,o=365){return ((1+e)**(1/o)-1)*o}getUnlockAt(e,o){let s=Math.floor(new Date().getTime()/1e3),a=o?Math.max(Math.floor(o/1e3)-s,0):0,r=0;if(a===0){let n=(e??1)*86400;r=Math.min(s+n,s+126144e3);}else {let n=Math.min(e?e*86400+a:a,126144e3);r=s+n;}return vt(r)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},Be=dt;var ut=class extends te{constructor(e={}){e.baseUrl=e.indexerApiUrl??ht,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",N.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((o,s)=>(o[s.coinName]=s,o),{}),collaterals:e.data.collaterals.reduce((o,s)=>(o[s.coinName]=s,o),{})};throw Error("Failed to getMarket.")}async getMarketPools(){return (await this.getMarket()).pools}async getMarketPool(e){return (await this.getMarketPools())[e]}async getMarketCollaterals(){return (await this.getMarket()).collaterals}async getMarketCollateral(e){return (await this.getMarketCollaterals())[e]}async getSpools(){let e=await this.get("/api/spools/migrate",N.api.getSpools());if(e.status===200)return e.data.spools.reduce((o,s)=>(o[s.marketCoinName]=s,o),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",N.api.getBorrowIncentivePool());if(e.status===200)return e.data.borrowIncentivePools.reduce((o,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((a,r)=>(a[r.coinName]=r,a),{})),o[s.coinName]=s,o),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",N.api.getTotalValueLocked());if(e.status===200)return e.data;throw Error("Failed to getTotalValueLocked.")}async getCoinPrice(e){return (await this.getMarketPool(e))?.coinPrice??0}async getCoinPrices(){let e=await this.getMarketPools();return Object.entries(e).reduce((o,[s,a])=>(a&&(o[s]=a.coinPrice),o),{})}},Me=ut;var pt=class{indexer;utils;constructor(e){this.utils=e.utils??new Be(e),this.indexer=e.indexer??new Me({queryClient:this.utils.queryClient,...e}),this.initIndexerFallback();}initIndexerFallback(){this.queryMarket=E.call(this,this.queryMarket),this.getMarketPools=E.call(this,this.getMarketPools),this.getMarketPool=E.call(this,this.getMarketPool),this.getMarketCollaterals=E.call(this,this.getMarketCollaterals),this.getMarketCollateral=E.call(this,this.getMarketCollateral),this.getSpools=E.call(this,this.getSpools),this.getSpool=E.call(this,this.getSpool),this.getBorrowIncentivePools=E.call(this,this.getBorrowIncentivePools),this.getLendings=E.call(this,this.getLendings),this.getLending=E.call(this,this.getLending),this.getObligationAccounts=E.call(this,this.getObligationAccounts),this.getObligationAccount=E.call(this,this.getObligationAccount),this.getTvl=E.call(this,this.getTvl);}async init(e=!1){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.utils.address}async queryMarket(e){return await Et(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],o){return await qt(this,e,o?.indexer,o?.coinPrices)}async getMarketPool(e,o){return (await this.getMarketPools(void 0,o)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],o){return await Ut(this,e,o?.indexer)}async getMarketCollateral(e,o){return await Ge(this,e,o?.indexer)}async getObligations(e=this.walletAddress){return await se(this,e)}async queryObligation(e){return ke(this,e)}async getCoinAmounts(e,o=this.walletAddress){return await Qt(this,e,o)}async getCoinAmount(e,o=this.walletAddress){return await Xe(this,e,o)}async getMarketCoinAmounts(e,o=this.walletAddress){return await $t(this,e,o)}async getMarketCoinAmount(e,o=this.walletAddress){return await Ye(this,e,o)}async getPriceFromPyth(e){return await Je(this,e)}async getPricesFromPyth(e){return await Zt(this,e)}async getSpools(e,o){return await no(this,e,o?.indexer,o?.marketPools,o?.coinPrices)}async getSpool(e,o){return (await this.getSpools(void 0,o))[e]}async getAllStakeAccounts(e=this.walletAddress){return await le(this,e)}async getStakeAccounts(e,o=this.walletAddress){return (await this.getAllStakeAccounts(o))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let o={};for(let s of e){let a=await tt(this,s);a&&(o[s]=a);}return o}async getStakePool(e){return await tt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let o={};return await Promise.allSettled(e.map(async s=>{let a=await ot(this,s);a&&(o[s]=a);})),o}async getStakeRewardPool(e){return await ot(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],o){return await jt(this,e,o?.indexer,o?.marketPools,o?.coinPrices)}async getBorrowIncentiveAccounts(e,o){return await Nt(this,e,o)}async getLendings(e,o=this.walletAddress,s){return await Xt(this,e,o,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,o=this.walletAddress,s){return await He(this,e,o,s?.indexer)}async getObligationAccounts(e=this.walletAddress,o){return await Yt(this,e,o?.market,o?.coinPrices,o?.indexer)}async getObligationAccount(e,o=this.walletAddress,s){let a=await this.getObligationAccounts(o,s);return Object.values(a).find(r=>r?.obligationId===e)}async getTvl(e){return await Ht(this,e?.indexer)}async getVeSca(e){return await de(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:o=!1}={}){return await Pe(this,e,o)}async getVeScaTreasuryInfo(){return await co(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await to(this,e)}async getBindedObligationId(e){return await _t(this,e)}async getBindedVeScaKey(e){return await Bt(this,e)}async getLoyaltyProgramInfos(e){return await zt(this,e)}async getSCoinTotalSupply(e){return await oo(this,e)}async getSCoinAmounts(e,o=this.walletAddress){return await so(this,e,o)}async getSCoinAmount(e,o=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await et(this,s,o):0}async getSCoinSwapRate(e,o){return await ao(this,e,o)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await Wt(this,e)}async getPoolSupplyLimit(e){return await Se(this.utils,e)}async getPoolBorrowLimit(e){return await Ce(this.utils,e)}async getIsolatedAssets(){return await Dt(this)}async isIsolatedAsset(e){return oe(this.utils,e)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return eo(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return lo(e)}async getUserPortfolio(e){return Jt(this,e?.walletAddress??this.walletAddress,e?.indexer??!1)}async getPriceUpdatePolicies(){return await po(this)}async getAssetOracles(){let[e,o]=await Promise.all([st(this.utils,"primary"),st(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,a)=>(s[a]={primary:e?.[a]??[],secondary:o?.[a]??[]},s),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await uo(this,e)}},De=pt;var mt=class{query;usePythPullModel;useOnChainXOracleList;constructor(e){this.query=e.query??new De(e),this.usePythPullModel=e.usePythPullModel??!0,this.useOnChainXOracleList=e.useOnChainXOracleList??!0;}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get suiKit(){return this.scallopSuiKit.suiKit}get address(){return this.utils.address}async init(e=!1){await this.query.init(e);}createTxBlock(e){return vo(this,e)}async selectCoin(e,o,s,a=this.walletAddress){if(o==="sui"){let[r]=e.splitSUIFromGas([s]);return {takeCoin:r}}else {let r=this.utils.parseCoinType(o),n=await this.utils.selectCoins(s,r,a),[i,c]=e.takeAmountFromCoins(n,s);return {takeCoin:i,leftCoin:c}}}async selectMarketCoin(e,o,s,a=this.walletAddress){let r=this.utils.parseMarketCoinType(o),n=await this.utils.selectCoins(s,r,a),i=n.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(n,Math.min(s,i));return {takeCoin:c,leftCoin:d,totalAmount:i}}async selectSCoin(e,o,s,a=this.walletAddress){let r=this.utils.parseSCoinType(o),n=await this.utils.selectCoins(s,r,a),i=n.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(n,Math.min(i,s));return {takeCoin:c,leftCoin:d,totalAmount:i}}async selectSCoinOrMarketCoin(e,o,s,a=this.walletAddress){let r=s,n={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:d,takeCoin:l,totalAmount:u}=await this.selectSCoin(e,o,r,a);if(n.leftCoins.push(d),n.sCoins.push(l),r-=u,r>0){let{leftCoin:p,takeCoin:f}=await this.selectMarketCoin(e,o,s,a);e.transferObjects([p],a),n.marketCoins.push(f);}}catch{let{takeCoin:l,leftCoin:u}=await this.selectMarketCoin(e,o,s,a);n.leftCoins.push(u),n.marketCoins.push(l);}e.transferObjects(n.leftCoins,a);let i=n.marketCoins.length>0?n.marketCoins.length>1?e.mergeCoins(n.marketCoins[0],n.marketCoins.slice(1)):n.marketCoins[0]:void 0;return {sCoin:n.sCoins.length>0?n.sCoins.length>1?e.mergeCoins(n.sCoins[0],n.sCoins.slice(1)):n.sCoins[0]:void 0,marketCoin:i}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,o,s,a){return e.moveCall(o,s,a)}},Fe=mt;var yt=class{builder;networkType;constructor(e){this.builder=e.builder??new Fe(e),this.networkType=e.networkType??"mainnet";}get query(){return this.builder.query}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.builder.address}async init(e=!1){await this.builder.init(e);}async queryMarket(){return await this.query.queryMarket()}async getObligations(e){let o=e??this.walletAddress;return await this.query.getObligations(o)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let o=e??this.walletAddress;return await this.query.getAllStakeAccounts(o)}async getStakeAccounts(e,o){let s=o??this.walletAddress;return await this.query.getStakeAccounts(e,s)}async getStakePool(e){return await this.query.getStakePool(e)}async getStakeRewardPool(e){return await this.query.getStakeRewardPool(e)}async openObligation(e=!0){let o=this.builder.createTxBlock();return o.openObligationEntry(),e?await this.scallopSuiKit.signAndSendTxn(o):o.txBlock}async depositCollateral(e,o,s=!0,a,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await this.query.getObligations(i),d=a??c[0]?.id;if(d)await n.addCollateralQuick(o,e,d);else {let[l,u,p]=n.openObligation();await n.addCollateralQuick(o,e,l),n.returnObligation(l,p),n.transferObjects([u],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdrawCollateral(e,o,s=!0,a,r,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=await i.takeCollateralQuick(o,e,a,r);return i.transferObjects([d],c),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async deposit(e,o,s=!0,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;r.setSender(n);let i=await r.depositQuick(o,e);return r.transferObjects([i],n),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,o,s=!0,a,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=this.utils.parseMarketCoinName(e),d=await this.query.getStakeAccounts(c),l=a??d[0]?.id,u=await n.depositQuick(o,e,!1);if(l)await n.stakeQuick(u,c,l);else {let p=n.createStakeAccount(c);await n.stakeQuick(u,c,p),n.transferObjects([p],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdraw(e,o,s=!0,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;r.setSender(n);let i=await r.withdrawQuick(o,e);return r.transferObjects([i],n),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async borrow(e,o,s=!0,a,r,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=this.constants.whitelist.lending.has(e);s&&d&&await i.unstakeObligationQuick(a,r);let l=await i.borrowQuick(o,e,a,r);return i.transferObjects([l],c),s&&d&&await i.stakeObligationWithVeScaQuick(a,r),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async repay(e,o,s=!0,a,r,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=this.constants.whitelist.lending.has(e);return s&&d&&await i.unstakeObligationQuick(a,r),await i.repayQuick(o,e,a),s&&d&&await i.stakeObligationWithVeScaQuick(a,r),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async flashLoan(e,o,s,a=!0,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let[c,d]=n.borrowFlashLoan(o,e);return n.repayFlashLoan(await s(n,c),d,e),a?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async createStakeAccount(e,o=!0,s){let a=this.builder.createTxBlock(),r=s??this.walletAddress;a.setSender(r);let n=a.createStakeAccount(e);return a.transferObjects([n],r),o?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async stake(e,o,s=!0,a,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await this.query.getStakeAccounts(e),d=a??c[0]?.id;if(d)await n.stakeQuick(o,e,d);else {let l=n.createStakeAccount(e);await n.stakeQuick(o,e,l),n.transferObjects([l],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstake(e,o,s=!0,a,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(o,e,a);if(c){let d=this.utils.parseSCoinType(e);if(!d)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(n,c,d,R(n));}return n.transferObjects([c],i),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstakeAndWithdraw(e,o,s=!0,a,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(o,e,a,!1),d=this.utils.parseCoinName(e);if(c){let l=n.withdraw(c,d);await this.utils.mergeSimilarCoins(n,l,this.utils.parseCoinType(d),R(n)),n.transferObjects([l],i);}else throw new Error(`No stake found for ${e}`);return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async claim(e,o=!0,s,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;r.setSender(n);let i=await r.claimQuick(e,s);return r.transferObjects(i,n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stakeObligation(e,o,s=!0,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;return r.setSender(n),await r.stakeObligationWithVeScaQuick(e,o),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async unstakeObligation(e,o,s=!0,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;return r.setSender(n),await r.unstakeObligationQuick(e,o),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimBorrowIncentive(e,o,s=!0,a){let r=this.builder.createTxBlock(),n=a??this.walletAddress;r.setSender(n);let i={},c=await this.query.getObligationAccount(e);if(!c)throw new Error("Obligation not found");let d=Object.values(c.borrowIncentives).filter(l=>!!l).flatMap(({rewards:l})=>l.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:l})=>l);for(let l of d){let u=await r.claimBorrowIncentiveQuick(l,e,o);i[l]?i[l].push(u):i[l]=[u];}return r.transferObjects(Object.values(i).map(l=>{let u=l[0];return l.length>1&&r.mergeCoins(u,l.slice(1)),u}),n),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async migrateAllMarketCoin(e=!0,o=!0,s){let a=s??this.walletAddress,r=this.builder.createTxBlock();r.setSender(a);let n=[];for(let i of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:d}=await this.builder.selectMarketCoin(r,i,Number.MAX_SAFE_INTEGER,a);if(d){let l=r.mintSCoin(i,d);c.push(l);}}catch(d){if(!d.toString().includes("No valid coins found for the transaction"))throw d}if(e&&this.constants.whitelist.spool.has(i))try{let d=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,i);d&&c.push(d);}catch{}if(c.length>0){let d=c[0];c.length>1&&r.mergeCoins(d,c.slice(1));let l=this.utils.parseSCoinType(i);await this.utils.mergeSimilarCoins(r,d,l,a),n.push(d);}}return n.length>0&&r.transferObjects(n,a),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=!0,o){let s=o??this.walletAddress,a=(await this.query.getVeScas({walletAddress:s})??[]).map(({keyObject:i})=>i);if(a.length===0)throw new Error("No veSCA found in the wallet");let r=[],n=this.builder.createTxBlock();if(n.setSender(s),await Promise.all(a.map(async i=>{try{let c=await n.redeemScaQuick(i,!1);if(!c)return;r.push(c);}catch{}})),r.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return r.length>1&&n.mergeCoins(r[0],r.slice(1)),await this.utils.mergeSimilarCoins(n,r[0],"sca",s),e?await this.scallopSuiKit.signAndSendTxn(n):{tx:n.txBlock,scaCoin:r[0]}}async mintTestCoin(e,o,s=!0,a){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let n=this.builder.createTxBlock(),i=a??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),d=this.address.get(`core.coins.${e}.treasury`),l=`${c}::${e}::mint`,u=n.moveCall(l,[d,o]);return n.transferObjects([u],i),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}},Ke=yt;var ft=class{client;constructor(e){this.client=e.client??new Ke(e);}async init(e=!1){await this.client.init(e);}async createScallopClient(){return await this.init(),this.client}async createScallopBuilder(){return await this.init(),this.client.builder}async createScallopQuery(){return await this.init(),this.client.query}async createScallopUtils(){return await this.init(),this.client.utils}async createScallopIndexer(){return await this.init(),this.client.query.indexer}async getScallopConstants(){return await this.init(),this.client.constants}},Do=ft;
|
|
22
22
|
|
|
23
|
-
exports.API_BASE_URL =
|
|
24
|
-
exports.DEFAULT_CACHE_OPTIONS =
|
|
25
|
-
exports.IS_VE_SCA_TEST =
|
|
26
|
-
exports.MAX_LOCK_DURATION =
|
|
27
|
-
exports.MAX_LOCK_ROUNDS =
|
|
28
|
-
exports.MIN_INITIAL_LOCK_AMOUNT =
|
|
23
|
+
exports.API_BASE_URL = gt;
|
|
24
|
+
exports.DEFAULT_CACHE_OPTIONS = bt;
|
|
25
|
+
exports.IS_VE_SCA_TEST = ma;
|
|
26
|
+
exports.MAX_LOCK_DURATION = $;
|
|
27
|
+
exports.MAX_LOCK_ROUNDS = ae;
|
|
28
|
+
exports.MIN_INITIAL_LOCK_AMOUNT = Ve;
|
|
29
29
|
exports.MIN_TOP_UP_AMOUNT = qe;
|
|
30
|
-
exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID =
|
|
31
|
-
exports.RPC_PROVIDERS =
|
|
32
|
-
exports.
|
|
33
|
-
exports.
|
|
34
|
-
exports.
|
|
35
|
-
exports.
|
|
36
|
-
exports.
|
|
37
|
-
exports.ScallopBuilder = ue;
|
|
38
|
-
exports.ScallopCache = F;
|
|
30
|
+
exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID = Le;
|
|
31
|
+
exports.RPC_PROVIDERS = Ee;
|
|
32
|
+
exports.SCA_COIN_TYPE = be;
|
|
33
|
+
exports.SDK_API_BASE_URL = ht;
|
|
34
|
+
exports.Scallop = Do;
|
|
35
|
+
exports.ScallopAddress = Ie;
|
|
36
|
+
exports.ScallopBuilder = Fe;
|
|
39
37
|
exports.ScallopClient = Ke;
|
|
40
|
-
exports.ScallopConstants =
|
|
41
|
-
exports.ScallopIndexer =
|
|
42
|
-
exports.ScallopQuery =
|
|
43
|
-
exports.
|
|
44
|
-
exports.
|
|
45
|
-
exports.
|
|
46
|
-
exports.
|
|
47
|
-
exports.
|
|
48
|
-
exports.
|
|
38
|
+
exports.ScallopConstants = ve;
|
|
39
|
+
exports.ScallopIndexer = Me;
|
|
40
|
+
exports.ScallopQuery = De;
|
|
41
|
+
exports.ScallopSuiKit = _e;
|
|
42
|
+
exports.ScallopUtils = Be;
|
|
43
|
+
exports.TEST_ADDRESSES = wa;
|
|
44
|
+
exports.UNLOCK_ROUND_DURATION = J;
|
|
45
|
+
exports.USE_TEST_ADDRESS = ya;
|
|
46
|
+
exports.queryKeys = N;
|
|
47
|
+
exports.xOracleList = wt;
|