@scallop-io/sui-scallop-sdk 2.0.0-alpha.3 → 2.0.0-alpha.4

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.js CHANGED
@@ -18,7 +18,7 @@ var ja__default = /*#__PURE__*/_interopDefault(ja);
18
18
  var h__default = /*#__PURE__*/_interopDefault(h);
19
19
  var ts__default = /*#__PURE__*/_interopDefault(ts);
20
20
 
21
- var it={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var rt="https://sui.apis.scallop.io",nt="https://sdk.api.scallop.io",lo=!1,Ke=!1,Te="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Le="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var N={api:{getAddresses:a=>["api","getAddresses",{addressId:a}],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:(a,e,t)=>["rpc","getInspectTxn",{queryTarget:a,args:JSON.stringify(e),typeArgs:t?JSON.stringify(t):void 0}],getObject:(a,e)=>["rpc","getObject",{objectId:a,options:e}],getObjects:a=>["rpc","getObjects",{objectIds:JSON.stringify(a??void 0)}],getOwnedObjects:a=>["rpc","getOwnedObjects",{walletAddress:a?.owner,cursor:a?.cursor??void 0,options:a?.options??void 0,filter:JSON.stringify(a?.filter??void 0),limit:a?.limit??void 0}],getDynamicFields:a=>["rpc","getDynamicFields",{parentId:a?.parentId,cursor:a?.cursor??void 0,limit:a?.limit??void 0}],getDynamicFieldObject:a=>["rpc","getDynamicFieldObject",{parentId:a?.parentId,name:JSON.stringify(a?.name??void 0)}],getTotalVeScaTreasuryAmount:(a,e)=>["rpc","getTotalVeScaTreasuryAmount",{refreshArgs:JSON.stringify(a),vescaAmountArgs:JSON.stringify(e)}],getAllCoinBalances:a=>["rpc","getAllCoinBalances",{owner:a}],getNormalizedMoveFunction:a=>["rpc","getNormalizedMoveCall",a]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var ct=[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 Ee={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"}}},cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",coinType:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",symbol:"CETUS",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},wapt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",coinType:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37::coin::COIN",symbol:"wAPT",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},wsol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",coinType:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8::coin::COIN",symbol:"wSOL",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},wbtc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",coinType:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",symbol:"wBTC",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},weth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",coinType:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",symbol:"wETH",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},wusdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",coinType:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",symbol:"wUSDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},wusdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",coinType:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",symbol:"wUSDT",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",coinType:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",symbol:"afSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",coinType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",symbol:"vSUI",decimals:9,oracle:{supra:"",switchboard:"",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"}}},sbeth:{id:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",metaData:"0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",coinType:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",treasury:"",symbol:"sbETH",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},fdusd:{id:"0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a",metaData:"0xdebee5265a67c186ed87fe93303d33dfe1de53e3b4fd7d9329c2852860acd3e7",treasury:"",coinType:"0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD",symbol:"FDUSD",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"ccdc1a08923e2e4f4b1e6ea89de6acbc5fe1948e9706f5604b8cb50bc1ed3979",feedObject:"0x5f6583b2b0fe1ecf94aaffeaab8a838794693960cea48c0da282d5f4a24be027"}}},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"}}},sbusdt:{id:"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068",metaData:"0xda61b33ac61ed4c084bbda65a2229459ed4eb2185729e70498538f0688bec3cc",treasury:"",coinType:"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT",symbol:"sbUSDT",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},blub:{id:"0xfa7ac3951fdca92c5200d468d31a365eb03b2be9936fde615e69f0c1274ad3a0",metaData:"0xac32b519790cae96c3317457d903d61d04f1bc8f7710096d80fcba72c7a53703",treasury:"",coinType:"0xfa7ac3951fdca92c5200d468d31a365eb03b2be9936fde615e69f0c1274ad3a0::BLUB::BLUB",symbol:"BLUB",decimals:2,oracle:{supra:"",switchboard:"",pyth:{feed:"5fc11ffe4975b624be495be038da30e30bee2004d8ae6282b5364577ef4ca92c",feedObject:"0x246658c3324f2477568c78cca622518fbc6969a004b841d81409d24a7ec39b18"}}},sbwbtc:{id:"0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b",metaData:"0x53e1cae1ad70a778d0b450d36c7c2553314ca029919005aad26945d65a8fb784",treasury:"",coinType:"0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b::btc::BTC",symbol:"sbwBTC",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},musd:{id:"0xe44df51c0b21a27ab915fa1fe2ca610cd3eaa6d9666fe5e62b988bf7f0bd8722",metaData:"0xc154abd271b24032a2c80d96c1b82109490bb600ed189ef881d8c9467ed44a4f",treasury:"",coinType:"0xe44df51c0b21a27ab915fa1fe2ca610cd3eaa6d9666fe5e62b988bf7f0bd8722::musd::MUSD",symbol:"mUSD",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"2ee09cdb656959379b9262f89de5ff3d4dfed0dd34c072b3e22518496a65249c",feedObject:"0x72fbf053d6009a40cff74d9708592bd7b86673a0e7b252077e1aa53390976584"}}},ns:{id:"0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178",metaData:"0x279adec041f8ec5c2d419abf2c32713ae7930a9a3a1ff244c88e5ceced40db6e",treasury:"",coinType:"0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS",symbol:"NS",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"bb5ff26e47a3a6cc7ec2fce1db996c2a145300edc5acaabe43bf9ff7c5dd5d32",feedObject:"0xc6352e1ea55d7b5acc3ed690cc3cdf8007978071d7bfd6a189445018cfb366e0"}}},usdy:{id:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb",metaData:"0xd8dd6cf839e2367de6e6107da4b4361f44798dd6cf26d094058d94e4cee25e36",treasury:"",coinType:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",symbol:"USDY",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"e3d1723999820435ebab53003a542ff26847720692af92523eea613a9a28d500",feedObject:"0x773cb390165e227cbd5bd924edaeff7d33b1b78aac045c4903ed9be7e711741a"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0x352c9600e69ff6469f9fc7cd1d0cd5f88264caa5f8908102a223ce663fbb360c",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:"0x83bbe0b3985c5e3857803e2678899b03f3c4a31be75006ab03faf268c014ce41",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xbb6e3ffa494b543aa028cf8d3fb894be1a678b5fe710f7bb959df0e3c1acc0e8",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0x1cf913c825c202cbbb71c378edccb9c04723fa07a73b88677b2ef89c6e203a85",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x897ebc619bdb4c3d9e8d86fb85b86cfd5d861b1696d26175c55ed14903a372f6",object:"0x897ebc619bdb4c3d9e8d86fb85b86cfd5d861b1696d26175c55ed14903a372f6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{sweth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"},swusdc:{id:"0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",rewardPoolId:"0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"},swusdt:{id:"0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",rewardPoolId:"0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",rewardPoolId:"0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"},shasui:{id:"0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",rewardPoolId:"0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"},svsui:{id:"0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",rewardPoolId:"0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"}},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:"0x1fc417232d747bf8ce9656b8014759cb2fecc31eb4be41b5c5c5d4f73a1313c2",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",bindingTableId:"0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",referralRevenuePool:"0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",revenueTableId:"0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",referralTiers:"0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",tiersTableId:"0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",metaData:"",symbol:"",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},swusdc:{coinType:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",treasury:"0x50c5cfcbcca3aaacab0984e4d7ad9a6ad034265bebb440f0d1cd688ec20b2548",symbol:"",metaData:"0xdc0595d068621d630f3c7c364dd257f7e3f8079e00c31c8d18755a033c15ae93"},swusdt:{coinType:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",treasury:"0x1f02e2fed702b477732d4ad6044aaed04f2e8e586a169153694861a901379df0",symbol:"",metaData:"0x171d0f1ca99d5fefb8b2e40b89899bacdc5417a783906ae119b9cb1c113d59ae"},sweth:{coinType:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",treasury:"0x4b7f5da0e306c9d52490a0c1d4091e653d6b89778b9b4f23c877e534e4d9cd21",symbol:"",metaData:"0x077d0fd835b559e5b4bb52641f7627ddbf8b200f9b2cf4e28b3514da2a32a4dd"},safsui:{coinType:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",treasury:"0x55f4dfe9e40bc4cc11c70fcb1f3daefa2bdc330567c58d4f0792fbd9f9175a62",symbol:"",metaData:"0xfd81c4d1b4d9d1b8c522e91121d22e94759386b29eafe1cc3888ca0ebe369b9e"},shasui:{coinType:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",treasury:"0x404ccc1404d74a90eb6f9c9d4b6cda6d417fb03189f80d9070a35e5dab1df0f5",symbol:"",metaData:"0x0a2a4a25aac50ac79210d710f93cb22db58bc6ee22f213364dda9a709cab2189"},svsui:{coinType:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",treasury:"0xc06688ee1af25abc286ffb1d18ce273d1d5907cd1064c25f4e8ca61ea989c1d1",symbol:"",metaData:"0xa96cc21ddfb6486be4a96cda0c58734e4ddea2a8c04984f9e6121d8fae997ddf"},swsol:{coinType:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",treasury:"0x760fd66f5be869af4382fa32b812b3c67f0eca1bb1ed7a5578b21d56e1848819",symbol:"",metaData:"0xee202d2013fc09453d695c640088ee08f14afc8f1ae26284b4ebbc4712ff1ba5"},swbtc:{coinType:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",treasury:"0xe2883934ea42c99bc998bbe0f01dd6d27aa0e27a56455707b1b34e6a41c20baa",symbol:"",metaData:"0x1ba5904dae41699683da767c7a97785a55c51ec1253498c8fe1980169a96523d"},susdc:{coinType:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC",treasury:"0xbe6b63021f3d82e0e7e977cdd718ed7c019cf2eba374b7b546220402452f938e",symbol:"",metaData:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2"},ssbeth:{coinType:"0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",treasury:"0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed",symbol:"",metaData:"0xdfdd14d53ed8c7ace7cac8a0eecdfa4c2345e15d9efcbd4e1828f81a107cbe2d"},sfdusd:{coinType:"0x6711551c1e7652a270d9fbf0eee25d99594c157cde3cb5fbb49035eb59b1b001::scallop_fdusd::SCALLOP_FDUSD",treasury:"0xdad9bc6293e694f67a5274ea51b596e0bdabfafc585ae6d7e82888e65f1a03e0",symbol:"",metaData:"0xb1529a3b5e5831d19a722493eec19785f613945d3dc984602d44a418f990d73f"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"}}}};var oe=86400,pe=1460,X=126144e3,Ve=1e10,Ue=1e9;var lt={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 W=a=>new suiKit.SuiKit({...a,fullnodeUrls:Array.from(new Set([...a.fullnodeUrls??[],...ct]))});var _a=10,va=250,ke=(a,e)=>{let t={...a};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?t[s]=ke(a[s]||{},e[s]):t[s]=e[s];return t},K=class{params;queryClient;suiKit;walletAddress;tokensPerInterval=_a;interval=va;tokens;lastRefill;constructor(e={},t){this.params=e,this.suiKit=t?.suiKit??W(e),this.queryClient=t?.queryClient??new queryCore.QueryClient(e?.cacheOptions??it),this.tokens=this.tokensPerInterval,this.lastRefill=Date.now(),this.walletAddress=e.walletAddress??this.suiKit.currentAddress();}get client(){return this.suiKit.client()}refill(){let t=Date.now()-this.lastRefill;if(t>=this.interval){let s=Math.floor(t/this.interval)*this.tokensPerInterval;this.tokens=Math.min(this.tokens+s,this.tokensPerInterval),this.lastRefill+=Math.floor(t/this.interval)*this.interval;}}removeTokens(e){return this.refill(),this.tokens>=e?(this.tokens-=e,!0):!1}async callWithRateLimit(e,t=15,s=1.25){let i=0,o=async()=>{if(this.removeTokens(1))return await e();if(i<t){i++;let r=this.interval*Math.pow(s,i);return await new Promise(n=>setTimeout(n,r)),o()}else return console.error("Maximum retries reached"),null};return o()}retryFn(e,t){return e===5?!1:t.status===429}async queryInspectTxn({queryTarget:e,args:t,typeArgs:s}){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((t??[]).map(async(d,l)=>{if(typeof d!="string")return d;let u=(await this.queryGetObject(d))?.data;if(!u)return d;let f=u.owner;if(!f||typeof f!="object"||!("Shared"in f))return {objectId:u.objectId,version:u.version,digest:u.digest};let m=r[l];return typeof m!="object"||!("MutableReference"in m||"Reference"in m)?d:{objectId:u.objectId,initialSharedVersion:f.Shared.initial_shared_version,mutable:"MutableReference"in m}}));return i.moveCall(e,n,s),await this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getInspectTxn(e,t,s),queryFn:async()=>await this.callWithRateLimit(async()=>await this.suiKit.inspectTxn(i))})}async queryGetNormalizedMoveFunction(e){let{address:t,module:s,name:i}=suiKit.parseStructTag(e);return this.queryClient.fetchQuery({queryKey:N.rpc.getNormalizedMoveFunction(e),queryFn:async()=>await this.callWithRateLimit(async()=>await this.suiKit.client().getNormalizedMoveFunction({package:t,module:s,function:i}))})}async queryGetObject(e,t){return t={...t,showOwner:!0,showContent:!0,showType:!0},this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getObject(e,t),queryFn:async()=>await this.callWithRateLimit(async()=>await this.client.getObject({id:e,options:t}))})}async queryGetObjects(e){if(e.length===0)return [];let t={showContent:!0,showOwner:!0,showType:!0};return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getObjects(e),queryFn:async()=>{let s=await this.callWithRateLimit(async()=>await this.suiKit.getObjects(e,t));return s&&s.forEach(i=>{let o=N.rpc.getObject(i.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:o}).forEach(([n,c])=>{this.queryClient.setQueryData(n,ke(c,{data:i,error:null}),{updatedAt:Date.now()});});}),s}})}async queryGetOwnedObjects(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getOwnedObjects(e),queryFn:async()=>{let t=await this.callWithRateLimit(async()=>await this.client.getOwnedObjects(e));return t&&t.data.length>0&&t.data.filter(s=>!!s.data).forEach(s=>{let i=N.rpc.getObject(s.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:i}).forEach(([r,n])=>{this.queryClient.setQueryData(r,ke(n,{data:s.data,error:null}),{updatedAt:Date.now()});});}),t}})}async queryGetDynamicFields(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getDynamicFields(e),queryFn:async()=>await this.callWithRateLimit(async()=>await this.client.getDynamicFields(e))})}async queryGetDynamicFieldObject(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:t=>Math.min(1e3*t,8e3),queryKey:N.rpc.getDynamicFieldObject(e),queryFn:async()=>{let t=await this.callWithRateLimit(()=>this.client.getDynamicFieldObject(e));if(t?.data){let s=N.rpc.getObject(t.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:s}).forEach(([o,r])=>{this.queryClient.setQueryData(o,ke(r,{data:t.data,error:null}),{updatedAt:Date.now()});});}return t}})}async queryGetAllCoinBalances(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getAllCoinBalances(e),queryFn:async()=>{let t=await this.callWithRateLimit(async()=>await this.client.getAllBalances({owner:e}));return t?t.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)]??"0":null}};var ut={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:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},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:""}}}},q=class{_auth;_requestClient;_id;_network;_currentAddresses;_addressesMap;cache;constructor(e,t){let{addressId:s,auth:i,network:o,forceAddressesInterface:r}=e;if(this.cache=t?.cache??new K({}),this._requestClient=ja__default.default.create({baseURL:rt,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),i&&(this._auth=i),this._id=s,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((s,i)=>typeof s=="object"?s[i]:s,this._currentAddresses)||void 0}set(e,t){if(this._currentAddresses){let s=e.split(".");s.reduce((i,o,r)=>{if(r===s.length-1)i[o]=t;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,t){let s=t||this._network;s===this._network&&(this._currentAddresses=e),this._addressesMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this._addressesMap)}async create(e){let{addresses:t,network:s,auth:i,memo:o}=e??{},r=i||this._auth||void 0,n=s||this._network,c=t||this._currentAddresses||this._addressesMap.get(n)||ut;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 t=e||this._id||void 0;if(t!==void 0){let s=await this.cache.queryClient.fetchQuery({queryKey:N.api.getAddresses(t),queryFn:async()=>await this._requestClient.get(`/addresses/${t}`,{headers:{"Content-Type":"application/json"}})});if(s.status===200){for(let[i,o]of Object.entries(s.data))["localnet","devnet","testnet","mainnet"].includes(i)&&(i===this._network&&(this._currentAddresses=o),this._addressesMap.set(i,o));return this._id=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:t,addresses:s,network:i,auth:o,memo:r}=e??{},n=o||this._auth||void 0,c=t||this._id||void 0,d=i||this._network,l=s||this._currentAddresses||this._addressesMap.get(d)||ut;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(n!==void 0){t!==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[f,m]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(f)&&(f===this._network&&(this._currentAddresses=m),this._addressesMap.set(f,m));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,t){let s=t||this._auth||void 0,i=e||this._id||void 0;if(i===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this._requestClient.delete(`/addresses/${i}`,{headers:{"Content-Type":"application/json","api-key":t||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 I=a=>{let e=a.blockData.sender;if(!e)throw new Error("Sender is required");return e},be=a=>{if(a===void 0)throw new Error("veSca not found")},Qe=a=>{if(a<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},We=(a,e,t)=>{be(t),Qe(t);let s=Math.floor(t/1e3);if(a<1)throw new Error("Minimum lock period is 1 day");let i=Math.floor((e-s)/86400);if(a>i)throw new Error(`Cannot extend lock period by ${a} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-i}`)},pt=(a,e,t,s)=>{let i=s?Math.floor(s/1e3):void 0,o=!i,r=!o&&i*1e3<=new Date().getTime();if(o||r)if(a!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof a=="number"&&a<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(be(s),Qe(s),typeof a=="number"&&a<1e9)throw new Error("Minimum top up amount is 1 SCA");t&&e&&We(e,t,s);}},bt=(a,e)=>{if(be(e),Qe(e),a<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")},ft=(a,e,t)=>{if(!t||t>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(a<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 qe=a=>({coinType:utils.normalizeStructTag(a.type.name),maxBorrowRate:Number(a.maxBorrowRate.value)/2**32,borrowRate:Number(a.interestRate.value)/2**32,borrowRateScale:Number(a.interestRateScale),borrowIndex:Number(a.borrowIndex),lastUpdated:Number(a.lastUpdated),cashAmount:Number(a.cash),debtAmount:Number(a.debt),marketCoinSupplyAmount:Number(a.marketCoinSupply),reserveAmount:Number(a.reserve),reserveFactor:Number(a.reserveFactor.value)/2**32,borrowWeight:Number(a.borrowWeight.value)/2**32,borrowFee:Number(a.borrowFeeRate.value)/2**32,baseBorrowRate:Number(a.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(a.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(a.borrowRateOnMidKink.value)/2**32,highKink:Number(a.highKink.value)/2**32,midKink:Number(a.midKink.value)/2**32,minBorrowAmount:Number(a.minBorrowAmount),isIsolated:a.isIsolated,supplyLimit:Number(a.supplyLimit),borrowLimit:Number(a.borrowLimit)}),$e=(a,e)=>{let t=a.parseCoinNameFromType(e.coinType),s=a.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);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),f=h__default.default(e.borrowIndex).plus(u),m=h__default.default(f).dividedBy(e.borrowIndex).minus(1),p=h__default.default(e.debtAmount).multipliedBy(m),b=p.plus(e.debtAmount),y=b.shiftedBy(-1*s),w=h__default.default(e.reserveAmount).plus(p.multipliedBy(e.reserveFactor)),k=w.shiftedBy(-1*s),B=h__default.default(b).plus(Math.max(e.cashAmount-w.toNumber(),0)),O=B.shiftedBy(-1*s),_=h__default.default(b).dividedBy(B);_=_.isFinite()?_:h__default.default(0);let M=h__default.default(d).multipliedBy(_).multipliedBy(1-e.reserveFactor);M=M.isFinite()?M:h__default.default(0);let g=B.dividedBy(e.marketCoinSupplyAmount);return g=g.isFinite()&&!g.isNaN()?g:h__default.default(1),{baseBorrowApr:o,baseBorrowApy:a.parseAprToApy(o),borrowAprOnHighKink:r,borrowApyOnHighKink:a.parseAprToApy(r),borrowAprOnMidKink:n,borrowApyOnMidKink:a.parseAprToApy(n),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:a.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(a.parseAprToApy(d),a.parseAprToApy(c)),borrowIndex:f.toNumber(),growthInterest:m.toNumber(),supplyAmount:B.toNumber(),supplyCoin:O.toNumber(),borrowAmount:b.toNumber(),borrowCoin:y.toNumber(),reserveAmount:w.toNumber(),reserveCoin:k.toNumber(),utilizationRate:_.toNumber(),supplyApr:M.toNumber(),supplyApy:a.parseAprToApy(M.toNumber()),conversionRate:g.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:h__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:h__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},Ae=a=>({coinType:utils.normalizeStructTag(a.type.name),isIsolated:a.isIsolated,collateralFactor:Number(a.collateralFactor.value)/4294967296,liquidationFactor:Number(a.liquidationFactor.value)/4294967296,liquidationDiscount:Number(a.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(a.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(a.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(a.maxCollateralAmount),totalCollateralAmount:Number(a.totalCollateralAmount)}),Pe=(a,e)=>{let t=a.parseCoinNameFromType(e.coinType),s=a.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);let i=h__default.default(e.maxCollateralAmount).shiftedBy(-1*s),o=h__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:i.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:o.toNumber()}},mt=a=>({stakeType:utils.normalizeStructTag(a.stakeType.fields.name),maxPoint:Number(a.maxDistributedPoint),distributedPoint:Number(a.distributedPoint),pointPerPeriod:Number(a.distributedPointPerPeriod),period:Number(a.pointDistributionTime),maxStake:Number(a.maxStake),staked:Number(a.stakes),index:Number(a.index),createdAt:Number(a.createdAt),lastUpdate:Number(a.lastUpdate)}),yt=(a,e,t)=>{let i=h__default.default(a.pointPerPeriod).dividedBy(a.period),o=h__default.default(a.pointPerPeriod).dividedBy(a.period),r=o.gt(0)?h__default.default(a.maxPoint).minus(a.distributedPoint).dividedBy(o):h__default.default(0),n=a.createdAt,c=r.plus(a.lastUpdate).integerValue().toNumber(),d=h__default.default(Math.floor(new Date().getTime()/1e3)-a.lastUpdate).dividedBy(a.period).toFixed(0),l=h__default.default(a.maxPoint).minus(a.distributedPoint),u=h__default.default.minimum(h__default.default(d).multipliedBy(a.pointPerPeriod),l),f=h__default.default(a.index).plus(u.dividedBy(a.staked).isFinite()?h__default.default(1e9).multipliedBy(u).dividedBy(a.staked):0),m=h__default.default(a.distributedPoint).plus(u),p=h__default.default(a.staked),b=p.shiftedBy(-1*t),y=b.multipliedBy(e);return {distributedPointPerSec:i.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:f.toNumber(),currentTotalDistributedPoint:m.toNumber(),startDate:new Date(n*1e3),endDate:new Date(c*1e3),stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:y.toNumber()}},gt=a=>({claimedRewards:Number(a.claimed_rewards),exchangeRateDenominator:Number(a.exchange_rate_denominator),exchangeRateNumerator:Number(a.exchange_rate_numerator),rewards:Number(a.rewards),spoolId:String(a.spool_id)}),ht=(a,e,t,s,i)=>{let r=h__default.default(t.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),n=h__default.default(a.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=n.shiftedBy(-1*i),d=c.multipliedBy(s),l=h__default.default(e.rewards),u=l.shiftedBy(-1*i),f=u.multipliedBy(s),m=h__default.default(e.claimedRewards),p=m.shiftedBy(-1*i),b=p.multipliedBy(s),y=h__default.default(r).shiftedBy(-1*i).multipliedBy(31536e3).multipliedBy(s),w=y.dividedBy(t.stakedValue).isFinite()?y.dividedBy(t.stakedValue).toNumber():1/0;return (a.maxPoint<=a.distributedPoint||a.pointPerPeriod===0)&&(w=1/0),{rewardApr:w,totalRewardAmount:n.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:f.toNumber(),claimedRewardAmount:m.toNumber(),claimedRewardCoin:p.toNumber(),claimedRewardValue:b.toNumber(),rewardPerSec:r.toNumber()}},Na=a=>({pointType:utils.normalizeStructTag(a.point_type.name),distributedPointPerPeriod:Number(a.distributed_point_per_period),period:Number(a.point_distribution_time),distributedPoint:Number(a.distributed_point),points:Number(a.points),index:Number(a.index),baseWeight:Number(a.base_weight),weightedAmount:Number(a.weighted_amount),lastUpdate:Number(a.last_update),createdAt:Number(a.created_at)}),wt=(a,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((t,s)=>{let i=Na(s),o=a.parseCoinNameFromType(i.pointType);return t[o]=i,t},{})}),St=(a,e,t,s,i)=>{let r=h__default.default(a.distributedPointPerPeriod).dividedBy(a.period),n=h__default.default(Math.floor(new Date().getTime()/1e3)-a.lastUpdate).dividedBy(a.period).toFixed(0),c=h__default.default.minimum(h__default.default(n).multipliedBy(a.distributedPointPerPeriod),h__default.default(a.points)),d=h__default.default(a.index).plus(c.dividedBy(a.weightedAmount).isFinite()?h__default.default(1e9).multipliedBy(c).dividedBy(a.weightedAmount):0),l=h__default.default(a.distributedPoint).plus(c),u=h__default.default(a.baseWeight),f=h__default.default(a.weightedAmount),m=f.shiftedBy(-1*i),p=m.multipliedBy(s),b=365*24*60*60,y=h__default.default(r).shiftedBy(-1*t),w=h__default.default(y).multipliedBy(b).multipliedBy(e),k=h__default.default(1e12),B=w.multipliedBy(h__default.default(a.baseWeight).dividedBy(k)).dividedBy(p).isFinite()&&a.points>0?w.multipliedBy(h__default.default(a.baseWeight).dividedBy(k)).dividedBy(p).toNumber():1/0;return {distributedPointPerSec:r.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:f.toNumber(),weightedStakedCoin:m.toNumber(),weightedStakedValue:p.toNumber(),rewardApr:B,rewardPerSec:y.toNumber()}},Ba=a=>({pointType:utils.normalizeStructTag(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),Ct=(a,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((t,s)=>{let i=Ba(s),o=a.parseCoinNameFromType(i.pointType);return t[o]=i,t},{})}),fe=(...a)=>h__default.default(a.reduce((e,t)=>new h__default.default(t).lt(e)?t:e));var xe=(a,e,t)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(a))+1)),i=Math.max(Math.floor((s-1)/e),1)+1,o=Math.pow(10,-i);return o=t==="increase"?1-o:1+o,o};var Tt=(a,e)=>{let s=[...e.whitelist.lending].find(i=>e.address.get(`core.coins.${i}.oracle.pyth.feed`)===a.id);if(s){let i=a.price.price*10**a.price.expo;return {coinName:s,price:i,publishTime:Number(a.price.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${a.id}`)},kt=a=>{let e=new Date(a*1e3),t=new Date(a*1e3);t.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&t.setUTCDate(t.getUTCDate()+1);let s=new Date().getTime();return t.getTime()-s>126144e3*1e3&&t.setUTCDate(t.getUTCDate()-1),Math.floor(t.getTime()/1e3)},At=(a,e)=>{let t=[];for(let s=0;s<a.length;s+=e)t.push(a.slice(s,s+e));return t};async function Ma(a,e,...t){let s=t[t.length-1];if(typeof s=="object"&&s.indexer)try{return await a.apply(e,t)}catch(i){return console.warn(`Indexer requests failed: ${i.message}. Retrying without indexer..`),await a.apply(e,[...t.slice(0,-1),{...s,indexer:!1}])}return await a.apply(e,t)}function $(a){return (...e)=>Ma(a,this,...e)}var Y=a=>{if(!(a&&a.content&&"fields"in a.content))throw new Error(`Failed to parse object ${a}`);let e=a.content.fields;if(typeof e=="object"&&"value"in e){let t=e.value;return typeof t=="object"&&"fields"in t?t.fields:t}else if(typeof e=="object")return e;return e};var Ka=async a=>{let e=a.get("borrowIncentive.query"),t=a.get("borrowIncentive.incentivePools"),s=`${e}::incentive_pools_query::incentive_pools_data`,i=[t];return (await a.cache.queryInspectTxn({queryTarget:s,args:i}))?.events[0].parsedJson},Pt=async(a,e=[...a.constants.whitelist.lending],t=!1,s,i)=>{let o={};s=s??(await a.getMarketPools(void 0,{coinPrices:i,indexer:t})).pools,i=i??await a.getAllCoinPrices({marketPools:s});let r=await Ka(a.address);for(let n of r?.incentive_pools??[]){let c={},d=wt(a.utils,n),l=utils.normalizeStructTag(n.pool_type.name),u=a.utils.parseCoinNameFromType(l),f=i?.[u]??0,m=a.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[w,k]of Object.entries(d.poolPoints)){if(!k)continue;let B=k.pointType,O=a.utils.parseCoinNameFromType(B),_=a.utils.getCoinDecimal(O);if(_===void 0)throw new Error(`Coin decimal not found for ${O}`);let M=i?.[O]??0,g=a.utils.parseSymbol(O),A=a.utils.getCoinDecimal(O),v=St(k,M,_,f,m);c[w]={symbol:g,coinName:O,coinType:B,coinDecimal:A,coinPrice:M,points:k.points,distributedPoint:k.distributedPoint,weightedAmount:k.weightedAmount,...v};}let p=h__default.default(d.staked),b=p.shiftedBy(-1*m),y=b.multipliedBy(f);o[u]={coinName:u,symbol:a.utils.parseSymbol(u),coinType:l,coinDecimal:m,coinPrice:f,stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:y.toNumber(),points:c};}return o},xt=async({utils:a},e,t=[...a.constants.whitelist.lending])=>{let s=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),o=`${s}::incentive_account_query::incentive_account_data`,r=[i,e],c=(await a.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let f=Ct(a,u),m=f.poolType,p=a.parseCoinNameFromType(m);return t&&t.includes(p)&&(l[p]=f),l},{})},Ot=async({address:a},e)=>{let t=a.get("borrowIncentive.object"),s=a.get("borrowIncentive.incentivePools"),i=a.get("vesca.object"),o=await a.cache.queryGetObject(s);if(o?.data?.content?.dataType!=="moveObject")return null;let n=o.data.content.fields.ve_sca_bind.fields.id.id,c=`${t}::typed_id::TypedID<${i}::ve_sca::VeScaKey>`,d=await a.cache.queryGetDynamicFieldObject({parentId:n,name:{type:c,value:e}});return d?.data?.content?.dataType!=="moveObject"?null:d.data.content.fields.value.fields.id},It=async({address:a},e)=>{let t=a.get("borrowIncentive.object"),s=a.get("borrowIncentive.incentiveAccounts"),i=a.get("core.object"),o=await a.cache.queryGetObject(s);if(o?.data?.content?.dataType!=="moveObject")return null;let r=o.data.content.fields.accounts.fields.id.id,n=await a.cache.queryGetDynamicFieldObject({parentId:r,name:{type:`${t}::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 La=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()})}),Ea="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Oe=async(a,e)=>{try{let t=a.parseCoinType(e).slice(2),s=a.address.get("core.market");if(!s)return null;let i=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:Ea,value:t}}),o=La.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(t){return console.error(`Error in getSupplyLimit for ${e}: ${t.message}`),"0"}};var Va=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()})}),Rt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",_t=async(a,e=!1)=>{if(!e)return a.utils.getSupportedPoolAddresses().filter(t=>!!t.isolatedAssetKey).map(t=>t.coinName);try{let t=a.address.get("core.market"),s=[];if(!t)return s;let i=!1,o=null,r=n=>n.name.type===Rt;do{let n=await a.cache.queryGetDynamicFields({parentId:t,cursor:o,limit:10});if(!n)break;let c=n.data.filter(r).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),n&&n.hasNextPage&&n.nextCursor?(i=!0,o=n.nextCursor):i=!1;}while(i);return s}catch(t){return console.error(t),[]}},ce=async(a,e)=>{let t=a.constants.poolAddresses[e];if(t)return !!t.isolatedAssetKey;let s=a.address.get("core.market"),i=a.address.cache.queryClient.getQueryData(["getDynamicFields",s]);if(i){let c=a.parseCoinType(e);return i.includes(c)}let o=a.parseCoinType(e).slice(2),r=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:Rt,value:o}}),n=Va.safeParse(r?.data?.content);return n.success?n.data.fields.value:!1};var Ua=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()})}),Qa="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Ie=async(a,e)=>{try{let t=a.parseCoinType(e).slice(2),s=a.address.get("core.market");if(!s)return null;let i=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:Qa,value:t}}),o=Ua.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(t){return console.error(`Error in getBorrowLimit for ${e}: ${t.message}`),"0"}};var L=async(a,e,t=50)=>{let s=At(e,t),i=[];for(let o of s){let r=await a.queryGetObjects(o);i.push(...r);}return i};var Wa="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",vt=async(a,e,t)=>{let s=new Set(e),i=Object.fromEntries(Object.entries(a.constants.coinTypeToCoinNameMap).filter(([c,d])=>s.has(d))),o=null,r=!1,n=[];do{let c=await a.cache.queryGetDynamicFields({parentId:Wa,limit:10,cursor:o});if(!c)break;let{data:d,hasNextPage:l,nextCursor:u}=c,f=d.filter(m=>{let p=`0x${m.name.value.name}`;return !!i[p]}).map(m=>m.objectId)??[];n.push(...await a.cache.queryGetObjects(f)),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 m=+d.content.fields.value;c[u]=m/t;}return c},{})};var Bt=async(a,e=!1,t)=>{t=t??await a.utils.getCoinPrices()??{};let s={},i={};if(e){let u=await a.indexer.getMarket(),f=p=>{p.coinPrice=t[p.coinName]??p.coinPrice,p.coinWrappedType=a.utils.getCoinWrappedType(p.coinName),s[p.coinName]=p;},m=p=>{p.coinPrice=t[p.coinName]??p.coinPrice,p.coinWrappedType=a.utils.getCoinWrappedType(p.coinName),i[p.coinName]=p;};return Object.values(u.pools).filter(p=>!!p).forEach(f),Object.values(u.collaterals).filter(p=>!!p).forEach(m),{pools:s,collaterals:i}}let o=a.address.get("core.packages.query.id"),r=a.address.get("core.market"),n=`${o}::market_query::market_data`,c=[r],l=(await a.cache.queryInspectTxn({queryTarget:n,args:c}))?.events[0]?.parsedJson;for(let u of l?.pools??[]){let f=utils.normalizeStructTag(u.type.name),m=a.utils.parseCoinNameFromType(f),p=t[m]??0;if(!a.constants.whitelist.lending.has(m))continue;let b=qe({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(a.utils,m),supplyLimit:await Oe(a.utils,m)??"0",borrowLimit:await Ie(a.utils,m)??"0"}),y=$e(a.utils,b);s[m]={coinName:m,symbol:a.utils.parseSymbol(m),coinType:f,marketCoinType:a.utils.parseMarketCoinType(m),sCoinType:a.utils.parseSCoinType(a.utils.parseMarketCoinName(m))??"",coinWrappedType:a.utils.getCoinWrappedType(m),coinPrice:p,highKink:b.highKink,midKink:b.midKink,reserveFactor:b.reserveFactor,borrowWeight:b.borrowWeight,borrowFee:b.borrowFee,marketCoinSupplyAmount:b.marketCoinSupplyAmount,minBorrowAmount:b.minBorrowAmount,...y};}for(let u of l?.collaterals??[]){let f=utils.normalizeStructTag(u.type.name),m=a.utils.parseCoinNameFromType(f),p=t[m]??0;if(!a.constants.whitelist.collateral.has(m))continue;let b=Ae({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(a.utils,m)}),y=Pe(a.utils,b);i[m]={coinName:m,symbol:a.utils.parseSymbol(m),coinType:f,marketCoinType:a.utils.parseMarketCoinType(m),coinWrappedType:a.utils.getCoinWrappedType(m),coinPrice:p,collateralFactor:b.collateralFactor,liquidationFactor:b.liquidationFactor,liquidationDiscount:b.liquidationDiscount,liquidationPenalty:b.liquidationPenalty,liquidationReserveFactor:b.liquidationReserveFactor,...y};}return {pools:s,collaterals:i}},Mt=async(a,e)=>{let t=e.map(g=>({poolCoinName:g,balanceSheet:a.constants.poolAddresses[g]?.lendingPoolAddress,collateralStat:a.constants.poolAddresses[g]?.collateralPoolAddress,borrowDynamic:a.constants.poolAddresses[g]?.borrowDynamic,interestModel:a.constants.poolAddresses[g]?.interestModel,riskModel:a.constants.poolAddresses[g]?.riskModel,borrowFeeKey:a.constants.poolAddresses[g]?.borrowFeeKey,supplyLimitKey:a.constants.poolAddresses[g]?.supplyLimitKey,borrowLimitKey:a.constants.poolAddresses[g]?.borrowLimitKey,isolatedAssetKey:a.constants.poolAddresses[g]?.isolatedAssetKey})),[s,i,o,r,n,c,d,l,u]=await Promise.all([L(a.cache,t.map(g=>g.balanceSheet).filter(g=>!!g)),L(a.cache,t.map(g=>g.collateralStat).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowDynamic).filter(g=>!!g)),L(a.cache,t.map(g=>g.interestModel).filter(g=>!!g)),L(a.cache,t.map(g=>g.riskModel).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowFeeKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.supplyLimitKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowLimitKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.isolatedAssetKey).filter(g=>!!g))]),f=(g,A,v)=>{let D={},U=A.reduce((C,T)=>(C[T.objectId]=T,C),{});for(let C of g)C[v]&&(D[C.poolCoinName]=U[C[v]]);return D},m=f(t,s,"balanceSheet"),p=f(t,i,"collateralStat"),b=f(t,o,"borrowDynamic"),y=f(t,r,"interestModel"),w=f(t,n,"riskModel"),k=f(t,c,"borrowFeeKey"),B=f(t,d,"supplyLimitKey"),O=f(t,l,"borrowLimitKey"),_=f(t,u,"isolatedAssetKey");return e.reduce((g,A)=>(g[A]={balanceSheet:m[A],collateralStat:p[A],borrowDynamic:b[A],interestModel:y[A],riskModel:w[A],borrowFeeKey:k[A],supplyLimitKey:B[A],borrowLimitKey:O[A],isolatedAssetKey:_[A]},g),{})},Dt=async(a,e,t=!1,s)=>{s=s??await a.utils.getCoinPrices();let i={},o={};if(t){let n=await a.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=a.utils.getCoinWrappedType(l.coinName),i[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=a.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 Mt(a,e);return await Promise.allSettled(e.map(async n=>{try{let c=await Ga(a,n,t,s?.[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}},$a=({balanceSheet:a,borrowDynamic:e,collateralStat:t,interestModel:s,riskModel:i,borrowFeeKey:o,supplyLimitKey:r,borrowLimitKey:n,isolatedAssetKey:c})=>{let d=Y(a),l=Y(s),u=Y(e),f=Y(o),m=r?Y(r):"0",p=n?Y(n):"0",b=i?Y(i):void 0,y=t?Y(t):void 0,w=b&&y?{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:y.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:f,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:m,borrowLimit:p,parsedOriginMarketCollateral:w}},Ga=async(a,e,t=!1,s,i)=>{if(s=s??(await a.utils.getCoinPrices())?.[e],t){let l=await a.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=a.utils.getCoinWrappedType(l.coinName);let u;return a.constants.whitelist.collateral.has(e)&&(u=await a.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=a.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}i??=(await Mt(a,[e]))[e];let o=$a(i),r=qe(o),n=$e(a.utils,r),c=o.parsedOriginMarketCollateral?Ae(o.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:a.utils.parseSymbol(e),marketCoinType:a.utils.parseMarketCoinType(e),coinType:a.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:a.utils.parseSCoinType(a.utils.parseMarketCoinName(e))??"",coinWrappedType:a.utils.getCoinWrappedType(e),coinPrice:s??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:a.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Pe(a.utils,c)}:void 0}},Ft=async(a,e=[...a.constants.whitelist.collateral],t=!1)=>{let s=a.address.get("core.market"),i=await a.utils.getCoinPrices()??{},o={};if(t){let n=await a.indexer.getMarketCollaterals(),c=d=>{e.includes(d.coinName)&&(d.coinPrice=i[d.coinName]??d.coinPrice,d.coinWrappedType=a.utils.getCoinWrappedType(d.coinName),o[d.coinName]=d);};return Object.values(n).filter(d=>!!d).forEach(c),o}let r=await a.cache.queryGetObject(s);return await Promise.allSettled(e.map(async n=>{let c=await Ge(a,n,t,r?.data,i?.[n]);c&&(o[n]=c);})),o},Ge=async(a,e,t=!1,s,i)=>{if(i=i??(await a.utils.getCoinPrices())?.[e],t){let k=await a.indexer.getMarketCollateral(e);return k.coinPrice=i??k.coinPrice,k.coinWrappedType=a.utils.getCoinWrappedType(k.coinName),k}let o=a.address.get("core.market");if(s=s||(await a.cache.queryGetObject(o))?.data,!(s&&s.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let r=s.content.fields,n=a.utils.parseCoinType(e),c=r.risk_models.fields.table.fields.id.id,d=await a.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,f=r.collateral_stats.fields.table.fields.id.id,m=await a.cache.queryGetDynamicFieldObject({parentId:f,name:{type:"0x1::type_name::TypeName",value:{name:n.substring(2)}}}),p=m?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${e}: ${m?.error?.code.toString()}`);let b=p.content.fields.value.fields,y=Ae({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:b.amount,isIsolated:await ce(a.utils,e)}),w=Pe(a.utils,y);return {coinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(e),marketCoinType:a.utils.parseMarketCoinType(e),coinWrappedType:a.utils.getCoinWrappedType(e),coinPrice:i??0,collateralFactor:y.collateralFactor,liquidationFactor:y.liquidationFactor,liquidationDiscount:y.liquidationDiscount,liquidationPenalty:y.liquidationPenalty,liquidationReserveFactor:y.liquidationReserveFactor,...w}},le=async({constants:a},e)=>{let t=e,s=a.protocolObjectId,i=[],o=!1,r=null;do{let l=await a.cache.queryGetOwnedObjects({owner:t,filter:{StructType:`${s}::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 L(a.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 f=l?.objectId,m=l?.content;if(f&&m&&"fields"in m){let p=m.fields,b=String(p.ownership.fields.of),y=await ze(a.cache,d[u]);c.push({id:b,keyId:f,locked:y});}})),c},ze=async(a,e)=>{let t=typeof e=="string"?(await a.queryGetObject(e))?.data:e,s=!1;return t&&t?.content?.dataType==="moveObject"&&"lock_key"in t.content.fields&&(s=!!t.content.fields.lock_key),s},Re=async({address:a},e)=>{let t=a.get("core.packages.query.id"),s=a.get("core.version"),i=a.get("core.market"),o=`${t}::obligation_query::obligation_data`,r=[s,i,e,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}];return (await a.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson},Kt=async(a,e=[...a.constants.whitelist.lending],t)=>{let s=t??a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await Ye(a,o,s);i[o]=r;})),i},Ye=async(a,e,t)=>{let s=t??a.suiKit.currentAddress(),i=a.utils.parseCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Lt=async(a,e,t)=>{e=e||[...a.constants.whitelist.lending].map(o=>a.utils.parseMarketCoinName(o));let s=t??a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await He(a,o,s);i[o]=r;})),i},He=async(a,e,t)=>{let s=t??a.suiKit.currentAddress(),i=a.utils.parseMarketCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Et=async(a,e,t=1e4)=>{let s=[],i={},o=e.reduce((c,d)=>{let l=a.utils.parseCoinType(d).slice(2);return c[l]=d,c},{}),r=e.map(c=>{let d=a.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),n=await L(a.cache,r);if(s.length>0){let c=await vt(a.utils,s,t);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,f=+l.value;c[o[u]]=f/t;}return c},{})},i};var za=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(a=>({totalPoolReward:h__default.default(a.balance).shiftedBy(-9).toNumber(),isClaimEnabled:a.enable_claim})),Ya=zod.z.object({value:zod.z.string()}).transform(a=>h__default.default(a.value).shiftedBy(-9).toNumber()),Ut=async(a,e)=>{let t=a.address.get("loyaltyProgram.rewardPool"),s=await a.cache.queryGetObject(t);if(s?.data?.content?.dataType!=="moveObject")return null;let i=s.data.content.fields,{isClaimEnabled:o,totalPoolReward:r}=za.parse(i),n={pendingReward:0,totalPoolReward:r,isClaimEnabled:o};if(e=e??(await a.getVeScas())[0]?.keyObject,!e)return n;let c=a.address.get("loyaltyProgram.userRewardTableId"),d=await a.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=Ya.parse(l),n};var Qt=async(a,e=[...a.constants.whitelist.lending],t,s,i,o=!1)=>{let r=e.map(m=>a.utils.parseMarketCoinName(m)),n=r.filter(m=>[...a.constants.whitelist.spool].includes(m));i=i??await a.utils.getCoinPrices(),s=s??(await a.getMarketPools(e,{indexer:o,coinPrices:i})).pools;let c=await a.getSpools(n,{indexer:o,marketPools:s,coinPrices:i}),[d,l,u]=await Promise.all([a.getCoinAmounts(e,t),a.getMarketCoinAmounts(r,t),a.getAllStakeAccounts(t)]),f={};return await Promise.allSettled(e.map(async m=>{let p=n.find(y=>y===a.utils.parseMarketCoinName(m)),b=a.utils.parseMarketCoinName(m);f[m]=await Je(a,m,t,o,s?.[m],p?c[p]:void 0,p?u[p]:[],d?.[m],l?.[b],i?.[m]??0);})),f},Je=async(a,e,t,s=!1,i,o,r,n,c,d,l)=>{let u=a.utils.parseMarketCoinName(e);if(d=d??(await a.utils.getCoinPrices())?.[e]??0,i=i??await a.getMarketPool(e,{indexer:s,coinPrice:d}),!i)throw new Error(`Failed to fetch marketPool for ${e}`);o=o??[...a.constants.whitelist.spool].includes(u)?await a.getSpool(u,{indexer:s,marketPool:i,coinPrices:{[e]:d}}):void 0,r=r||[...a.constants.whitelist.spool].includes(u)?await a.getStakeAccounts(u,t):[],n=n||await a.getCoinAmount(e,t),c=c||await a.getMarketCoinAmount(u,t),l=l||await a.getSCoinAmount(u,t);let f=a.utils.getCoinDecimal(e),m=h__default.default(0),p=h__default.default(0),b=h__default.default(0),y=h__default.default(0),w=h__default.default(0),k=h__default.default(0),B=h__default.default(0),O=h__default.default(0),_=h__default.default(0);if(o)for(let Q of r){let R=h__default.default(Q.staked),j=R.shiftedBy(-1*o.coinDecimal),V=R.multipliedBy(i?.conversionRate??1),G=V.shiftedBy(-1*o.coinDecimal),J=G.multipliedBy(o.coinPrice);m=m.plus(R),p=p.plus(j),b=b.plus(V),y=y.plus(G),w=w.plus(J),k=k.plus(R),B=k.shiftedBy(-1*o.coinDecimal);let z=o.currentPointIndex?h__default.default(o.currentPointIndex-Q.index).dividedBy(1e9):1;O=O.plus(R.multipliedBy(z).plus(Q.points).multipliedBy(o.exchangeRateNumerator).dividedBy(o.exchangeRateDenominator)),_=O.shiftedBy(-1*o.rewardCoinDecimal);}let M=h__default.default(c).plus(h__default.default(l)).multipliedBy(i?.conversionRate??1),g=M.shiftedBy(-1*f),A=g.multipliedBy(d??0),v=h__default.default(d??0).multipliedBy(i?.conversionRate??1),D=h__default.default(c).plus(h__default.default(l)),U=D.shiftedBy(-1*f),C=h__default.default(n),T=C.shiftedBy(-1*f),P=fe(M,i?.supplyAmount??1/0).plus(b),x=fe(g,i?.supplyCoin??1/0).plus(y);return {coinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(e),marketCoinType:a.utils.parseMarketCoinType(e),sCoinType:i?.sCoinType??"",coinDecimal:f,coinPrice:d??0,conversionRate:i?.conversionRate??1,marketCoinPrice:v.toNumber(),supplyApr:i?.supplyApr??0,supplyApy:i?.supplyApy??0,rewardApr:o?.rewardApr??0,suppliedAmount:M.plus(b).toNumber(),suppliedCoin:g.plus(y).toNumber(),suppliedValue:A.plus(w).toNumber(),stakedMarketAmount:m.toNumber(),stakedMarketCoin:p.toNumber(),stakedAmount:b.toNumber(),stakedCoin:y.toNumber(),stakedValue:w.toNumber(),unstakedMarketAmount:D.toNumber(),unstakedMarketCoin:U.toNumber(),unstakedAmount:M.toNumber(),unstakedCoin:g.toNumber(),unstakedValue:A.toNumber(),availableSupplyAmount:C.toNumber(),availableSupplyCoin:T.toNumber(),availableWithdrawAmount:P.toNumber(),availableWithdrawCoin:x.toNumber(),availableStakeAmount:D.toNumber(),availableStakeCoin:U.toNumber(),availableUnstakeAmount:k.toNumber(),availableUnstakeCoin:B.toNumber(),availableClaimAmount:O.toNumber(),availableClaimCoin:_.toNumber(),isIsolated:i?i.isIsolated:!1}},Wt=async(a,e,t,s,i=!1)=>{t=t??await a.getMarketPools(void 0,{indexer:i}),s=s??await a.getAllCoinPrices({marketPools:t.pools});let[o,r]=await Promise.all([a.getCoinAmounts(void 0,e),a.getObligations(e)]),n=await L(a.cache,r.map(d=>d.id)),c={};return await Promise.allSettled(r.map(async(d,l)=>{c[d.keyId]=await Xa(a,n[l]??d.id,e,i,t,s,o);})),c},Xa=async(a,e,t,s=!1,i,o,r)=>{i=i??await a.getMarketPools(void 0,{indexer:s}),o=o??await a.getAllCoinPrices({marketPools:i.pools}),r=r??await a.getCoinAmounts(Array.from(a.constants.whitelist.lending),t);let[n,c,d]=await Promise.all([a.queryObligation(e),a.getBorrowIncentivePools(void 0,{coinPrices:o,marketPools:i.pools}),a.getBorrowIncentiveAccounts(e)]),l={},u={},f={},m=0,p=h__default.default(0),b=h__default.default(0),y=h__default.default(0),w=0,k=0,B=h__default.default(0),O=h__default.default(0);for(let C of Array.from(a.constants.whitelist.collateral)){let T=n?.collaterals.find(R=>{let j=a.utils.parseCoinNameFromType(R.type.name);return C===j}),P=i.collaterals[C],x=a.utils.getCoinDecimal(C),F=o?.[C],Q=r?.[C]??0;if(P&&F){let R=h__default.default(T?.amount??0),j=R.shiftedBy(-1*x),V=j.multipliedBy(F),G=V.multipliedBy(P.collateralFactor),J=V.multipliedBy(P.liquidationFactor),E=h__default.default(Q),z=E.shiftedBy(-1*x);p=p.plus(V),b=b.plus(G),y=y.plus(J),R.isGreaterThan(0)&&m++,l[C]={coinName:C,coinType:a.utils.parseCoinType(C),symbol:a.utils.parseSymbol(C),coinDecimal:x,coinPrice:F,depositedAmount:R.toNumber(),depositedCoin:j.toNumber(),depositedValue:V.toNumber(),borrowCapacityValue:G.toNumber(),requiredCollateralValue:J.toNumber(),availableDepositAmount:E.toNumber(),availableDepositCoin:z.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let _=[...new Set([...Object.values(i.pools).filter(C=>!!C).map(C=>C.coinName)])];for(let C of _){let T=n?.debts.find(R=>{let j=a.utils.parseCoinNameFromType(R.type.name);return C===j}),P=i.pools[C],x=a.utils.getCoinDecimal(C),F=o?.[C],Q=r?.[C]??0;if(P&&F){let R=T?.borrowIndex?P.borrowIndex/Number(T.borrowIndex)-1:0,j=h__default.default(T?.amount??0).multipliedBy(R+1),V=j.shiftedBy(-1*x),G=j,J=G.shiftedBy(-1*x),E=h__default.default(Q),z=E.shiftedBy(-1*x),se=J.multipliedBy(F),ne=se.multipliedBy(P.borrowWeight);B=B.plus(se),O=O.plus(ne),j.isGreaterThan(0)&&w++,u[C]={coinName:C,coinType:a.utils.parseCoinType(C),symbol:a.utils.parseSymbol(C),coinDecimal:x,coinPrice:F,borrowedAmount:j.toNumber(),borrowedCoin:V.toNumber(),borrowedValue:se.toNumber(),borrowedValueWithWeight:ne.toNumber(),borrowIndex:Number(T?.borrowIndex??0),requiredRepayAmount:G.toNumber(),requiredRepayCoin:J.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:E.toNumber(),availableRepayCoin:z.toNumber()};}}for(let[C,T]of Object.entries(d)){if(!T)continue;let P=C,x=c[P];if(x){let F=[];Object.entries(T.pointList).forEach(([Q,R])=>{let j=x.points[a.utils.parseSCoinTypeNameToMarketCoinName(Q)];if(R&&j){let V=h__default.default(0),G=h__default.default(0),J=h__default.default(R.weightedAmount),z=j.currentPointIndex?Math.max(h__default.default(j.currentPointIndex-R.index).dividedBy(1e9).toNumber(),0):1;V=V.plus(J.multipliedBy(z).plus(R.points)),G=V.shiftedBy(-1*j.coinDecimal);let se=h__default.default(1e12),ne=h__default.default(R.weightedAmount).div(h__default.default(T.debtAmount).multipliedBy(j.baseWeight).dividedBy(se)).isFinite()?h__default.default(R.weightedAmount).div(h__default.default(T.debtAmount).multipliedBy(j.baseWeight).dividedBy(se)).toNumber():1;V.isGreaterThanOrEqualTo(0)&&F.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,availableClaimAmount:V.toNumber(),availableClaimCoin:G.toNumber(),boostValue:ne});}}),Object.keys(x.points).some(Q=>{let R=x.points[Q]?.rewardApr;return R!==1/0&&typeof R=="number"&&R>0})&&T.debtAmount>0&&k++,f[P]={coinName:x.coinName,coinType:x.coinType,symbol:x.symbol,coinDecimal:x.coinDecimal,coinPrice:x.coinPrice,rewards:F};}}let M=y.isZero()?O.isGreaterThan(0)?h__default.default(100):h__default.default(0):O.dividedBy(y);M=M.isLessThan(1)?M:h__default.default(1);let g=p.minus(B).isGreaterThan(0)?p.minus(B):h__default.default(0),A=b.minus(O).isGreaterThan(0)?b.minus(O):h__default.default(0),v=O.isGreaterThan(0)?y:h__default.default(0),D=O.minus(v).isGreaterThan(0)?O.minus(v):h__default.default(0),U={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:p.toNumber(),totalBorrowedValue:B.toNumber(),totalBalanceValue:g.toNumber(),totalBorrowCapacityValue:b.toNumber(),totalAvailableCollateralValue:A.toNumber(),totalBorrowedValueWithWeight:O.toNumber(),totalRequiredCollateralValue:v.toNumber(),totalUnhealthyCollateralValue:D.toNumber(),totalRiskLevel:M.toNumber(),totalDepositedPools:m,totalBorrowedPools:w,totalRewardedPools:k,collaterals:l,debts:u,borrowIncentives:f};for(let[C,T]of Object.entries(U.collaterals)){if(!T)continue;let P=i.collaterals[C];if(P){let x=h__default.default(U.totalAvailableCollateralValue).dividedBy(P.collateralFactor).dividedBy(P.coinPrice).shiftedBy(P.coinDecimal);x=U.totalBorrowedValueWithWeight===0?h__default.default(T.depositedAmount):fe(x.multipliedBy(xe(h__default.default(U.totalAvailableCollateralValue).dividedBy(P.collateralFactor).toNumber(),3,"increase")).toNumber(),T.depositedAmount,P.depositAmount),T.availableWithdrawAmount=x.toNumber(),T.availableWithdrawCoin=x.shiftedBy(-1*T.coinDecimal).toNumber();}}for(let[C,T]of Object.entries(U.debts)){if(!T)continue;let P=i.pools[C];if(P){let x=h__default.default(T.requiredRepayAmount).multipliedBy(xe(T.borrowedValue,3,"decrease")),F=h__default.default(U.totalAvailableCollateralValue).dividedBy(P.borrowWeight).shiftedBy(P.coinDecimal).dividedBy(P.coinPrice);F=U.totalAvailableCollateralValue!==0&&h__default.default(P.maxBorrowCoin).isGreaterThan(P.borrowCoin)?fe(F.multipliedBy(xe(F.shiftedBy(-1*P.coinDecimal).multipliedBy(P.coinPrice).toNumber(),3,"increase")).toNumber(),P.supplyAmount):h__default.default(0),T.availableBorrowAmount=F.toNumber(),T.availableBorrowCoin=F.shiftedBy(-1*T.coinDecimal).toNumber(),T.requiredRepayAmount=x.toNumber(),T.requiredRepayCoin=x.shiftedBy(-1*T.coinDecimal).toNumber();}}return U},qt=async(a,e=!1)=>{let t=await a.getMarketPools(void 0,{indexer:e}),s=h__default.default(0),i=h__default.default(0),o=h__default.default(0);if(e){let n=await a.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(t.pools))n&&(s=s.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(t.collaterals))n&&(i=i.plus(h__default.default(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:s.plus(i).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:i.toNumber(),borrowValue:o.toNumber(),totalValue:s.plus(i).minus(o).toNumber()}},$t=async(a,e,t=!1)=>{let s=await a.utils.getCoinPrices(),i=await a.getMarketPools(void 0,{indexer:t,coinPrices:s}),[o,r,n,c]=await Promise.all([a.getLendings(void 0,e,{indexer:t,marketPools:i.pools,coinPrices:s}),a.getObligationAccounts(e,{indexer:t,market:i,coinPrices:s}),a.getBorrowIncentivePools(void 0,{marketPools:i.pools,coinPrices:s}),a.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).map(p=>({obligationId:p.obligationId,totalDebtsInUsd:p.totalBorrowedValueWithWeight,totalCollateralInUsd:p.totalDepositedValue,riskLevel:p.totalRiskLevel,availableCollateralInUsd:p.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:p.totalUnhealthyCollateralValue,borrowedPools:Object.values(p.debts).filter(b=>!!b&&b.borrowedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,borrowedCoin:b.borrowedCoin,borrowedValueInUsd:b.borrowedValueWithWeight,borrowApr:i.pools[b.coinName]?.borrowApr,borrowApy:i.pools[b.coinName]?.borrowApy,incentiveInfos:Object.values(n[b.coinName]?.points??{}).filter(y=>!!y&&isFinite(y.rewardApr)).map(y=>({coinName:y.coinName,symbol:y.symbol,coinType:y.coinType,incentiveApr:y.rewardApr}))}))})),u=Object.values(o).reduce((p,b)=>{if(b){if(b.availableClaimCoin===0)return p;p[b.symbol]?p[b.symbol].pendingRewardInCoin+=b.availableClaimCoin:p[b.symbol]={symbol:b.symbol,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:b.coinPrice,pendingRewardInCoin:b.availableClaimCoin};}return p},{}),f=Object.values(r).filter(p=>!!p).reduce((p,b)=>(Object.values(b.borrowIncentives).forEach(y=>{y?.rewards.forEach(w=>{if(w.availableClaimCoin===0)return p;p[w.coinName]?p[w.coinName].pendingRewardInCoin+=w.availableClaimCoin:p[w.coinName]={symbol:w.symbol,coinType:w.coinType,coinPrice:w.coinPrice,pendingRewardInCoin:w.availableClaimCoin};});}),p),{}),m=c.map(({keyId:p,lockedScaCoin:b,currentVeScaBalance:y,unlockAt:w})=>({veScaKey:p,coinPrice:s.sca??0,lockedScaInCoin:b,lockedScaInUsd:b*(s.sca??0),currentVeScaBalance:y,remainingLockPeriodInDays:w-Date.now()>0?(w-Date.now())/864e5:0,unlockAt:w}));return {totalSupplyValue:d.reduce((p,b)=>(p+=b.suppliedValue,p),0),...l.reduce((p,b)=>(p.totalDebtValue+=b.totalDebtsInUsd,p.totalCollateralValue+=b.totalCollateralInUsd,p),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:m.reduce((p,b)=>(p+=b.lockedScaInUsd,p),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(u).reduce((p,[b,y])=>(p.push({...y,coinName:b,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),p),[]),borrowIncentives:Object.entries(f).reduce((p,[b,y])=>(p.push({coinName:b,...y,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),p),[])},veScas:m}};var Xe=async({address:a},e,t)=>{let s=a.get(`core.coins.${e}.oracle.pyth.feedObject`);if(t=t||(await a.cache.queryGetObject(s))?.data,t){let i=t;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:a},e)=>{let t=e.reduce((o,r)=>{let n=a.address.get(`core.coins.${r}.oracle.pyth.feedObject`);return n&&(o[n]?o[n].push(r):o[n]=[r]),o},{}),i=(await a.address.cache.queryGetObjects(Object.keys(t))).reduce((o,r)=>(t[r.objectId].forEach(n=>{o[n]=r;}),o),{});return (await Promise.all(Object.entries(i).map(async([o,r])=>({coinName:o,price:await Xe(a,o,r)})))).reduce((o,r)=>(o[r.coinName]=r.price,o),{})},Gt=async(a,e,t,s=!1)=>{if(t=t??(s?await a.getCoinPricesByIndexer():await a.utils.getCoinPrices()),e=e??(await a.getMarketPools(void 0,{coinPrices:t,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let i={};return a.constants.whitelist.scoin.forEach(o=>{let r=a.utils.parseCoinName(o);i[o]=h__default.default(t[r]??0).multipliedBy(e[r]?.conversionRate??1).toNumber();}),{...t,...i}};var zt=async(a,e)=>{let t=a.get("referral.bindingTableId"),s=await a.cache.queryGetDynamicFieldObject({parentId:t,name:{type:"address",value:e}});return s?.data?.content?.dataType!=="moveObject"?null:s.data.content.fields.value};var Yt=async({utils:a},e)=>{let t=a.address.get("scoin.id"),s=[a.getSCoinTreasury(e)],i=[a.parseSCoinType(e),a.parseUnderlyingSCoinType(e)],o=`${t}::s_coin_converter::total_supply`,n=(await a.cache.queryInspectTxn({queryTarget:o,args:s,typeArgs:i}))?.results;if(n&&n[0]?.returnValues){let c=Uint8Array.from(n[0].returnValues[0][0]),d=n[0].returnValues[0][1];return ts__default.default(d==="u64","Result type is not u64"),h__default.default(bcs.bcs.u64().parse(c)).shiftedBy(a.getCoinDecimal(a.parseCoinName(e))).toNumber()}return 0},Ht=async({utils:a},e=[...a.constants.whitelist.scoin],t)=>{let s=t||a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await et({utils:a},o,s);i[o]=r;})),i},et=async({utils:a},e,t)=>{let s=t||a.suiKit.currentAddress(),i=a.parseSCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},as=(a,e,t)=>{if(e===t)throw new Error("fromAsset and toAsset must be different");if(!a.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!a.constants.whitelist.scoin.has(t))throw new Error("toAsset is not supported")},Jt=async(a,e,t,s)=>{as(a.utils,e,t);let i=a.utils.parseCoinName(e),o=a.utils.parseCoinName(t),r=await Promise.all([a.getMarketPool(i),a.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 a.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 Xt=async(a,e)=>{let t=e.map((l,u)=>({poolCoinName:e[u],spool:a.constants.poolAddresses[l]?.spool,spoolReward:a.constants.poolAddresses[l]?.spoolReward,sCoinTreasury:a.constants.poolAddresses[l]?.sCoinTreasury})),[s,i,o]=await Promise.all([L(a.cache,t.map(l=>l.spool).filter(l=>!!l)),L(a.cache,t.map(l=>l.spoolReward).filter(l=>!!l)),L(a.cache,t.map(l=>l.sCoinTreasury).filter(l=>!!l))]),r=(l,u,f)=>{let m={},p=u.reduce((b,y)=>(b[y.objectId]=y,b),{});for(let b of l)b[f]&&(m[b.poolCoinName]=p[b[f]]);return m},n=r(t,s,"spool"),c=r(t,i,"spoolReward"),d=r(t,o,"sCoinTreasury");return e.reduce((l,u)=>(l[u]={spool:n[u],spoolReward:c[u],sCoinTreasury:d[u]},l),{})},ss=({spool:a,spoolReward:e})=>{let t=Y(a),s=Y(e);return {stakeType:t.stake_type,maxDistributedPoint:t.max_distributed_point,distributedPoint:t.distributed_point,distributedPointPerPeriod:t.distributed_point_per_period,pointDistributionTime:t.point_distribution_time,maxStake:t.max_stakes,stakes:t.stakes,index:t.index,createdAt:t.created_at,lastUpdate:t.last_update,...s}},Zt=async(a,e=[...a.constants.whitelist.spool],t=!1,s,i)=>{let o=e.map(c=>a.utils.parseCoinName(c));if(s=s??(await a.getMarketPools(o,{indexer:t})).pools,i=i??await a.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${o}`);let r={};if(t){let c=await a.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=a.utils.parseCoinName(l.marketCoinName),f=a.utils.getSpoolRewardCoinName();l.coinPrice=i[u]??l.coinPrice,l.marketCoinPrice=i[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=i[f]??l.rewardCoinPrice,r[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),r}let n=await Xt(a,o);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=o[d],u=await os(a,c,t,i,n[l]);u&&(r[c]=u);}catch(l){console.error(l);}})),r},os=async(a,e,t=!1,s,i)=>{let o=a.utils.parseCoinName(e);if(s=s||await a.getAllCoinPrices(),t){let y=await a.indexer.getSpool(e),w=a.utils.parseCoinName(e),k=a.utils.getSpoolRewardCoinName();return y.coinPrice=s?.[w]??y.coinPrice,y.marketCoinPrice=s?.[e]??y.marketCoinPrice,y.rewardCoinPrice=s?.[k]??y.rewardCoinPrice,y}i??=(await Xt(a,[o]))[o];let r=a.utils.getSpoolRewardCoinName();s=s||await a.utils.getCoinPrices();let n=ss(i),c=mt(n),d=s?.[e]??0,l=a.utils.getCoinDecimal(e),u=yt(c,d,l),f=gt(n),m=s?.[r]??0,p=a.utils.getCoinDecimal(r),b=ht(c,f,u,m,p);return {marketCoinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(o),marketCoinType:a.utils.parseMarketCoinType(o),rewardCoinType:a.utils.isMarketCoin(r)?a.utils.parseMarketCoinType(r):a.utils.parseCoinType(r),sCoinType:a.utils.parseSCoinType(e)??"",coinDecimal:a.utils.getCoinDecimal(o),rewardCoinDecimal:a.utils.getCoinDecimal(r),coinPrice:s?.[o]??0,marketCoinPrice:d,rewardCoinPrice:m,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:f.exchangeRateNumerator,exchangeRateDenominator:f.exchangeRateDenominator,...b}},ge=async({utils:a},e)=>{let t=e||a.suiKit.currentAddress(),s=a.address.get("spool.object"),i=`${s}::spool_account::SpoolAccount`,o=[],r=!1,n=null;do{let u=await a.cache.queryGetOwnedObjects({owner:t,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=[...a.constants.whitelist.spool].reduce((u,f)=>(u[f]=[],u),{}),d=Object.keys(c).reduce((u,f)=>{let m=a.parseCoinName(f),p=a.parseMarketCoinType(m);return u[f]=`${s}::spool_account::SpoolAccount<${p}>`,u},{}),l=Object.entries(d).reduce((u,[f,m])=>(u[m]=f,u),{});for(let u of o.map(f=>f.data)){let f=u?.objectId,m=u?.type;if(f&&u?.content&&"fields"in u.content){let p=u.content.fields,b=String(p.spool_id),y=String(p.stake_type.fields.name),w=Number(p.stakes),k=Number(p.index),B=Number(p.points),O=Number(p.total_points),_={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},M=utils.normalizeStructTag(m),g=_[l[M]];g&&g.push({id:f,type:M,stakePoolId:b,stakeType:utils.normalizeStructTag(y),staked:w,index:k,points:B,totalPoints:O});}}return c},tt=async({utils:a},e)=>{let t=a.address.get(`spool.pools.${e}.id`),s,i=await a.cache.queryGetObject(t);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),f=Number(c.point_distribution_time),m=Number(c.max_stakes),p=String(c.stake_type.fields.name),b=Number(c.stakes),y=Number(c.index),w=Number(c.created_at),k=Number(c.last_update);s={id:r,type:utils.normalizeStructTag(n),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:f,maxStake:m,stakeType:utils.normalizeStructTag(p),totalStaked:b,index:y,createdAt:w,lastUpdate:k};}}return s},at=async({utils:a},e)=>{let t=a.address.get(`spool.pools.${e}.rewardPoolId`),s,i=await a.cache.queryGetObject(t);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),f=Number(c.rewards),m=Number(c.claimed_rewards);s={id:r,type:utils.normalizeStructTag(n),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:f,claimedRewards:m};}}return s};var ls=async(a,e)=>{let t=e||a.suiKit.currentAddress(),i=`${a.address.get("vesca.object")}::ve_sca::VeScaKey`,o=[],r=!1,n=null;do{let d=await a.cache.queryGetOwnedObjects({owner:t,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)},Ne=async({utils:a},e,t)=>{let s=await ls(a,e),i=Array(s.length).fill(null),o=s.map(async(n,c)=>{let d=await he(a,n);d&&(i[c]=d);});await Promise.allSettled(o);let r=i.filter(Boolean).sort((n,c)=>c.currentVeScaBalance-n.currentVeScaBalance);return t?r.filter(n=>n.lockedScaAmount!=="0"):r},ea=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),he=async(a,e)=>{let t=a.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=ea.parse(e));let s,i=await a.cache.queryGetDynamicFieldObject({parentId:t,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);s={id:o.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:ea.parse(i.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:h__default.default(r.unlock_at*1e3).toNumber()};}return s},ds=async(a,e)=>{let t=a.address.get("vesca.id"),s=a.address.get("vesca.config");e=e??a.address.get("vesca.treasury");let i=new suiKit.SuiTxBlock,o=i.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}),r=`${t}::treasury::refresh`,n=[s,e,o],c=`${t}::treasury::total_ve_sca_amount`,d=[e,o],l=await Promise.all(n.map(async b=>typeof b=="string"?(await a.cache.queryGetObject(b))?.data:b)),u=await Promise.all(d.map(async b=>typeof b=="string"?(await a.cache.queryGetObject(b))?.data:b));i.moveCall(r,l),i.moveCall(c,u);let f=await i.txBlock.build({client:a.suiKit.client(),onlyTransactionKind:!0}),p=(await a.cache.queryClient.fetchQuery({queryKey:N.rpc.getTotalVeScaTreasuryAmount(n,d),queryFn:async()=>await a.suiKit.inspectTxn(f)})).results;if(p&&p[1]?.returnValues){let b=Uint8Array.from(p[1].returnValues[0][0]),y=p[1].returnValues[0][1];return ts__default.default(y==="u64","Result type is not u64"),bcs.bcs.u64().parse(b)}return "0"},ta=async a=>{let e=a.address.get("vesca.treasury"),t=await a.cache.queryGetObject(e);if(!t||t.data?.content?.dataType!=="moveObject")return null;let s=t.data.content.fields,i=h__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),o=h__default.default(await ds(a,t.data)??0).shiftedBy(-9).toNumber(),r=i>0?o/i*4:0;return {totalLockedSca:i,totalVeSca:o,averageLockingPeriod:r,averageLockingPeriodUnit:"year"}};var bs=[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"],Be=async a=>{for(let e of bs)try{return await a(new client.SuiClient({url:e}))}catch(t){if(t.status!==429)throw t;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},fs=async(a,e,t="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,i=!1,o={};do{let r=await a.getDynamicFields({parentId:t,limit:10,cursor:s});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,s=d;}while(i);return o},aa=async(a,e=[])=>{let t=new Set(e),s={},o=(await fetch(`https://sui.apis.scallop.io/addresses/${a}`).then(g=>g.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((g,A)=>{if(t.size>0&&!t.has(A))return g;let v=o.core.coins[A];return v&&v.coinType&&g.push([A,v.coinType]),g},[]);if(n.length===0)throw new Error("No coinTypesPairs");let c=o.core.market,d=(await Be(async g=>await g.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,f=l.collateral_stats.fields.table.fields.id.id,m=l.borrow_dynamics.fields.table.fields.id.id,p=l.interest_models.fields.table.fields.id.id,b=l.risk_models.fields.table.fields.id.id,y="0x1::type_name::TypeName",w="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",k="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",B="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",O="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",_=async(g,A,v)=>(await Be(async D=>await D.getDynamicFieldObject({parentId:g,name:{type:A,value:v}}))).data?.objectId,M=await Be(async g=>await fs(g,new Set(n.map(([,A])=>A))));return await Promise.all(n.map(async([g,A])=>{let v=A.slice(2),D=await Promise.all([_(u,y,{name:v}),_(f,y,{name:v}),_(m,y,{name:v}),_(p,y,{name:v}),_(b,y,{name:v}),_(c,w,v),_(c,k,v),_(c,B,v),_(c,O,v)]),{symbol:U,metaData:C}=o.core.coins[g],T={spool:"",spoolReward:""},P=o.spool.pools[`s${g}`];if(P){let{id:E,rewardPoolId:z}=P;T={spool:E,spoolReward:z};}let x={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},F=`s${g}`,Q=o.scoin.coins[F];if(Q){let{coinType:E,treasury:z,metaData:se,symbol:ne}=Q;x={sCoinType:E,sCoinTreasury:z,sCoinMetadataId:se,sCoinSymbol:ne};}let R={pythFeed:"",pythFeedObjectId:""};if(o.core.coins[g]?.oracle.pyth){let{feed:E,feedObject:z}=o.core.coins[g].oracle.pyth;R={pythFeed:E,pythFeedObjectId:z};}o.core.coins[g].oracle.pyth;let G=(await Be(async E=>await E.getCoinMetadata({coinType:A})))?.decimals??0,J=T?`s${g}`:void 0;s[g]={coinName:g,symbol:U,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]??"",...T,...x,sCoinName:F,coinMetadataId:C,coinType:A,spoolName:J,decimals:G,...R,flashloanFeeObject:M[A]??""},await new Promise(E=>setTimeout(E,1e3));})),s};var ms="0x56e48a141f20a3a6a6d3fc43e58b01fc63f756c08224870e7890c80ec9d2afee",ys="0xef4d9430ae42c1b24199ac55e87ddd7262622447ee3c7de8868efe839b3d8705",ia=async a=>{let e=`${a.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[t,s]=await Promise.all([a.cache.queryGetDynamicFieldObject({parentId:ms,name:{type:e,value:{dummy_field:!1}}}),a.cache.queryGetDynamicFieldObject({parentId:ys,name:{type:e,value:{dummy_field:!1}}})]);return {primary:t,secondary:s}},sa="0xc22c9d691ee4c780de09db91d8b487d863211ebf08720772144bcf716318826c",oa="0x3b184ff859f5de30eeaf186898e5224925be6bb6d2baa74347ef471a8cd1c0d3",st=async(a,e)=>{if(e==="primary"&&!sa)return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!oa)return console.error("Secondary price update policy vecset id is not set"),null;let t={[`${a.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${a.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${a.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},s={},i=null;do{let o=await a.cache.queryGetDynamicFields({parentId:e==="primary"?sa:oa,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 a.cache.queryGetObjects(d)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let f=u.content.fields,m=f.name.fields.name,p=a.parseCoinNameFromType(`0x${m}`);if(!p)throw new Error(`Invalid asset name: ${p}`);s[p]||(s[p]=[]),f.value.fields.contents.forEach(y=>{s[p].push(t[`0x${y.fields.name}`]);});}),!n)break}while(i);return s};var H=class{constructor(e,t){this.params=e;this.params=e,this._requestClient=ja__default.default.create({headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),this.cache=t?.address?.cache??t?.cache??new K(this.params,{suiKit:W(this.params)}),this.address=t?.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,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set};_coinDecimals={};_coinNameToOldMarketCoinTypeMap={};_scoinRawNameToSCoinNameMap={};_scoinTypeToSCoinNameMap={};_wormholeCoinTypeToCoinNameMap={};_voloCoinTypeToCoinNameMap={};_suiBridgeCoinTypeToCoinNameMap={};_coinTypes={};_sCoinTypes={};_coinTypeToCoinNameMap={};get isAddressInitialized(){return !this.isEmptyObject(this.address.getAllAddresses())}get isInitialized(){return !this.isEmptyObject(this._poolAddresses)&&Object.values(this._whitelist).every(e=>e.size>0)&&this.isAddressInitialized}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,t])=>!!t).map(([e,t])=>[e,t.decimals]),...Object.entries(this.poolAddresses).filter(([e,t])=>!!t?.sCoinName).map(([e,t])=>[t.sCoinName,t.decimals])])),this._coinDecimals}get coinTypes(){return this.isEmptyObject(this._coinTypes)&&(this._coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([e,t])=>!!t).map(([e,t])=>[e,t?.coinType]),...Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinName&&t.sCoinType).map(([e,t])=>[t.sCoinName,t.sCoinType])])),this._coinTypes}get wormholeCoinTypeToCoinName(){return this.isEmptyObject(this._wormholeCoinTypeToCoinNameMap)&&(this._wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&this.whitelist.wormhole.has(e)).map(([e,t])=>[t.coinType,t.coinName]))),this._wormholeCoinTypeToCoinNameMap}get coinTypeToCoinNameMap(){return this.isEmptyObject(this._coinTypeToCoinNameMap)&&(this._coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([e,t])=>[t,e]))),this._coinTypeToCoinNameMap}get coinNameToOldMarketCoinTypeMap(){return this.isEmptyObject(this._coinNameToOldMarketCoinTypeMap)&&(this._coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.spool).map(([e,t])=>[t.coinName,this.parseToOldMarketCoin(t.coinType)]))),this._coinNameToOldMarketCoinTypeMap}get sCoinRawNameToScoinNameMap(){return this.isEmptyObject(this._scoinRawNameToSCoinNameMap)&&(this._scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinType&&t.sCoinName).map(([e,t])=>[suiKit.parseStructTag(t.sCoinType).name,t.sCoinName]))),this._scoinRawNameToSCoinNameMap}get sCoinTypeToSCoinNameMap(){return this.isEmptyObject(this._scoinTypeToSCoinNameMap)&&(this._scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinType&&t.sCoinName).map(([e,t])=>[t.sCoinType,t.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,t])=>!!t&&this.whitelist.suiBridge.has(t.coinName)).map(([e,t])=>[t.coinType,t.coinName]))),this._suiBridgeCoinTypeToCoinNameMap}get sCoinTypes(){return this.isEmptyObject(this._sCoinTypes)&&(this._sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinName&&t.sCoinType).map(([e,t])=>[t.sCoinName,t.sCoinType]))),this._sCoinTypes}get supportedBorrowIncentiveRewards(){return new Set([...Object.values(this.poolAddresses).filter(e=>!!e).map(e=>e?.coinName)])}isEmptyObject(e){return Object.keys(e).length===0}async readApi({url:e,queryKey:t}){let s=await this.queryClient.fetchQuery({queryKey:t,queryFn:async()=>await this._requestClient.get(e)});if(s.status===200)return s.data;throw Error(`Error: ${s.status}; Failed to read ${e} ${s.statusText}`)}async readWhiteList(){let e=await this.readApi({url:this.params.whitelistApiUrl??`https://sui.apis.scallop.io/pool/whitelist/${this.params.whitelistId}`,queryKey:N.api.getWhiteList()});return Object.fromEntries(Object.entries(e).map(([t,s])=>[t,new Set(s)]))}async readPoolAddresses(){return await this.readApi({url:this.params.poolAddressesApiUrl??"https://sui.apis.scallop.io/pool/addresses",queryKey:N.api.getPoolAddresses()})}async init(e){if(this.isAddressInitialized||await this.address.read(),e?.forcePoolAddressInterface&&(this._poolAddresses=e?.forcePoolAddressInterface),e?.forceWhitelistInterface&&(this._whitelist=e?.forceWhitelistInterface),console.log({isAddressInitialized:this.isAddressInitialized,a:e?.forcePoolAddressInterface,b:e?.forceWhitelistInterface,isInitialized:this.isInitialized}),this.isInitialized)return;let[t,s]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.fromEntries(Object.entries(t).filter(([i])=>i!=="id").map(([i,o])=>[i,i!=="id"?new Set(o):o]))),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(s).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,c||void 0]));return [i,r]}))),console.log({p:this._poolAddresses});}};var ra={mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]},ae=class{params;suiKit;address;cache;constants;walletAddress;constructor(e,t){this.params={pythEndpoints:e.pythEndpoints??ra.mainnet,...e},this.walletAddress=e.walletAddress??t?.suiKit?.currentAddress()??"",this.suiKit=t?.suiKit??t?.constants?.cache.suiKit??W(e),this.cache=t?.constants?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.constants?.address??new q(this.params,{cache:this.cache}),this.constants=t?.constants??new H(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 t=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.whitelist.lending.has(t)}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,t=!1){return t?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.whitelist.scoin.has(e))return e;{let t=`s${e}`;return this.whitelist.scoin.has(t)?t: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 t=this.parseCoinName(e);return this.parseCoinType(t)}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:t,module:s,name:i,typeParams:o}=utils.parseStructTag(e);return t===this.constants.protocolObjectId&&s==="reserve"&&i==="MarketCoin"?this.parseMarketCoinName(utils.parseStructTag(o).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,t=utils.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,t)}async mergeSimilarCoins(e,t,s,i=this.walletAddress){try{let o=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,i);o.length>0&&e.mergeCoins(t,o.slice(0,500));}catch{}}async getObligationCoinNames(e){let t=await Re(this,e);if(!t)return;let s=t.collaterals.map(n=>`0x${n.type.name}`),i=t.debts.map(n=>`0x${n.type.name}`);return [...new Set([...s,...i])].map(n=>this.parseCoinNameFromType(n))}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let t={},s=this.params.pythEndpoints??ra.mainnet,i=new Set(e);for(let o of s){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},[]),n=r.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(o,{timeout:4e3});try{let d=await this.cache.queryClient.fetchQuery({queryKey:N.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(n),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let f=r[u][0],m=Tt(l,this.constants);t[f]=m.price,i.delete(f);});}catch(d){console.error(d.message);}if(i.size===0)break}return i.size>0&&(t={...t,...await _e(this,Array.from(i.values()))},i.clear()),t}parseAprToApy(e,t=365){return (1+e/t)**t-1}parseApyToApr(e,t=365){return ((1+e)**(1/t)-1)*t}getUnlockAt(e,t){let s=Math.floor(new Date().getTime()/1e3),i=t?Math.max(Math.floor(t/1e3)-s,0):0,o=0;if(i===0){let r=(e??1)*86400;o=Math.min(s+r,s+126144e3);}else {let r=Math.min(e?e*86400+i:i,126144e3);o=s+r;}return kt(o)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0):[]}};var we=async(a,e,t=[...a.constants.whitelist.lending],s={usePythPullModel:!0,useOnChainXOracleList:!0})=>{let i=a.params.usePythPullModel??s.usePythPullModel,r=a.params.useOnChainXOracleList??s.useOnChainXOracleList?await a.query.getAssetOracles():lt;if([...new Set(Object.values(r).flatMap(({primary:d,secondary:l})=>[...d,...l]))].includes("pyth")&&i){let d=new pythSuiJs.SuiPythClient(a.suiKit.client(),a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),l=t.map(f=>a.address.get(`core.coins.${f}.oracle.pyth.feed`)),u=a.params.pythEndpoints??[...a.constants.whitelist.pythEndpoints];for(let f of u)try{let p=await new pythSuiJs.SuiPriceServiceConnection(f).getPriceFeedsUpdateData(l);await d.updatePriceFeeds(e.txBlock,p,l);break}catch(m){console.warn(`Failed to update price feeds with endpoint ${f}: ${m}`);}}let c=[...new Set(t)];for(let d of c)As(a,e,d,r[d]);},As=(a,e,t,s)=>{let i=a.utils.parseCoinType(t);Ps(e,s,a.address.get("core.packages.xOracle.id"),a.address.get("core.oracles.xOracle"),a.address.get("core.packages.pyth.id"),a.address.get("core.oracles.pyth.registry"),a.address.get("core.oracles.pyth.state"),a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),a.address.get("core.packages.switchboard.id"),a.address.get("core.oracles.switchboard.registry"),a.address.get(`core.coins.${t}.oracle.switchboard`),a.address.get("core.packages.supra.id"),a.address.get("core.oracles.supra.registry"),a.address.get("core.oracles.supra.holder"),i);},Ps=(a,e,t,s,i,o,r,n,c,d,l,u,f,m,p)=>{let b=xs(a,t,s,p);return Object.entries(e).forEach(([y,w])=>{w.includes("pyth")&&_s(y,a,i,b,r,n,o,p),w.includes("supra")&&Is(y,a,u,b,m,f,p),w.includes("switchboard")&&Rs(y,a,c,b,l,d,p);}),Os(a,t,s,b,p),a},xs=(a,e,t,s)=>{let i=`${e}::x_oracle::price_update_request`,o=[s];return a.moveCall(i,[t],o)},Os=(a,e,t,s,i)=>{let o=`${e}::x_oracle::confirm_price_update_request`,r=[i];return a.moveCall(o,[t,s,a.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],r),a},Is=(a,e,t,s,i,o,r)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},Rs=(a,e,t,s,i,o,r)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},_s=(a,e,t,s,i,o,r,n)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[n]);};var Se=async(...a)=>{let[e,t,s,i]=a;if(a.length===3&&s)return {obligationId:s};if(a.length===4&&s&&i)return {obligationId:s,obligationKey:i};let o=I(t),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}},Ns=({builder:a,txBlock:e})=>{let t={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},i=`${a.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]=a.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation`,[t.version]);return [r,n,c]},returnObligation:(r,n)=>{a.moveCall(e,`${t.protocolPkg}::open_obligation::return_obligation`,[t.version,r,n]);},openObligationEntry:()=>{a.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation_entry`,[t.version]);},addCollateral:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::deposit_collateral::deposit_collateral`,[t.version,r,t.market,n],[d]);},takeCollateral:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::withdraw_collateral::withdraw_collateral`,[t.version,r,n,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,o],[l])},deposit:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::mint::mint`,[t.version,t.market,r,o],[c])},depositEntry:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::mint::mint_entry`,[t.version,t.market,r,o],[c])},withdraw:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::redeem::redeem`,[t.version,t.market,r,o],[c])},withdrawEntry:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::redeem::redeem_entry`,[t.version,t.market,r,o],[c])},borrow:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow`,[t.version,r,n,t.market,t.coinDecimalsRegistry,c,t.xOracle,o],[l])},borrowWithReferral:(r,n,c,d,l)=>{let u=a.utils.parseCoinType(l);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow_with_referral`,[t.version,r,n,t.market,t.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,t.xOracle,o],[u,i])},borrowEntry:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow_entry`,[t.version,r,n,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,o],[l])},repay:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::repay::repay`,[t.version,r,t.market,n,o],[d]);},borrowFlashLoan:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::flash_loan::borrow_flash_loan`,[t.version,t.market,r],[c])},repayFlashLoan:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::flash_loan::repay_flash_loan`,[t.version,t.market,r,n],[d]);}}},Bs=({builder:a,txBlock:e})=>({addCollateralQuick:async(t,s,i)=>{let o=I(e),{obligationId:r}=await Se(a,e,i);if(s==="sui"){let[n]=e.splitSUIFromGas([t]);e.addCollateral(r,n,s);}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);e.addCollateral(r,c,s),e.transferObjects([n],o);}},takeCollateralQuick:async(t,s,i,o)=>{let r=await Se(a,e,i,o),n=await a.utils.getObligationCoinNames(r.obligationId);return await we(a,e,n),e.takeCollateral(r.obligationId,r.obligationKey,t,s)},depositQuick:async(t,s,i=!0)=>{let o=I(e),r;if(s==="sui"){let[n]=e.splitSUIFromGas([t]);r=e.deposit(n,s);}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);e.transferObjects([n],o),r=e.deposit(c,s);}return i?e.mintSCoin(a.utils.parseMarketCoinName(s),r):r},withdrawQuick:async(t,s)=>{let i=I(e),o=a.utils.parseMarketCoinName(s);try{let r=a.utils.parseSCoinName(s);if(!r)throw new Error(`No sCoin for ${s}`);let{leftCoin:n,takeCoin:c,totalAmount:d}=await a.selectSCoin(e,r,t,i);e.transferObjects([n],i);let l=e.burnSCoin(r,c);t-=d;try{if(t>0){let{leftCoin:u,takeCoin:f}=await a.selectMarketCoin(e,o,t,i);e.transferObjects([u],i),e.mergeCoins(l,[f]);}}catch{}return e.withdraw(l,s)}catch{let{leftCoin:n,takeCoin:c}=await a.selectMarketCoin(e,o,t,i);return e.transferObjects([n],i),e.withdraw(c,s)}},borrowQuick:async(t,s,i,o)=>{let r=await Se(a,e,i,o),c=[...await a.utils.getObligationCoinNames(r.obligationId)??[],s];return await we(a,e,c),e.borrow(r.obligationId,r.obligationKey,t,s)},borrowWithReferralQuick:async(t,s,i,o,r)=>{let n=await Se(a,e,o,r),d=[...await a.utils.getObligationCoinNames(n.obligationId)??[],s];return await we(a,e,d),e.borrowWithReferral(n.obligationId,n.obligationKey,i,t,s)},repayQuick:async(t,s,i)=>{let o=I(e),r=await Se(a,e,i);if(s==="sui"){let[n]=e.splitSUIFromGas([t]);return e.repay(r.obligationId,n,s)}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);return e.transferObjects([n],o),e.repay(r.obligationId,c,s)}},updateAssetPricesQuick:async t=>await we(a,e,t)}),ca=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ns({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Bs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var da=async(...a)=>{let[e,t,s,i]=a;if(a.length===4&&i)return [i];let o=I(t),r=await ge(e,o);if(r[s].length===0)throw new Error(`No stake account id found for sender ${o}`);return r[s].map(n=>n.id)},Fs=async(...a)=>{let[e,t,s,i]=a,o=I(t),r=await ge(e,o);if(r[s].length===0)throw new Error(`No stake account found for sender ${o}`);return i?r[s].filter(c=>c.id===i):r[s]},ua=async(a,e,t,s,i,o,r=!1)=>{try{let{takeCoin:n,leftCoin:c,totalAmount:d}=r?await a.selectSCoin(e,s,i,o):await a.selectMarketCoin(e,s,i,o);if(r){let l=e.burnSCoin(s,n);e.stake(t,l,s);}else e.stake(t,n,s);return e.transferObjects([c],o),d}catch{return 0}},Ks=({builder:a,txBlock:e})=>{let t={spoolPkg:a.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {createStakeAccount:i=>{let o=a.utils.parseMarketCoinType(i),r=a.address.get(`spool.pools.${i}.id`);return a.moveCall(e,`${t.spoolPkg}::user::new_spool_account`,[r,s],[o])},stake:(i,o,r)=>{let n=a.utils.parseMarketCoinType(r),c=a.address.get(`spool.pools.${r}.id`);a.moveCall(e,`${t.spoolPkg}::user::stake`,[c,i,o,s],[n]);},unstake:(i,o,r)=>{let n=a.utils.parseMarketCoinType(r),c=a.address.get(`spool.pools.${r}.id`);return a.moveCall(e,`${t.spoolPkg}::user::unstake`,[c,i,o,s],[n])},claim:(i,o)=>{let r=a.address.get(`spool.pools.${o}.id`),n=a.address.get(`spool.pools.${o}.rewardPoolId`),c=a.utils.parseMarketCoinType(o),d=a.utils.getSpoolRewardCoinName(),l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.spoolPkg}::user::redeem_rewards`,[r,n,i,s],[c,l])}}},Ls=({builder:a,txBlock:e})=>({stakeQuick:async(t,s,i)=>{let o=I(e),r=await da(a,e,s,i);if(r.length===0)throw new Error(`No stakeAccountIds found for user ${o}`);if(typeof t=="number"){let n=await ua(a,e,r[0],s,t,o);t-=n,t>0&&await ua(a,e,r[0],s,t,o,!0);}else e.stake(r[0],t,s);},unstakeQuick:async(t,s,i,o=!0)=>{let r=await Fs(a,e,s,i),n=[];for(let c of r){if(c.staked===0)continue;let d=Math.min(t,c.staked),l=await e.unstake(c.id,d,s);if(o){let u=await e.mintSCoin(s,l);n.push(u);}else n.push(l);if(t-=d,t<=0)break}if(n.length>0){let c=n[0];return n.length>1&&e.mergeCoins(c,n.slice(1)),c}},claimQuick:async(t,s)=>{let i=await da(a,e,t,s),o=[];for(let r of i){let n=await e.claim(r,t);o.push(n);}return o}}),pa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ks({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Ls({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var De=async(...a)=>{let[e,t,s,i]=a;if(a.length===4&&s&&i&&typeof s=="string"){let c=await ze(e.cache,s);return {obligationId:s,obligationKey:i,obligationLocked:c}}let o=I(t),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===s||c.keyId===i)??r[0];return {obligationId:n.id,obligationKey:n.keyId,obligationLocked:n.locked}},Us=({builder:a,txBlock:e})=>{let t={borrowIncentivePkg:a.address.get("borrowIncentive.id"),query:a.address.get("borrowIncentive.query"),config:a.address.get("borrowIncentive.config"),incentivePools:a.address.get("borrowIncentive.incentivePools"),incentiveAccounts:a.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:a.address.get("core.obligationAccessStore")},s={table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")},i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {stakeObligation:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::stake`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,t.obligationAccessStore,i]);},stakeObligationWithVesca:(o,r,n)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::stake_with_ve_sca`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,t.obligationAccessStore,s.config,s.treasury,s.table,n,i],[]);},unstakeObligation:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::unstake`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,i]);},claimBorrowIncentive:(o,r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.borrowIncentivePkg}::user::redeem_rewards`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,i],[c])},deactivateBoost:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::deactivate_boost`,[t.config,t.incentivePools,t.incentiveAccounts,o,r,i]);}}},Qs=({builder:a,txBlock:e})=>({stakeObligationQuick:async(t,s)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await De(a,e,t,s),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${Le}::user::unstake`||c.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!r||n)&&e.stakeObligation(i,o);},stakeObligationWithVeScaQuick:async(t,s,i)=>{let{obligationId:o,obligationKey:r,obligationLocked:n}=await De(a,e,t,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Le}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!n||c){let l=await a.query.getBindedVeScaKey(o)??i;l?e.stakeObligationWithVesca(o,r,l):e.stakeObligation(o,r);}},unstakeObligationQuick:async(t,s)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await De(a,e,t,s);r&&e.unstakeObligation(i,o);},claimBorrowIncentiveQuick:async(t,s,i)=>{let{obligationId:o,obligationKey:r}=await De(a,e,s,i);return e.claimBorrowIncentive(o,r,t)}}),fa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Us({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Qs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Ce=async(...a)=>{let[e,t,s]=a;if(a.length===3&&s&&typeof s=="string"){let r=await he(e.utils,s);return r||void 0}let i=I(t),o=await Ne(e,i);if(o.length!==0)return s?o.find(({keyId:r})=>s===r):o[0]},$s=({builder:a,txBlock:e})=>{let t={pkgId:a.address.get("vesca.id"),table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {lockSca:(i,o)=>a.moveCall(e,`${t.pkgId}::ve_sca::mint_ve_sca_key`,[t.config,t.table,t.treasury,i,o,s],[]),extendLockPeriod:(i,o)=>{a.moveCall(e,`${t.pkgId}::ve_sca::extend_lock_period`,[t.config,i,t.table,t.treasury,o,s],[]);},extendLockAmount:(i,o)=>{a.moveCall(e,`${t.pkgId}::ve_sca::lock_more_sca`,[t.config,i,t.table,t.treasury,o,s],[]);},renewExpiredVeSca:(i,o,r)=>{a.moveCall(e,`${t.pkgId}::ve_sca::renew_expired_ve_sca`,[t.config,i,t.table,t.treasury,o,r,s],[]);},redeemSca:i=>a.moveCall(e,`${t.pkgId}::ve_sca::redeem`,[t.config,i,t.table,t.treasury,s],[]),mintEmptyVeSca:()=>a.moveCall(e,`${t.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,[t.config,t.table],[])}},Gs=({builder:a,txBlock:e})=>({lockScaQuick:async(t,s,i=!0)=>{let o=I(e),r=await Ce(a,e),n,c=[];if(t!==void 0&&typeof t=="number"){let f=await a.utils.selectCoins(t,Te,o),[m,p]=e.takeAmountFromCoins(f,t);n=m,c.push(p);}else n=t;let d=a.utils.getUnlockAt(s,r?.unlockAt);i&&pt(t,s,d,r?.unlockAt);let l=!r?.unlockAt,u=!l&&r.unlockAt*1e3<=new Date().getTime();if(l||u){if(n)if(l){let f=e.lockSca(n,d);c.push(f);}else {if(r.lockedScaCoin!==0){let f=e.redeemSca(r.keyId);c.push(f);}e.renewExpiredVeSca(r.keyId,n,d);}}else n&&s?(e.extendLockPeriod(r.keyId,d),e.extendLockAmount(r.keyId,n)):s?e.extendLockPeriod(r.keyId,d):n&&e.extendLockAmount(r.keyId,n);c.length>0&&e.transferObjects(c,o);},extendLockPeriodQuick:async(t,s,i=!0)=>{let o=await Ce(a,e,s),r=a.utils.getUnlockAt(t,o?.unlockAt);i&&We(t,r,o?.unlockAt),o&&e.extendLockPeriod(o.keyId,r);},extendLockAmountQuick:async(t,s,i=!0)=>{let o=I(e),r=await Ce(a,e,s);if(i&&bt(t,r?.unlockAt),r){let n=await a.utils.selectCoins(t,Te,o),[c,d]=e.takeAmountFromCoins(n,t);e.extendLockAmount(r.keyId,c),e.transferObjects([d],o);}},renewExpiredVeScaQuick:async(t,s,i,o=!0)=>{let r=I(e),n=await Ce(a,e,i),c=a.utils.getUnlockAt(s,n?.unlockAt);if(o&&ft(t,s,n?.unlockAt),n){let d=[];if(n.lockedScaCoin!==0){let m=e.redeemSca(n.keyId);d.push(m);}let l=await a.utils.selectCoins(t,Te,r),[u,f]=e.takeAmountFromCoins(l,t);d.push(f),e.renewExpiredVeSca(n.keyId,u,c),e.transferObjects(d,r);}},redeemScaQuick:async(t,s=!0)=>{let i=I(e),o=await Ce(a,e,t);if(be(o?.unlockAt),o){let r=e.redeemSca(o.keyId);if(s){e.transferObjects([r],i);return}return r}}}),ya=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=$s({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Gs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Hs=({builder:a,txBlock:e})=>{let t={referralPgkId:a.address.get("referral.id"),referralBindings:a.address.get("referral.referralBindings"),referralRevenuePool:a.address.get("referral.referralRevenuePool"),authorizedWitnessList:a.address.get("referral.authorizedWitnessList"),referralTiers:a.address.get("referral.referralTiers"),version:a.address.get("referral.version")},s=a.address.get("vesca.table"),i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {bindToReferral:o=>{a.moveCall(e,`${t.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[t.referralBindings,e.pure.id(o),s,i],[]);},claimReferralTicket:o=>{let r=a.utils.parseCoinType(o);return a.moveCall(e,`${t.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[t.version,s,t.referralBindings,t.authorizedWitnessList,t.referralTiers,i],[r])},burnReferralTicket:(o,r)=>{let n=a.utils.parseCoinType(r);a.moveCall(e,`${t.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[t.version,o,t.referralRevenuePool,i],[n]);},claimReferralRevenue:(o,r)=>{let n=a.utils.parseCoinType(r);return a.moveCall(e,`${t.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[t.version,t.referralRevenuePool,o,i],[n])}}},Js=({builder:a,txBlock:e})=>({claimReferralRevenueQuick:async(t,s=[...a.constants.whitelist.lending])=>{let i=I(e),o=[];for(let r of s)if(r==="sui"){let n=await e.claimReferralRevenue(t,r);o.push(n);}else {let n=await e.claimReferralRevenue(t,r);try{let c=await a.suiKit.suiInteractor.selectCoins(i,1/0,a.utils.parseCoinType(r));e.mergeCoins(n,c.slice(0,500));}catch{}finally{o.push(n);}}o.length>0&&e.transferObjects(o,i);}}),ha=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Hs({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Js({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Zs=({builder:a,txBlock:e})=>{let t={loyaltyProgramPkgId:a.address.get("loyaltyProgram.id"),rewardPool:a.address.get("loyaltyProgram.rewardPool"),userRewardTableId:a.address.get("loyaltyProgram.userRewardTableId")};return {claimLoyaltyRevenue:s=>a.moveCall(e,`${t.loyaltyProgramPkgId}::reward_pool::redeem_reward`,[t.rewardPool,s])}},eo=({builder:a,txBlock:e})=>({claimLoyaltyRevenueQuick:async t=>{t=t??(await a.query.getVeScas())[0]?.keyObject;let s=I(e);if(!t)throw new Error(`No veScaKey found for user ${s}`);let i=e.claimLoyaltyRevenue(t),o=a.constants.coinTypes.sca;if(!o)throw new Error("Coin type sca not found");await a.utils.mergeSimilarCoins(e,i,o,I(e)),e.transferObjects([i],s);}}),Sa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Zs({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=eo({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var ao=({builder:a,txBlock:e})=>{let t={pkgId:a.address.get("scoin.id")};return {mintSCoin:(s,i)=>{let o=a.utils.parseSCoinType(s);if(!o)throw new Error(`Invalid marketCoinName name: ${s}`);return a.moveCall(e,`${t.pkgId}::s_coin_converter::mint_s_coin`,[a.utils.getSCoinTreasury(s),i],[o,a.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,i)=>{let o=a.utils.parseSCoinType(s);if(!o)throw new Error(`Invalid sCoin name: ${s}`);return a.moveCall(e,`${t.pkgId}::s_coin_converter::burn_s_coin`,[a.utils.getSCoinTreasury(s),i],[o,a.utils.parseUnderlyingSCoinType(s)])}}},so=({builder:a,txBlock:e})=>({mintSCoinQuick:async(t,s)=>{let i=I(e),{leftCoin:o,takeCoin:r}=await a.selectMarketCoin(e,t,s,i);return e.transferObjects([o],i),await e.mintSCoin(t,r)},burnSCoinQuick:async(t,s)=>{let i=I(e),{leftCoin:o,takeCoin:r}=await a.selectSCoin(e,t,s,i);return e.transferObjects([o],i),await e.burnSCoin(t,r)}}),Ta=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=ao({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=so({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var ka=(a,e)=>{let t=ya(a,e),s=Sa(a,t),i=fa(a,s),o=ha(a,i),r=Ta(a,o),n=pa(a,r),c=ca(a,n);return new Proxy(c,{get:(d,l)=>l in t?Reflect.get(t,l):l in i?Reflect.get(i,l):l in o?Reflect.get(o,l):l in n?Reflect.get(n,l):l in s?Reflect.get(s,l):l in r?Reflect.get(r,l):Reflect.get(d,l)})};var de=class{cache;params;_requestClient;constructor(e,t){this.params=e,this.cache=t?.cache??new K(this.params),this._requestClient=ja__default.default.create({baseURL:e.indexerApiUrl??nt,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:3e4});}async getMarket(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.api.getMarket(),queryFn:async()=>await this._requestClient.get("/api/market/migrate")});if(e.status===200)return {pools:e.data.pools.reduce((t,s)=>(t[s.coinName]=s,t),{}),collaterals:e.data.collaterals.reduce((t,s)=>(t[s.coinName]=s,t),{})};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:N.api.getSpools(),queryFn:async()=>await this._requestClient.get("/api/spools/migrate")});if(e.status===200)return e.data.spools.reduce((t,s)=>(t[s.marketCoinName]=s,t),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.api.getBorrowIncentivePool(),queryFn:async()=>await this._requestClient.get("/api/borrowIncentivePools/migrate")});if(e.status===200)return e.data.borrowIncentivePools.reduce((t,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((i,o)=>(i[o.coinName]=o,i),{})),t[s.coinName]=s,t),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.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((t,[s,i])=>(i&&(t[s]=i.coinPrice),t),{})}};var ie=class{params;suiKit;address;utils;constants;indexer;cache;walletAddress;constructor(e,t){this.params=e,this.suiKit=t?.suiKit??t?.utils?.suiKit??W(e),this.walletAddress=utils.normalizeSuiAddress(e.walletAddress??this.suiKit.currentAddress()),this.cache=t?.utils?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.utils?.address??new q(this.params,{cache:this.cache}),this.constants=t?.utils?.constants??new H(this.params,{address:this.address}),this.utils=t?.utils??new ae(this.params,{constants:this.constants}),this.indexer=t?.indexer??new de(this.params,{cache:this.cache}),this.queryMarket=$.call(this,this.queryMarket),this.getMarketPools=$.call(this,this.getMarketPools),this.getMarketPool=$.call(this,this.getMarketPool),this.getMarketCollaterals=$.call(this,this.getMarketCollaterals),this.getMarketCollateral=$.call(this,this.getMarketCollateral),this.getSpools=$.call(this,this.getSpools),this.getSpool=$.call(this,this.getSpool),this.getBorrowIncentivePools=$.call(this,this.getBorrowIncentivePools),this.getLendings=$.call(this,this.getLendings),this.getLending=$.call(this,this.getLending),this.getObligationAccounts=$.call(this,this.getObligationAccounts),this.getObligationAccount=$.call(this,this.getObligationAccount),this.getTvl=$.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 Bt(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],t){return await Dt(this,e,t?.indexer,t?.coinPrices)}async getMarketPool(e,t){return (await this.getMarketPools(void 0,t)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],t){return await Ft(this,e,t?.indexer)}async getMarketCollateral(e,t){return await Ge(this,e,t?.indexer)}async getObligations(e=this.walletAddress){return await le(this,e)}async queryObligation(e){return Re(this,e)}async getCoinAmounts(e,t=this.walletAddress){return await Kt(this,e,t)}async getCoinAmount(e,t=this.walletAddress){return await Ye(this,e,t)}async getMarketCoinAmounts(e,t=this.walletAddress){return await Lt(this,e,t)}async getMarketCoinAmount(e,t=this.walletAddress){return await He(this,e,t)}async getPriceFromPyth(e){return await Xe(this,e)}async getPricesFromPyth(e){return await _e(this,e)}async getSpools(e,t){return await Zt(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getSpool(e,t){return (await this.getSpools(void 0,t))[e]}async getAllStakeAccounts(e=this.walletAddress){return await ge(this,e)}async getStakeAccounts(e,t=this.walletAddress){return (await this.getAllStakeAccounts(t))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let t={};for(let s of e){let i=await tt(this,s);i&&(t[s]=i);}return t}async getStakePool(e){return await tt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let t={};return await Promise.allSettled(e.map(async s=>{let i=await at(this,s);i&&(t[s]=i);})),t}async getStakeRewardPool(e){return await at(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],t){return await Pt(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getBorrowIncentiveAccounts(e,t){return await xt(this,e,t)}async getLendings(e,t=this.walletAddress,s){return await Qt(this,e,t,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,t=this.walletAddress,s){return await Je(this,e,t,s?.indexer)}async getObligationAccounts(e=this.walletAddress,t){return await Wt(this,e,t?.market,t?.coinPrices,t?.indexer)}async getObligationAccount(e,t=this.walletAddress,s){let i=await this.getObligationAccounts(t,s);return Object.values(i).find(o=>o?.obligationId===e)}async getTvl(e){return await qt(this,e?.indexer)}async getVeSca(e){return await he(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:t=!1}={}){return await Ne(this,e,t)}async getVeScaTreasuryInfo(){return await ta(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await zt(this.address,e)}async getBindedObligationId(e){return await Ot(this,e)}async getBindedVeScaKey(e){return await It(this,e)}async getLoyaltyProgramInfos(e){return await Ut(this,e)}async getSCoinTotalSupply(e){return await Yt(this,e)}async getSCoinAmounts(e,t=this.walletAddress){return await Ht(this,e,t)}async getSCoinAmount(e,t=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await et(this,s,t):0}async getSCoinSwapRate(e,t){return await Jt(this,e,t)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await Et(this,e)}async getPoolSupplyLimit(e){return await Oe(this.utils,e)}async getPoolBorrowLimit(e){return await Ie(this.utils,e)}async getIsolatedAssets(){return await _t(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 Gt(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return aa(e)}async getUserPortfolio(e){return $t(this,e?.walletAddress??this.walletAddress,e?.indexer??!1)}async getPriceUpdatePolicies(){return await ia(this.address)}async getAssetOracles(){let[e,t]=await Promise.all([st(this.utils,"primary"),st(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,i)=>(s[i]={primary:e?.[i]??[],secondary:t?.[i]??[]},s),{})}};var ue=class{params;isTestnet;suiKit;address;constants;query;utils;walletAddress;cache;constructor(e,t){this.suiKit=t?.suiKit??W(e),this.params=e,this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=t?.query?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.query?.address??new q(this.params,{cache:this.cache}),this.constants=t?.query?.constants??new H(this.params,{address:this.address}),this.utils=t?.query?.utils??new ae(this.params,{constants:this.constants}),this.query=t?.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 ka(this,e)}async selectCoin(e,t,s,i=this.walletAddress){if(t==="sui"){let[o]=e.splitSUIFromGas([s]);return {takeCoin:o}}else {let o=this.utils.parseCoinType(t),r=await this.utils.selectCoins(s,o,i),[n,c]=e.takeAmountFromCoins(r,s);return {takeCoin:n,leftCoin:c}}}async selectMarketCoin(e,t,s,i=this.walletAddress){let o=this.utils.parseMarketCoinType(t),r=await this.utils.selectCoins(s,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(s,n));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoin(e,t,s,i=this.walletAddress){let o=this.utils.parseSCoinType(t),r=await this.utils.selectCoins(s,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(n,s));return {takeCoin:c,leftCoin:d,totalAmount:n}}async signAndSendTxBlock(e){return await this.suiKit.signAndSendTxn(e)}moveCall(e,t,s,i){return e.moveCall(t,s,i)}};var Fe=class{params;suiKit;address;constants;builder;query;utils;cache;walletAddress;constructor(e,t){this.params=e,this.suiKit=t?.suiKit??t?.builder?.suiKit??W(e),this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=t?.builder?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.builder?.address??new q(this.params,{cache:this.cache}),this.constants=t?.builder?.constants??new H(this.params,{address:this.address}),this.utils=t?.builder?.utils??new ae(this.params,{constants:this.constants}),this.query=t?.builder?.query??new ie(this.params,{utils:this.utils}),this.builder=t?.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 t=e??this.walletAddress;return await this.query.getObligations(t)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let t=e??this.walletAddress;return await this.query.getAllStakeAccounts(t)}async getStakeAccounts(e,t){let s=t??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 t=this.builder.createTxBlock();return t.openObligationEntry(),e?await this.suiKit.signAndSendTxn(t):t.txBlock}async depositCollateral(e,t,s=!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(t,e,d);else {let[l,u,f]=r.openObligation();await r.addCollateralQuick(t,e,l),r.returnObligation(l,f),r.transferObjects([u],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdrawCollateral(e,t,s=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=await n.takeCollateralQuick(t,e,i,o);return n.transferObjects([d],c),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async deposit(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.depositQuick(t,e);return o.transferObjects([n],r),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async depositAndStake(e,t,s=!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(t,e,!1);if(l)await r.stakeQuick(u,c,l);else {let f=r.createStakeAccount(c);await r.stakeQuick(u,c,f),r.transferObjects([f],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdraw(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.withdrawQuick(t,e);return o.transferObjects([n],r),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async borrow(e,t,s=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=[...this.constants.whitelist.lending].includes(e);s&&d&&await n.unstakeObligationQuick(i,o);let l=await n.borrowQuick(t,e,i,o);return n.transferObjects([l],c),s&&d&&await n.stakeObligationWithVeScaQuick(i,o),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async repay(e,t,s=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=[...this.constants.whitelist.lending].includes(e);return s&&d&&await n.unstakeObligationQuick(i,o),await n.repayQuick(t,e,i),s&&d&&await n.stakeObligationWithVeScaQuick(i,o),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async flashLoan(e,t,s,i=!0,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let[c,d]=r.borrowFlashLoan(t,e);return r.repayFlashLoan(await s(r,c),d,e),i?await this.suiKit.signAndSendTxn(r):r.txBlock}async createStakeAccount(e,t=!0,s){let i=this.builder.createTxBlock(),o=s??this.walletAddress;i.setSender(o);let r=i.createStakeAccount(e);return i.transferObjects([r],o),t?await this.suiKit.signAndSendTxn(i):i.txBlock}async stake(e,t,s=!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(t,e,d);else {let l=r.createStakeAccount(e);await r.stakeQuick(t,e,l),r.transferObjects([l],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstake(e,t,s=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(t,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,I(r));}return r.transferObjects([c],n),s?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstakeAndWithdraw(e,t,s=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(t,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),I(r)),r.transferObjects([l],n);}else throw new Error(`No stake found for ${e}`);return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async claim(e,t=!0,s,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.claimQuick(e,s);return o.transferObjects(n,r),t?await this.suiKit.signAndSendTxn(o):o.txBlock}async stakeObligation(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.stakeObligationWithVeScaQuick(e,t),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async unstakeObligation(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.unstakeObligationQuick(e,t),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async claimBorrowIncentive(e,t,s=!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,t);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),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async migrateAllMarketCoin(e=!0,t=!0){let s=this.builder.createTxBlock();s.setSender(this.walletAddress);let i=[];return await Promise.all([...this.constants.whitelist.scoin].map(async o=>{let r=[],n;try{let c=await this.utils.selectCoins(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(o),this.walletAddress);n=c[0],c.length>1&&s.mergeCoins(n,c.slice(1));}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(n){let c=s.mintSCoin(o,n),d=this.utils.parseSCoinType(o);if(!d)throw new Error("Invalid sCoin type");await this.utils.mergeSimilarCoins(s,c,d,I(s)),r.push(c);}if(e&&this.constants.whitelist.spool.has(o))try{let c=await s.unstakeQuick(Number.MAX_SAFE_INTEGER,o);c&&r.push(c);}catch{}if(r.length>0){let c=r[0];r.length>1&&s.mergeCoins(c,r.slice(1)),i.push(c);}})),i.length>0&&s.transferObjects(i,this.walletAddress),t?await this.suiKit.signAndSendTxn(s):s.txBlock}async claimAllUnlockedSca(e=!0){let t=(await this.query.getVeScas({walletAddress:this.walletAddress})??[]).map(({keyObject:o})=>o);if(t.length===0)throw new Error("No veSCA found in the wallet");let s=[],i=this.builder.createTxBlock();if(i.setSender(this.walletAddress),await Promise.all(t.map(async o=>{try{let r=await i.redeemScaQuick(o,!1);if(!r)return;s.push(r);}catch{}})),s.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return s.length>1&&i.mergeCoins(s[0],s.slice(1)),await this.utils.mergeSimilarCoins(i,s[0],"sca",this.walletAddress),e?await this.suiKit.signAndSendTxn(i):{tx:i.txBlock,scaCoin:s[0]}}async mintTestCoin(e,t,s=!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,t]);return r.transferObjects([u],n),s?await this.suiKit.signAndSendTxn(r):r.txBlock}};var Aa=class{params;suiKit;cache;address;constants;constructor(e,t,s){this.params=e,this.suiKit=W(e),this.cache=new K({...this.params,cacheOptions:t},{suiKit:this.suiKit,queryClient:s}),this.address=new q(e,{cache:this.cache}),this.constants=new H(e,{address:this.address});}async initConstants(e){this.constants.isInitialized||await this.constants.init(e);}async getScallopAddress(e){return await this.address.read(e),this.address}async createScallopBuilder(e){await this.initConstants(e);let t={...this.params,...e};return new ue(t,{query:await this.createScallopQuery(t)})}async createScallopClient(e){await this.initConstants(e);let t={...this.params,...e};return new Fe(t,{builder:await this.createScallopBuilder(t)})}async createScallopQuery(e){await this.initConstants(e);let t={...this.params,...e};return new ie(t,{utils:await this.createScallopUtils(t)})}async createScallopIndexer(){return new de(this.params,{cache:this.cache})}async createScallopUtils(e){return await this.initConstants(e),new ae({...this.params,...e},{constants:this.constants,suiKit:this.suiKit})}};
21
+ var it={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var rt="https://sui.apis.scallop.io",nt="https://sdk.api.scallop.io",lo=!1,Ke=!1,Te="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Le="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var N={api:{getAddresses:a=>["api","getAddresses",{addressId:a}],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:(a,e,t)=>["rpc","getInspectTxn",{queryTarget:a,args:JSON.stringify(e),typeArgs:t?JSON.stringify(t):void 0}],getObject:(a,e)=>["rpc","getObject",{objectId:a,options:e}],getObjects:a=>["rpc","getObjects",{objectIds:JSON.stringify(a??void 0)}],getOwnedObjects:a=>["rpc","getOwnedObjects",{walletAddress:a?.owner,cursor:a?.cursor??void 0,options:a?.options??void 0,filter:JSON.stringify(a?.filter??void 0),limit:a?.limit??void 0}],getDynamicFields:a=>["rpc","getDynamicFields",{parentId:a?.parentId,cursor:a?.cursor??void 0,limit:a?.limit??void 0}],getDynamicFieldObject:a=>["rpc","getDynamicFieldObject",{parentId:a?.parentId,name:JSON.stringify(a?.name??void 0)}],getTotalVeScaTreasuryAmount:(a,e)=>["rpc","getTotalVeScaTreasuryAmount",{refreshArgs:JSON.stringify(a),vescaAmountArgs:JSON.stringify(e)}],getAllCoinBalances:a=>["rpc","getAllCoinBalances",{owner:a}],getNormalizedMoveFunction:a=>["rpc","getNormalizedMoveCall",a]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var ct=[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 Ee={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"}}},cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",coinType:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",symbol:"CETUS",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},wapt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",coinType:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37::coin::COIN",symbol:"wAPT",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},wsol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",coinType:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8::coin::COIN",symbol:"wSOL",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},wbtc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",coinType:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",symbol:"wBTC",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},weth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",coinType:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",symbol:"wETH",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},wusdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",coinType:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",symbol:"wUSDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},wusdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",coinType:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",symbol:"wUSDT",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",coinType:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",symbol:"afSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",coinType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",symbol:"vSUI",decimals:9,oracle:{supra:"",switchboard:"",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"}}},sbeth:{id:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",metaData:"0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",coinType:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",treasury:"",symbol:"sbETH",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},fdusd:{id:"0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a",metaData:"0xdebee5265a67c186ed87fe93303d33dfe1de53e3b4fd7d9329c2852860acd3e7",treasury:"",coinType:"0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD",symbol:"FDUSD",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"ccdc1a08923e2e4f4b1e6ea89de6acbc5fe1948e9706f5604b8cb50bc1ed3979",feedObject:"0x5f6583b2b0fe1ecf94aaffeaab8a838794693960cea48c0da282d5f4a24be027"}}},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"}}},sbusdt:{id:"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068",metaData:"0xda61b33ac61ed4c084bbda65a2229459ed4eb2185729e70498538f0688bec3cc",treasury:"",coinType:"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT",symbol:"sbUSDT",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},blub:{id:"0xfa7ac3951fdca92c5200d468d31a365eb03b2be9936fde615e69f0c1274ad3a0",metaData:"0xac32b519790cae96c3317457d903d61d04f1bc8f7710096d80fcba72c7a53703",treasury:"",coinType:"0xfa7ac3951fdca92c5200d468d31a365eb03b2be9936fde615e69f0c1274ad3a0::BLUB::BLUB",symbol:"BLUB",decimals:2,oracle:{supra:"",switchboard:"",pyth:{feed:"5fc11ffe4975b624be495be038da30e30bee2004d8ae6282b5364577ef4ca92c",feedObject:"0x246658c3324f2477568c78cca622518fbc6969a004b841d81409d24a7ec39b18"}}},sbwbtc:{id:"0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b",metaData:"0x53e1cae1ad70a778d0b450d36c7c2553314ca029919005aad26945d65a8fb784",treasury:"",coinType:"0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b::btc::BTC",symbol:"sbwBTC",decimals:8,oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},musd:{id:"0xe44df51c0b21a27ab915fa1fe2ca610cd3eaa6d9666fe5e62b988bf7f0bd8722",metaData:"0xc154abd271b24032a2c80d96c1b82109490bb600ed189ef881d8c9467ed44a4f",treasury:"",coinType:"0xe44df51c0b21a27ab915fa1fe2ca610cd3eaa6d9666fe5e62b988bf7f0bd8722::musd::MUSD",symbol:"mUSD",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"2ee09cdb656959379b9262f89de5ff3d4dfed0dd34c072b3e22518496a65249c",feedObject:"0x72fbf053d6009a40cff74d9708592bd7b86673a0e7b252077e1aa53390976584"}}},ns:{id:"0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178",metaData:"0x279adec041f8ec5c2d419abf2c32713ae7930a9a3a1ff244c88e5ceced40db6e",treasury:"",coinType:"0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS",symbol:"NS",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"bb5ff26e47a3a6cc7ec2fce1db996c2a145300edc5acaabe43bf9ff7c5dd5d32",feedObject:"0xc6352e1ea55d7b5acc3ed690cc3cdf8007978071d7bfd6a189445018cfb366e0"}}},usdy:{id:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb",metaData:"0xd8dd6cf839e2367de6e6107da4b4361f44798dd6cf26d094058d94e4cee25e36",treasury:"",coinType:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",symbol:"USDY",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"e3d1723999820435ebab53003a542ff26847720692af92523eea613a9a28d500",feedObject:"0x773cb390165e227cbd5bd924edaeff7d33b1b78aac045c4903ed9be7e711741a"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0x352c9600e69ff6469f9fc7cd1d0cd5f88264caa5f8908102a223ce663fbb360c",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:"0x83bbe0b3985c5e3857803e2678899b03f3c4a31be75006ab03faf268c014ce41",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xbb6e3ffa494b543aa028cf8d3fb894be1a678b5fe710f7bb959df0e3c1acc0e8",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0x1cf913c825c202cbbb71c378edccb9c04723fa07a73b88677b2ef89c6e203a85",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x897ebc619bdb4c3d9e8d86fb85b86cfd5d861b1696d26175c55ed14903a372f6",object:"0x897ebc619bdb4c3d9e8d86fb85b86cfd5d861b1696d26175c55ed14903a372f6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{sweth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"},swusdc:{id:"0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",rewardPoolId:"0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"},swusdt:{id:"0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",rewardPoolId:"0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",rewardPoolId:"0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"},shasui:{id:"0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",rewardPoolId:"0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"},svsui:{id:"0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",rewardPoolId:"0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"}},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:"0x1fc417232d747bf8ce9656b8014759cb2fecc31eb4be41b5c5c5d4f73a1313c2",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",bindingTableId:"0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",referralRevenuePool:"0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",revenueTableId:"0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",referralTiers:"0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",tiersTableId:"0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",metaData:"",symbol:"",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},swusdc:{coinType:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",treasury:"0x50c5cfcbcca3aaacab0984e4d7ad9a6ad034265bebb440f0d1cd688ec20b2548",symbol:"",metaData:"0xdc0595d068621d630f3c7c364dd257f7e3f8079e00c31c8d18755a033c15ae93"},swusdt:{coinType:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",treasury:"0x1f02e2fed702b477732d4ad6044aaed04f2e8e586a169153694861a901379df0",symbol:"",metaData:"0x171d0f1ca99d5fefb8b2e40b89899bacdc5417a783906ae119b9cb1c113d59ae"},sweth:{coinType:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",treasury:"0x4b7f5da0e306c9d52490a0c1d4091e653d6b89778b9b4f23c877e534e4d9cd21",symbol:"",metaData:"0x077d0fd835b559e5b4bb52641f7627ddbf8b200f9b2cf4e28b3514da2a32a4dd"},safsui:{coinType:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",treasury:"0x55f4dfe9e40bc4cc11c70fcb1f3daefa2bdc330567c58d4f0792fbd9f9175a62",symbol:"",metaData:"0xfd81c4d1b4d9d1b8c522e91121d22e94759386b29eafe1cc3888ca0ebe369b9e"},shasui:{coinType:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",treasury:"0x404ccc1404d74a90eb6f9c9d4b6cda6d417fb03189f80d9070a35e5dab1df0f5",symbol:"",metaData:"0x0a2a4a25aac50ac79210d710f93cb22db58bc6ee22f213364dda9a709cab2189"},svsui:{coinType:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",treasury:"0xc06688ee1af25abc286ffb1d18ce273d1d5907cd1064c25f4e8ca61ea989c1d1",symbol:"",metaData:"0xa96cc21ddfb6486be4a96cda0c58734e4ddea2a8c04984f9e6121d8fae997ddf"},swsol:{coinType:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",treasury:"0x760fd66f5be869af4382fa32b812b3c67f0eca1bb1ed7a5578b21d56e1848819",symbol:"",metaData:"0xee202d2013fc09453d695c640088ee08f14afc8f1ae26284b4ebbc4712ff1ba5"},swbtc:{coinType:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",treasury:"0xe2883934ea42c99bc998bbe0f01dd6d27aa0e27a56455707b1b34e6a41c20baa",symbol:"",metaData:"0x1ba5904dae41699683da767c7a97785a55c51ec1253498c8fe1980169a96523d"},susdc:{coinType:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC",treasury:"0xbe6b63021f3d82e0e7e977cdd718ed7c019cf2eba374b7b546220402452f938e",symbol:"",metaData:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2"},ssbeth:{coinType:"0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",treasury:"0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed",symbol:"",metaData:"0xdfdd14d53ed8c7ace7cac8a0eecdfa4c2345e15d9efcbd4e1828f81a107cbe2d"},sfdusd:{coinType:"0x6711551c1e7652a270d9fbf0eee25d99594c157cde3cb5fbb49035eb59b1b001::scallop_fdusd::SCALLOP_FDUSD",treasury:"0xdad9bc6293e694f67a5274ea51b596e0bdabfafc585ae6d7e82888e65f1a03e0",symbol:"",metaData:"0xb1529a3b5e5831d19a722493eec19785f613945d3dc984602d44a418f990d73f"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"}}}};var oe=86400,pe=1460,X=126144e3,Ve=1e10,Ue=1e9;var lt={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 W=a=>new suiKit.SuiKit({...a,fullnodeUrls:Array.from(new Set([...a.fullnodeUrls??[],...ct]))});var _a=10,va=250,ke=(a,e)=>{let t={...a};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?t[s]=ke(a[s]||{},e[s]):t[s]=e[s];return t},K=class{params;queryClient;suiKit;walletAddress;tokensPerInterval=_a;interval=va;tokens;lastRefill;constructor(e={},t){this.params=e,this.suiKit=t?.suiKit??W(e),this.queryClient=t?.queryClient??new queryCore.QueryClient(e?.cacheOptions??it),this.tokens=this.tokensPerInterval,this.lastRefill=Date.now(),this.walletAddress=e.walletAddress??this.suiKit.currentAddress();}get client(){return this.suiKit.client()}refill(){let t=Date.now()-this.lastRefill;if(t>=this.interval){let s=Math.floor(t/this.interval)*this.tokensPerInterval;this.tokens=Math.min(this.tokens+s,this.tokensPerInterval),this.lastRefill+=Math.floor(t/this.interval)*this.interval;}}removeTokens(e){return this.refill(),this.tokens>=e?(this.tokens-=e,!0):!1}async callWithRateLimit(e,t=15,s=1.25){let i=0,o=async()=>{if(this.removeTokens(1))return await e();if(i<t){i++;let r=this.interval*Math.pow(s,i);return await new Promise(n=>setTimeout(n,r)),o()}else return console.error("Maximum retries reached"),null};return o()}retryFn(e,t){return e===5?!1:t.status===429}async queryInspectTxn({queryTarget:e,args:t,typeArgs:s}){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((t??[]).map(async(d,l)=>{if(typeof d!="string")return d;let u=(await this.queryGetObject(d))?.data;if(!u)return d;let f=u.owner;if(!f||typeof f!="object"||!("Shared"in f))return {objectId:u.objectId,version:u.version,digest:u.digest};let m=r[l];return typeof m!="object"||!("MutableReference"in m||"Reference"in m)?d:{objectId:u.objectId,initialSharedVersion:f.Shared.initial_shared_version,mutable:"MutableReference"in m}}));return i.moveCall(e,n,s),await this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getInspectTxn(e,t,s),queryFn:async()=>await this.callWithRateLimit(async()=>await this.suiKit.inspectTxn(i))})}async queryGetNormalizedMoveFunction(e){let{address:t,module:s,name:i}=suiKit.parseStructTag(e);return this.queryClient.fetchQuery({queryKey:N.rpc.getNormalizedMoveFunction(e),queryFn:async()=>await this.callWithRateLimit(async()=>await this.suiKit.client().getNormalizedMoveFunction({package:t,module:s,function:i}))})}async queryGetObject(e,t){return t={...t,showOwner:!0,showContent:!0,showType:!0},this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getObject(e,t),queryFn:async()=>await this.callWithRateLimit(async()=>await this.client.getObject({id:e,options:t}))})}async queryGetObjects(e){if(e.length===0)return [];let t={showContent:!0,showOwner:!0,showType:!0};return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getObjects(e),queryFn:async()=>{let s=await this.callWithRateLimit(async()=>await this.suiKit.getObjects(e,t));return s&&s.forEach(i=>{let o=N.rpc.getObject(i.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:o}).forEach(([n,c])=>{this.queryClient.setQueryData(n,ke(c,{data:i,error:null}),{updatedAt:Date.now()});});}),s}})}async queryGetOwnedObjects(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getOwnedObjects(e),queryFn:async()=>{let t=await this.callWithRateLimit(()=>this.client.getOwnedObjects(e));return t&&t.data.length>0&&t.data.filter(s=>!!s.data).forEach(s=>{let i=N.rpc.getObject(s.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:i}).forEach(([r,n])=>{this.queryClient.setQueryData(r,ke(n,{data:s.data,error:null}),{updatedAt:Date.now()});});}),t}})}async queryGetDynamicFields(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getDynamicFields(e),queryFn:async()=>await this.callWithRateLimit(async()=>await this.client.getDynamicFields(e))})}async queryGetDynamicFieldObject(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:t=>Math.min(1e3*t,8e3),queryKey:N.rpc.getDynamicFieldObject(e),queryFn:async()=>{let t=await this.callWithRateLimit(()=>this.client.getDynamicFieldObject(e));if(t?.data){let s=N.rpc.getObject(t.data.objectId);this.queryClient.getQueriesData({exact:!1,queryKey:s}).forEach(([o,r])=>{this.queryClient.setQueryData(o,ke(r,{data:t.data,error:null}),{updatedAt:Date.now()});});}return t}})}async queryGetAllCoinBalances(e){return this.queryClient.fetchQuery({retry:this.retryFn,retryDelay:1e3,queryKey:N.rpc.getAllCoinBalances(e),queryFn:async()=>{let t=await this.callWithRateLimit(async()=>await this.client.getAllBalances({owner:e}));return t?t.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)]??"0":null}};var ut={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:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},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:""}}}},q=class{_auth;_requestClient;_id;_network;_currentAddresses;_addressesMap;cache;constructor(e,t){let{addressId:s,auth:i,network:o,forceAddressesInterface:r}=e;if(this.cache=t?.cache??new K({}),this._requestClient=ja__default.default.create({baseURL:rt,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),i&&(this._auth=i),this._id=s,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((s,i)=>typeof s=="object"?s[i]:s,this._currentAddresses)||void 0}set(e,t){if(this._currentAddresses){let s=e.split(".");s.reduce((i,o,r)=>{if(r===s.length-1)i[o]=t;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,t){let s=t||this._network;s===this._network&&(this._currentAddresses=e),this._addressesMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this._addressesMap)}async create(e){let{addresses:t,network:s,auth:i,memo:o}=e??{},r=i||this._auth||void 0,n=s||this._network,c=t||this._currentAddresses||this._addressesMap.get(n)||ut;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 t=e||this._id||void 0;if(t!==void 0){let s=await this.cache.queryClient.fetchQuery({queryKey:N.api.getAddresses(t),queryFn:async()=>await this._requestClient.get(`/addresses/${t}`,{headers:{"Content-Type":"application/json"}})});if(s.status===200){for(let[i,o]of Object.entries(s.data))["localnet","devnet","testnet","mainnet"].includes(i)&&(i===this._network&&(this._currentAddresses=o),this._addressesMap.set(i,o));return this._id=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:t,addresses:s,network:i,auth:o,memo:r}=e??{},n=o||this._auth||void 0,c=t||this._id||void 0,d=i||this._network,l=s||this._currentAddresses||this._addressesMap.get(d)||ut;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(n!==void 0){t!==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[f,m]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(f)&&(f===this._network&&(this._currentAddresses=m),this._addressesMap.set(f,m));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,t){let s=t||this._auth||void 0,i=e||this._id||void 0;if(i===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this._requestClient.delete(`/addresses/${i}`,{headers:{"Content-Type":"application/json","api-key":t||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 R=a=>{let e=a.blockData.sender;if(!e)throw new Error("Sender is required");return e},be=a=>{if(a===void 0)throw new Error("veSca not found")},Qe=a=>{if(a<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},We=(a,e,t)=>{be(t),Qe(t);let s=Math.floor(t/1e3);if(a<1)throw new Error("Minimum lock period is 1 day");let i=Math.floor((e-s)/86400);if(a>i)throw new Error(`Cannot extend lock period by ${a} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-i}`)},pt=(a,e,t,s)=>{let i=s?Math.floor(s/1e3):void 0,o=!i,r=!o&&i*1e3<=new Date().getTime();if(o||r)if(a!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof a=="number"&&a<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(be(s),Qe(s),typeof a=="number"&&a<1e9)throw new Error("Minimum top up amount is 1 SCA");t&&e&&We(e,t,s);}},bt=(a,e)=>{if(be(e),Qe(e),a<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")},ft=(a,e,t)=>{if(!t||t>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(a<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 qe=a=>({coinType:utils.normalizeStructTag(a.type.name),maxBorrowRate:Number(a.maxBorrowRate.value)/2**32,borrowRate:Number(a.interestRate.value)/2**32,borrowRateScale:Number(a.interestRateScale),borrowIndex:Number(a.borrowIndex),lastUpdated:Number(a.lastUpdated),cashAmount:Number(a.cash),debtAmount:Number(a.debt),marketCoinSupplyAmount:Number(a.marketCoinSupply),reserveAmount:Number(a.reserve),reserveFactor:Number(a.reserveFactor.value)/2**32,borrowWeight:Number(a.borrowWeight.value)/2**32,borrowFee:Number(a.borrowFeeRate.value)/2**32,baseBorrowRate:Number(a.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(a.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(a.borrowRateOnMidKink.value)/2**32,highKink:Number(a.highKink.value)/2**32,midKink:Number(a.midKink.value)/2**32,minBorrowAmount:Number(a.minBorrowAmount),isIsolated:a.isIsolated,supplyLimit:Number(a.supplyLimit),borrowLimit:Number(a.borrowLimit)}),$e=(a,e)=>{let t=a.parseCoinNameFromType(e.coinType),s=a.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);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),f=h__default.default(e.borrowIndex).plus(u),m=h__default.default(f).dividedBy(e.borrowIndex).minus(1),p=h__default.default(e.debtAmount).multipliedBy(m),b=p.plus(e.debtAmount),y=b.shiftedBy(-1*s),w=h__default.default(e.reserveAmount).plus(p.multipliedBy(e.reserveFactor)),k=w.shiftedBy(-1*s),B=h__default.default(b).plus(Math.max(e.cashAmount-w.toNumber(),0)),O=B.shiftedBy(-1*s),_=h__default.default(b).dividedBy(B);_=_.isFinite()?_:h__default.default(0);let M=h__default.default(d).multipliedBy(_).multipliedBy(1-e.reserveFactor);M=M.isFinite()?M:h__default.default(0);let g=B.dividedBy(e.marketCoinSupplyAmount);return g=g.isFinite()&&!g.isNaN()?g:h__default.default(1),{baseBorrowApr:o,baseBorrowApy:a.parseAprToApy(o),borrowAprOnHighKink:r,borrowApyOnHighKink:a.parseAprToApy(r),borrowAprOnMidKink:n,borrowApyOnMidKink:a.parseAprToApy(n),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:a.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(a.parseAprToApy(d),a.parseAprToApy(c)),borrowIndex:f.toNumber(),growthInterest:m.toNumber(),supplyAmount:B.toNumber(),supplyCoin:O.toNumber(),borrowAmount:b.toNumber(),borrowCoin:y.toNumber(),reserveAmount:w.toNumber(),reserveCoin:k.toNumber(),utilizationRate:_.toNumber(),supplyApr:M.toNumber(),supplyApy:a.parseAprToApy(M.toNumber()),conversionRate:g.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:h__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:h__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},Ae=a=>({coinType:utils.normalizeStructTag(a.type.name),isIsolated:a.isIsolated,collateralFactor:Number(a.collateralFactor.value)/4294967296,liquidationFactor:Number(a.liquidationFactor.value)/4294967296,liquidationDiscount:Number(a.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(a.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(a.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(a.maxCollateralAmount),totalCollateralAmount:Number(a.totalCollateralAmount)}),Pe=(a,e)=>{let t=a.parseCoinNameFromType(e.coinType),s=a.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);let i=h__default.default(e.maxCollateralAmount).shiftedBy(-1*s),o=h__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:i.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:o.toNumber()}},mt=a=>({stakeType:utils.normalizeStructTag(a.stakeType.fields.name),maxPoint:Number(a.maxDistributedPoint),distributedPoint:Number(a.distributedPoint),pointPerPeriod:Number(a.distributedPointPerPeriod),period:Number(a.pointDistributionTime),maxStake:Number(a.maxStake),staked:Number(a.stakes),index:Number(a.index),createdAt:Number(a.createdAt),lastUpdate:Number(a.lastUpdate)}),yt=(a,e,t)=>{let i=h__default.default(a.pointPerPeriod).dividedBy(a.period),o=h__default.default(a.pointPerPeriod).dividedBy(a.period),r=o.gt(0)?h__default.default(a.maxPoint).minus(a.distributedPoint).dividedBy(o):h__default.default(0),n=a.createdAt,c=r.plus(a.lastUpdate).integerValue().toNumber(),d=h__default.default(Math.floor(new Date().getTime()/1e3)-a.lastUpdate).dividedBy(a.period).toFixed(0),l=h__default.default(a.maxPoint).minus(a.distributedPoint),u=h__default.default.minimum(h__default.default(d).multipliedBy(a.pointPerPeriod),l),f=h__default.default(a.index).plus(u.dividedBy(a.staked).isFinite()?h__default.default(1e9).multipliedBy(u).dividedBy(a.staked):0),m=h__default.default(a.distributedPoint).plus(u),p=h__default.default(a.staked),b=p.shiftedBy(-1*t),y=b.multipliedBy(e);return {distributedPointPerSec:i.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:f.toNumber(),currentTotalDistributedPoint:m.toNumber(),startDate:new Date(n*1e3),endDate:new Date(c*1e3),stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:y.toNumber()}},gt=a=>({claimedRewards:Number(a.claimed_rewards),exchangeRateDenominator:Number(a.exchange_rate_denominator),exchangeRateNumerator:Number(a.exchange_rate_numerator),rewards:Number(a.rewards),spoolId:String(a.spool_id)}),ht=(a,e,t,s,i)=>{let r=h__default.default(t.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),n=h__default.default(a.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=n.shiftedBy(-1*i),d=c.multipliedBy(s),l=h__default.default(e.rewards),u=l.shiftedBy(-1*i),f=u.multipliedBy(s),m=h__default.default(e.claimedRewards),p=m.shiftedBy(-1*i),b=p.multipliedBy(s),y=h__default.default(r).shiftedBy(-1*i).multipliedBy(31536e3).multipliedBy(s),w=y.dividedBy(t.stakedValue).isFinite()?y.dividedBy(t.stakedValue).toNumber():1/0;return (a.maxPoint<=a.distributedPoint||a.pointPerPeriod===0)&&(w=1/0),{rewardApr:w,totalRewardAmount:n.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:f.toNumber(),claimedRewardAmount:m.toNumber(),claimedRewardCoin:p.toNumber(),claimedRewardValue:b.toNumber(),rewardPerSec:r.toNumber()}},Na=a=>({pointType:utils.normalizeStructTag(a.point_type.name),distributedPointPerPeriod:Number(a.distributed_point_per_period),period:Number(a.point_distribution_time),distributedPoint:Number(a.distributed_point),points:Number(a.points),index:Number(a.index),baseWeight:Number(a.base_weight),weightedAmount:Number(a.weighted_amount),lastUpdate:Number(a.last_update),createdAt:Number(a.created_at)}),wt=(a,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((t,s)=>{let i=Na(s),o=a.parseCoinNameFromType(i.pointType);return t[o]=i,t},{})}),St=(a,e,t,s,i)=>{let r=h__default.default(a.distributedPointPerPeriod).dividedBy(a.period),n=h__default.default(Math.floor(new Date().getTime()/1e3)-a.lastUpdate).dividedBy(a.period).toFixed(0),c=h__default.default.minimum(h__default.default(n).multipliedBy(a.distributedPointPerPeriod),h__default.default(a.points)),d=h__default.default(a.index).plus(c.dividedBy(a.weightedAmount).isFinite()?h__default.default(1e9).multipliedBy(c).dividedBy(a.weightedAmount):0),l=h__default.default(a.distributedPoint).plus(c),u=h__default.default(a.baseWeight),f=h__default.default(a.weightedAmount),m=f.shiftedBy(-1*i),p=m.multipliedBy(s),b=365*24*60*60,y=h__default.default(r).shiftedBy(-1*t),w=h__default.default(y).multipliedBy(b).multipliedBy(e),k=h__default.default(1e12),B=w.multipliedBy(h__default.default(a.baseWeight).dividedBy(k)).dividedBy(p).isFinite()&&a.points>0?w.multipliedBy(h__default.default(a.baseWeight).dividedBy(k)).dividedBy(p).toNumber():1/0;return {distributedPointPerSec:r.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:f.toNumber(),weightedStakedCoin:m.toNumber(),weightedStakedValue:p.toNumber(),rewardApr:B,rewardPerSec:y.toNumber()}},Ba=a=>({pointType:utils.normalizeStructTag(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),Ct=(a,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((t,s)=>{let i=Ba(s),o=a.parseCoinNameFromType(i.pointType);return t[o]=i,t},{})}),fe=(...a)=>h__default.default(a.reduce((e,t)=>new h__default.default(t).lt(e)?t:e));var xe=(a,e,t)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(a))+1)),i=Math.max(Math.floor((s-1)/e),1)+1,o=Math.pow(10,-i);return o=t==="increase"?1-o:1+o,o};var Tt=(a,e)=>{let s=[...e.whitelist.lending].find(i=>e.address.get(`core.coins.${i}.oracle.pyth.feed`)===a.id);if(s){let i=a.price.price*10**a.price.expo;return {coinName:s,price:i,publishTime:Number(a.price.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${a.id}`)},kt=a=>{let e=new Date(a*1e3),t=new Date(a*1e3);t.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&t.setUTCDate(t.getUTCDate()+1);let s=new Date().getTime();return t.getTime()-s>126144e3*1e3&&t.setUTCDate(t.getUTCDate()-1),Math.floor(t.getTime()/1e3)},At=(a,e)=>{let t=[];for(let s=0;s<a.length;s+=e)t.push(a.slice(s,s+e));return t};async function Ma(a,e,...t){let s=t[t.length-1];if(typeof s=="object"&&s.indexer)try{return await a.apply(e,t)}catch(i){return console.warn(`Indexer requests failed: ${i.message}. Retrying without indexer..`),await a.apply(e,[...t.slice(0,-1),{...s,indexer:!1}])}return await a.apply(e,t)}function $(a){return (...e)=>Ma(a,this,...e)}var Y=a=>{if(!(a&&a.content&&"fields"in a.content))throw new Error(`Failed to parse object ${a}`);let e=a.content.fields;if(typeof e=="object"&&"value"in e){let t=e.value;return typeof t=="object"&&"fields"in t?t.fields:t}else if(typeof e=="object")return e;return e};var Ka=async a=>{let e=a.get("borrowIncentive.query"),t=a.get("borrowIncentive.incentivePools"),s=`${e}::incentive_pools_query::incentive_pools_data`,i=[t];return (await a.cache.queryInspectTxn({queryTarget:s,args:i}))?.events[0].parsedJson},Pt=async(a,e=[...a.constants.whitelist.lending],t=!1,s,i)=>{let o={};s=s??(await a.getMarketPools(void 0,{coinPrices:i,indexer:t})).pools,i=i??await a.getAllCoinPrices({marketPools:s});let r=await Ka(a.address);for(let n of r?.incentive_pools??[]){let c={},d=wt(a.utils,n),l=utils.normalizeStructTag(n.pool_type.name),u=a.utils.parseCoinNameFromType(l),f=i?.[u]??0,m=a.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[w,k]of Object.entries(d.poolPoints)){if(!k)continue;let B=k.pointType,O=a.utils.parseCoinNameFromType(B),_=a.utils.getCoinDecimal(O);if(_===void 0)throw new Error(`Coin decimal not found for ${O}`);let M=i?.[O]??0,g=a.utils.parseSymbol(O),A=a.utils.getCoinDecimal(O),v=St(k,M,_,f,m);c[w]={symbol:g,coinName:O,coinType:B,coinDecimal:A,coinPrice:M,points:k.points,distributedPoint:k.distributedPoint,weightedAmount:k.weightedAmount,...v};}let p=h__default.default(d.staked),b=p.shiftedBy(-1*m),y=b.multipliedBy(f);o[u]={coinName:u,symbol:a.utils.parseSymbol(u),coinType:l,coinDecimal:m,coinPrice:f,stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:y.toNumber(),points:c};}return o},xt=async({utils:a},e,t=[...a.constants.whitelist.lending])=>{let s=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),o=`${s}::incentive_account_query::incentive_account_data`,r=[i,e],c=(await a.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let f=Ct(a,u),m=f.poolType,p=a.parseCoinNameFromType(m);return t&&t.includes(p)&&(l[p]=f),l},{})},Ot=async({address:a},e)=>{let t=a.get("borrowIncentive.object"),s=a.get("borrowIncentive.incentivePools"),i=a.get("vesca.object"),o=await a.cache.queryGetObject(s);if(o?.data?.content?.dataType!=="moveObject")return null;let n=o.data.content.fields.ve_sca_bind.fields.id.id,c=`${t}::typed_id::TypedID<${i}::ve_sca::VeScaKey>`,d=await a.cache.queryGetDynamicFieldObject({parentId:n,name:{type:c,value:e}});return d?.data?.content?.dataType!=="moveObject"?null:d.data.content.fields.value.fields.id},Rt=async({address:a},e)=>{let t=a.get("borrowIncentive.object"),s=a.get("borrowIncentive.incentiveAccounts"),i=a.get("core.object"),o=await a.cache.queryGetObject(s);if(o?.data?.content?.dataType!=="moveObject")return null;let r=o.data.content.fields.accounts.fields.id.id,n=await a.cache.queryGetDynamicFieldObject({parentId:r,name:{type:`${t}::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 La=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()})}),Ea="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Oe=async(a,e)=>{try{let t=a.parseCoinType(e).slice(2),s=a.address.get("core.market");if(!s)return null;let i=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:Ea,value:t}}),o=La.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(t){return console.error(`Error in getSupplyLimit for ${e}: ${t.message}`),"0"}};var Va=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()})}),It="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",_t=async(a,e=!1)=>{if(!e)return a.utils.getSupportedPoolAddresses().filter(t=>!!t.isolatedAssetKey).map(t=>t.coinName);try{let t=a.address.get("core.market"),s=[];if(!t)return s;let i=!1,o=null,r=n=>n.name.type===It;do{let n=await a.cache.queryGetDynamicFields({parentId:t,cursor:o,limit:10});if(!n)break;let c=n.data.filter(r).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),n&&n.hasNextPage&&n.nextCursor?(i=!0,o=n.nextCursor):i=!1;}while(i);return s}catch(t){return console.error(t),[]}},ce=async(a,e)=>{let t=a.constants.poolAddresses[e];if(t)return !!t.isolatedAssetKey;let s=a.address.get("core.market"),i=a.address.cache.queryClient.getQueryData(["getDynamicFields",s]);if(i){let c=a.parseCoinType(e);return i.includes(c)}let o=a.parseCoinType(e).slice(2),r=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:It,value:o}}),n=Va.safeParse(r?.data?.content);return n.success?n.data.fields.value:!1};var Ua=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()})}),Qa="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Re=async(a,e)=>{try{let t=a.parseCoinType(e).slice(2),s=a.address.get("core.market");if(!s)return null;let i=await a.cache.queryGetDynamicFieldObject({parentId:s,name:{type:Qa,value:t}}),o=Ua.safeParse(i?.data?.content);return o.success?o.data.fields.value:"0"}catch(t){return console.error(`Error in getBorrowLimit for ${e}: ${t.message}`),"0"}};var L=async(a,e,t=50)=>{let s=At(e,t),i=[];for(let o of s){let r=await a.queryGetObjects(o);i.push(...r);}return i};var Wa="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",vt=async(a,e,t)=>{let s=new Set(e),i=Object.fromEntries(Object.entries(a.constants.coinTypeToCoinNameMap).filter(([c,d])=>s.has(d))),o=null,r=!1,n=[];do{let c=await a.cache.queryGetDynamicFields({parentId:Wa,limit:10,cursor:o});if(!c)break;let{data:d,hasNextPage:l,nextCursor:u}=c,f=d.filter(m=>{let p=`0x${m.name.value.name}`;return !!i[p]}).map(m=>m.objectId)??[];n.push(...await a.cache.queryGetObjects(f)),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 m=+d.content.fields.value;c[u]=m/t;}return c},{})};var Bt=async(a,e=!1,t)=>{t=t??await a.utils.getCoinPrices()??{};let s={},i={};if(e){let u=await a.indexer.getMarket(),f=p=>{p.coinPrice=t[p.coinName]??p.coinPrice,p.coinWrappedType=a.utils.getCoinWrappedType(p.coinName),s[p.coinName]=p;},m=p=>{p.coinPrice=t[p.coinName]??p.coinPrice,p.coinWrappedType=a.utils.getCoinWrappedType(p.coinName),i[p.coinName]=p;};return Object.values(u.pools).filter(p=>!!p).forEach(f),Object.values(u.collaterals).filter(p=>!!p).forEach(m),{pools:s,collaterals:i}}let o=a.address.get("core.packages.query.id"),r=a.address.get("core.market"),n=`${o}::market_query::market_data`,c=[r],l=(await a.cache.queryInspectTxn({queryTarget:n,args:c}))?.events[0]?.parsedJson;for(let u of l?.pools??[]){let f=utils.normalizeStructTag(u.type.name),m=a.utils.parseCoinNameFromType(f),p=t[m]??0;if(!a.constants.whitelist.lending.has(m))continue;let b=qe({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(a.utils,m),supplyLimit:await Oe(a.utils,m)??"0",borrowLimit:await Re(a.utils,m)??"0"}),y=$e(a.utils,b);s[m]={coinName:m,symbol:a.utils.parseSymbol(m),coinType:f,marketCoinType:a.utils.parseMarketCoinType(m),sCoinType:a.utils.parseSCoinType(a.utils.parseMarketCoinName(m))??"",coinWrappedType:a.utils.getCoinWrappedType(m),coinPrice:p,highKink:b.highKink,midKink:b.midKink,reserveFactor:b.reserveFactor,borrowWeight:b.borrowWeight,borrowFee:b.borrowFee,marketCoinSupplyAmount:b.marketCoinSupplyAmount,minBorrowAmount:b.minBorrowAmount,...y};}for(let u of l?.collaterals??[]){let f=utils.normalizeStructTag(u.type.name),m=a.utils.parseCoinNameFromType(f),p=t[m]??0;if(!a.constants.whitelist.collateral.has(m))continue;let b=Ae({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(a.utils,m)}),y=Pe(a.utils,b);i[m]={coinName:m,symbol:a.utils.parseSymbol(m),coinType:f,marketCoinType:a.utils.parseMarketCoinType(m),coinWrappedType:a.utils.getCoinWrappedType(m),coinPrice:p,collateralFactor:b.collateralFactor,liquidationFactor:b.liquidationFactor,liquidationDiscount:b.liquidationDiscount,liquidationPenalty:b.liquidationPenalty,liquidationReserveFactor:b.liquidationReserveFactor,...y};}return {pools:s,collaterals:i}},Mt=async(a,e)=>{let t=e.map(g=>({poolCoinName:g,balanceSheet:a.constants.poolAddresses[g]?.lendingPoolAddress,collateralStat:a.constants.poolAddresses[g]?.collateralPoolAddress,borrowDynamic:a.constants.poolAddresses[g]?.borrowDynamic,interestModel:a.constants.poolAddresses[g]?.interestModel,riskModel:a.constants.poolAddresses[g]?.riskModel,borrowFeeKey:a.constants.poolAddresses[g]?.borrowFeeKey,supplyLimitKey:a.constants.poolAddresses[g]?.supplyLimitKey,borrowLimitKey:a.constants.poolAddresses[g]?.borrowLimitKey,isolatedAssetKey:a.constants.poolAddresses[g]?.isolatedAssetKey})),[s,i,o,r,n,c,d,l,u]=await Promise.all([L(a.cache,t.map(g=>g.balanceSheet).filter(g=>!!g)),L(a.cache,t.map(g=>g.collateralStat).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowDynamic).filter(g=>!!g)),L(a.cache,t.map(g=>g.interestModel).filter(g=>!!g)),L(a.cache,t.map(g=>g.riskModel).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowFeeKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.supplyLimitKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.borrowLimitKey).filter(g=>!!g)),L(a.cache,t.map(g=>g.isolatedAssetKey).filter(g=>!!g))]),f=(g,A,v)=>{let D={},U=A.reduce((C,T)=>(C[T.objectId]=T,C),{});for(let C of g)C[v]&&(D[C.poolCoinName]=U[C[v]]);return D},m=f(t,s,"balanceSheet"),p=f(t,i,"collateralStat"),b=f(t,o,"borrowDynamic"),y=f(t,r,"interestModel"),w=f(t,n,"riskModel"),k=f(t,c,"borrowFeeKey"),B=f(t,d,"supplyLimitKey"),O=f(t,l,"borrowLimitKey"),_=f(t,u,"isolatedAssetKey");return e.reduce((g,A)=>(g[A]={balanceSheet:m[A],collateralStat:p[A],borrowDynamic:b[A],interestModel:y[A],riskModel:w[A],borrowFeeKey:k[A],supplyLimitKey:B[A],borrowLimitKey:O[A],isolatedAssetKey:_[A]},g),{})},Dt=async(a,e,t=!1,s)=>{s=s??await a.utils.getCoinPrices();let i={},o={};if(t){let n=await a.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=a.utils.getCoinWrappedType(l.coinName),i[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=a.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 Mt(a,e);return await Promise.allSettled(e.map(async n=>{try{let c=await Ga(a,n,t,s?.[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}},$a=({balanceSheet:a,borrowDynamic:e,collateralStat:t,interestModel:s,riskModel:i,borrowFeeKey:o,supplyLimitKey:r,borrowLimitKey:n,isolatedAssetKey:c})=>{let d=Y(a),l=Y(s),u=Y(e),f=Y(o),m=r?Y(r):"0",p=n?Y(n):"0",b=i?Y(i):void 0,y=t?Y(t):void 0,w=b&&y?{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:y.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:f,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:m,borrowLimit:p,parsedOriginMarketCollateral:w}},Ga=async(a,e,t=!1,s,i)=>{if(s=s??(await a.utils.getCoinPrices())?.[e],t){let l=await a.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=a.utils.getCoinWrappedType(l.coinName);let u;return a.constants.whitelist.collateral.has(e)&&(u=await a.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=a.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}i??=(await Mt(a,[e]))[e];let o=$a(i),r=qe(o),n=$e(a.utils,r),c=o.parsedOriginMarketCollateral?Ae(o.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:a.utils.parseSymbol(e),marketCoinType:a.utils.parseMarketCoinType(e),coinType:a.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:a.utils.parseSCoinType(a.utils.parseMarketCoinName(e))??"",coinWrappedType:a.utils.getCoinWrappedType(e),coinPrice:s??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:a.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Pe(a.utils,c)}:void 0}},Ft=async(a,e=[...a.constants.whitelist.collateral],t=!1)=>{let s=a.address.get("core.market"),i=await a.utils.getCoinPrices()??{},o={};if(t){let n=await a.indexer.getMarketCollaterals(),c=d=>{e.includes(d.coinName)&&(d.coinPrice=i[d.coinName]??d.coinPrice,d.coinWrappedType=a.utils.getCoinWrappedType(d.coinName),o[d.coinName]=d);};return Object.values(n).filter(d=>!!d).forEach(c),o}let r=await a.cache.queryGetObject(s);return await Promise.allSettled(e.map(async n=>{let c=await Ge(a,n,t,r?.data,i?.[n]);c&&(o[n]=c);})),o},Ge=async(a,e,t=!1,s,i)=>{if(i=i??(await a.utils.getCoinPrices())?.[e],t){let k=await a.indexer.getMarketCollateral(e);return k.coinPrice=i??k.coinPrice,k.coinWrappedType=a.utils.getCoinWrappedType(k.coinName),k}let o=a.address.get("core.market");if(s=s||(await a.cache.queryGetObject(o))?.data,!(s&&s.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let r=s.content.fields,n=a.utils.parseCoinType(e),c=r.risk_models.fields.table.fields.id.id,d=await a.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,f=r.collateral_stats.fields.table.fields.id.id,m=await a.cache.queryGetDynamicFieldObject({parentId:f,name:{type:"0x1::type_name::TypeName",value:{name:n.substring(2)}}}),p=m?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${e}: ${m?.error?.code.toString()}`);let b=p.content.fields.value.fields,y=Ae({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:b.amount,isIsolated:await ce(a.utils,e)}),w=Pe(a.utils,y);return {coinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(e),marketCoinType:a.utils.parseMarketCoinType(e),coinWrappedType:a.utils.getCoinWrappedType(e),coinPrice:i??0,collateralFactor:y.collateralFactor,liquidationFactor:y.liquidationFactor,liquidationDiscount:y.liquidationDiscount,liquidationPenalty:y.liquidationPenalty,liquidationReserveFactor:y.liquidationReserveFactor,...w}},le=async({constants:a},e)=>{let t=e,s=a.protocolObjectId,i=[],o=!1,r=null;do{let l=await a.cache.queryGetOwnedObjects({owner:t,filter:{StructType:`${s}::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 L(a.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 f=l?.objectId,m=l?.content;if(f&&m&&"fields"in m){let p=m.fields,b=String(p.ownership.fields.of),y=await ze(a.cache,d[u]);c.push({id:b,keyId:f,locked:y});}})),c},ze=async(a,e)=>{let t=typeof e=="string"?(await a.queryGetObject(e))?.data:e,s=!1;return t&&t?.content?.dataType==="moveObject"&&"lock_key"in t.content.fields&&(s=!!t.content.fields.lock_key),s},Ie=async({address:a},e)=>{let t=a.get("core.packages.query.id"),s=a.get("core.version"),i=a.get("core.market"),o=`${t}::obligation_query::obligation_data`,r=[s,i,e,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}];return (await a.cache.queryInspectTxn({queryTarget:o,args:r}))?.events[0]?.parsedJson},Kt=async(a,e=[...a.constants.whitelist.lending],t)=>{let s=t??a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await Ye(a,o,s);i[o]=r;})),i},Ye=async(a,e,t)=>{let s=t??a.suiKit.currentAddress(),i=a.utils.parseCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Lt=async(a,e,t)=>{e=e||[...a.constants.whitelist.lending].map(o=>a.utils.parseMarketCoinName(o));let s=t??a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await He(a,o,s);i[o]=r;})),i},He=async(a,e,t)=>{let s=t??a.suiKit.currentAddress(),i=a.utils.parseMarketCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},Et=async(a,e,t=1e4)=>{let s=[],i={},o=e.reduce((c,d)=>{let l=a.utils.parseCoinType(d).slice(2);return c[l]=d,c},{}),r=e.map(c=>{let d=a.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),n=await L(a.cache,r);if(s.length>0){let c=await vt(a.utils,s,t);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,f=+l.value;c[o[u]]=f/t;}return c},{})},i};var za=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(a=>({totalPoolReward:h__default.default(a.balance).shiftedBy(-9).toNumber(),isClaimEnabled:a.enable_claim})),Ya=zod.z.object({value:zod.z.string()}).transform(a=>h__default.default(a.value).shiftedBy(-9).toNumber()),Ut=async(a,e)=>{let t=a.address.get("loyaltyProgram.rewardPool"),s=await a.cache.queryGetObject(t);if(s?.data?.content?.dataType!=="moveObject")return null;let i=s.data.content.fields,{isClaimEnabled:o,totalPoolReward:r}=za.parse(i),n={pendingReward:0,totalPoolReward:r,isClaimEnabled:o};if(e=e??(await a.getVeScas())[0]?.keyObject,!e)return n;let c=a.address.get("loyaltyProgram.userRewardTableId"),d=await a.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=Ya.parse(l),n};var Qt=async(a,e=[...a.constants.whitelist.lending],t,s,i,o=!1)=>{let r=e.map(m=>a.utils.parseMarketCoinName(m)),n=r.filter(m=>a.constants.whitelist.spool.has(m));i=i??await a.utils.getCoinPrices(),s=s??(await a.getMarketPools(e,{indexer:o,coinPrices:i})).pools;let c=await a.getSpools(n,{indexer:o,marketPools:s,coinPrices:i}),[d,l,u]=await Promise.all([a.getCoinAmounts(e,t),a.getMarketCoinAmounts(r,t),a.getAllStakeAccounts(t)]),f={};return await Promise.allSettled(e.map(async m=>{let p=n.find(y=>y===a.utils.parseMarketCoinName(m)),b=a.utils.parseMarketCoinName(m);f[m]=await Je(a,m,t,o,s?.[m],p?c[p]:void 0,p?u[p]:[],d?.[m],l?.[b],i?.[m]??0);})),f},Je=async(a,e,t,s=!1,i,o,r,n,c,d,l)=>{let u=a.utils.parseMarketCoinName(e);if(d=d??(await a.utils.getCoinPrices())?.[e]??0,i=i??await a.getMarketPool(e,{indexer:s,coinPrice:d}),!i)throw new Error(`Failed to fetch marketPool for ${e}`);o=o??a.constants.whitelist.spool.has(u)?await a.getSpool(u,{indexer:s,marketPool:i,coinPrices:{[e]:d}}):void 0,r=r||a.constants.whitelist.spool.has(u)?await a.getStakeAccounts(u,t):[],n=n||await a.getCoinAmount(e,t),c=c||await a.getMarketCoinAmount(u,t),l=l||await a.getSCoinAmount(u,t);let f=a.utils.getCoinDecimal(e),m=h__default.default(0),p=h__default.default(0),b=h__default.default(0),y=h__default.default(0),w=h__default.default(0),k=h__default.default(0),B=h__default.default(0),O=h__default.default(0),_=h__default.default(0);if(o)for(let Q of r){let I=h__default.default(Q.staked),j=I.shiftedBy(-1*o.coinDecimal),V=I.multipliedBy(i?.conversionRate??1),G=V.shiftedBy(-1*o.coinDecimal),J=G.multipliedBy(o.coinPrice);m=m.plus(I),p=p.plus(j),b=b.plus(V),y=y.plus(G),w=w.plus(J),k=k.plus(I),B=k.shiftedBy(-1*o.coinDecimal);let z=o.currentPointIndex?h__default.default(o.currentPointIndex-Q.index).dividedBy(1e9):1;O=O.plus(I.multipliedBy(z).plus(Q.points).multipliedBy(o.exchangeRateNumerator).dividedBy(o.exchangeRateDenominator)),_=O.shiftedBy(-1*o.rewardCoinDecimal);}let M=h__default.default(c).plus(h__default.default(l)).multipliedBy(i?.conversionRate??1),g=M.shiftedBy(-1*f),A=g.multipliedBy(d??0),v=h__default.default(d??0).multipliedBy(i?.conversionRate??1),D=h__default.default(c).plus(h__default.default(l)),U=D.shiftedBy(-1*f),C=h__default.default(n),T=C.shiftedBy(-1*f),P=fe(M,i?.supplyAmount??1/0).plus(b),x=fe(g,i?.supplyCoin??1/0).plus(y);return {coinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(e),marketCoinType:a.utils.parseMarketCoinType(e),sCoinType:i?.sCoinType??"",coinDecimal:f,coinPrice:d??0,conversionRate:i?.conversionRate??1,marketCoinPrice:v.toNumber(),supplyApr:i?.supplyApr??0,supplyApy:i?.supplyApy??0,rewardApr:o?.rewardApr??0,suppliedAmount:M.plus(b).toNumber(),suppliedCoin:g.plus(y).toNumber(),suppliedValue:A.plus(w).toNumber(),stakedMarketAmount:m.toNumber(),stakedMarketCoin:p.toNumber(),stakedAmount:b.toNumber(),stakedCoin:y.toNumber(),stakedValue:w.toNumber(),unstakedMarketAmount:D.toNumber(),unstakedMarketCoin:U.toNumber(),unstakedAmount:M.toNumber(),unstakedCoin:g.toNumber(),unstakedValue:A.toNumber(),availableSupplyAmount:C.toNumber(),availableSupplyCoin:T.toNumber(),availableWithdrawAmount:P.toNumber(),availableWithdrawCoin:x.toNumber(),availableStakeAmount:D.toNumber(),availableStakeCoin:U.toNumber(),availableUnstakeAmount:k.toNumber(),availableUnstakeCoin:B.toNumber(),availableClaimAmount:O.toNumber(),availableClaimCoin:_.toNumber(),isIsolated:i?i.isIsolated:!1}},Wt=async(a,e,t,s,i=!1)=>{t=t??await a.getMarketPools(void 0,{indexer:i}),s=s??await a.getAllCoinPrices({marketPools:t.pools});let[o,r]=await Promise.all([a.getCoinAmounts(void 0,e),a.getObligations(e)]),n=await L(a.cache,r.map(d=>d.id)),c={};return await Promise.allSettled(r.map(async(d,l)=>{c[d.keyId]=await Xa(a,n[l]??d.id,e,i,t,s,o);})),c},Xa=async(a,e,t,s=!1,i,o,r)=>{i=i??await a.getMarketPools(void 0,{indexer:s}),o=o??await a.getAllCoinPrices({marketPools:i.pools}),r=r??await a.getCoinAmounts(Array.from(a.constants.whitelist.lending),t);let[n,c,d]=await Promise.all([a.queryObligation(e),a.getBorrowIncentivePools(void 0,{coinPrices:o,marketPools:i.pools}),a.getBorrowIncentiveAccounts(e)]),l={},u={},f={},m=0,p=h__default.default(0),b=h__default.default(0),y=h__default.default(0),w=0,k=0,B=h__default.default(0),O=h__default.default(0);for(let C of Array.from(a.constants.whitelist.collateral)){let T=n?.collaterals.find(I=>{let j=a.utils.parseCoinNameFromType(I.type.name);return C===j}),P=i.collaterals[C],x=a.utils.getCoinDecimal(C),F=o?.[C],Q=r?.[C]??0;if(P&&F){let I=h__default.default(T?.amount??0),j=I.shiftedBy(-1*x),V=j.multipliedBy(F),G=V.multipliedBy(P.collateralFactor),J=V.multipliedBy(P.liquidationFactor),E=h__default.default(Q),z=E.shiftedBy(-1*x);p=p.plus(V),b=b.plus(G),y=y.plus(J),I.isGreaterThan(0)&&m++,l[C]={coinName:C,coinType:a.utils.parseCoinType(C),symbol:a.utils.parseSymbol(C),coinDecimal:x,coinPrice:F,depositedAmount:I.toNumber(),depositedCoin:j.toNumber(),depositedValue:V.toNumber(),borrowCapacityValue:G.toNumber(),requiredCollateralValue:J.toNumber(),availableDepositAmount:E.toNumber(),availableDepositCoin:z.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let _=[...new Set([...Object.values(i.pools).filter(C=>!!C).map(C=>C.coinName)])];for(let C of _){let T=n?.debts.find(I=>{let j=a.utils.parseCoinNameFromType(I.type.name);return C===j}),P=i.pools[C],x=a.utils.getCoinDecimal(C),F=o?.[C],Q=r?.[C]??0;if(P&&F){let I=T?.borrowIndex?P.borrowIndex/Number(T.borrowIndex)-1:0,j=h__default.default(T?.amount??0).multipliedBy(I+1),V=j.shiftedBy(-1*x),G=j,J=G.shiftedBy(-1*x),E=h__default.default(Q),z=E.shiftedBy(-1*x),se=J.multipliedBy(F),ne=se.multipliedBy(P.borrowWeight);B=B.plus(se),O=O.plus(ne),j.isGreaterThan(0)&&w++,u[C]={coinName:C,coinType:a.utils.parseCoinType(C),symbol:a.utils.parseSymbol(C),coinDecimal:x,coinPrice:F,borrowedAmount:j.toNumber(),borrowedCoin:V.toNumber(),borrowedValue:se.toNumber(),borrowedValueWithWeight:ne.toNumber(),borrowIndex:Number(T?.borrowIndex??0),requiredRepayAmount:G.toNumber(),requiredRepayCoin:J.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:E.toNumber(),availableRepayCoin:z.toNumber()};}}for(let[C,T]of Object.entries(d)){if(!T)continue;let P=C,x=c[P];if(x){let F=[];Object.entries(T.pointList).forEach(([Q,I])=>{let j=x.points[a.utils.parseSCoinTypeNameToMarketCoinName(Q)];if(I&&j){let V=h__default.default(0),G=h__default.default(0),J=h__default.default(I.weightedAmount),z=j.currentPointIndex?Math.max(h__default.default(j.currentPointIndex-I.index).dividedBy(1e9).toNumber(),0):1;V=V.plus(J.multipliedBy(z).plus(I.points)),G=V.shiftedBy(-1*j.coinDecimal);let se=h__default.default(1e12),ne=h__default.default(I.weightedAmount).div(h__default.default(T.debtAmount).multipliedBy(j.baseWeight).dividedBy(se)).isFinite()?h__default.default(I.weightedAmount).div(h__default.default(T.debtAmount).multipliedBy(j.baseWeight).dividedBy(se)).toNumber():1;V.isGreaterThanOrEqualTo(0)&&F.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,availableClaimAmount:V.toNumber(),availableClaimCoin:G.toNumber(),boostValue:ne});}}),Object.keys(x.points).some(Q=>{let I=x.points[Q]?.rewardApr;return I!==1/0&&typeof I=="number"&&I>0})&&T.debtAmount>0&&k++,f[P]={coinName:x.coinName,coinType:x.coinType,symbol:x.symbol,coinDecimal:x.coinDecimal,coinPrice:x.coinPrice,rewards:F};}}let M=y.isZero()?O.isGreaterThan(0)?h__default.default(100):h__default.default(0):O.dividedBy(y);M=M.isLessThan(1)?M:h__default.default(1);let g=p.minus(B).isGreaterThan(0)?p.minus(B):h__default.default(0),A=b.minus(O).isGreaterThan(0)?b.minus(O):h__default.default(0),v=O.isGreaterThan(0)?y:h__default.default(0),D=O.minus(v).isGreaterThan(0)?O.minus(v):h__default.default(0),U={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:p.toNumber(),totalBorrowedValue:B.toNumber(),totalBalanceValue:g.toNumber(),totalBorrowCapacityValue:b.toNumber(),totalAvailableCollateralValue:A.toNumber(),totalBorrowedValueWithWeight:O.toNumber(),totalRequiredCollateralValue:v.toNumber(),totalUnhealthyCollateralValue:D.toNumber(),totalRiskLevel:M.toNumber(),totalDepositedPools:m,totalBorrowedPools:w,totalRewardedPools:k,collaterals:l,debts:u,borrowIncentives:f};for(let[C,T]of Object.entries(U.collaterals)){if(!T)continue;let P=i.collaterals[C];if(P){let x=h__default.default(U.totalAvailableCollateralValue).dividedBy(P.collateralFactor).dividedBy(P.coinPrice).shiftedBy(P.coinDecimal);x=U.totalBorrowedValueWithWeight===0?h__default.default(T.depositedAmount):fe(x.multipliedBy(xe(h__default.default(U.totalAvailableCollateralValue).dividedBy(P.collateralFactor).toNumber(),3,"increase")).toNumber(),T.depositedAmount,P.depositAmount),T.availableWithdrawAmount=x.toNumber(),T.availableWithdrawCoin=x.shiftedBy(-1*T.coinDecimal).toNumber();}}for(let[C,T]of Object.entries(U.debts)){if(!T)continue;let P=i.pools[C];if(P){let x=h__default.default(T.requiredRepayAmount).multipliedBy(xe(T.borrowedValue,3,"decrease")),F=h__default.default(U.totalAvailableCollateralValue).dividedBy(P.borrowWeight).shiftedBy(P.coinDecimal).dividedBy(P.coinPrice);F=U.totalAvailableCollateralValue!==0&&h__default.default(P.maxBorrowCoin).isGreaterThan(P.borrowCoin)?fe(F.multipliedBy(xe(F.shiftedBy(-1*P.coinDecimal).multipliedBy(P.coinPrice).toNumber(),3,"increase")).toNumber(),P.supplyAmount):h__default.default(0),T.availableBorrowAmount=F.toNumber(),T.availableBorrowCoin=F.shiftedBy(-1*T.coinDecimal).toNumber(),T.requiredRepayAmount=x.toNumber(),T.requiredRepayCoin=x.shiftedBy(-1*T.coinDecimal).toNumber();}}return U},qt=async(a,e=!1)=>{let t=await a.getMarketPools(void 0,{indexer:e}),s=h__default.default(0),i=h__default.default(0),o=h__default.default(0);if(e){let n=await a.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(t.pools))n&&(s=s.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(t.collaterals))n&&(i=i.plus(h__default.default(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:s.plus(i).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:i.toNumber(),borrowValue:o.toNumber(),totalValue:s.plus(i).minus(o).toNumber()}},$t=async(a,e,t=!1)=>{let s=await a.utils.getCoinPrices(),i=await a.getMarketPools(void 0,{indexer:t,coinPrices:s}),[o,r,n,c]=await Promise.all([a.getLendings(void 0,e,{indexer:t,marketPools:i.pools,coinPrices:s}),a.getObligationAccounts(e,{indexer:t,market:i,coinPrices:s}),a.getBorrowIncentivePools(void 0,{marketPools:i.pools,coinPrices:s}),a.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).map(p=>({obligationId:p.obligationId,totalDebtsInUsd:p.totalBorrowedValueWithWeight,totalCollateralInUsd:p.totalDepositedValue,riskLevel:p.totalRiskLevel,availableCollateralInUsd:p.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:p.totalUnhealthyCollateralValue,borrowedPools:Object.values(p.debts).filter(b=>!!b&&b.borrowedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,borrowedCoin:b.borrowedCoin,borrowedValueInUsd:b.borrowedValueWithWeight,borrowApr:i.pools[b.coinName]?.borrowApr,borrowApy:i.pools[b.coinName]?.borrowApy,incentiveInfos:Object.values(n[b.coinName]?.points??{}).filter(y=>!!y&&isFinite(y.rewardApr)).map(y=>({coinName:y.coinName,symbol:y.symbol,coinType:y.coinType,incentiveApr:y.rewardApr}))}))})),u=Object.values(o).reduce((p,b)=>{if(b){if(b.availableClaimCoin===0)return p;p[b.symbol]?p[b.symbol].pendingRewardInCoin+=b.availableClaimCoin:p[b.symbol]={symbol:b.symbol,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:b.coinPrice,pendingRewardInCoin:b.availableClaimCoin};}return p},{}),f=Object.values(r).filter(p=>!!p).reduce((p,b)=>(Object.values(b.borrowIncentives).forEach(y=>{y?.rewards.forEach(w=>{if(w.availableClaimCoin===0)return p;p[w.coinName]?p[w.coinName].pendingRewardInCoin+=w.availableClaimCoin:p[w.coinName]={symbol:w.symbol,coinType:w.coinType,coinPrice:w.coinPrice,pendingRewardInCoin:w.availableClaimCoin};});}),p),{}),m=c.map(({keyId:p,lockedScaCoin:b,currentVeScaBalance:y,unlockAt:w})=>({veScaKey:p,coinPrice:s.sca??0,lockedScaInCoin:b,lockedScaInUsd:b*(s.sca??0),currentVeScaBalance:y,remainingLockPeriodInDays:w-Date.now()>0?(w-Date.now())/864e5:0,unlockAt:w}));return {totalSupplyValue:d.reduce((p,b)=>(p+=b.suppliedValue,p),0),...l.reduce((p,b)=>(p.totalDebtValue+=b.totalDebtsInUsd,p.totalCollateralValue+=b.totalCollateralInUsd,p),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:m.reduce((p,b)=>(p+=b.lockedScaInUsd,p),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(u).reduce((p,[b,y])=>(p.push({...y,coinName:b,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),p),[]),borrowIncentives:Object.entries(f).reduce((p,[b,y])=>(p.push({coinName:b,...y,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),p),[])},veScas:m}};var Xe=async({address:a},e,t)=>{let s=a.get(`core.coins.${e}.oracle.pyth.feedObject`);if(t=t||(await a.cache.queryGetObject(s))?.data,t){let i=t;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:a},e)=>{let t=e.reduce((o,r)=>{let n=a.address.get(`core.coins.${r}.oracle.pyth.feedObject`);return n&&(o[n]?o[n].push(r):o[n]=[r]),o},{}),i=(await a.address.cache.queryGetObjects(Object.keys(t))).reduce((o,r)=>(t[r.objectId].forEach(n=>{o[n]=r;}),o),{});return (await Promise.all(Object.entries(i).map(async([o,r])=>({coinName:o,price:await Xe(a,o,r)})))).reduce((o,r)=>(o[r.coinName]=r.price,o),{})},Gt=async(a,e,t,s=!1)=>{if(t=t??(s?await a.getCoinPricesByIndexer():await a.utils.getCoinPrices()),e=e??(await a.getMarketPools(void 0,{coinPrices:t,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let i={};return a.constants.whitelist.scoin.forEach(o=>{let r=a.utils.parseCoinName(o);i[o]=h__default.default(t[r]??0).multipliedBy(e[r]?.conversionRate??1).toNumber();}),{...t,...i}};var zt=async(a,e)=>{let t=a.get("referral.bindingTableId"),s=await a.cache.queryGetDynamicFieldObject({parentId:t,name:{type:"address",value:e}});return s?.data?.content?.dataType!=="moveObject"?null:s.data.content.fields.value};var Yt=async({utils:a},e)=>{let t=a.address.get("scoin.id"),s=[a.getSCoinTreasury(e)],i=[a.parseSCoinType(e),a.parseUnderlyingSCoinType(e)],o=`${t}::s_coin_converter::total_supply`,n=(await a.cache.queryInspectTxn({queryTarget:o,args:s,typeArgs:i}))?.results;if(n&&n[0]?.returnValues){let c=Uint8Array.from(n[0].returnValues[0][0]),d=n[0].returnValues[0][1];return ts__default.default(d==="u64","Result type is not u64"),h__default.default(bcs.bcs.u64().parse(c)).shiftedBy(a.getCoinDecimal(a.parseCoinName(e))).toNumber()}return 0},Ht=async({utils:a},e=[...a.constants.whitelist.scoin],t)=>{let s=t||a.suiKit.currentAddress(),i={};return await Promise.allSettled(e.map(async o=>{let r=await et({utils:a},o,s);i[o]=r;})),i},et=async({utils:a},e,t)=>{let s=t||a.suiKit.currentAddress(),i=a.parseSCoinType(e),o=await a.cache.queryGetCoinBalance({owner:s,coinType:i});return h__default.default(o?.totalBalance??"0").toNumber()},as=(a,e,t)=>{if(e===t)throw new Error("fromAsset and toAsset must be different");if(!a.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!a.constants.whitelist.scoin.has(t))throw new Error("toAsset is not supported")},Jt=async(a,e,t,s)=>{as(a.utils,e,t);let i=a.utils.parseCoinName(e),o=a.utils.parseCoinName(t),r=await Promise.all([a.getMarketPool(i),a.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 a.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 Xt=async(a,e)=>{let t=e.map((l,u)=>({poolCoinName:e[u],spool:a.constants.poolAddresses[l]?.spool,spoolReward:a.constants.poolAddresses[l]?.spoolReward,sCoinTreasury:a.constants.poolAddresses[l]?.sCoinTreasury})),[s,i,o]=await Promise.all([L(a.cache,t.map(l=>l.spool).filter(l=>!!l)),L(a.cache,t.map(l=>l.spoolReward).filter(l=>!!l)),L(a.cache,t.map(l=>l.sCoinTreasury).filter(l=>!!l))]),r=(l,u,f)=>{let m={},p=u.reduce((b,y)=>(b[y.objectId]=y,b),{});for(let b of l)b[f]&&(m[b.poolCoinName]=p[b[f]]);return m},n=r(t,s,"spool"),c=r(t,i,"spoolReward"),d=r(t,o,"sCoinTreasury");return e.reduce((l,u)=>(l[u]={spool:n[u],spoolReward:c[u],sCoinTreasury:d[u]},l),{})},ss=({spool:a,spoolReward:e})=>{let t=Y(a),s=Y(e);return {stakeType:t.stake_type,maxDistributedPoint:t.max_distributed_point,distributedPoint:t.distributed_point,distributedPointPerPeriod:t.distributed_point_per_period,pointDistributionTime:t.point_distribution_time,maxStake:t.max_stakes,stakes:t.stakes,index:t.index,createdAt:t.created_at,lastUpdate:t.last_update,...s}},Zt=async(a,e=[...a.constants.whitelist.spool],t=!1,s,i)=>{let o=e.map(c=>a.utils.parseCoinName(c));if(s=s??(await a.getMarketPools(o,{indexer:t})).pools,i=i??await a.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${o}`);let r={};if(t){let c=await a.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=a.utils.parseCoinName(l.marketCoinName),f=a.utils.getSpoolRewardCoinName();l.coinPrice=i[u]??l.coinPrice,l.marketCoinPrice=i[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=i[f]??l.rewardCoinPrice,r[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),r}let n=await Xt(a,o);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=o[d],u=await os(a,c,t,i,n[l]);u&&(r[c]=u);}catch(l){console.error(l);}})),r},os=async(a,e,t=!1,s,i)=>{let o=a.utils.parseCoinName(e);if(s=s||await a.getAllCoinPrices(),t){let y=await a.indexer.getSpool(e),w=a.utils.parseCoinName(e),k=a.utils.getSpoolRewardCoinName();return y.coinPrice=s?.[w]??y.coinPrice,y.marketCoinPrice=s?.[e]??y.marketCoinPrice,y.rewardCoinPrice=s?.[k]??y.rewardCoinPrice,y}i??=(await Xt(a,[o]))[o];let r=a.utils.getSpoolRewardCoinName();s=s||await a.utils.getCoinPrices();let n=ss(i),c=mt(n),d=s?.[e]??0,l=a.utils.getCoinDecimal(e),u=yt(c,d,l),f=gt(n),m=s?.[r]??0,p=a.utils.getCoinDecimal(r),b=ht(c,f,u,m,p);return {marketCoinName:e,symbol:a.utils.parseSymbol(e),coinType:a.utils.parseCoinType(o),marketCoinType:a.utils.parseMarketCoinType(o),rewardCoinType:a.utils.isMarketCoin(r)?a.utils.parseMarketCoinType(r):a.utils.parseCoinType(r),sCoinType:a.utils.parseSCoinType(e)??"",coinDecimal:a.utils.getCoinDecimal(o),rewardCoinDecimal:a.utils.getCoinDecimal(r),coinPrice:s?.[o]??0,marketCoinPrice:d,rewardCoinPrice:m,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:f.exchangeRateNumerator,exchangeRateDenominator:f.exchangeRateDenominator,...b}},ge=async({utils:a},e)=>{let t=e||a.suiKit.currentAddress(),s=a.address.get("spool.object"),i=`${s}::spool_account::SpoolAccount`,o=[],r=!1,n=null;do{let u=await a.cache.queryGetOwnedObjects({owner:t,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=[...a.constants.whitelist.spool].reduce((u,f)=>(u[f]=[],u),{}),d=Object.keys(c).reduce((u,f)=>{let m=a.parseCoinName(f),p=a.parseMarketCoinType(m);return u[f]=`${s}::spool_account::SpoolAccount<${p}>`,u},{}),l=Object.entries(d).reduce((u,[f,m])=>(u[m]=f,u),{});for(let u of o.map(f=>f.data)){let f=u?.objectId,m=u?.type;if(f&&u?.content&&"fields"in u.content){let p=u.content.fields,b=String(p.spool_id),y=String(p.stake_type.fields.name),w=Number(p.stakes),k=Number(p.index),B=Number(p.points),O=Number(p.total_points),_={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},M=utils.normalizeStructTag(m),g=_[l[M]];g&&g.push({id:f,type:M,stakePoolId:b,stakeType:utils.normalizeStructTag(y),staked:w,index:k,points:B,totalPoints:O});}}return c},tt=async({utils:a},e)=>{let t=a.address.get(`spool.pools.${e}.id`),s,i=await a.cache.queryGetObject(t);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),f=Number(c.point_distribution_time),m=Number(c.max_stakes),p=String(c.stake_type.fields.name),b=Number(c.stakes),y=Number(c.index),w=Number(c.created_at),k=Number(c.last_update);s={id:r,type:utils.normalizeStructTag(n),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:f,maxStake:m,stakeType:utils.normalizeStructTag(p),totalStaked:b,index:y,createdAt:w,lastUpdate:k};}}return s},at=async({utils:a},e)=>{let t=a.address.get(`spool.pools.${e}.rewardPoolId`),s,i=await a.cache.queryGetObject(t);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),f=Number(c.rewards),m=Number(c.claimed_rewards);s={id:r,type:utils.normalizeStructTag(n),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:f,claimedRewards:m};}}return s};var ls=async(a,e)=>{let t=e||a.suiKit.currentAddress(),i=`${a.address.get("vesca.object")}::ve_sca::VeScaKey`,o=[],r=!1,n=null;do{let d=await a.cache.queryGetOwnedObjects({owner:t,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)},Ne=async({utils:a},e,t)=>{let s=await ls(a,e),i=Array(s.length).fill(null),o=s.map(async(n,c)=>{let d=await he(a,n);d&&(i[c]=d);});await Promise.allSettled(o);let r=i.filter(Boolean).sort((n,c)=>c.currentVeScaBalance-n.currentVeScaBalance);return t?r.filter(n=>n.lockedScaAmount!=="0"):r},ea=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),he=async(a,e)=>{let t=a.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=ea.parse(e));let s,i=await a.cache.queryGetDynamicFieldObject({parentId:t,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);s={id:o.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:ea.parse(i.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:h__default.default(r.unlock_at*1e3).toNumber()};}return s},ds=async(a,e)=>{let t=a.address.get("vesca.id"),s=a.address.get("vesca.config");e=e??a.address.get("vesca.treasury");let i=new suiKit.SuiTxBlock,o=i.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}),r=`${t}::treasury::refresh`,n=[s,e,o],c=`${t}::treasury::total_ve_sca_amount`,d=[e,o],l=await Promise.all(n.map(async b=>typeof b=="string"?(await a.cache.queryGetObject(b))?.data:b)),u=await Promise.all(d.map(async b=>typeof b=="string"?(await a.cache.queryGetObject(b))?.data:b));i.moveCall(r,l),i.moveCall(c,u);let f=await i.txBlock.build({client:a.suiKit.client(),onlyTransactionKind:!0}),p=(await a.cache.queryClient.fetchQuery({queryKey:N.rpc.getTotalVeScaTreasuryAmount(n,d),queryFn:async()=>await a.suiKit.inspectTxn(f)})).results;if(p&&p[1]?.returnValues){let b=Uint8Array.from(p[1].returnValues[0][0]),y=p[1].returnValues[0][1];return ts__default.default(y==="u64","Result type is not u64"),bcs.bcs.u64().parse(b)}return "0"},ta=async a=>{let e=a.address.get("vesca.treasury"),t=await a.cache.queryGetObject(e);if(!t||t.data?.content?.dataType!=="moveObject")return null;let s=t.data.content.fields,i=h__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),o=h__default.default(await ds(a,t.data)??0).shiftedBy(-9).toNumber(),r=i>0?o/i*4:0;return {totalLockedSca:i,totalVeSca:o,averageLockingPeriod:r,averageLockingPeriodUnit:"year"}};var bs=[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"],Be=async a=>{for(let e of bs)try{return await a(new client.SuiClient({url:e}))}catch(t){if(t.status!==429)throw t;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},fs=async(a,e,t="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,i=!1,o={};do{let r=await a.getDynamicFields({parentId:t,limit:10,cursor:s});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,s=d;}while(i);return o},aa=async(a,e=[])=>{let t=new Set(e),s={},o=(await fetch(`https://sui.apis.scallop.io/addresses/${a}`).then(g=>g.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((g,A)=>{if(t.size>0&&!t.has(A))return g;let v=o.core.coins[A];return v&&v.coinType&&g.push([A,v.coinType]),g},[]);if(n.length===0)throw new Error("No coinTypesPairs");let c=o.core.market,d=(await Be(async g=>await g.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,f=l.collateral_stats.fields.table.fields.id.id,m=l.borrow_dynamics.fields.table.fields.id.id,p=l.interest_models.fields.table.fields.id.id,b=l.risk_models.fields.table.fields.id.id,y="0x1::type_name::TypeName",w="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",k="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",B="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",O="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",_=async(g,A,v)=>(await Be(async D=>await D.getDynamicFieldObject({parentId:g,name:{type:A,value:v}}))).data?.objectId,M=await Be(async g=>await fs(g,new Set(n.map(([,A])=>A))));return await Promise.all(n.map(async([g,A])=>{let v=A.slice(2),D=await Promise.all([_(u,y,{name:v}),_(f,y,{name:v}),_(m,y,{name:v}),_(p,y,{name:v}),_(b,y,{name:v}),_(c,w,v),_(c,k,v),_(c,B,v),_(c,O,v)]),{symbol:U,metaData:C}=o.core.coins[g],T={spool:"",spoolReward:""},P=o.spool.pools[`s${g}`];if(P){let{id:E,rewardPoolId:z}=P;T={spool:E,spoolReward:z};}let x={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},F=`s${g}`,Q=o.scoin.coins[F];if(Q){let{coinType:E,treasury:z,metaData:se,symbol:ne}=Q;x={sCoinType:E,sCoinTreasury:z,sCoinMetadataId:se,sCoinSymbol:ne};}let I={pythFeed:"",pythFeedObjectId:""};if(o.core.coins[g]?.oracle.pyth){let{feed:E,feedObject:z}=o.core.coins[g].oracle.pyth;I={pythFeed:E,pythFeedObjectId:z};}o.core.coins[g].oracle.pyth;let G=(await Be(async E=>await E.getCoinMetadata({coinType:A})))?.decimals??0,J=T?`s${g}`:void 0;s[g]={coinName:g,symbol:U,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]??"",...T,...x,sCoinName:F,coinMetadataId:C,coinType:A,spoolName:J,decimals:G,...I,flashloanFeeObject:M[A]??""},await new Promise(E=>setTimeout(E,1e3));})),s};var ms="0x56e48a141f20a3a6a6d3fc43e58b01fc63f756c08224870e7890c80ec9d2afee",ys="0xef4d9430ae42c1b24199ac55e87ddd7262622447ee3c7de8868efe839b3d8705",ia=async a=>{let e=`${a.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[t,s]=await Promise.all([a.cache.queryGetDynamicFieldObject({parentId:ms,name:{type:e,value:{dummy_field:!1}}}),a.cache.queryGetDynamicFieldObject({parentId:ys,name:{type:e,value:{dummy_field:!1}}})]);return {primary:t,secondary:s}},sa="0xc22c9d691ee4c780de09db91d8b487d863211ebf08720772144bcf716318826c",oa="0x3b184ff859f5de30eeaf186898e5224925be6bb6d2baa74347ef471a8cd1c0d3",st=async(a,e)=>{if(e==="primary"&&!sa)return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!oa)return console.error("Secondary price update policy vecset id is not set"),null;let t={[`${a.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${a.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${a.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},s={},i=null;do{let o=await a.cache.queryGetDynamicFields({parentId:e==="primary"?sa:oa,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 a.cache.queryGetObjects(d)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let f=u.content.fields,m=f.name.fields.name,p=a.parseCoinNameFromType(`0x${m}`);if(!p)throw new Error(`Invalid asset name: ${p}`);s[p]||(s[p]=[]),f.value.fields.contents.forEach(y=>{s[p].push(t[`0x${y.fields.name}`]);});}),!n)break}while(i);return s};var H=class{constructor(e,t){this.params=e;this.params=e,this._requestClient=ja__default.default.create({headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:8e3}),this.cache=t?.address?.cache??t?.cache??new K(this.params,{suiKit:W(this.params)}),this.address=t?.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,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set};_coinDecimals={};_coinNameToOldMarketCoinTypeMap={};_scoinRawNameToSCoinNameMap={};_scoinTypeToSCoinNameMap={};_wormholeCoinTypeToCoinNameMap={};_voloCoinTypeToCoinNameMap={};_suiBridgeCoinTypeToCoinNameMap={};_coinTypes={};_sCoinTypes={};_coinTypeToCoinNameMap={};get isAddressInitialized(){return !this.isEmptyObject(this.address.getAllAddresses())}get isInitialized(){return !this.isEmptyObject(this._poolAddresses)&&Object.values(this._whitelist).every(e=>e.size>0)&&this.isAddressInitialized}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,t])=>!!t).map(([e,t])=>[e,t.decimals]),...Object.entries(this.poolAddresses).filter(([e,t])=>!!t?.sCoinName).map(([e,t])=>[t.sCoinName,t.decimals])])),this._coinDecimals}get coinTypes(){return this.isEmptyObject(this._coinTypes)&&(this._coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([e,t])=>!!t).map(([e,t])=>[e,t?.coinType]),...Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinName&&t.sCoinType).map(([e,t])=>[t.sCoinName,t.sCoinType])])),this._coinTypes}get wormholeCoinTypeToCoinName(){return this.isEmptyObject(this._wormholeCoinTypeToCoinNameMap)&&(this._wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&this.whitelist.wormhole.has(e)).map(([e,t])=>[t.coinType,t.coinName]))),this._wormholeCoinTypeToCoinNameMap}get coinTypeToCoinNameMap(){return this.isEmptyObject(this._coinTypeToCoinNameMap)&&(this._coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([e,t])=>[t,e]))),this._coinTypeToCoinNameMap}get coinNameToOldMarketCoinTypeMap(){return this.isEmptyObject(this._coinNameToOldMarketCoinTypeMap)&&(this._coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.spool).map(([e,t])=>[t.coinName,this.parseToOldMarketCoin(t.coinType)]))),this._coinNameToOldMarketCoinTypeMap}get sCoinRawNameToScoinNameMap(){return this.isEmptyObject(this._scoinRawNameToSCoinNameMap)&&(this._scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinType&&t.sCoinName).map(([e,t])=>[suiKit.parseStructTag(t.sCoinType).name,t.sCoinName]))),this._scoinRawNameToSCoinNameMap}get sCoinTypeToSCoinNameMap(){return this.isEmptyObject(this._scoinTypeToSCoinNameMap)&&(this._scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinType&&t.sCoinName).map(([e,t])=>[t.sCoinType,t.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,t])=>!!t&&this.whitelist.suiBridge.has(t.coinName)).map(([e,t])=>[t.coinType,t.coinName]))),this._suiBridgeCoinTypeToCoinNameMap}get sCoinTypes(){return this.isEmptyObject(this._sCoinTypes)&&(this._sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([e,t])=>!!t&&t.sCoinName&&t.sCoinType).map(([e,t])=>[t.sCoinName,t.sCoinType]))),this._sCoinTypes}get supportedBorrowIncentiveRewards(){return new Set([...Object.values(this.poolAddresses).filter(e=>!!e).map(e=>e?.coinName)])}isEmptyObject(e){return Object.keys(e).length===0}async readApi({url:e,queryKey:t}){let s=await this.queryClient.fetchQuery({queryKey:t,queryFn:async()=>await this._requestClient.get(e)});if(s.status===200)return s.data;throw Error(`Error: ${s.status}; Failed to read ${e} ${s.statusText}`)}async readWhiteList(){let e=await this.readApi({url:this.params.whitelistApiUrl??`https://sui.apis.scallop.io/pool/whitelist/${this.params.whitelistId}`,queryKey:N.api.getWhiteList()});return Object.fromEntries(Object.entries(e).map(([t,s])=>[t,new Set(s)]))}async readPoolAddresses(){return await this.readApi({url:this.params.poolAddressesApiUrl??"https://sui.apis.scallop.io/pool/addresses",queryKey:N.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[t,s]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.fromEntries(Object.entries(t).filter(([i])=>i!=="id").map(([i,o])=>[i,i!=="id"?new Set(o):o]))),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(s).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,c||void 0]));return [i,r]})));}};var ra={mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]},ae=class{params;suiKit;address;cache;constants;walletAddress;constructor(e,t){this.params={pythEndpoints:e.pythEndpoints??ra.mainnet,...e},this.walletAddress=e.walletAddress??t?.suiKit?.currentAddress()??"",this.suiKit=t?.suiKit??t?.constants?.cache.suiKit??W(e),this.cache=t?.constants?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.constants?.address??new q(this.params,{cache:this.cache}),this.constants=t?.constants??new H(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 t=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.whitelist.lending.has(t)}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,t=!1){return t?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.whitelist.scoin.has(e))return e;{let t=`s${e}`;return this.whitelist.scoin.has(t)?t: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 t=this.parseCoinName(e);return this.parseCoinType(t)}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:t,module:s,name:i,typeParams:o}=utils.parseStructTag(e);return t===this.constants.protocolObjectId&&s==="reserve"&&i==="MarketCoin"?this.parseMarketCoinName(utils.parseStructTag(o).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,t=utils.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,t)}async mergeSimilarCoins(e,t,s,i=this.walletAddress){try{let o=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,i);o.length>0&&e.mergeCoins(t,o.slice(0,500));}catch{}}async getObligationCoinNames(e){let t=await Ie(this,e);if(!t)return;let s=t.collaterals.map(n=>`0x${n.type.name}`),i=t.debts.map(n=>`0x${n.type.name}`);return [...new Set([...s,...i])].map(n=>this.parseCoinNameFromType(n))}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let t={},s=this.params.pythEndpoints??ra.mainnet,i=new Set(e);for(let o of s){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:N.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(n),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let f=r[u][0],m=Tt(l,this.constants);t[f]=m.price,i.delete(f);});}catch(d){console.error(d.message);}if(i.size===0)break}return i.size>0&&(t={...t,...await _e(this,Array.from(i.values()))},i.clear()),t}parseAprToApy(e,t=365){return (1+e/t)**t-1}parseApyToApr(e,t=365){return ((1+e)**(1/t)-1)*t}getUnlockAt(e,t){let s=Math.floor(new Date().getTime()/1e3),i=t?Math.max(Math.floor(t/1e3)-s,0):0,o=0;if(i===0){let r=(e??1)*86400;o=Math.min(s+r,s+126144e3);}else {let r=Math.min(e?e*86400+i:i,126144e3);o=s+r;}return kt(o)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0):[]}};var we=async(a,e,t=[...a.constants.whitelist.lending],s={usePythPullModel:!0,useOnChainXOracleList:!0})=>{let i=a.params.usePythPullModel??s.usePythPullModel,r=a.params.useOnChainXOracleList??s.useOnChainXOracleList?await a.query.getAssetOracles():lt;if([...new Set(Object.values(r).flatMap(({primary:d,secondary:l})=>[...d,...l]))].includes("pyth")&&i){let d=new pythSuiJs.SuiPythClient(a.suiKit.client(),a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),l=t.map(f=>a.address.get(`core.coins.${f}.oracle.pyth.feed`)),u=a.params.pythEndpoints??[...a.constants.whitelist.pythEndpoints];for(let f of u)try{let p=await new pythSuiJs.SuiPriceServiceConnection(f).getPriceFeedsUpdateData(l);await d.updatePriceFeeds(e.txBlock,p,l);break}catch(m){console.warn(`Failed to update price feeds with endpoint ${f}: ${m}`);}}let c=[...new Set(t)];for(let d of c)As(a,e,d,r[d]);},As=(a,e,t,s)=>{let i=a.utils.parseCoinType(t);Ps(e,s,a.address.get("core.packages.xOracle.id"),a.address.get("core.oracles.xOracle"),a.address.get("core.packages.pyth.id"),a.address.get("core.oracles.pyth.registry"),a.address.get("core.oracles.pyth.state"),a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),a.address.get("core.packages.switchboard.id"),a.address.get("core.oracles.switchboard.registry"),a.address.get(`core.coins.${t}.oracle.switchboard`),a.address.get("core.packages.supra.id"),a.address.get("core.oracles.supra.registry"),a.address.get("core.oracles.supra.holder"),i);},Ps=(a,e,t,s,i,o,r,n,c,d,l,u,f,m,p)=>{let b=xs(a,t,s,p);return Object.entries(e).forEach(([y,w])=>{w.includes("pyth")&&_s(y,a,i,b,r,n,o,p),w.includes("supra")&&Rs(y,a,u,b,m,f,p),w.includes("switchboard")&&Is(y,a,c,b,l,d,p);}),Os(a,t,s,b,p),a},xs=(a,e,t,s)=>{let i=`${e}::x_oracle::price_update_request`,o=[s];return a.moveCall(i,[t],o)},Os=(a,e,t,s,i)=>{let o=`${e}::x_oracle::confirm_price_update_request`,r=[i];return a.moveCall(o,[t,s,a.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],r),a},Rs=(a,e,t,s,i,o,r)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},Is=(a,e,t,s,i,o,r)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[r]);},_s=(a,e,t,s,i,o,r,n)=>{e.moveCall(`${t}::rule::set_price_as_${a}`,[s,i,o,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:!1})],[n]);};var Se=async(...a)=>{let[e,t,s,i]=a;if(a.length===3&&s)return {obligationId:s};if(a.length===4&&s&&i)return {obligationId:s,obligationKey:i};let o=R(t),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}},Ns=({builder:a,txBlock:e})=>{let t={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},i=`${a.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]=a.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation`,[t.version]);return [r,n,c]},returnObligation:(r,n)=>{a.moveCall(e,`${t.protocolPkg}::open_obligation::return_obligation`,[t.version,r,n]);},openObligationEntry:()=>{a.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation_entry`,[t.version]);},addCollateral:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::deposit_collateral::deposit_collateral`,[t.version,r,t.market,n],[d]);},takeCollateral:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::withdraw_collateral::withdraw_collateral`,[t.version,r,n,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,o],[l])},deposit:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::mint::mint`,[t.version,t.market,r,o],[c])},depositEntry:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::mint::mint_entry`,[t.version,t.market,r,o],[c])},withdraw:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::redeem::redeem`,[t.version,t.market,r,o],[c])},withdrawEntry:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::redeem::redeem_entry`,[t.version,t.market,r,o],[c])},borrow:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow`,[t.version,r,n,t.market,t.coinDecimalsRegistry,c,t.xOracle,o],[l])},borrowWithReferral:(r,n,c,d,l)=>{let u=a.utils.parseCoinType(l);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow_with_referral`,[t.version,r,n,t.market,t.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,t.xOracle,o],[u,i])},borrowEntry:(r,n,c,d)=>{let l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.protocolPkg}::borrow::borrow_entry`,[t.version,r,n,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,o],[l])},repay:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::repay::repay`,[t.version,r,t.market,n,o],[d]);},borrowFlashLoan:(r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.protocolPkg}::flash_loan::borrow_flash_loan`,[t.version,t.market,r],[c])},repayFlashLoan:(r,n,c)=>{let d=a.utils.parseCoinType(c);a.moveCall(e,`${t.protocolPkg}::flash_loan::repay_flash_loan`,[t.version,t.market,r,n],[d]);}}},Bs=({builder:a,txBlock:e})=>({addCollateralQuick:async(t,s,i)=>{let o=R(e),{obligationId:r}=await Se(a,e,i);if(s==="sui"){let[n]=e.splitSUIFromGas([t]);e.addCollateral(r,n,s);}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);e.addCollateral(r,c,s),e.transferObjects([n],o);}},takeCollateralQuick:async(t,s,i,o)=>{let r=await Se(a,e,i,o),n=await a.utils.getObligationCoinNames(r.obligationId);return await we(a,e,n),e.takeCollateral(r.obligationId,r.obligationKey,t,s)},depositQuick:async(t,s,i=!0)=>{let o=R(e),r;if(s==="sui"){let[n]=e.splitSUIFromGas([t]);r=e.deposit(n,s);}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);e.transferObjects([n],o),r=e.deposit(c,s);}return i?e.mintSCoin(a.utils.parseMarketCoinName(s),r):r},withdrawQuick:async(t,s)=>{let i=R(e),o=a.utils.parseMarketCoinName(s);try{let r=a.utils.parseSCoinName(s);if(!r)throw new Error(`No sCoin for ${s}`);let{leftCoin:n,takeCoin:c,totalAmount:d}=await a.selectSCoin(e,r,t,i);e.transferObjects([n],i);let l=e.burnSCoin(r,c);t-=d;try{if(t>0){let{leftCoin:u,takeCoin:f}=await a.selectMarketCoin(e,o,t,i);e.transferObjects([u],i),e.mergeCoins(l,[f]);}}catch{}return e.withdraw(l,s)}catch{let{leftCoin:n,takeCoin:c}=await a.selectMarketCoin(e,o,t,i);return e.transferObjects([n],i),e.withdraw(c,s)}},borrowQuick:async(t,s,i,o)=>{let r=await Se(a,e,i,o),c=[...await a.utils.getObligationCoinNames(r.obligationId)??[],s];return await we(a,e,c),e.borrow(r.obligationId,r.obligationKey,t,s)},borrowWithReferralQuick:async(t,s,i,o,r)=>{let n=await Se(a,e,o,r),d=[...await a.utils.getObligationCoinNames(n.obligationId)??[],s];return await we(a,e,d),e.borrowWithReferral(n.obligationId,n.obligationKey,i,t,s)},repayQuick:async(t,s,i)=>{let o=R(e),r=await Se(a,e,i);if(s==="sui"){let[n]=e.splitSUIFromGas([t]);return e.repay(r.obligationId,n,s)}else {let{leftCoin:n,takeCoin:c}=await a.selectCoin(e,s,t,o);return e.transferObjects([n],o),e.repay(r.obligationId,c,s)}},updateAssetPricesQuick:async t=>await we(a,e,t)}),ca=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ns({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Bs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var da=async(...a)=>{let[e,t,s,i]=a;if(a.length===4&&i)return [i];let o=R(t),r=await ge(e,o);if(r[s].length===0)throw new Error(`No stake account id found for sender ${o}`);return r[s].map(n=>n.id)},Fs=async(...a)=>{let[e,t,s,i]=a,o=R(t),r=await ge(e,o);if(r[s].length===0)throw new Error(`No stake account found for sender ${o}`);return i?r[s].filter(c=>c.id===i):r[s]},ua=async(a,e,t,s,i,o,r=!1)=>{try{let{takeCoin:n,leftCoin:c,totalAmount:d}=r?await a.selectSCoin(e,s,i,o):await a.selectMarketCoin(e,s,i,o);if(r){let l=e.burnSCoin(s,n);e.stake(t,l,s);}else e.stake(t,n,s);return e.transferObjects([c],o),d}catch{return 0}},Ks=({builder:a,txBlock:e})=>{let t={spoolPkg:a.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {createStakeAccount:i=>{let o=a.utils.parseMarketCoinType(i),r=a.address.get(`spool.pools.${i}.id`);return a.moveCall(e,`${t.spoolPkg}::user::new_spool_account`,[r,s],[o])},stake:(i,o,r)=>{let n=a.utils.parseMarketCoinType(r),c=a.address.get(`spool.pools.${r}.id`);a.moveCall(e,`${t.spoolPkg}::user::stake`,[c,i,o,s],[n]);},unstake:(i,o,r)=>{let n=a.utils.parseMarketCoinType(r),c=a.address.get(`spool.pools.${r}.id`);return a.moveCall(e,`${t.spoolPkg}::user::unstake`,[c,i,o,s],[n])},claim:(i,o)=>{let r=a.address.get(`spool.pools.${o}.id`),n=a.address.get(`spool.pools.${o}.rewardPoolId`),c=a.utils.parseMarketCoinType(o),d=a.utils.getSpoolRewardCoinName(),l=a.utils.parseCoinType(d);return a.moveCall(e,`${t.spoolPkg}::user::redeem_rewards`,[r,n,i,s],[c,l])}}},Ls=({builder:a,txBlock:e})=>({stakeQuick:async(t,s,i)=>{let o=R(e),r=await da(a,e,s,i);if(r.length===0)throw new Error(`No stakeAccountIds found for user ${o}`);if(typeof t=="number"){let n=await ua(a,e,r[0],s,t,o);t-=n,t>0&&await ua(a,e,r[0],s,t,o,!0);}else e.stake(r[0],t,s);},unstakeQuick:async(t,s,i,o=!0)=>{let r=await Fs(a,e,s,i),n=[];for(let c of r){if(c.staked===0)continue;let d=Math.min(t,c.staked),l=await e.unstake(c.id,d,s);if(o){let u=await e.mintSCoin(s,l);n.push(u);}else n.push(l);if(t-=d,t<=0)break}if(n.length>0){let c=n[0];return n.length>1&&e.mergeCoins(c,n.slice(1)),c}},claimQuick:async(t,s)=>{let i=await da(a,e,t,s),o=[];for(let r of i){let n=await e.claim(r,t);o.push(n);}return o}}),pa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ks({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Ls({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var De=async(...a)=>{let[e,t,s,i]=a;if(a.length===4&&s&&i&&typeof s=="string"){let c=await ze(e.cache,s);return {obligationId:s,obligationKey:i,obligationLocked:c}}let o=R(t),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===s||c.keyId===i)??r[0];return {obligationId:n.id,obligationKey:n.keyId,obligationLocked:n.locked}},Us=({builder:a,txBlock:e})=>{let t={borrowIncentivePkg:a.address.get("borrowIncentive.id"),query:a.address.get("borrowIncentive.query"),config:a.address.get("borrowIncentive.config"),incentivePools:a.address.get("borrowIncentive.incentivePools"),incentiveAccounts:a.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:a.address.get("core.obligationAccessStore")},s={table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")},i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {stakeObligation:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::stake`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,t.obligationAccessStore,i]);},stakeObligationWithVesca:(o,r,n)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::stake_with_ve_sca`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,t.obligationAccessStore,s.config,s.treasury,s.table,n,i],[]);},unstakeObligation:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::unstake`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,i]);},claimBorrowIncentive:(o,r,n)=>{let c=a.utils.parseCoinType(n);return a.moveCall(e,`${t.borrowIncentivePkg}::user::redeem_rewards`,[t.config,t.incentivePools,t.incentiveAccounts,r,o,i],[c])},deactivateBoost:(o,r)=>{a.moveCall(e,`${t.borrowIncentivePkg}::user::deactivate_boost`,[t.config,t.incentivePools,t.incentiveAccounts,o,r,i]);}}},Qs=({builder:a,txBlock:e})=>({stakeObligationQuick:async(t,s)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await De(a,e,t,s),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${Le}::user::unstake`||c.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!r||n)&&e.stakeObligation(i,o);},stakeObligationWithVeScaQuick:async(t,s,i)=>{let{obligationId:o,obligationKey:r,obligationLocked:n}=await De(a,e,t,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Le}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!n||c){let l=await a.query.getBindedVeScaKey(o)??i;l?e.stakeObligationWithVesca(o,r,l):e.stakeObligation(o,r);}},unstakeObligationQuick:async(t,s)=>{let{obligationId:i,obligationKey:o,obligationLocked:r}=await De(a,e,t,s);r&&e.unstakeObligation(i,o);},claimBorrowIncentiveQuick:async(t,s,i)=>{let{obligationId:o,obligationKey:r}=await De(a,e,s,i);return e.claimBorrowIncentive(o,r,t)}}),fa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Us({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Qs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Ce=async(...a)=>{let[e,t,s]=a;if(a.length===3&&s&&typeof s=="string"){let r=await he(e.utils,s);return r||void 0}let i=R(t),o=await Ne(e,i);if(o.length!==0)return s?o.find(({keyId:r})=>s===r):o[0]},$s=({builder:a,txBlock:e})=>{let t={pkgId:a.address.get("vesca.id"),table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {lockSca:(i,o)=>a.moveCall(e,`${t.pkgId}::ve_sca::mint_ve_sca_key`,[t.config,t.table,t.treasury,i,o,s],[]),extendLockPeriod:(i,o)=>{a.moveCall(e,`${t.pkgId}::ve_sca::extend_lock_period`,[t.config,i,t.table,t.treasury,o,s],[]);},extendLockAmount:(i,o)=>{a.moveCall(e,`${t.pkgId}::ve_sca::lock_more_sca`,[t.config,i,t.table,t.treasury,o,s],[]);},renewExpiredVeSca:(i,o,r)=>{a.moveCall(e,`${t.pkgId}::ve_sca::renew_expired_ve_sca`,[t.config,i,t.table,t.treasury,o,r,s],[]);},redeemSca:i=>a.moveCall(e,`${t.pkgId}::ve_sca::redeem`,[t.config,i,t.table,t.treasury,s],[]),mintEmptyVeSca:()=>a.moveCall(e,`${t.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,[t.config,t.table],[])}},Gs=({builder:a,txBlock:e})=>({lockScaQuick:async(t,s,i=!0)=>{let o=R(e),r=await Ce(a,e),n,c=[];if(t!==void 0&&typeof t=="number"){let f=await a.utils.selectCoins(t,Te,o),[m,p]=e.takeAmountFromCoins(f,t);n=m,c.push(p);}else n=t;let d=a.utils.getUnlockAt(s,r?.unlockAt);i&&pt(t,s,d,r?.unlockAt);let l=!r?.unlockAt,u=!l&&r.unlockAt*1e3<=new Date().getTime();if(l||u){if(n)if(l){let f=e.lockSca(n,d);c.push(f);}else {if(r.lockedScaCoin!==0){let f=e.redeemSca(r.keyId);c.push(f);}e.renewExpiredVeSca(r.keyId,n,d);}}else n&&s?(e.extendLockPeriod(r.keyId,d),e.extendLockAmount(r.keyId,n)):s?e.extendLockPeriod(r.keyId,d):n&&e.extendLockAmount(r.keyId,n);c.length>0&&e.transferObjects(c,o);},extendLockPeriodQuick:async(t,s,i=!0)=>{let o=await Ce(a,e,s),r=a.utils.getUnlockAt(t,o?.unlockAt);i&&We(t,r,o?.unlockAt),o&&e.extendLockPeriod(o.keyId,r);},extendLockAmountQuick:async(t,s,i=!0)=>{let o=R(e),r=await Ce(a,e,s);if(i&&bt(t,r?.unlockAt),r){let n=await a.utils.selectCoins(t,Te,o),[c,d]=e.takeAmountFromCoins(n,t);e.extendLockAmount(r.keyId,c),e.transferObjects([d],o);}},renewExpiredVeScaQuick:async(t,s,i,o=!0)=>{let r=R(e),n=await Ce(a,e,i),c=a.utils.getUnlockAt(s,n?.unlockAt);if(o&&ft(t,s,n?.unlockAt),n){let d=[];if(n.lockedScaCoin!==0){let m=e.redeemSca(n.keyId);d.push(m);}let l=await a.utils.selectCoins(t,Te,r),[u,f]=e.takeAmountFromCoins(l,t);d.push(f),e.renewExpiredVeSca(n.keyId,u,c),e.transferObjects(d,r);}},redeemScaQuick:async(t,s=!0)=>{let i=R(e),o=await Ce(a,e,t);if(be(o?.unlockAt),o){let r=e.redeemSca(o.keyId);if(s){e.transferObjects([r],i);return}return r}}}),ya=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=$s({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Gs({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Hs=({builder:a,txBlock:e})=>{let t={referralPgkId:a.address.get("referral.id"),referralBindings:a.address.get("referral.referralBindings"),referralRevenuePool:a.address.get("referral.referralRevenuePool"),authorizedWitnessList:a.address.get("referral.authorizedWitnessList"),referralTiers:a.address.get("referral.referralTiers"),version:a.address.get("referral.version")},s=a.address.get("vesca.table"),i=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {bindToReferral:o=>{a.moveCall(e,`${t.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[t.referralBindings,e.pure.id(o),s,i],[]);},claimReferralTicket:o=>{let r=a.utils.parseCoinType(o);return a.moveCall(e,`${t.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[t.version,s,t.referralBindings,t.authorizedWitnessList,t.referralTiers,i],[r])},burnReferralTicket:(o,r)=>{let n=a.utils.parseCoinType(r);a.moveCall(e,`${t.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[t.version,o,t.referralRevenuePool,i],[n]);},claimReferralRevenue:(o,r)=>{let n=a.utils.parseCoinType(r);return a.moveCall(e,`${t.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[t.version,t.referralRevenuePool,o,i],[n])}}},Js=({builder:a,txBlock:e})=>({claimReferralRevenueQuick:async(t,s=[...a.constants.whitelist.lending])=>{let i=R(e),o=[];for(let r of s)if(r==="sui"){let n=await e.claimReferralRevenue(t,r);o.push(n);}else {let n=await e.claimReferralRevenue(t,r);try{let c=await a.suiKit.suiInteractor.selectCoins(i,1/0,a.utils.parseCoinType(r));e.mergeCoins(n,c.slice(0,500));}catch{}finally{o.push(n);}}o.length>0&&e.transferObjects(o,i);}}),ha=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Hs({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=Js({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var Zs=({builder:a,txBlock:e})=>{let t={loyaltyProgramPkgId:a.address.get("loyaltyProgram.id"),rewardPool:a.address.get("loyaltyProgram.rewardPool"),userRewardTableId:a.address.get("loyaltyProgram.userRewardTableId")};return {claimLoyaltyRevenue:s=>a.moveCall(e,`${t.loyaltyProgramPkgId}::reward_pool::redeem_reward`,[t.rewardPool,s])}},eo=({builder:a,txBlock:e})=>({claimLoyaltyRevenueQuick:async t=>{t=t??(await a.query.getVeScas())[0]?.keyObject;let s=R(e);if(!t)throw new Error(`No veScaKey found for user ${s}`);let i=e.claimLoyaltyRevenue(t),o=a.constants.coinTypes.sca;if(!o)throw new Error("Coin type sca not found");await a.utils.mergeSimilarCoins(e,i,o,R(e)),e.transferObjects([i],s);}}),Sa=(a,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Zs({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=eo({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var ao=({builder:a,txBlock:e})=>{let t={pkgId:a.address.get("scoin.id")};return {mintSCoin:(s,i)=>{let o=a.utils.parseSCoinType(s);if(!o)throw new Error(`Invalid marketCoinName name: ${s}`);return a.moveCall(e,`${t.pkgId}::s_coin_converter::mint_s_coin`,[a.utils.getSCoinTreasury(s),i],[o,a.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,i)=>{let o=a.utils.parseSCoinType(s);if(!o)throw new Error(`Invalid sCoin name: ${s}`);return a.moveCall(e,`${t.pkgId}::s_coin_converter::burn_s_coin`,[a.utils.getSCoinTreasury(s),i],[o,a.utils.parseUnderlyingSCoinType(s)])}}},so=({builder:a,txBlock:e})=>({mintSCoinQuick:async(t,s)=>{let i=R(e),{leftCoin:o,takeCoin:r}=await a.selectMarketCoin(e,t,s,i);return e.transferObjects([o],i),await e.mintSCoin(t,r)},burnSCoinQuick:async(t,s)=>{let i=R(e),{leftCoin:o,takeCoin:r}=await a.selectSCoin(e,t,s,i);return e.transferObjects([o],i),await e.burnSCoin(t,r)}}),Ta=(a,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=ao({builder:a,txBlock:t}),i=new Proxy(t,{get:(r,n)=>n in s?Reflect.get(s,n):Reflect.get(r,n)}),o=so({builder:a,txBlock:i});return new Proxy(i,{get:(r,n)=>n in o?Reflect.get(o,n):Reflect.get(r,n)})};var ka=(a,e)=>{let t=ya(a,e),s=Sa(a,t),i=fa(a,s),o=ha(a,i),r=Ta(a,o),n=pa(a,r),c=ca(a,n);return new Proxy(c,{get:(d,l)=>l in t?Reflect.get(t,l):l in i?Reflect.get(i,l):l in o?Reflect.get(o,l):l in n?Reflect.get(n,l):l in s?Reflect.get(s,l):l in r?Reflect.get(r,l):Reflect.get(d,l)})};var de=class{cache;params;_requestClient;constructor(e,t){this.params=e,this.cache=t?.cache??new K(this.params),this._requestClient=ja__default.default.create({baseURL:e.indexerApiUrl??nt,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:3e4});}async getMarket(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.api.getMarket(),queryFn:async()=>await this._requestClient.get("/api/market/migrate")});if(e.status===200)return {pools:e.data.pools.reduce((t,s)=>(t[s.coinName]=s,t),{}),collaterals:e.data.collaterals.reduce((t,s)=>(t[s.coinName]=s,t),{})};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:N.api.getSpools(),queryFn:async()=>await this._requestClient.get("/api/spools/migrate")});if(e.status===200)return e.data.spools.reduce((t,s)=>(t[s.marketCoinName]=s,t),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.api.getBorrowIncentivePool(),queryFn:async()=>await this._requestClient.get("/api/borrowIncentivePools/migrate")});if(e.status===200)return e.data.borrowIncentivePools.reduce((t,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((i,o)=>(i[o.coinName]=o,i),{})),t[s.coinName]=s,t),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.cache.queryClient.fetchQuery({queryKey:N.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((t,[s,i])=>(i&&(t[s]=i.coinPrice),t),{})}};var ie=class{params;suiKit;address;utils;constants;indexer;cache;walletAddress;constructor(e,t){this.params=e,this.suiKit=t?.suiKit??t?.utils?.suiKit??W(e),this.walletAddress=utils.normalizeSuiAddress(e.walletAddress??this.suiKit.currentAddress()),this.cache=t?.utils?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.utils?.address??new q(this.params,{cache:this.cache}),this.constants=t?.utils?.constants??new H(this.params,{address:this.address}),this.utils=t?.utils??new ae(this.params,{constants:this.constants}),this.indexer=t?.indexer??new de(this.params,{cache:this.cache}),this.queryMarket=$.call(this,this.queryMarket),this.getMarketPools=$.call(this,this.getMarketPools),this.getMarketPool=$.call(this,this.getMarketPool),this.getMarketCollaterals=$.call(this,this.getMarketCollaterals),this.getMarketCollateral=$.call(this,this.getMarketCollateral),this.getSpools=$.call(this,this.getSpools),this.getSpool=$.call(this,this.getSpool),this.getBorrowIncentivePools=$.call(this,this.getBorrowIncentivePools),this.getLendings=$.call(this,this.getLendings),this.getLending=$.call(this,this.getLending),this.getObligationAccounts=$.call(this,this.getObligationAccounts),this.getObligationAccount=$.call(this,this.getObligationAccount),this.getTvl=$.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 Bt(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],t){return await Dt(this,e,t?.indexer,t?.coinPrices)}async getMarketPool(e,t){return (await this.getMarketPools(void 0,t)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],t){return await Ft(this,e,t?.indexer)}async getMarketCollateral(e,t){return await Ge(this,e,t?.indexer)}async getObligations(e=this.walletAddress){return await le(this,e)}async queryObligation(e){return Ie(this,e)}async getCoinAmounts(e,t=this.walletAddress){return await Kt(this,e,t)}async getCoinAmount(e,t=this.walletAddress){return await Ye(this,e,t)}async getMarketCoinAmounts(e,t=this.walletAddress){return await Lt(this,e,t)}async getMarketCoinAmount(e,t=this.walletAddress){return await He(this,e,t)}async getPriceFromPyth(e){return await Xe(this,e)}async getPricesFromPyth(e){return await _e(this,e)}async getSpools(e,t){return await Zt(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getSpool(e,t){return (await this.getSpools(void 0,t))[e]}async getAllStakeAccounts(e=this.walletAddress){return await ge(this,e)}async getStakeAccounts(e,t=this.walletAddress){return (await this.getAllStakeAccounts(t))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let t={};for(let s of e){let i=await tt(this,s);i&&(t[s]=i);}return t}async getStakePool(e){return await tt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let t={};return await Promise.allSettled(e.map(async s=>{let i=await at(this,s);i&&(t[s]=i);})),t}async getStakeRewardPool(e){return await at(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],t){return await Pt(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getBorrowIncentiveAccounts(e,t){return await xt(this,e,t)}async getLendings(e,t=this.walletAddress,s){return await Qt(this,e,t,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,t=this.walletAddress,s){return await Je(this,e,t,s?.indexer)}async getObligationAccounts(e=this.walletAddress,t){return await Wt(this,e,t?.market,t?.coinPrices,t?.indexer)}async getObligationAccount(e,t=this.walletAddress,s){let i=await this.getObligationAccounts(t,s);return Object.values(i).find(o=>o?.obligationId===e)}async getTvl(e){return await qt(this,e?.indexer)}async getVeSca(e){return await he(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:t=!1}={}){return await Ne(this,e,t)}async getVeScaTreasuryInfo(){return await ta(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await zt(this.address,e)}async getBindedObligationId(e){return await Ot(this,e)}async getBindedVeScaKey(e){return await Rt(this,e)}async getLoyaltyProgramInfos(e){return await Ut(this,e)}async getSCoinTotalSupply(e){return await Yt(this,e)}async getSCoinAmounts(e,t=this.walletAddress){return await Ht(this,e,t)}async getSCoinAmount(e,t=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await et(this,s,t):0}async getSCoinSwapRate(e,t){return await Jt(this,e,t)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await Et(this,e)}async getPoolSupplyLimit(e){return await Oe(this.utils,e)}async getPoolBorrowLimit(e){return await Re(this.utils,e)}async getIsolatedAssets(){return await _t(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 Gt(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return aa(e)}async getUserPortfolio(e){return $t(this,e?.walletAddress??this.walletAddress,e?.indexer??!1)}async getPriceUpdatePolicies(){return await ia(this.address)}async getAssetOracles(){let[e,t]=await Promise.all([st(this.utils,"primary"),st(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,i)=>(s[i]={primary:e?.[i]??[],secondary:t?.[i]??[]},s),{})}};var ue=class{params;isTestnet;suiKit;address;constants;query;utils;walletAddress;cache;constructor(e,t){this.suiKit=t?.suiKit??W(e),this.params=e,this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=t?.query?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.query?.address??new q(this.params,{cache:this.cache}),this.constants=t?.query?.constants??new H(this.params,{address:this.address}),this.utils=t?.query?.utils??new ae(this.params,{constants:this.constants}),this.query=t?.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 ka(this,e)}async selectCoin(e,t,s,i=this.walletAddress){if(t==="sui"){let[o]=e.splitSUIFromGas([s]);return {takeCoin:o}}else {let o=this.utils.parseCoinType(t),r=await this.utils.selectCoins(s,o,i),[n,c]=e.takeAmountFromCoins(r,s);return {takeCoin:n,leftCoin:c}}}async selectMarketCoin(e,t,s,i=this.walletAddress){let o=this.utils.parseMarketCoinType(t),r=await this.utils.selectCoins(s,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(s,n));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoin(e,t,s,i=this.walletAddress){let o=this.utils.parseSCoinType(t),r=await this.utils.selectCoins(s,o,i),n=r.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(r,Math.min(n,s));return {takeCoin:c,leftCoin:d,totalAmount:n}}async signAndSendTxBlock(e){return await this.suiKit.signAndSendTxn(e)}moveCall(e,t,s,i){return e.moveCall(t,s,i)}};var Fe=class{params;suiKit;address;constants;builder;query;utils;cache;walletAddress;constructor(e,t){this.params=e,this.suiKit=t?.suiKit??t?.builder?.suiKit??W(e),this.walletAddress=utils.normalizeSuiAddress(e?.walletAddress??this.suiKit.currentAddress()),this.cache=t?.builder?.cache??t?.cache??new K(this.params,{suiKit:this.suiKit}),this.address=t?.builder?.address??new q(this.params,{cache:this.cache}),this.constants=t?.builder?.constants??new H(this.params,{address:this.address}),this.utils=t?.builder?.utils??new ae(this.params,{constants:this.constants}),this.query=t?.builder?.query??new ie(this.params,{utils:this.utils}),this.builder=t?.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 t=e??this.walletAddress;return await this.query.getObligations(t)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let t=e??this.walletAddress;return await this.query.getAllStakeAccounts(t)}async getStakeAccounts(e,t){let s=t??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 t=this.builder.createTxBlock();return t.openObligationEntry(),e?await this.suiKit.signAndSendTxn(t):t.txBlock}async depositCollateral(e,t,s=!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(t,e,d);else {let[l,u,f]=r.openObligation();await r.addCollateralQuick(t,e,l),r.returnObligation(l,f),r.transferObjects([u],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdrawCollateral(e,t,s=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=await n.takeCollateralQuick(t,e,i,o);return n.transferObjects([d],c),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async deposit(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.depositQuick(t,e);return o.transferObjects([n],r),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async depositAndStake(e,t,s=!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(t,e,!1);if(l)await r.stakeQuick(u,c,l);else {let f=r.createStakeAccount(c);await r.stakeQuick(u,c,f),r.transferObjects([f],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async withdraw(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.withdrawQuick(t,e);return o.transferObjects([n],r),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async borrow(e,t,s=!0,i,o,r){let n=this.builder.createTxBlock(),c=r??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);s&&d&&await n.unstakeObligationQuick(i,o);let l=await n.borrowQuick(t,e,i,o);return n.transferObjects([l],c),s&&d&&await n.stakeObligationWithVeScaQuick(i,o),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async repay(e,t,s=!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 s&&d&&await n.unstakeObligationQuick(i,o),await n.repayQuick(t,e,i),s&&d&&await n.stakeObligationWithVeScaQuick(i,o),s?await this.suiKit.signAndSendTxn(n):n.txBlock}async flashLoan(e,t,s,i=!0,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let[c,d]=r.borrowFlashLoan(t,e);return r.repayFlashLoan(await s(r,c),d,e),i?await this.suiKit.signAndSendTxn(r):r.txBlock}async createStakeAccount(e,t=!0,s){let i=this.builder.createTxBlock(),o=s??this.walletAddress;i.setSender(o);let r=i.createStakeAccount(e);return i.transferObjects([r],o),t?await this.suiKit.signAndSendTxn(i):i.txBlock}async stake(e,t,s=!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(t,e,d);else {let l=r.createStakeAccount(e);await r.stakeQuick(t,e,l),r.transferObjects([l],n);}return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstake(e,t,s=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(t,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,R(r));}return r.transferObjects([c],n),s?await this.suiKit.signAndSendTxn(r):r.txBlock}async unstakeAndWithdraw(e,t,s=!0,i,o){let r=this.builder.createTxBlock(),n=o??this.walletAddress;r.setSender(n);let c=await r.unstakeQuick(t,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),R(r)),r.transferObjects([l],n);}else throw new Error(`No stake found for ${e}`);return s?await this.suiKit.signAndSendTxn(r):r.txBlock}async claim(e,t=!0,s,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;o.setSender(r);let n=await o.claimQuick(e,s);return o.transferObjects(n,r),t?await this.suiKit.signAndSendTxn(o):o.txBlock}async stakeObligation(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.stakeObligationWithVeScaQuick(e,t),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async unstakeObligation(e,t,s=!0,i){let o=this.builder.createTxBlock(),r=i??this.walletAddress;return o.setSender(r),await o.unstakeObligationQuick(e,t),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async claimBorrowIncentive(e,t,s=!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,t);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),s?await this.suiKit.signAndSendTxn(o):o.txBlock}async migrateAllMarketCoin(e=!0,t=!0){let s=this.builder.createTxBlock();s.setSender(this.walletAddress);let i=[];return await Promise.all([...this.constants.whitelist.scoin].map(async o=>{let r=[],n;try{let c=await this.utils.selectCoins(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(o),this.walletAddress);n=c[0],c.length>1&&s.mergeCoins(n,c.slice(1));}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(n){let c=s.mintSCoin(o,n),d=this.utils.parseSCoinType(o);if(!d)throw new Error("Invalid sCoin type");await this.utils.mergeSimilarCoins(s,c,d,R(s)),r.push(c);}if(e&&this.constants.whitelist.spool.has(o))try{let c=await s.unstakeQuick(Number.MAX_SAFE_INTEGER,o);c&&r.push(c);}catch{}if(r.length>0){let c=r[0];r.length>1&&s.mergeCoins(c,r.slice(1)),i.push(c);}})),i.length>0&&s.transferObjects(i,this.walletAddress),t?await this.suiKit.signAndSendTxn(s):s.txBlock}async claimAllUnlockedSca(e=!0){let t=(await this.query.getVeScas({walletAddress:this.walletAddress})??[]).map(({keyObject:o})=>o);if(t.length===0)throw new Error("No veSCA found in the wallet");let s=[],i=this.builder.createTxBlock();if(i.setSender(this.walletAddress),await Promise.all(t.map(async o=>{try{let r=await i.redeemScaQuick(o,!1);if(!r)return;s.push(r);}catch{}})),s.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return s.length>1&&i.mergeCoins(s[0],s.slice(1)),await this.utils.mergeSimilarCoins(i,s[0],"sca",this.walletAddress),e?await this.suiKit.signAndSendTxn(i):{tx:i.txBlock,scaCoin:s[0]}}async mintTestCoin(e,t,s=!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,t]);return r.transferObjects([u],n),s?await this.suiKit.signAndSendTxn(r):r.txBlock}};var Aa=class{params;suiKit;cache;address;constants;constructor(e,t,s){this.params=e,this.suiKit=W(e),this.cache=new K({...this.params,cacheOptions:t},{suiKit:this.suiKit,queryClient:s}),this.address=new q(e,{cache:this.cache}),this.constants=new H(e,{address:this.address});}async initConstants(e){this.constants.isInitialized||await this.constants.init(e);}async getScallopAddress(e){return await this.address.read(e),this.address}async createScallopBuilder(e){await this.initConstants(e);let t={...this.params,...e};return new ue(t,{query:await this.createScallopQuery(t)})}async createScallopClient(e){await this.initConstants(e);let t={...this.params,...e};return new Fe(t,{builder:await this.createScallopBuilder(t)})}async createScallopQuery(e){await this.initConstants(e);let t={...this.params,...e};return new ie(t,{utils:await this.createScallopUtils(t)})}async createScallopIndexer(){return new de(this.params,{cache:this.cache})}async createScallopUtils(e){return await this.initConstants(e),new ae({...this.params,...e},{constants:this.constants,suiKit:this.suiKit})}};
22
22
 
23
23
  exports.API_BASE_URL = rt;
24
24
  exports.DEFAULT_CACHE_OPTIONS = it;