@scallop-io/sui-scallop-sdk 2.3.0-lst-x-oracle-alpha.8 → 2.3.0-lst-x-oracle-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +37 -4
- package/dist/index.d.ts +37 -4
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +3 -1
- package/src/builders/oracles/error.ts +1 -12
- package/src/builders/oracles/oraclePackageRegistry.ts +46 -32
- package/src/builders/oracles/xOracleUpdateStrategy.ts +46 -10
- package/src/builders/oracles/xOracleUpdater.ts +15 -22
- package/src/builders/sCoinBuilder.ts +0 -4
- package/src/constants/testAddress.ts +88 -4
- package/src/constants/xoracle.ts +1 -1
- package/src/models/scallopAddress.ts +8 -0
- package/src/types/address.ts +21 -8
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var client=require('@mysten/sui/client'),transactions=require('@mysten/sui/transactions'),utils=require('@mysten/sui/utils'),suiKit=require('@scallop-io/sui-kit'),S=require('bignumber.js'),zod=require('zod'),pythSuiJs=require('@pythnetwork/pyth-sui-js'),bcs=require('@mysten/sui/bcs'),Us=require('assert'),oo=require('axios'),queryCore=require('@tanstack/query-core');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var Us__default=/*#__PURE__*/_interopDefault(Us);var oo__default=/*#__PURE__*/_interopDefault(oo);var Lt="https://sui.apis.scallop.io",Et="https://sdk.api.scallop.io";var Ut={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var Fo=false,Do=false,Ce="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",He="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var N={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:t=>["rpc","getInspectTxn",t],getObject:t=>["rpc","getObject",t],getObjects:t=>["rpc","getObjects",t],getOwnedObjects:t=>["rpc","getOwnedObjects",{...t,filter:JSON.stringify(t?.filter??void 0)}],getDynamicFields:t=>["rpc","getDynamicFields",t],getDynamicFieldObject:t=>["rpc","getDynamicFieldObject",t],getTotalVeScaTreasuryAmount:t=>["rpc","getTotalVeScaTreasuryAmount",{...t,refreshArgs:t?.refreshArgs?JSON.stringify(t?.refreshArgs):void 0,vescaAmountArgs:t?.vescaAmountArgs?JSON.stringify(t?.vescaAmountArgs):void 0}],getAllCoinBalances:t=>["rpc","getAllCoinBalances",t],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var Ye=[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 Vo={core:{version:"0xee15d07800e2ad4852505c57cd86afea774af02c17388f8bd907de75f915b4f4",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",market:"0xa7f41efe3b551c20ad6d6cea6ccd0fd68d2e2eaaacdca5e62d956209f6a51312",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0xb7d7e1464936fbdcdd4913308b40335e662401029635289bdb317c7dde9d6c68",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"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:"17cd845b16e874485b2684f8b8d1517d744105dbb904eec30222717f4bc9ee0d",feedObject:"0xd779885c5246357e24cbde7348f2d81f756d9650975c02d81346b15d8b557ebf"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"0x54e81607d636c3520a697b803a99a167fce7ccdf1bad7d210e2941d264515351",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryCap:"",registryTableId:"",state:""},pyth:{registry:"0xdcf813893649521abd27816ba8d946b0cb7fc98d776cc9adcecba54688ccc109",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c",lst:{afsui:{safeId:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",stakedSuiVaultId:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",configId:"0x67103edaadcd38b76f5df76d99adcad989260a5f16bfd411a67efbf858b2f7a2"}}}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x3a0dbce719fc56a96bf8e8dd53cd57eb9c313642a88d99b86f51208762eba258",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",upgradeCap:""},pyth:{id:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",object:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7",lst:{afsui:{id:"0xd45b20f4bbc7ab4b2b3874a4fa38aa440505d8010bba052df914892537e6b418",object:"0xd45b20f4bbc7ab4b2b3874a4fa38aa440505d8010bba052df914892537e6b418"}}},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",object:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:""}}},spool:{id:"0x472fc7d4c3534a8ec8c2f5d7a557a43050eab057aaab853e8910968ddc84fc9f",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{sweth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"},swusdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},swusdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},config:""},borrowIncentive:{id:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",query:"0xdbc22fe051d384691634cd3b9fe473b09723084a1e4c128728c42e2de3b2228f",incentivePools:"0xd214b7055554dd65f27a2c74366377dde63e66c498508ef3fc9f7d76a32b4465",incentiveAccounts:"0x717cd4d3e78e8c45f7570c0857f696f8c7a68248218a258aa49bff99b3ff7175",config:"0xe5fec608d3a30a1f75b24d2c67d227524075aa6f5ee22e5eccedacd9145b1d9d"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x5477d43c9f75faea312c0f02dd48b4e03d9cbf2b1a5436ddffb5edefbea18ff2",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0xe9fa5d464d28fe30ad060ea32af577c68c9e82aca48ad1f10f13f35338472778",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x709ce9b97a63c6815c385ffd31c354dcd8f760984610581be23b838af4c6f60b",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"},veScaLoyaltyProgram:{id:"0x120dd97cb2be154d3c0e65e697594bf9cd4a7ce36f0eea0f1d70601f4a0b83eb",object:"0x120dd97cb2be154d3c0e65e697594bf9cd4a7ce36f0eea0f1d70601f4a0b83eb",adminCap:"0x9877e840e32705b80cb375115d5ff9dcd58f0c68204b7e15aa431b8cb547aaca",veScaRewardPool:"0x1b4f09e30dbb6e1442f6710c52568295d120cc4ff2ae02449a11070b3faf2c86",veScaRewardTableId:"0xb63dc27b258ae4066544f58a987931a5a2f78ebe872319381b62eb65c3ac5560"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09",metaData:"0xfc9f2b2aa98be8d2dc95603cd531bdb38bcb894c82929d435d84a1985282e838",symbol:"sSUI"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199",metaData:"0xf1bf00be79b48c064f99fa5d1d4389e44776a269888b57b2f9a923080882ea73",symbol:"sSCA"},safsui:{coinType:"0xe66ae8fd59e37f78e355dafb130b7c167ca4ec8792a424031a1a1eac96244ada::scallop_af_sui::SCALLOP_AF_SUI",treasury:"0xc57357a64593aa54bc23d7936129119b86876a200107481578f304762217061a",metaData:"0x42179b69f82ea26e3763345ee0fb1cea8b1bd355168b3241ceb727ec82bb0688",symbol:"safSUI"},susdc:{coinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",treasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",metaData:"0xad94e42c05ab0eb54c9d9a1bcf3689bcd330710d6b300956213aa35387b727c9",symbol:"sUSDC"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba",metaData:"0x63e749a506bbae17ca63fd41a270e2b9b0a08dade1964bfa620ecba94c8be4f9",symbol:"sDEEP"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d",metaData:"0x0cd9fb845663dd5e1f7c48a321ab1c523a54c70243711a5a115523945396e54f",symbol:"sFUD"}}}},qo={lending:new Set(["usdc","sui","afsui","sca","fud","deep"]),collateral:new Set(["usdc","sui","afsui","sca","deep"]),borrowing:new Set(["usdc","sui","afsui","sca","fud","deep"]),packages:new Set(["coinDecimalsRegistry","math","whitelist","x","protocol","protocolWhitelist","query","supra","pyth","switchboard","xOracle","testCoin"]),spool:new Set(["susdc","ssui"]),scoin:new Set(["susdc","ssui","safsui","ssca","sdeep","sfud"]),suiBridge:new Set(["sbeth","sbusdt","sbwbtc"]),wormhole:new Set(["wusdc","wusdt","weth","wbtc","wapt","wsol"]),oracles:new Set(["pyth","supra","switchboard"]),pythEndpoints:new Set(["https://hermes.pyth.network"]),deprecated:new Set(["wapt","wusdc","wusdt","weth","wbtc"]),borrowIncentiveRewards:new Set(["mpoints"]),rewardsAsPoint:new Set(["mpoints"]),emerging:new Set(["wal","deep","sca","cetus"])},Qo={usdc:{coinName:"usdc",symbol:"USDC",lendingPoolAddress:"0x13319d295914b390b22484373f20f822bca10314c34c227ae6e28df3d9aa8e01",collateralPoolAddress:"0x2fdcf63682577f6bfdd4296500067543ba9877d5d5e41ebd9e51b97ab071ce69",borrowDynamic:"0x7fd0660f0102789ad039542165c6cbc2d90ba3c1d9dbd4ac4ae8804d80817542",interestModel:"0xd4e7b06a79f63706523167f055296db641b0f8ddd6734c05e205f2de0fcefdd0",riskModel:"0x19e5993350186f192ffeb2cba0650b04c291390e149c8ac9b324ecf394daaa1a",borrowFeeKey:"",supplyLimitKey:"0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",borrowLimitKey:"0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",isolatedAssetKey:"",isIsolated:false,spool:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",spoolReward:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",sCoinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",sCoinTreasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",sCoinMetadataId:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2",sCoinSymbol:"sUSDC",sCoinName:"susdc",coinMetadataId:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",spoolName:"susdc",decimals:6,pythFeed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",pythFeedObjectId:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab",flashloanFeeObject:"0x289c770f54b26a4175d57cc6061e3d05f96e52d352cb7c0a51e2e3bacb2aee30"},sui:{coinName:"sui",symbol:"SUI",lendingPoolAddress:"0xeb86ad67543c1ac2c4cbaf178d38a45ab27c2e69d60f0f8badd83f563f012c3c",collateralPoolAddress:"0xcba7bb07d4d3ce01d81e71d9def680aa8b417347bfd7834aee8fc3b85b61c9a1",borrowDynamic:"0xd47c2fd3dbb95ed06e5da92f6b99611ba94a36efa6a13d9b33b02519761cc84e",interestModel:"0x4742bb49aa49ab4e5d9dfa119cddc027d1b7811ac42ca1ce794818d4a4da68e7",riskModel:"0x6dc356e829cfca2d79f0d68a79b5ddd5296ad0c955a38e2fc397485e2b629367",borrowFeeKey:"",supplyLimitKey:"0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",borrowLimitKey:"0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",isolatedAssetKey:"",isIsolated:false,spool:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",spoolReward:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a",sCoinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",sCoinTreasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09",sCoinMetadataId:"",sCoinSymbol:"sSUI",sCoinName:"ssui",coinMetadataId:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",spoolName:"ssui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0x27614284a8f0a699ffd35aae8f2572c937ec76771cb21b0d7930ec4491a76ed4"},sca:{coinName:"sca",symbol:"SCA",lendingPoolAddress:"0xd08ef85bc753616ce0f1e3ac01bbc8bd1ee53e03b1e82aaa9690db5cd285ef4c",collateralPoolAddress:"0x4f59b8ef2cdd195830890cf0c01e29c159e48a6a6c766c64fd4b26cfa9ee58c6",borrowDynamic:"0x7f6e11fbd32b5d0223f03bfda67a5b48c551a09cfff88edc187591f9a4b0ab10",interestModel:"0xcb10daf0fee6f416463444f5b47aac0f0197a889bc60be2c4f90916f6a8d2faa",riskModel:"0x043f21a35bd1e1060a7c579db46e10cfd039d0b75d6bfd758de97b60434ae708",borrowFeeKey:"",supplyLimitKey:"0x8dd938856b972a10ea27ecab2af7ed78e48fc5f6ccedaf2b2119959f747dc2e3",borrowLimitKey:"0x04c7de61c5b42972f9bf6a8b1848e5fea2d037ee8deba81741ecd4a70aa80d30",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",sCoinTreasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199",sCoinMetadataId:"",sCoinSymbol:"sSCA",sCoinName:"ssca",coinMetadataId:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",spoolName:"ssca",decimals:9,pythFeed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",pythFeedObjectId:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985",flashloanFeeObject:"0xe04e46471754b6f48d81c549ecfec09de02733715a63bec02364c6ac7c4dd2dc"},fud:{coinName:"fud",symbol:"FUD",lendingPoolAddress:"0xc8a078d15ee7bbff49a14835f36951833d2d55c91ffd2972251dadbff8045ca8",collateralPoolAddress:"",borrowDynamic:"0x345a2fa0fe5d5d704fd8ad609a9b7529f22e3cda738ad26756ad2a85e5d43777",interestModel:"0xc84a22d8bca58e5f05673d1de2a7406b1b7bc9dcd15fd848ba6555c7ecab9d83",borrowFeeKey:"",supplyLimitKey:"0xf98419aecc37a3c5de716f8ec590f8991a5be34da72ce1a2da09531ff45adf7d",borrowLimitKey:"0x3d928a001c453c50004baa54e14b0a0e1b0907d9c613dfd76064fd7ed4e8beb8",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",sCoinTreasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d",sCoinMetadataId:"",sCoinSymbol:"sFUD",sCoinName:"sfud",coinMetadataId:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",spoolName:"sfud",decimals:5,pythFeed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",pythFeedObjectId:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2",flashloanFeeObject:"0x1ddda368a5f37d7b8c53879cb333ccfd520fc4a3e2fc98b9b5fdacd1a5945d5a"},deep:{coinName:"deep",symbol:"DEEP",lendingPoolAddress:"0xfb8e4f68c9b14034da7f1f4703013dda69ebbb4578f835825bcf92ab89c3b5ae",collateralPoolAddress:"",borrowDynamic:"0xbf983b12a8707b174c0b037096ba2fbf1b30e6efb9cce14fc35207de0a696f79",interestModel:"0xb7f04cd3aaaefe671a79f9aed8646ae085a7e6812c1604044977c9355e0769c8",borrowFeeKey:"",supplyLimitKey:"0x599528fdfdc253e90dfd0acf4f4a166b391e2aac1ca6528abbff63225b548fee",borrowLimitKey:"0xf4217e8ef9d9c32e8992092e910a77535a8124c19b8a762a673f227f5f765a4e",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",sCoinTreasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba",sCoinMetadataId:"",sCoinSymbol:"sDEEP",sCoinName:"sdeep",coinMetadataId:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",spoolName:"sdeep",decimals:6,pythFeed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",pythFeedObjectId:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed",flashloanFeeObject:"0xd54dfb677e9e011e2451375a7a2e318b4f2225c2a0b369bde0afcef8cbb1a863"},afsui:{coinName:"afsui",symbol:"afSUI",lendingPoolAddress:"0x8eb75cd4c5050c4c9950f11694bb32b644706d24b9129981df3b52d2080ad45d",collateralPoolAddress:"0x48c5455eb1a9f1422c617a89a41927e166cfb49b829100980d4369f9f079d75c",borrowDynamic:"0x8f5d749372526ef651b6ba6ffede9bf17b8a96f90cda2a64893366a1d5c89491",interestModel:"0x9e82e24542804156386df51ddce8399fca0981a77e710542847f981febf231e9",riskModel:"0xfe1b5c5a883d8693effb11b35965538f9777e3c3d89298db2b57252916df14bd",borrowFeeKey:"0xabc6422db2d4ee01635ddaeaa44ba68370eebd785d2c4632515f841ae9bc47d9",supplyLimitKey:"0x61a2054eb37f543c0d774da57f2c9542aad8d79a197f748ac08ef5df6cc47028",borrowLimitKey:"0x4459498a043872cd107ea917493fee0baf2d37a273c7538e1d6581cc61b92af8",isolatedAssetKey:"",isIsolated:false,spool:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",spoolReward:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e",sCoinType:"0xe66ae8fd59e37f78e355dafb130b7c167ca4ec8792a424031a1a1eac96244ada::scallop_af_sui::SCALLOP_AF_SUI",sCoinTreasury:"0xc57357a64593aa54bc23d7936129119b86876a200107481578f304762217061a",sCoinMetadataId:"0x42179b69f82ea26e3763345ee0fb1cea8b1bd355168b3241ceb727ec82bb0688",sCoinSymbol:"safSUI",sCoinName:"safsui",coinMetadataId:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",coinType:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",spoolName:"safsui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0xac87fde83d434554ec300c1334c9a622aa5b59e82a04334dc99e1cc1f75d4eae"}};var Z=86400,ce=1460,$=126144e3,Je=1e10,Ze=1e9;var Go=["supra","switchboard","pyth"],Xo=["primary","secondary"],zo=["pyth"],Vt=["afsui"],qt={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 et=t=>({coinType:utils.normalizeStructTag(t.type.name),maxBorrowRate:Number(t.maxBorrowRate.value)/2**32,borrowRate:Number(t.interestRate.value)/2**32,borrowRateScale:Number(t.interestRateScale),borrowIndex:Number(t.borrowIndex),lastUpdated:Number(t.lastUpdated),cashAmount:Number(t.cash),debtAmount:Number(t.debt),marketCoinSupplyAmount:Number(t.marketCoinSupply),reserveAmount:Number(t.reserve),reserveFactor:Number(t.reserveFactor.value)/2**32,borrowWeight:Number(t.borrowWeight.value)/2**32,borrowFee:Number(t.borrowFeeRate.value)/2**32,baseBorrowRate:Number(t.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(t.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(t.borrowRateOnMidKink.value)/2**32,highKink:Number(t.highKink.value)/2**32,midKink:Number(t.midKink.value)/2**32,minBorrowAmount:Number(t.minBorrowAmount),isIsolated:t.isIsolated,supplyLimit:Number(t.supplyLimit),borrowLimit:Number(t.borrowLimit)}),tt=(t,e)=>{let a=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(a);if(s===void 0)throw new Error(`Coin decimal not found for ${a}`);let o=24*365*3600,r=e.baseBorrowRate*o/e.borrowRateScale,i=e.borrowRateOnHighKink*o/e.borrowRateScale,n=e.borrowRateOnMidKink*o/e.borrowRateScale,c=e.maxBorrowRate*o/e.borrowRateScale,d=e.borrowRate*o/e.borrowRateScale,l=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=S__default.default(e.borrowIndex).multipliedBy(S__default.default(l).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=S__default.default(e.borrowIndex).plus(u),b=S__default.default(p).dividedBy(e.borrowIndex).minus(1),m=S__default.default(e.debtAmount).multipliedBy(b),y=m.plus(e.debtAmount),f=y.shiftedBy(-1*s),g=S__default.default(e.reserveAmount).plus(m.multipliedBy(e.reserveFactor)),h=g.shiftedBy(-1*s),C=S__default.default(y).plus(Math.max(e.cashAmount-g.toNumber(),0)),P=C.shiftedBy(-1*s),D=S__default.default(y).dividedBy(C);D=D.isFinite()?D:S__default.default(0);let k=S__default.default(d).multipliedBy(D).multipliedBy(1-e.reserveFactor);k=k.isFinite()?k:S__default.default(0);let R=C.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:S__default.default(1),{baseBorrowApr:r,baseBorrowApy:t.parseAprToApy(r),borrowAprOnHighKink:i,borrowApyOnHighKink:t.parseAprToApy(i),borrowAprOnMidKink:n,borrowApyOnMidKink:t.parseAprToApy(n),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(t.parseAprToApy(d),t.parseAprToApy(c)),borrowIndex:p.toNumber(),growthInterest:b.toNumber(),supplyAmount:C.toNumber(),supplyCoin:P.toNumber(),borrowAmount:y.toNumber(),borrowCoin:f.toNumber(),reserveAmount:g.toNumber(),reserveCoin:h.toNumber(),utilizationRate:D.toNumber(),supplyApr:k.toNumber(),supplyApy:t.parseAprToApy(k.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:S__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:S__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},Te=t=>({coinType:utils.normalizeStructTag(t.type.name),isIsolated:t.isIsolated,collateralFactor:Number(t.collateralFactor.value)/4294967296,liquidationFactor:Number(t.liquidationFactor.value)/4294967296,liquidationDiscount:Number(t.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(t.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(t.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(t.maxCollateralAmount),totalCollateralAmount:Number(t.totalCollateralAmount)}),Pe=(t,e)=>{let a=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(a);if(s===void 0)throw new Error(`Coin decimal not found for ${a}`);let o=S__default.default(e.maxCollateralAmount).shiftedBy(-1*s),r=S__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:o.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:r.toNumber()}},Qt=t=>({stakeType:utils.normalizeStructTag(t.stakeType.fields.name),maxPoint:Number(t.maxDistributedPoint),distributedPoint:Number(t.distributedPoint),pointPerPeriod:Number(t.distributedPointPerPeriod),period:Number(t.pointDistributionTime),maxStake:Number(t.maxStake),staked:Number(t.stakes),index:Number(t.index),createdAt:Number(t.createdAt),lastUpdate:Number(t.lastUpdate)}),$t=(t,e,a)=>{let o=S__default.default(t.pointPerPeriod).dividedBy(t.period),r=S__default.default(t.pointPerPeriod).dividedBy(t.period),i=r.gt(0)?S__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(r):S__default.default(0),n=t.createdAt,c=i.plus(t.lastUpdate).integerValue().toNumber(),d=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),l=S__default.default(t.maxPoint).minus(t.distributedPoint),u=S__default.default.minimum(S__default.default(d).multipliedBy(t.pointPerPeriod),l),p=S__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?S__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),b=S__default.default(t.distributedPoint).plus(u),m=S__default.default(t.staked),y=m.shiftedBy(-1*a),f=y.multipliedBy(e);return {distributedPointPerSec:o.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:b.toNumber(),startDate:new Date(n*1e3),endDate:new Date(c*1e3),stakedAmount:m.toNumber(),stakedCoin:y.toNumber(),stakedValue:f.toNumber()}},Wt=t=>({claimedRewards:Number(t.claimed_rewards),exchangeRateDenominator:Number(t.exchange_rate_denominator),exchangeRateNumerator:Number(t.exchange_rate_numerator),rewards:Number(t.rewards),spoolId:String(t.spool_id)}),Gt=(t,e,a,s,o)=>{let i=S__default.default(a.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),n=S__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=n.shiftedBy(-1*o),d=c.multipliedBy(s),l=S__default.default(e.rewards),u=l.shiftedBy(-1*o),p=u.multipliedBy(s),b=S__default.default(e.claimedRewards),m=b.shiftedBy(-1*o),y=m.multipliedBy(s),f=S__default.default(i).shiftedBy(-1*o).multipliedBy(31536e3).multipliedBy(s),g=f.dividedBy(a.stakedValue).isFinite()?f.dividedBy(a.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(g=1/0),{rewardApr:g,totalRewardAmount:n.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:p.toNumber(),claimedRewardAmount:b.toNumber(),claimedRewardCoin:m.toNumber(),claimedRewardValue:y.toNumber(),rewardPerSec:i.toNumber()}},ls=t=>({pointType:utils.normalizeStructTag(t.point_type.name),distributedPointPerPeriod:Number(t.distributed_point_per_period),period:Number(t.point_distribution_time),distributedPoint:Number(t.distributed_point),points:Number(t.points),index:Number(t.index),baseWeight:Number(t.base_weight),weightedAmount:Number(t.weighted_amount),lastUpdate:Number(t.last_update),createdAt:Number(t.created_at)}),Xt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((a,s)=>{let o=ls(s),r=t.parseCoinNameFromType(o.pointType);return a[r]=o,a},{})}),zt=(t,e,a,s,o)=>{let i=S__default.default(t.distributedPointPerPeriod).dividedBy(t.period),n=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=S__default.default.minimum(S__default.default(n).multipliedBy(t.distributedPointPerPeriod),S__default.default(t.points)),d=S__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?S__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),l=S__default.default(t.distributedPoint).plus(c),u=S__default.default(t.baseWeight),p=S__default.default(t.weightedAmount),b=p.shiftedBy(-1*o),m=b.multipliedBy(s),y=365*24*60*60,f=S__default.default(i).shiftedBy(-1*a),g=S__default.default(f).multipliedBy(y).multipliedBy(e),h=S__default.default(1e12),C=g.multipliedBy(S__default.default(t.baseWeight).dividedBy(h)).dividedBy(m).isFinite()&&t.points>0?g.multipliedBy(S__default.default(t.baseWeight).dividedBy(h)).dividedBy(m).toNumber():1/0;return {distributedPointPerSec:i.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:b.toNumber(),weightedStakedValue:m.toNumber(),rewardApr:C,rewardPerSec:f.toNumber()}},ds=t=>({pointType:utils.normalizeStructTag(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),Ht=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((a,s)=>{let o=ds(s),r=t.parseCoinNameFromType(o.pointType);return a[r]=o,a},{})}),le=(...t)=>S__default.default(t.reduce((e,a)=>new S__default.default(a).lt(e)?a:e));var xe=(t,e,a)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),o=Math.max(Math.floor((s-1)/e),1)+1,r=Math.pow(10,-o);return r=a==="increase"?1-r:1+r,r},W=t=>{if(!(t&&t.content&&"fields"in t.content))throw new Error(`Failed to parse object ${t}`);let e=t.content.fields;if(typeof e=="object"&&"value"in e){let a=e.value;return typeof a=="object"&&"fields"in a?a.fields:a}else if(typeof e=="object")return e;return e};var us=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),ps="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Ae=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:ps,value:a}}),r=us.safeParse(o?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getSupplyLimit for ${e}: ${a.message}`),"0"}};var fs=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()})}),Yt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",Jt=async(t,e=false)=>{if(!e)return t.utils.getSupportedPoolAddresses().filter(a=>!!a.isolatedAssetKey).map(a=>a.coinName);try{let a=t.address.get("core.market"),s=[];if(!a)return s;let o=!1,r=null,i=n=>n.name.type===Yt;do{let n=await t.scallopSuiKit.queryGetDynamicFields({parentId:a,cursor:r,limit:10});if(!n)break;let c=n.data.filter(i).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),n&&n.hasNextPage&&n.nextCursor?(o=!0,r=n.nextCursor):o=!1;}while(o);return s}catch(a){return console.error(a),[]}},se=async(t,e)=>{let a=t.constants.poolAddresses[e];if(a)return a.isIsolated;let s=t.address.get("core.market"),o=t.queryClient.getQueryData(["getDynamicFields",s]);if(o){let c=t.parseCoinType(e);return o.includes(c)}let r=t.parseCoinType(e).slice(2),i=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Yt,value:r}}),n=fs.safeParse(i?.data?.content);return n.success?n.data.fields.value:false};var bs=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()})}),ms="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Oe=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:ms,value:a}}),r=bs.safeParse(o?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getBorrowLimit for ${e}: ${a.message}`),"0"}};var ys="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",Zt=async({constants:t,scallopSuiKit:e},a,s)=>{let o=new Set(a),r=Object.fromEntries(Object.entries(t.coinTypeToCoinNameMap).filter(([d,l])=>o.has(l))),i=null,n=false,c=[];do{let d=await e.queryGetDynamicFields({parentId:ys,limit:10,cursor:i});if(!d)break;let{data:l,hasNextPage:u,nextCursor:p}=d,b=l.filter(m=>{let y=`0x${m.name.value.name}`;return !!r[y]}).map(m=>m.objectId)??[];c.push(...await e.queryGetObjects(b)),n=u,i=p;}while(n);return c.reduce((d,l)=>{if(l.content?.dataType==="moveObject"){let u=`0x${l.content.fields.name.fields.name}`,p=r[u];if(!p)return d;let m=+l.content.fields.value;d[p]=m/s;}return d},{})};var aa=async({utils:t,indexer:e},a=false,s)=>{s=s??await t.getCoinPrices()??{};let o={},r={};if(a){let p=await e.getMarket(),b=y=>{y.coinPrice=s[y.coinName]??y.coinPrice,y.coinWrappedType=t.getCoinWrappedType(y.coinName),o[y.coinName]=y;},m=y=>{y.coinPrice=s[y.coinName]??y.coinPrice,y.coinWrappedType=t.getCoinWrappedType(y.coinName),r[y.coinName]=y;};return Object.values(p.pools).filter(y=>!!y).forEach(b),Object.values(p.collaterals).filter(y=>!!y).forEach(m),{pools:o,collaterals:r}}let i=t.address.get("core.packages.query.id"),n=t.address.get("core.market"),c=`${i}::market_query::market_data`,d=[n],u=(await t.scallopSuiKit.queryInspectTxn({queryTarget:c,args:d}))?.events[0]?.parsedJson;for(let p of u?.pools??[]){let b=utils.normalizeStructTag(p.type.name),m=t.parseCoinNameFromType(b),y=s[m]??0;if(!t.constants.whitelist.lending.has(m))continue;let f=et({type:p.type,maxBorrowRate:p.maxBorrowRate,interestRate:p.interestRate,interestRateScale:p.interestRateScale,borrowIndex:p.borrowIndex,lastUpdated:p.lastUpdated,cash:p.cash,debt:p.debt,marketCoinSupply:p.marketCoinSupply,reserve:p.reserve,reserveFactor:p.reserveFactor,borrowWeight:p.borrowWeight,borrowFeeRate:p.borrowFeeRate,baseBorrowRatePerSec:p.baseBorrowRatePerSec,borrowRateOnHighKink:p.borrowRateOnHighKink,borrowRateOnMidKink:p.borrowRateOnMidKink,highKink:p.highKink,midKink:p.midKink,minBorrowAmount:p.minBorrowAmount,isIsolated:await se(t,m),supplyLimit:await Ae(t,m)??"0",borrowLimit:await Oe(t,m)??"0"}),g=tt(t,f);o[m]={coinName:m,symbol:t.parseSymbol(m),coinType:b,marketCoinType:t.parseMarketCoinType(m),sCoinType:t.parseSCoinType(t.parseMarketCoinName(m))??"",coinWrappedType:t.getCoinWrappedType(m),coinPrice:y,highKink:f.highKink,midKink:f.midKink,reserveFactor:f.reserveFactor,borrowWeight:f.borrowWeight,borrowFee:f.borrowFee,marketCoinSupplyAmount:f.marketCoinSupplyAmount,minBorrowAmount:f.minBorrowAmount,...g};}for(let p of u?.collaterals??[]){let b=utils.normalizeStructTag(p.type.name),m=t.parseCoinNameFromType(b),y=s[m]??0;if(!t.constants.whitelist.collateral.has(m))continue;let f=Te({type:p.type,collateralFactor:p.collateralFactor,liquidationFactor:p.liquidationFactor,liquidationDiscount:p.liquidationDiscount,liquidationPenalty:p.liquidationPanelty,liquidationReserveFactor:p.liquidationReserveFactor,maxCollateralAmount:p.maxCollateralAmount,totalCollateralAmount:p.totalCollateralAmount,isIsolated:await se(t,m)}),g=Pe(t,f);r[m]={coinName:m,symbol:t.parseSymbol(m),coinType:b,marketCoinType:t.parseMarketCoinType(m),coinWrappedType:t.getCoinWrappedType(m),coinPrice:y,collateralFactor:f.collateralFactor,liquidationFactor:f.liquidationFactor,liquidationDiscount:f.liquidationDiscount,liquidationPenalty:f.liquidationPenalty,liquidationReserveFactor:f.liquidationReserveFactor,...g};}return {pools:o,collaterals:r}},sa=async({utils:t,scallopSuiKit:e},a)=>{let s={balanceSheet:[],collateralStat:[],borrowDynamic:[],interestModel:[],riskModel:[],borrowFeeKey:[],supplyLimitKey:[],borrowLimitKey:[],isolatedAssetKey:[]},o=new Map;for(let d of a){let l=t.constants.poolAddresses[d],u={balanceSheet:l?.lendingPoolAddress,collateralStat:l?.collateralPoolAddress,borrowDynamic:l?.borrowDynamic,interestModel:l?.interestModel,riskModel:l?.riskModel,borrowFeeKey:l?.borrowFeeKey,supplyLimitKey:l?.supplyLimitKey,borrowLimitKey:l?.borrowLimitKey,isolatedAssetKey:l?.isolatedAssetKey};Object.entries(u).forEach(([p,b])=>{b&&s[p].push(b);}),o.set(d,u);}let r={showContent:true},i=await Promise.all([e.queryGetObjects(s.balanceSheet,r),e.queryGetObjects(s.collateralStat,r),e.queryGetObjects(s.borrowDynamic,r),e.queryGetObjects(s.interestModel,r),e.queryGetObjects(s.riskModel,r),e.queryGetObjects(s.borrowFeeKey,r),e.queryGetObjects(s.supplyLimitKey,r),e.queryGetObjects(s.borrowLimitKey,r)]),n={balanceSheet:new Map,collateralStat:new Map,borrowDynamic:new Map,interestModel:new Map,riskModel:new Map,borrowFeeKey:new Map,supplyLimitKey:new Map,borrowLimitKey:new Map,isolatedAssetKey:new Map,isIsolated:new Map};i.forEach((d,l)=>{let u=Object.keys(n)[l];d.forEach(p=>{n[u].set(p.objectId,p);});});let c={};for(let[d,l]of o)c[d]={balanceSheet:l.balanceSheet?n.balanceSheet.get(l.balanceSheet):void 0,collateralStat:l.collateralStat?n.collateralStat.get(l.collateralStat):void 0,borrowDynamic:l.borrowDynamic?n.borrowDynamic.get(l.borrowDynamic):void 0,interestModel:l.interestModel?n.interestModel.get(l.interestModel):void 0,riskModel:l.riskModel?n.riskModel.get(l.riskModel):void 0,borrowFeeKey:l.borrowFeeKey?n.borrowFeeKey.get(l.borrowFeeKey):void 0,supplyLimitKey:l.supplyLimitKey?n.supplyLimitKey.get(l.supplyLimitKey):void 0,borrowLimitKey:l.borrowLimitKey?n.borrowLimitKey.get(l.borrowLimitKey):void 0,isolatedAssetKey:l.isolatedAssetKey?n.isolatedAssetKey.get(l.isolatedAssetKey):void 0,isIsolated:t.constants.poolAddresses[d]?.isIsolated};return c},oa=async(t,e,a=false,s)=>{s=s??await t.utils.getCoinPrices();let o={},r={};if(a){let n=await t.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),o[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),r[l.coinName]=l;};return Object.values(n.pools).filter(l=>!!l).forEach(c),Object.values(n.collaterals).filter(l=>!!l).forEach(d),{pools:o,collaterals:r}}let i=await sa(t,e);return await Promise.allSettled(e.map(async n=>{try{let c=await Ss(t,n,a,s?.[n]??0,i[n]);c?.marketPool&&(o[n]=c?.marketPool),c?.collateral&&(r[n]=c.collateral);}catch(c){console.error(c);}})),{pools:o,collaterals:r}},hs=({balanceSheet:t,borrowDynamic:e,collateralStat:a,interestModel:s,riskModel:o,borrowFeeKey:r,supplyLimitKey:i,borrowLimitKey:n,isIsolated:c})=>{if(!t||!e||!s)throw new Error("Missing required market objects");let d=W(t),l=W(s),u=W(e),p=r?W(r):{value:"0"},b=i?W(i):"0",m=n?W(n):"0",y=o?W(o):void 0,f=a?W(a):void 0,g=y&&f?{type:l.type.fields,isIsolated:c,collateralFactor:y.collateral_factor.fields,liquidationFactor:y.liquidation_factor.fields,liquidationPenalty:y.liquidation_penalty.fields,liquidationDiscount:y.liquidation_discount.fields,liquidationReserveFactor:y.liquidation_revenue_factor.fields,maxCollateralAmount:y.max_collateral_amount,totalCollateralAmount:f.amount}:void 0;return {type:l.type.fields,maxBorrowRate:l.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:l.revenue_factor.fields,borrowWeight:l.borrow_weight.fields,borrowFeeRate:p,baseBorrowRatePerSec:l.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:l.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:l.borrow_rate_on_mid_kink.fields,highKink:l.high_kink.fields,midKink:l.mid_kink.fields,minBorrowAmount:l.min_borrow_amount,isIsolated:c,supplyLimit:b,borrowLimit:m,parsedOriginMarketCollateral:g}},Ss=async(t,e,a=false,s,o)=>{if(s=s??(await t.utils.getCoinPrices())?.[e],a){let l=await t.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}if(o??=(await sa(t,[e]))[e],!o)throw new Error(`Failed to fetch required market objects for ${e}`);let r=hs(o),i=et(r),n=tt(t.utils,i),c=r.parsedOriginMarketCollateral?Te(r.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s??0,highKink:i.highKink,midKink:i.midKink,reserveFactor:i.reserveFactor,borrowWeight:i.borrowWeight,borrowFee:i.borrowFee,marketCoinSupplyAmount:i.marketCoinSupplyAmount,minBorrowAmount:i.minBorrowAmount,...n},collateral:c?{...d(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Pe(t.utils,c)}:void 0}},ra=async({utils:t,indexer:e,scallopSuiKit:a},s=[...t.constants.whitelist.collateral],o=false)=>{let r=t.address.get("core.market"),i=await t.getCoinPrices()??{},n={};if(o){let d=await e.getMarketCollaterals(),l=u=>{s.includes(u.coinName)&&(u.coinPrice=i[u.coinName]??u.coinPrice,u.coinWrappedType=t.getCoinWrappedType(u.coinName),n[u.coinName]=u);};return Object.values(d).filter(u=>!!u).forEach(l),n}let c=await a.queryGetObject(r);return await Promise.allSettled(s.map(async d=>{let l=await at({utils:t,indexer:e,scallopSuiKit:a},d,o,c?.data,i?.[d]);l&&(n[d]=l);})),n},at=async({utils:t,indexer:e,scallopSuiKit:a},s,o=false,r,i)=>{if(i=i??(await t.getCoinPrices())?.[s],o){let P=await e.getMarketCollateral(s);return P.coinPrice=i??P.coinPrice,P.coinWrappedType=t.getCoinWrappedType(P.coinName),P}let n=t.address.get("core.market");if(r=r||(await a.queryGetObject(n))?.data,!(r&&r.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=r.content.fields,d=t.parseCoinType(s),l=c.risk_models.fields.table.fields.id.id,u=await a.queryGetDynamicFieldObject({parentId:l,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),p=u?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${u?.error?.code.toString()}: `);let b=p.content.fields.value.fields,m=c.collateral_stats.fields.table.fields.id.id,y=await a.queryGetDynamicFieldObject({parentId:m,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),f=y?.data;if(!(f&&f.content&&"fields"in f.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${s}: ${y?.error?.code.toString()}`);let g=f.content.fields.value.fields,h=Te({type:b.type.fields,collateralFactor:b.collateral_factor.fields,liquidationFactor:b.liquidation_factor.fields,liquidationDiscount:b.liquidation_discount.fields,liquidationPenalty:b.liquidation_penalty.fields,liquidationReserveFactor:b.liquidation_revenue_factor.fields,maxCollateralAmount:b.max_collateral_amount,totalCollateralAmount:g.amount,isIsolated:await se(t,s)}),C=Pe(t,h);return {coinName:s,symbol:t.parseSymbol(s),coinType:t.parseCoinType(s),marketCoinType:t.parseMarketCoinType(s),coinWrappedType:t.getCoinWrappedType(s),coinPrice:i??0,collateralFactor:h.collateralFactor,liquidationFactor:h.liquidationFactor,liquidationDiscount:h.liquidationDiscount,liquidationPenalty:h.liquidationPenalty,liquidationReserveFactor:h.liquidationReserveFactor,...C}},oe=async({utils:t},e)=>{let a=e,s=t.constants.protocolObjectId,o=[],r=false,i=null;do{let l=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:`${s}::obligation::ObligationKey`},options:{showContent:true},cursor:i,limit:10});if(!l)break;o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=true,i=l.nextCursor):r=false;}while(r);let n=o.filter(l=>!!l.data),c=[],d=await t.scallopSuiKit.queryGetObjects(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 p=l?.objectId,b=l?.content;if(p&&b&&"fields"in b){let m=b.fields,y=String(m.ownership.fields.of),f=await st(t,d[u]);c.push({id:y,keyId:p,locked:f});}})),c},st=async({scallopSuiKit:t},e)=>{let a=typeof e=="string"?(await t.queryGetObject(e))?.data:e,s=false;return a&&a?.content?.dataType==="moveObject"&&"lock_key"in a.content.fields&&(s=!!a.content.fields.lock_key),s},Re=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("core.packages.query.id"),o=t.get("core.version"),r=t.get("core.market"),i=`${s}::obligation_query::obligation_data`,n=[o,r,a,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:i,args:n}))?.events[0]?.parsedJson},ia=async({utils:t},e=[...t.constants.whitelist.lending],a)=>{let s=a??t.walletAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await ot({utils:t},r,s);o[r]=i;})),o},ot=async({utils:t},e,a)=>{let s=a??t.walletAddress,o=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},na=async({utils:t},e,a)=>{e=e||[...t.constants.whitelist.lending].map(r=>t.parseMarketCoinName(r));let s=a??t.walletAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await rt({utils:t},r,s);o[r]=i;})),o},rt=async({utils:t},e,a)=>{let s=a??t.walletAddress,o=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},ca=async({utils:t},e,a=1e4)=>{let s=[],o={},r=e.reduce((c,d)=>{let l=t.parseCoinType(d).slice(2);return c[l]=d,c},{}),i=e.map(c=>{let d=t.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),n=await t.scallopSuiKit.queryGetObjects(i);if(s.length>0){let c=await Zt(t,s,a);o={...o,...c};}return o={...o,...n.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=d.content.fields,u=d.content.fields.name.fields.name,p=+l.value;c[r[u]]=p/a;}return c},{})},o};var re=class extends Error{constructor(e){super(`Unsupported oracle type: ${e}`),this.name="UnsupportedOracleError";}};var ie=class extends Error{constructor(e,a){super(`Unsupported LST oracle update for: ${e} with oracle: ${a}`),this.name="UnsupportedLstOracleError";}};var ne=class{constructor(e){this.registry=e;}get clockObject(){return {objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}}get utils(){return this.registry.utils}},Ie=class extends ne{constructor(a){super(a);this.registry=a;}oracleType="pyth";updatePrice(a,s,o,r){let{pythFeedObjectId:i,pythRegistryId:n,pythStateId:c,pythPackageId:d}=this.registry.getPackages(o);a.moveCall(`${d}::rule::set_price_as_${r}`,[s,c,i,n,a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[this.utils.parseCoinType(o)]);}},ve=class extends ne{constructor(a){super(a);this.registry=a;}oracleType="pyth";updatePrice(a,s,o,r){let{lst:i,pythFeedObjectId:n,pythStateId:c}=this.registry.getPackages(o);if(!i[o])throw new ie(o,this.oracleType);let{id:d,configId:l,stakedSuiVaultId:u,safeId:p}=i[o];a.moveCall(`${d}::rule::set_price_as_${r}`,[s,c,n,l,u,p,a.sharedObjectRef(this.clockObject)]);}},je=class extends ne{constructor(a){super(a);this.registry=a;}oracleType="supra";updatePrice(a,s,o,r){let{supraPackageId:i,supraHolderId:n,supraRegistryId:c}=this.registry.getPackages(o);a.moveCall(`${i}::rule::set_price_as_${r}`,[s,n,c,a.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(o)]);}},Ne=class extends ne{constructor(a){super(a);this.registry=a;}oracleType="switchboard";updatePrice(a,s,o,r){let{switchboardPackageId:i,switchboardAggregatorId:n,switchboardRegistryId:c}=this.registry.getPackages(o);a.moveCall(`${i}::rule::set_price_as_${r}`,[s,n,c,a.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(o)]);}};var de=class{constructor(e,a,s){this.tx=e;this.registry=a;this.strategies=new Map(Object.entries(s));}strategies},it=class extends de{oracleName="pyth";SUPPORT_SUI_LST_SET=new Set(Vt);constructor(e,a){super(e,a,{default:new Ie(a),sui_lst:new ve(a)});}resolveStrategy(e){let a;this.SUPPORT_SUI_LST_SET.has(e)?a="sui_lst":a="default";let s=this.strategies.get(a);if(!s)throw new ie(e,this.oracleName);return s}updateXOracle(e,a,s){this.resolveStrategy(e).updatePrice(this.tx,s,e,a);}},nt=class extends de{oracleName="supra";constructor(e,a){super(e,a,{default:new je(a)});}updateXOracle(e,a,s){this.strategies.get("default")?.updatePrice(this.tx,s,e,a);}},ct=class extends de{oracleName="switchboard";constructor(e,a){super(e,a,{default:new Ne(a)});}updateXOracle(e,a,s){this.strategies.get("default")?.updatePrice(this.tx,s,e,a);}},da=(t,e)=>{let a=e.oracleName;switch(a){case "pyth":return new it(t,e);case "supra":return new nt(t,e);case "switchboard":return new ct(t,e);default:throw new Error(`Unsupported oracle type: ${a}`)}};var _e=class{constructor(e){this.utils=e;}getAddressPath(e){return this.utils.address.get(e)}get getXOraclePackages(){return {xOraclePackageId:this.getAddressPath("core.packages.xOracle.id"),xOracleId:this.getAddressPath("core.oracles.xOracle")}}},ue=class{constructor(e){this.xOraclePackageRegistry=e;}get utils(){return this.xOraclePackageRegistry.utils}get packageId(){return this.xOraclePackageRegistry.getAddressPath(`core.packages.${this.oracleName}.id`)}},lt=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="pyth";get getStaticPackages(){return {pythPackageId:this.packageId,pythRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.registry"),pythStateId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.state")}}getLstOracleConfigPackages(a){return this.xOraclePackageRegistry.getAddressPath(`core.oracles.pyth.lst.${a}`)}getLstPackages(a){let s=this.xOraclePackageRegistry.getAddressPath(`core.packages.pyth.lst.${a}`),o=this.getLstOracleConfigPackages(a);return {[a]:{...s,...o}}}getPackages(a){let s=this.getLstPackages(a);return {...this.getStaticPackages,pythFeedObjectId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${a}.oracle.pyth.feedObject`),lst:s}}},dt=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="supra";getLstPackages(a){throw new Error("Method not implemented.")}getPackages(a){return {supraPackageId:this.packageId,supraRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.registry"),supraHolderId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.holder")}}},ut=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="switchboard";getLstPackages(a){throw new Error("Method not implemented.")}get getStaticPackages(){return {switchboardPackageId:this.packageId,switchboardRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.switchboard.registry")}}getPackages(a){return {...this.getStaticPackages,switchboardAggregatorId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${a}.oracle.switchboard`)}}};var ua=(t,e)=>{switch(t){case "pyth":return new lt(e);case "supra":return new dt(e);case "switchboard":return new ut(e);default:throw new re(t)}};var pt=class{constructor(e,a,s,o){this.tx=e;this.builder=a;this.coinNames=s;this.options=o;}oracleName="pyth";filterSponsoredFeeds(){let{usePythPullModel:e,pythSponsoredFeeds:a}=this.options,s=new Set(a);return this.coinNames.filter(o=>{let r=!e&&!s.has(o);return e||r})}async updatePriceFeeds(){let e=new pythSuiJs.SuiPythClient(this.builder.suiKit.client,this.builder.address.get("core.oracles.pyth.state"),this.builder.address.get("core.oracles.pyth.wormholeState")),a=this.filterSponsoredFeeds();if(a.length===0)return;let s=a.map(r=>this.builder.address.get(`core.coins.${r}.oracle.pyth.feed`)),o=this.builder.utils.pythEndpoints??[...this.builder.constants.whitelist.pythEndpoints];for(let r of o)try{let n=await new pythSuiJs.SuiPriceServiceConnection(r).getPriceFeedsUpdateData(s);await e.updatePriceFeeds(this.tx.txBlock,n,s);break}catch(i){console.warn(`Failed to update price feeds with endpoint ${r}: ${i}`);}}},pa=(t,e,a,s,o)=>{switch(t){case "pyth":return new pt(e,a,s,o);case "supra":throw new Error("Supra price feed updater is not implemented yet.");case "switchboard":throw new Error("Switchboard price feed updater is not implemented yet.");default:throw new Error(`Unsupported oracle type: ${t}`)}};var Be=class{constructor(e,a){this.txBlock=e;this.xOraclePackageRegistry=a;}get utils(){return this.xOraclePackageRegistry.utils}buildRequest(e){let{xOraclePackageId:a,xOracleId:s}=this.xOraclePackageRegistry.getXOraclePackages,o=`${a}::x_oracle::price_update_request`,r=[this.utils.parseCoinType(e)];return this.txBlock.moveCall(o,[s],r)}confirmRequest(e,a){let{xOraclePackageId:s,xOracleId:o}=this.xOraclePackageRegistry.getXOraclePackages,r=`${s}::x_oracle::confirm_price_update_request`,i=[this.utils.parseCoinType(e)];this.txBlock.moveCall(r,[o,a,this.txBlock.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],i);}};var pe=async(t,e,a=[...t.constants.whitelist.lending],s={})=>{a=[...new Set(a)];let o={usePythPullModel:t.usePythPullModel,useOnChainXOracleList:t.useOnChainXOracleList,pythSponsoredFeeds:t.pythSponsoredFeeds,...s},r=o.useOnChainXOracleList?await t.query.getAssetOracles():qt,i=Object.entries(r).reduce((p,[b,{primary:m,secondary:y}])=>(p[b]={primary:new Set(m),secondary:new Set(y)},p),{}),n=new Set(Object.values(r).flatMap(({primary:p,secondary:b})=>[...p,...b])),c=(p,b)=>{let m=i[p];if(!m)return {isPrimary:false,isSecondary:false};let{primary:y,secondary:f}=m,g=y.has(b),h=f.has(b);return {isPrimary:g,isSecondary:h}},d=new _e(t.utils),l={};for(let p of n){let b=a.filter(m=>{let{isPrimary:y,isSecondary:f}=c(m,p);return !(!y&&!f)});b.length>0&&await pa(p,e,t,b,o).updatePriceFeeds(),l[p]=da(e,ua(p,d));}let u=new Be(e,d);for(let p of a){let b=r[p],m=u.buildRequest(p);Object.keys(b).forEach(y=>{b[y].forEach(g=>{let h=l[g];if(!h)throw new re(g);h.updateXOracle(p,y,m);});}),u.confirmRequest(p,m);}};var I=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},fe=t=>{if(t===void 0)throw new Error("veSca not found")},ft=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},bt=(t,e,a)=>{fe(a),ft(a);let s=Math.floor(a/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let o=Math.floor((e-s)/86400);if(t>o)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-o}`)},fa=(t,e,a,s)=>{let o=s?Math.floor(s/1e3):void 0,r=!o,i=!r&&o*1e3<=new Date().getTime();if(r||i)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${i?"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 ${i?"renewing expired veSca":"initial lock"}`);else {if(fe(s),ft(s),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");a&&e&&bt(e,a,s);}},ba=(t,e)=>{if(fe(e),ft(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},ma=(t,e,a)=>{if(!a||a>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var be=async(...t)=>{let[e,a,s,o]=t;if(t.length===3&&s)return {obligationId:s};if(t.length===4&&s&&o)return {obligationId:s,obligationKey:o};let r=I(a),i=await oe(e,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return {obligationId:i[0].id,obligationKey:i[0].keyId}},xs=({builder:t,txBlock:e})=>{let a={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")},o=`${t.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,r=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {openObligation:()=>{let[i,n,c]=t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation`,[a.version]);return [i,n,c]},returnObligation:(i,n)=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::return_obligation`,[a.version,i,n]);},openObligationEntry:()=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation_entry`,[a.version]);},addCollateral:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::deposit_collateral::deposit_collateral`,[a.version,i,a.market,n],[d]);},takeCollateral:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::withdraw_collateral::withdraw_collateral`,[a.version,i,n,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[l])},deposit:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::mint::mint`,[a.version,a.market,i,r],[c])},depositEntry:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::mint::mint_entry`,[a.version,a.market,i,r],[c])},withdraw:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem`,[a.version,a.market,i,r],[c])},withdrawEntry:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem_entry`,[a.version,a.market,i,r],[c])},borrow:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow`,[a.version,i,n,a.market,a.coinDecimalsRegistry,c,a.xOracle,r],[l])},borrowWithReferral:(i,n,c,d,l)=>{let u=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_with_referral`,[a.version,i,n,a.market,a.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,a.xOracle,r],[u,o])},borrowEntry:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_entry`,[a.version,i,n,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[l])},repay:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::repay::repay`,[a.version,i,a.market,n,r],[d]);},borrowFlashLoan:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::flash_loan::borrow_flash_loan`,[a.version,a.market,i],[c])},repayFlashLoan:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::flash_loan::repay_flash_loan`,[a.version,a.market,i,n],[d]);}}},As=({builder:t,txBlock:e})=>({addCollateralQuick:async(a,s,o)=>{let r=I(e),{obligationId:i}=await be(t,e,o);if(s==="sui"){let[n]=e.splitSUIFromGas([a]);e.addCollateral(i,n,s);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);e.addCollateral(i,c,s),e.transferObjects([n],r);}},takeCollateralQuick:async(a,s,o,r)=>{let i=await be(t,e,o,r),n=await t.utils.getObligationCoinNames(i.obligationId);return await pe(t,e,n),e.takeCollateral(i.obligationId,i.obligationKey,a,s)},depositQuick:async(a,s,o=true)=>{let r=I(e),i;if(s==="sui"){let[n]=e.splitSUIFromGas([a]);i=e.deposit(n,s);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);e.transferObjects([n],r),i=e.deposit(c,s);}return o?e.mintSCoin(t.utils.parseMarketCoinName(s),i):i},withdrawQuick:async(a,s)=>{let o=I(e),r=t.utils.parseSCoinName(s);if(!r)throw new Error(`No sCoin for ${s}`);let{sCoin:i,marketCoin:n}=await t.selectSCoinOrMarketCoin(e,r,a,o);if(i){let c=e.burnSCoin(r,i);n?e.mergeCoins(n,[c]):n=c;}if(!n)throw new Error(`No market coin for ${s}`);return e.withdraw(n,s)},borrowQuick:async(a,s,o,r)=>{let i=await be(t,e,o,r),c=[...await t.utils.getObligationCoinNames(i.obligationId)??[],s];return await pe(t,e,c),e.borrow(i.obligationId,i.obligationKey,a,s)},borrowWithReferralQuick:async(a,s,o,r,i)=>{let n=await be(t,e,r,i),d=[...await t.utils.getObligationCoinNames(n.obligationId)??[],s];return await pe(t,e,d),e.borrowWithReferral(n.obligationId,n.obligationKey,o,a,s)},repayQuick:async(a,s,o)=>{let r=I(e),i=await be(t,e,o);if(s==="sui"){let[n]=e.splitSUIFromGas([a]);return e.repay(i.obligationId,n,s)}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);return e.transferObjects([n],r),e.repay(i.obligationId,c,s)}},updateAssetPricesQuick:async a=>await pe(t,e,a)}),ga=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=xs({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=As({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var ha=async(t,e)=>{let a={spool:[],spoolReward:[],sCoinTreasury:[]},s=new Map;for(let l of e){let u=t.constants.poolAddresses[l],p={spool:u?.spool,spoolReward:u?.spoolReward,sCoinTreasury:u?.sCoinTreasury};Object.entries(p).forEach(([b,m])=>{m&&a[b].push(m);}),s.set(l,p);}let[o,r,i]=await Promise.all([t.scallopSuiKit.queryGetObjects(a.spool),t.scallopSuiKit.queryGetObjects(a.spoolReward),t.scallopSuiKit.queryGetObjects(a.sCoinTreasury)]),n=l=>new Map(l.map(u=>[u.objectId,u])),c={spool:n(o),spoolReward:n(r),sCoinTreasury:n(i)},d={};for(let[l,u]of s)d[l]={spool:u.spool?c.spool.get(u.spool):void 0,spoolReward:u.spoolReward?c.spoolReward.get(u.spoolReward):void 0,sCoinTreasury:u.sCoinTreasury?c.sCoinTreasury.get(u.sCoinTreasury):void 0};return d},Os=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let a=W(t),s=W(e);return {stakeType:a.stake_type,maxDistributedPoint:a.max_distributed_point,distributedPoint:a.distributed_point,distributedPointPerPeriod:a.distributed_point_per_period,pointDistributionTime:a.point_distribution_time,maxStake:a.max_stakes,stakes:a.stakes,index:a.index,createdAt:a.created_at,lastUpdate:a.last_update,...s}},Sa=async(t,e=[...t.constants.whitelist.spool],a=false,s,o)=>{let r=e.map(c=>t.utils.parseCoinName(c));if(s=s??(await t.getMarketPools(r,{indexer:a})).pools,o=o??await t.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${r}`);let i={};if(a){let c=await t.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=t.utils.parseCoinName(l.marketCoinName),p=t.utils.getSpoolRewardCoinName();l.coinPrice=o?.[u]??l.coinPrice,l.marketCoinPrice=o?.[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=o?.[p]??l.rewardCoinPrice,i[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),i}let n=await ha(t,r);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=r[d],u=await Rs(t,c,a,o,n[l]);u&&(i[c]=u);}catch(l){console.error(l);}})),i},Rs=async(t,e,a=false,s,o)=>{let r=t.utils.parseCoinName(e);if(s=s||await t.getAllCoinPrices(),a){let f=await t.indexer.getSpool(e),g=t.utils.parseCoinName(e),h=t.utils.getSpoolRewardCoinName();return f.coinPrice=s?.[g]??f.coinPrice,f.marketCoinPrice=s?.[e]??f.marketCoinPrice,f.rewardCoinPrice=s?.[h]??f.rewardCoinPrice,f}o??=(await ha(t,[r]))[r];let i=t.utils.getSpoolRewardCoinName();s=s||await t.utils.getCoinPrices();let n=Os(o),c=Qt(n),d=s?.[e]??0,l=t.utils.getCoinDecimal(e),u=$t(c,d,l),p=Wt(n),b=s?.[i]??0,m=t.utils.getCoinDecimal(i),y=Gt(c,p,u,b,m);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(r),marketCoinType:t.utils.parseMarketCoinType(r),rewardCoinType:t.utils.isMarketCoin(i)?t.utils.parseMarketCoinType(i):t.utils.parseCoinType(i),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(r),rewardCoinDecimal:t.utils.getCoinDecimal(i),coinPrice:s?.[r]??0,marketCoinPrice:d,rewardCoinPrice:b,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:p.exchangeRateNumerator,exchangeRateDenominator:p.exchangeRateDenominator,...y}},ye=async({utils:t},e)=>{let a=e||t.suiKit.currentAddress,s=t.address.get("spool.object"),o=`${s}::spool_account::SpoolAccount`,r=[],i=false,n=null;do{let u=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:o},options:{showContent:true,showType:true},cursor:n,limit:10});u&&(r.push(...u.data),u.hasNextPage&&u.nextCursor?(i=true,n=u.nextCursor):i=false);}while(i);let c=[...t.constants.whitelist.spool].reduce((u,p)=>(u[p]=[],u),{}),d=Object.keys(c).reduce((u,p)=>{let b=t.parseCoinName(p),m=t.parseMarketCoinType(b);return u[p]=`${s}::spool_account::SpoolAccount<${m}>`,u},{}),l=Object.entries(d).reduce((u,[p,b])=>(u[b]=p,u),{});for(let u of r.map(p=>p.data)){let p=u?.objectId,b=u?.type;if(p&&u?.content&&"fields"in u.content){let m=u.content.fields,y=String(m.spool_id),f=String(m.stake_type.fields.name),g=Number(m.stakes),h=Number(m.index),C=Number(m.points),P=Number(m.total_points),D={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},k=utils.normalizeStructTag(b),R=D[l[k]];R&&R.push({id:p,type:k,stakePoolId:y,stakeType:utils.normalizeStructTag(f),staked:g,index:h,points:C,totalPoints:P});}}return c},mt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.id`),s,o=await t.scallopSuiKit.queryGetObject(a);if(o?.data){let r=o.data,i=r.objectId,n=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),b=Number(c.max_stakes),m=String(c.stake_type.fields.name),y=Number(c.stakes),f=Number(c.index),g=Number(c.created_at),h=Number(c.last_update);s={id:i,type:utils.normalizeStructTag(n),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:b,stakeType:utils.normalizeStructTag(m),totalStaked:y,index:f,createdAt:g,lastUpdate:h};}}return s},yt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.rewardPoolId`),s,o=await t.scallopSuiKit.queryGetObject(a);if(o?.data){let r=o.data,i=r.objectId,n=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),b=Number(c.claimed_rewards);s={id:i,type:utils.normalizeStructTag(n),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:b};}}return s};var ka=async(...t)=>{let[e,a,s,o]=t;if(t.length===4&&o)return [o];let r=I(a),i=await ye(e,r);if(i[s].length===0)throw new Error(`No stake account id found for sender ${r}`);return i[s].map(n=>n.id)},js=async(...t)=>{let[e,a,s,o]=t,r=I(a),i=await ye(e,r);if(i[s].length===0)throw new Error(`No stake account found for sender ${r}`);return o?i[s].filter(c=>c.id===o):i[s]},Ca=async(t,e,a,s,o,r,i=false)=>{try{let{takeCoin:n,leftCoin:c,totalAmount:d}=i?await t.selectSCoin(e,s,o,r):await t.selectMarketCoin(e,s,o,r);if(i){let l=e.burnSCoin(s,n);e.stake(a,l,s);}else e.stake(a,n,s);return e.transferObjects([c],r),d}catch{return 0}},Ns=({builder:t,txBlock:e})=>{let a={spoolPkg:t.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:o=>{let r=t.utils.parseMarketCoinType(o),i=t.address.get(`spool.pools.${o}.id`);return t.moveCall(e,`${a.spoolPkg}::user::new_spool_account`,[i,s],[r])},stake:(o,r,i)=>{let n=t.utils.parseMarketCoinType(i),c=t.address.get(`spool.pools.${i}.id`);t.moveCall(e,`${a.spoolPkg}::user::stake`,[c,o,r,s],[n]);},unstake:(o,r,i)=>{let n=t.utils.parseMarketCoinType(i),c=t.address.get(`spool.pools.${i}.id`);return t.moveCall(e,`${a.spoolPkg}::user::unstake`,[c,o,r,s],[n])},claim:(o,r)=>{let i=t.address.get(`spool.pools.${r}.id`),n=t.address.get(`spool.pools.${r}.rewardPoolId`),c=t.utils.parseMarketCoinType(r),d=t.utils.getSpoolRewardCoinName(),l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.spoolPkg}::user::redeem_rewards`,[i,n,o,s],[c,l])}}},_s=({builder:t,txBlock:e})=>({stakeQuick:async(a,s,o)=>{let r=I(e),i=await ka(t,e,s,o);if(i.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof a=="number"){let n=await Ca(t,e,i[0],s,a,r);a-=n,a>0&&await Ca(t,e,i[0],s,a,r,true);}else e.stake(i[0],a,s);},unstakeQuick:async(a,s,o,r=true)=>{let i=await js(t,e,s,o),n=[];for(let c of i){if(c.staked===0)continue;let d=Math.min(a,c.staked),l=await e.unstake(c.id,d,s);if(r){let u=await e.mintSCoin(s,l);n.push(u);}else n.push(l);if(a-=d,a<=0)break}if(n.length>0){let c=n[0];return n.length>1&&e.mergeCoins(c,n.slice(1)),c}},claimQuick:async(a,s)=>{let o=await ka(t,e,a,s),r=[];for(let i of o){let n=await e.claim(i,a);r.push(n);}return r}}),Ta=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ns({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=_s({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Me=async(...t)=>{let[e,a,s,o]=t;if(t.length===4&&s&&o&&typeof s=="string"){let c=await st(e,s);return {obligationId:s,obligationKey:o,obligationLocked:c}}let r=I(a),i=await oe(e,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let n=i.find(c=>c.id===s||c.keyId===o);if(!n)throw new Error(`No obligation found for sender ${r} with id ${s} or key ${o}`);return {obligationId:n.id,obligationKey:n.keyId,obligationLocked:n.locked}},Fs=({builder:t,txBlock:e})=>{let a={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),config:t.address.get("borrowIncentive.config"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore")},s={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,a.obligationAccessStore,o]);},stakeObligationWithVesca:(r,i,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,a.obligationAccessStore,s.config,s.treasury,s.table,n,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o],[]);},unstakeObligation:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::unstake_v2`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o]);},claimBorrowIncentive:(r,i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.borrowIncentivePkg}::user::redeem_rewards`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,o],[c])},deactivateBoost:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::deactivate_boost_v2`,[a.config,a.incentivePools,a.incentiveAccounts,r,i,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o]);}}},Ds=({builder:t,txBlock:e})=>({stakeObligationQuick:async(a,s)=>{let{obligationId:o,obligationKey:r,obligationLocked:i}=await Me(t,e,a,s),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${He}::user::unstake`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!i||n)&&e.stakeObligation(o,r);},stakeObligationWithVeScaQuick:async(a,s,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:n}=await Me(t,e,a,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${He}::user::unstake`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!n||c){let l=await t.query.getBindedVeScaKey(r)??o;l?e.stakeObligationWithVesca(r,i,l):e.stakeObligation(r,i);}},unstakeObligationQuick:async(a,s)=>{let{obligationId:o,obligationKey:r,obligationLocked:i}=await Me(t,e,a,s);i&&e.unstakeObligation(o,r);},claimBorrowIncentiveQuick:async(a,s,o)=>{let{obligationId:r,obligationKey:i}=await Me(t,e,s,o);return e.claimBorrowIncentive(r,i,a)}}),xa=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Fs({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Ds({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Vs=async(t,e)=>{let a=e||t.suiKit.currentAddress,o=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,r=[],i=false,n=null;do{let d=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:o},cursor:n,limit:10});d&&(r.push(...d.data),d&&d.hasNextPage&&d.nextCursor?(i=true,n=d.nextCursor):i=false);}while(i);return r.map(d=>d.data).filter(d=>!!d)},Ke=async({utils:t},e,a)=>{let s=await Vs(t,e),o=Array(s.length).fill(null),r=s.map(async(n,c)=>{let d=await ae(t,n);d&&(o[c]=d);});await Promise.allSettled(r);let i=o.filter(Boolean).sort((n,c)=>c.currentVeScaBalance-n.currentVeScaBalance);return a?i.filter(n=>n.lockedScaAmount!=="0"):i},Aa=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),ae=async(t,e)=>{let a=t.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=Aa.parse(e));let s,o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!o)return;let r=o.data;if(r&&r.content&&r.content.dataType==="moveObject"&&"fields"in r.content){let i=r.content.fields.value.fields,n=Math.max(+i.unlock_at*1e3-Date.now(),0),c=String(i.locked_sca_amount),d=S__default.default(i.locked_sca_amount).shiftedBy(-9).toNumber(),l=d*(Math.floor(n/1e3)/126144e3);s={id:r.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:Aa.parse(o.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:S__default.default(i.unlock_at*1e3).toNumber()};}return s},qs=async(t,e)=>{let a=t.address.get("vesca.id"),s=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let o=new suiKit.SuiTxBlock,r=o.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}),i=`${a}::treasury::refresh`,n=[s,e,r],c=`${a}::treasury::total_ve_sca_amount`,d=[e,r],l=await Promise.all(n.map(async y=>typeof y=="string"?(await t.scallopSuiKit.queryGetObject(y))?.data:y)),u=await Promise.all(d.map(async y=>typeof y=="string"?(await t.scallopSuiKit.queryGetObject(y))?.data:y));o.moveCall(i,l),o.moveCall(c,u);let p=await o.txBlock.build({client:t.suiKit.client,onlyTransactionKind:true}),m=(await t.scallopSuiKit.queryClient.fetchQuery({queryKey:N.rpc.getTotalVeScaTreasuryAmount({refreshArgs:n,vescaAmountArgs:d,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(p)})).results;if(m&&m[1]?.returnValues){let y=Uint8Array.from(m[1].returnValues[0][0]),f=m[1].returnValues[0][1];return Us__default.default(f==="u64","Result type is not u64"),bcs.bcs.u64().parse(y)}return "0"},Oa=async t=>{let e=t.address.get("vesca.treasury"),a=await t.scallopSuiKit.queryGetObject(e);if(!a||a.data?.content?.dataType!=="moveObject")return null;let s=a.data.content.fields,o=S__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),r=S__default.default(await qs(t,a.data)??0).shiftedBy(-9).toNumber(),i=o>0?r/o*4:0;return {totalLockedSca:o,totalVeSca:r,averageLockingPeriod:i,averageLockingPeriodUnit:"year"}};var ge=async(...t)=>{let[e,a,s]=t;if(t.length===3&&s&&typeof s<"u"){let i=await ae(e.utils,s);return i||void 0}let o=I(a),r=await Ke(e,o);if(r.length!==0)return s?r.find(({keyId:i})=>(typeof s=="string"?s:s.objectId)===i):r[0]},gt=async(...t)=>{let[e,a,s]=t;try{let o=await e.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:"0x2::object::ID",value:a}});if(!o?.data)return !1;let r=o.data.content.fields.value.fields.contents;return Array.isArray(r)&&r.length>0}catch(o){return console.error(o),false}},$s=({builder:t,txBlock:e})=>{let a={id:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config"),subsTable:t.address.get("vesca.subsTable")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_key`,[a.config,a.table,a.treasury,o,r,s],[]),extendLockPeriod:(o,r)=>{t.moveCall(e,`${a.id}::ve_sca::extend_lock_period`,[a.config,o,a.table,a.treasury,r,s],[]);},extendLockAmount:(o,r)=>{t.moveCall(e,`${a.id}::ve_sca::lock_more_sca`,[a.config,o,a.table,a.treasury,r,s],[]);},renewExpiredVeSca:(o,r,i)=>{t.moveCall(e,`${a.id}::ve_sca::renew_expired_ve_sca`,[a.config,o,a.table,a.treasury,r,i,s],[]);},redeemSca:o=>t.moveCall(e,`${a.id}::ve_sca::redeem`,[a.config,o,a.table,a.treasury,s],[]),mintEmptyVeSca:()=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_placeholder_key`,[a.config,a.table],[]),splitVeSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::split`,[a.config,o,a.table,a.subsTable,e.pure.u64(r)]),mergeVeSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::merge`,[a.config,o,r,a.table,a.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}},Ws=({builder:t,txBlock:e})=>({lockScaQuick:async({amountOrCoin:a,lockPeriodInDays:s,autoCheck:o=true,veScaKey:r})=>{let i=I(e),n=await ge(t,e,r),c,d=[];if(a!==void 0&&typeof a=="number"){let b=await t.utils.selectCoins(a,Ce,i),[m,y]=e.takeAmountFromCoins(b,a);c=m,d.push(y);}else c=a;let l=t.utils.getUnlockAt(s,n?.unlockAt);o&&fa(a,s,l,n?.unlockAt);let u=!n,p=!u&&n.unlockAt<=new Date().getTime();if(u||p){if(c)if(u){let b=e.lockSca(c,l);d.push(b);}else {if(n.lockedScaCoin!==0){let b=e.redeemSca(n.keyId);d.push(b);}e.renewExpiredVeSca(n.keyId,c,l);}}else c&&s?(e.extendLockPeriod(n.keyId,l),e.extendLockAmount(n.keyId,c)):s?e.extendLockPeriod(n.keyId,l):c&&e.extendLockAmount(n.keyId,c);d.length>0&&e.transferObjects(d,i);},extendLockPeriodQuick:async({lockPeriodInDays:a,veScaKey:s,autoCheck:o=true})=>{let r=await ge(t,e,s),i=t.utils.getUnlockAt(a,r?.unlockAt);o&&bt(a,i,r?.unlockAt),r&&e.extendLockPeriod(r.keyId,i);},extendLockAmountQuick:async({scaAmount:a,veScaKey:s,autoCheck:o=true})=>{let r=I(e),i=await ge(t,e,s);if(o&&ba(a,i?.unlockAt),i){let n=await t.utils.selectCoins(a,Ce,r),[c,d]=e.takeAmountFromCoins(n,a);e.extendLockAmount(i.keyId,c),e.transferObjects([d],r);}},renewExpiredVeScaQuick:async({scaAmount:a,lockPeriodInDays:s,veScaKey:o,autoCheck:r=true})=>{let i=I(e),n=await ge(t,e,o),c=t.utils.getUnlockAt(s,n?.unlockAt);if(r&&ma(a,s,n?.unlockAt),n){let d=[];if(n.lockedScaCoin!==0){let b=e.redeemSca(n.keyId);d.push(b);}let l=await t.utils.selectCoins(a,Ce,i),[u,p]=e.takeAmountFromCoins(l,a);d.push(p),e.renewExpiredVeSca(n.keyId,u,c),e.transferObjects(d,i);}},redeemScaQuick:async({veScaKey:a,transferSca:s})=>{let o=I(e),r=await ge(t,e,a);if(fe(r?.unlockAt),r){let i=e.redeemSca(r.keyId);if(s){e.transferObjects([i],o);return}return i}},splitVeScaQuick:async({splitAmount:a,veScaKey:s,transferVeScaKey:o=true})=>{let r=await gt(t,s,t.address.get("vesca.subsTable")),i=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(r&&!i)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let n=e.splitVeSca(s,a);if(o){e.transferObjects([n],I(e));return}else return n},mergeVeScaQuick:async({targetVeScaKey:a,sourceVeScaKey:s})=>{let o=t.address.get("vesca.subsTableId"),[r,i]=await Promise.all([gt(t,a,o),gt(t,s,o)]),n=!!e.txBlock.blockData.transactions.find(l=>l.kind==="MoveCall"&&l.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((r||i)&&!n)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[c,d]=await Promise.all([ae(t.utils,s),ae(t.utils,a)]);if(!c||!d)throw new Error("Source or target veSCA not found");return c.unlockAt<d.unlockAt?e.extendLockPeriod(c.keyId,d.unlockAt/1e3):c.unlockAt>d.unlockAt&&e.extendLockPeriod(d.keyId,c.unlockAt/1e3),e.mergeVeSca(a,s)}}),va=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=$s({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Ws({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var zs=({builder:t,txBlock:e})=>{let a={referralPgkId:t.address.get("referral.id"),referralBindings:t.address.get("referral.referralBindings"),referralRevenuePool:t.address.get("referral.referralRevenuePool"),authorizedWitnessList:t.address.get("referral.authorizedWitnessList"),referralTiers:t.address.get("referral.referralTiers"),version:t.address.get("referral.version")},s=t.address.get("vesca.table"),o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {bindToReferral:r=>{t.moveCall(e,`${a.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[a.referralBindings,e.pure.id(r),s,o],[]);},claimReferralTicket:r=>{let i=t.utils.parseCoinType(r);return t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[a.version,s,a.referralBindings,a.authorizedWitnessList,a.referralTiers,o],[i])},burnReferralTicket:(r,i)=>{let n=t.utils.parseCoinType(i);t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[a.version,r,a.referralRevenuePool,o],[n]);},claimReferralRevenue:(r,i)=>{let n=t.utils.parseCoinType(i);return t.moveCall(e,`${a.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[a.version,a.referralRevenuePool,r,o],[n])}}},Hs=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(a,s=[...t.constants.whitelist.lending])=>{let o=I(e),r=[];for(let i of s)if(i==="sui"){let n=await e.claimReferralRevenue(a,i);r.push(n);}else {let n=await e.claimReferralRevenue(a,i);try{let c=await t.suiKit.suiInteractor.selectCoins(o,1/0,t.utils.parseCoinType(i));e.mergeCoins(n,c.slice(0,500));}catch{}finally{r.push(n);}}r.length>0&&e.transferObjects(r,o);}}),Na=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=zs({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Hs({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Js=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("loyaltyProgram.id"),scaRewardPool:t.address.get("loyaltyProgram.rewardPool")},s={object:t.address.get("vesca.object"),protocolConfig:t.address.get("vesca.config"),veScaTable:t.address.get("vesca.table"),subsTable:t.address.get("vesca.subsTable")},o={pkgId:t.address.get("veScaLoyaltyProgram.id"),veScaRewardPool:t.address.get("veScaLoyaltyProgram.veScaRewardPool")};return {claimLoyaltyRevenue:r=>t.moveCall(e,`${a.pkgId}::reward_pool::redeem_reward`,[a.scaRewardPool,r]),claimVeScaLoyaltyReward:r=>t.moveCall(e,`${o.pkgId}::ve_sca_reward::redeem_reward`,[o.veScaRewardPool,r,s.protocolConfig,s.veScaTable,s.subsTable])}},Zs=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let s=I(e);if(!a)throw new Error(`No veScaKey found for user ${s}`);let o=e.claimLoyaltyRevenue(a),r=t.constants.coinTypes.sca;if(!r)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,o,r,I(e)),e.transferObjects([o],s);},claimVeScaLoyaltyRewardQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let s=I(e);if(!a)throw new Error(`No veScaKey found for user ${s}`);let o=e.claimVeScaLoyaltyReward(a);e.transferObjects([o],s);}}),Ba=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Js({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Zs({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var to=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("scoin.id")};return {mintSCoin:(s,o)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid marketCoinName name: ${s}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(s),o],[r,t.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,o)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid sCoin name: ${s}`);return console.log({sCoinName:s,treasury:t.utils.getSCoinTreasury(s)}),t.moveCall(e,`${a.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(s),o],[r,t.utils.parseUnderlyingSCoinType(s)])}}},ao=({builder:t,txBlock:e})=>({mintSCoinQuick:async(a,s)=>{let o=I(e),{leftCoin:r,takeCoin:i}=await t.selectMarketCoin(e,a,s,o);return e.transferObjects([r],o),e.mintSCoin(a,i)},burnSCoinQuick:async(a,s)=>{let o=I(e),{leftCoin:r,takeCoin:i}=await t.selectSCoin(e,a,s,o);return e.transferObjects([r],o),e.burnSCoin(a,i)}}),Fa=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=to({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=ao({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Da=(t,e)=>{let a=va(t,e),s=Ba(t,a),o=xa(t,s),r=Na(t,o),i=Fa(t,r),n=Ta(t,i),c=ga(t,n);return new Proxy(c,{get:(d,l)=>l in a?Reflect.get(a,l):l in o?Reflect.get(o,l):l in r?Reflect.get(r,l):l in n?Reflect.get(n,l):l in s?Reflect.get(s,l):l in i?Reflect.get(i,l):Reflect.get(d,l)})};var ht=class{_queryClient;constructor(e={}){this._queryClient=e.queryClient??new queryCore.QueryClient(this.defaultQueryClientConfig);}get queryClient(){return this._queryClient}set queryClient(e){this._queryClient=e;}get defaultQueryClientConfig(){return Ut}},he=ht;var St=class extends he{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??oo__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,a,s,o){if(Array.isArray(a)){let r=a,i=s,n=o;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.post(e,i,n).then(c=>c)})}else {let r=a,i=s;return this.axiosInstance.post(e,r,i)}}async get(e,a,s){if(Array.isArray(a)){let o=a,r=s;return this.queryClient.fetchQuery({queryKey:o,queryFn:()=>this.axiosInstance.get(e,r).then(i=>i)})}else {let o=a;return this.axiosInstance.get(e,o)}}async put(e,a,s,o){if(Array.isArray(a)){let r=a,i=s,n=o;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.put(e,i,n).then(c=>c)})}else {let r=a,i=s;return this.axiosInstance.put(e,r,i)}}async delete(e,a,s){if(Array.isArray(a)){let o=a,r=s;return this.queryClient.fetchQuery({queryKey:o,queryFn:()=>this.axiosInstance.delete(e,r).then(i=>i)})}else {let o=a;return this.axiosInstance.delete(e,o)}}},Se=St;async function ro(t,e,...a){let s=a[a.length-1];if(typeof s=="object"&&s.indexer)try{return await t.apply(e,a)}catch(o){return console.warn(`Indexer requests failed: ${o.message}. Retrying without indexer..`),await t.apply(e,[...a.slice(0,-1),{...s,indexer:false}])}return await t.apply(e,a)}function U(t){return (...e)=>ro(t,this,...e)}var Ka=t=>{let e=new Date(t*1e3),a=new Date(t*1e3);a.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&a.setUTCDate(a.getUTCDate()+1);let s=new Date().getTime();return a.getTime()-s>126144e3*1e3&&a.setUTCDate(a.getUTCDate()-1),Math.floor(a.getTime()/1e3)},we=t=>(t.endsWith("/")&&(t=t.slice(0,-1)),t),wt=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e};var kt={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:"",lst:{afsui:{safeId:"",stakedSuiVaultId:"",configId:""}}}},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:"",lst:{afsui:{id:"",object:""}}},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},veScaLoyaltyProgram:{id:"",object:"",veScaRewardPool:"",veScaRewardTableId:""},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:""}}}},Ct=class{constructor(e={}){this.params=e;this.scallopAxios=new Se({...this.defaultParamValues,...e}),this.network=e.network??"mainnet",this.addressId=e.addressId??this.defaultParamValues.addressId,this.auth=e.auth??"",e.forceAddressesInterface&&this.initializeForcedAddresses(e.forceAddressesInterface);}currentAddresses;addressId;network;auth;scallopAxios;addressMap=new Map;defaultParamValues={addressId:"67c44a103fe1b8c454eb9699",network:"mainnet"};initializeForcedAddresses(e){let a=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([s,o])=>{if(a.includes(s)){let r=s;this.addressMap.set(r,o),r===this.network&&(this.currentAddresses=o);}});}get axiosClient(){return this.scallopAxios}get queryClient(){return this.axiosClient.queryClient}get defaultValues(){return this.params.defaultValues}getId(){return this.addressId}get(e){if(this.currentAddresses)return e.split(".").reduce((s,o)=>typeof s=="object"?s[o]:s,this.currentAddresses)||void 0}set(e,a){if(this.currentAddresses){let s=e.split(".");s.reduce((o,r,i)=>{if(i===s.length-1)o[r]=a;else return o[r]},this.currentAddresses);}return this.currentAddresses}switchCurrentAddresses(e){return this.addressMap.has(e)&&(this.currentAddresses=this.addressMap.get(e),this.network=e),this.currentAddresses}getAddresses(e){return e?this.addressMap.get(e):this.currentAddresses??this.addressMap.get(this.network)}setAddresses(e,a){let s=a||this.network;s===this.network&&(this.currentAddresses=e),this.addressMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:a,network:s,auth:o,memo:r}=e??{},i=o||this.auth||void 0,n=s||this.network,c=a||this.currentAddresses||this.addressMap.get(n)||kt;if(i!==void 0){this.addressMap.clear(),this.setAddresses(c,n);let d=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":o||this.auth}});if(d.status===201){for(let[l,u]of Object.entries(d.data))["localnet","devnet","testnet","mainnet"].includes(l)&&(l===this.network&&(this.currentAddresses=u),this.addressMap.set(l,u));return this.addressId=d.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("You don't have permission to access this request.")}async readApi({url:e,queryKey:a,config:s}){let o=await this.axiosClient.get(e,a,s);if(o.status===200)return o.data;throw Error(`Error: ${o.status}; Failed to read ${e} ${o.statusText}`)}async read(e){let a=e||this.addressId||void 0;if(a!==void 0){let s=await(async()=>{let r=(this.params.urls?.addresses??[Lt]).map(i=>`${we(i)}/addresses/${a}`);for(let i of r)try{return await this.readApi({url:i,queryKey:N.api.getAddresses({addressId:a})})}catch(n){console.error(`${n}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??kt}})(),o=r=>["localnet","devnet","testnet","mainnet"].includes(r);for(let[r,i]of Object.entries(s))o(r)&&typeof i=="object"&&(r===this.network&&(this.currentAddresses=i),this.addressMap.set(r,i));return this.addressId=s.id,this.getAllAddresses()}else throw Error("Please provide API addresses id.")}async update(e){let{id:a,addresses:s,network:o,auth:r,memo:i}=e??{},n=r||this.auth||void 0,c=a||this.addressId||void 0,d=o||this.network,l=s||this.currentAddresses||this.addressMap.get(d)||kt;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(n!==void 0){a!==this.addressId&&this.addressMap.clear(),this.setAddresses(l,d);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:i}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(u.status===200){for(let[p,b]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(p)&&(p===this.network&&(this.currentAddresses=b),this.addressMap.set(p,b));return this.addressId=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,a){let s=a||this.auth||void 0,o=e||this.addressId||void 0;if(o===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this.axiosClient.delete(`/addresses/${o}`,{headers:{"Content-Type":"application/json","api-key":a||this.auth}})).status===200)this.addressId=void 0,this.currentAddresses=void 0,this.addressMap.clear();else throw Error("Failed to delete addresses.");else throw Error("You don't have permission to access this request.")}},Le=Ct;var La=t=>Object.keys(t).length===0,Tt={lending:new Set,borrowing:new Set,collateral:new Set,packages:new Set,scoin:new Set,spool:new Set,borrowIncentiveRewards:new Set,rewardsAsPoint:new Set,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},no=t=>Object.entries(t).filter(([e,a])=>!!a&&(Array.isArray(a)||a instanceof Set)).reduce((e,[a,s])=>(e[a]=s instanceof Set?s:new Set(s),e),{}),Pt=class extends Le{constructor(a={}){super(a);this.params=a;}_poolAddresses={};_whitelist=Tt;coinDecimals={};coinNameToOldMarketCoinTypeMap={};scoinRawNameToSCoinNameMap={};scoinTypeToSCoinNameMap={};wormholeCoinTypeToCoinNameMap={};voloCoinTypeToCoinNameMap={};suiBridgeCoinTypeToCoinNameMap={};coinTypes={};sCoinTypes={};coinTypeToCoinNameMap={};supportedBorrowIncentiveRewards=new Set;get protocolObjectId(){return this.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){let a=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"];return this.isAddressInitialized()&&!La(this.poolAddresses)&&a.every(s=>this.whitelist[s].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(a,s)=>a[s]??Tt[s]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(a,s)=>a[s]??void 0})}get defaultValues(){return this.params.defaultValues}isAddressInitialized({networkType:a="mainnet"}={}){let s=this.getAddresses(a);return !!s&&!La(s)}parseToOldMarketCoin(a){return `${this.protocolObjectId}::reserve::MarketCoin<${a}>`}async init({networkType:a="mainnet",force:s=false,addressId:o,constantsParams:r=this.params}={}){let i=this.getAddresses(a);if((!i||Object.keys(i).length===0||s)&&await this.read(o),r.forcePoolAddressInterface&&(this._poolAddresses=r.forcePoolAddressInterface),r.forceWhitelistInterface&&(this._whitelist=no(r.forceWhitelistInterface)),this.isInitialized&&!s){this.initConstants();return}let[n,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((d,l)=>{let u=l,p=n[u];return d[u]=p instanceof Set?p:Array.isArray(p)?new Set(p):new Set,d},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([d])=>Object.values(this._whitelist).some(l=>l.has(d))).map(([d,l])=>{let u=Object.fromEntries(Object.entries(l).map(([p,b])=>[p,typeof b=="boolean"?b??false:b||void 0]));return [d,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[s,o.decimals]),...Object.entries(this.poolAddresses).filter(([s,o])=>!!o?.sCoinName).map(([s,o])=>[o.sCoinName,o.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[s,o?.coinType]),...Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinName&&o.sCoinType).map(([s,o])=>[o.sCoinName,o.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([s,o])=>[o,s])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&this.whitelist.wormhole.has(s)).map(([s,o])=>[o.coinType,o.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[o.coinName,this.parseToOldMarketCoin(o.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinType&&o.sCoinName).map(([s,o])=>[suiKit.parseStructTag(o.sCoinType).name,o.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinType&&o.sCoinName).map(([s,o])=>[o.sCoinType,o.sCoinName]));let a=this.poolAddresses.vsui?.coinType;a&&(this.voloCoinTypeToCoinNameMap={[a]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&this.whitelist.suiBridge.has(o.coinName)).map(([s,o])=>[o.coinType,o.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinName&&o.sCoinType).map(([s,o])=>[o.sCoinName,o.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(s=>!!s).map(s=>s.sCoinName?[s.coinName,s.sCoinName]:[s.coinName]).flat()]);}async readWhiteList(){let a=await(async()=>{let s=(this.params.urls?.whitelist??["https://sui.apis.scallop.io/pool/whitelist"]).map(we);for(let o of s)try{return await this.readApi({url:o,queryKey:N.api.getWhiteList()})}catch(r){console.error(`${r}`);}return this.defaultValues?.whitelist??Tt})();return Object.fromEntries(Object.entries(a).filter(([s,o])=>Array.isArray(o)||o instanceof Set).map(([s,o])=>[s,o instanceof Set?o:new Set(o)]))}async readPoolAddresses(){let a=(this.params.urls?.poolAddresses??["https://sui.apis.scallop.io/pool/addresses"]).map(we);for(let s of a)try{return await this.readApi({url:s,queryKey:N.api.getPoolAddresses()})}catch(o){console.error(`${o}`);}return this.defaultValues?.poolAddresses??{}}},Ee=Pt;var Ea=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??Ye:Ye},new suiKit.SuiKit({...t,...e})};var po=10,Ue=(t,e)=>{let a={...t};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?a[s]=Ue(t[s]||{},e[s]):a[s]=e[s];return a},Ve=class{constructor(e=10){this.capacity=e;this.refillRate=this.capacity/1e3,this.tokens=this.capacity,this.lastRefillTime=Date.now();}tokens;lastRefillTime;refillRate;refill(){let e=Date.now(),s=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+s),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(a=>setTimeout(a,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}},xt=class extends he{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Ea(e),this._tokensPerSecond=e.tokensPerSecond??po,this.rateLimiter=new Ve(this._tokensPerSecond),this._walletAddress=e.walletAddress??this.suiKit.currentAddress;}switchFullNodes(e){this.suiKit.suiInteractor.switchFullNodes(e);}get client(){return this.suiKit.client}get walletAddress(){return this._walletAddress}set walletAddress(e){this._walletAddress=e;}get tokensPerSecond(){return this._tokensPerSecond}set tokensPerSecond(e){this._tokensPerSecond=e,this.rateLimiter=new Ve(this._tokensPerSecond);}get currentFullNode(){try{return this.suiKit.suiInteractor.currentFullNode}catch{return ""}}signAndSendTxn(e,a){return this.suiKit.signAndSendTxn(e,a)}async callWithRateLimiter(e,a){return await this.queryClient.fetchQuery({queryKey:e,queryFn:()=>this.rateLimiter.execute(a)})}async queryGetNormalizedMoveFunction(e){let{address:a,module:s,name:o}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(N.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:a,module:s,function:o}))}async queryGetObject(e,a){return a={...a,showOwner:true,showContent:true,showType:true},await this.callWithRateLimiter(N.rpc.getObject({objectId:e,options:a,node:this.currentFullNode}),()=>this.client.getObject({id:e,options:a}))}async queryGetObjects(e,a){if(e.length===0)return [];a??={showContent:true,showOwner:true,showType:true};let s=await this.callWithRateLimiter(N.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:a?.showOwner,showContent:a?.showContent,showType:a?.showType}));return s.forEach(o=>{let r=N.rpc.getObject({objectId:o.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:r}).forEach(([n,c])=>{c||(c={data:c}),this.queryClient.setQueryData(n,Ue(c,{data:o,error:null}),{updatedAt:Date.now()});});}),s}async queryGetOwnedObjects(e){let a=await this.callWithRateLimiter(N.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return a&&a.data.length>0&&a.data.filter(s=>!!s.data).forEach(s=>{let o=N.rpc.getObject({objectId:s.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:o}).forEach(([i,n])=>{this.queryClient.setQueryData(i,Ue(n,{data:s.data,error:null}),{updatedAt:Date.now()});});}),a}async queryGetDynamicFields(e){return await this.callWithRateLimiter(N.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let a=await this.callWithRateLimiter(N.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(a?.data){let s=N.rpc.getObject({objectId:a.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:s}).forEach(([r,i])=>{this.queryClient.setQueryData(r,Ue(i,{data:a.data,error:null}),{updatedAt:Date.now()});});}return a}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(N.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let a=await this.client.getAllBalances({owner:e});return a?a.reduce((o,r)=>(r.totalBalance!=="0"&&(o[suiKit.normalizeStructTag(r.coinType)]=r),o),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:a,typeArgs:s}){let o=new suiKit.SuiTxBlock;if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");let i=await Promise.all((a??[]).map(async n=>{if(typeof n!="string")return n;let c=(await this.queryGetObject(n))?.data;return c||n}));return o.moveCall(e,i,s),await this.callWithRateLimiter(N.rpc.getInspectTxn({queryTarget:e,args:a,typeArgs:s,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(o))}},qe=xt;var Ot=class{pythEndpoints;scallopSuiKit;constants;constructor(e={}){this.constants=e.scallopConstants??new Ee(e),this.scallopSuiKit=e.scallopSuiKit??new qe({queryClient:this.constants.queryClient,...e}),this.pythEndpoints=e.pythEndpoints??["https://hermes.pyth.network"];}get walletAddress(){return this.scallopSuiKit.walletAddress}get suiKit(){return this.scallopSuiKit.suiKit}get queryClient(){return this.constants.queryClient}get address(){return this.constants}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isMarketCoin(e){let a=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(a)}async init({force:e=false}={}){await this.constants.init({force:e});}parseCoinName(e){return e.slice(1)}parseSymbol(e){return this.isMarketCoin(e)?this.constants.poolAddresses[this.parseCoinName(e)]?.sCoinSymbol??"":this.constants.poolAddresses[e]?.symbol??""}parseCoinType(e,a=false){return a?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let a=`s${e}`;return this.constants.whitelist.scoin.has(a)?a: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 a=this.parseCoinName(e);return this.parseCoinType(a)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,true)}parseMarketCoinName(e){return `s${e}`}getSpoolRewardCoinName=()=>"sui";getCoinDecimal(e){return this.constants.coinDecimals[e]??0}getCoinWrappedType(e){if(this.isSuiBridgeAsset(e))return {from:"Sui Bridge",type:"Asset from Sui Bridge"};if(this.isWormholeAsset(e))return {from:"Wormhole",type:"Portal from Ethereum"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:a,module:s,name:o,typeParams:r}=suiKit.parseStructTag(e);return a===this.constants.protocolObjectId&&s==="reserve"&&o==="MarketCoin"?this.parseMarketCoinName((typeof r[0]=="string"?suiKit.parseStructTag(r[0]):r[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||suiKit.parseStructTag(e).name.toLowerCase()}async selectCoins(e,a=suiKit.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,a)}async mergeSimilarCoins(e,a,s,o=this.walletAddress){try{let r=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,o);r.length>0&&e.mergeCoins(a,r.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let a=await Re(this,e);if(!a)return;let s=a.collaterals.map(n=>`0x${n.type.name}`),o=a.debts.map(n=>`0x${n.type.name}`);return [...new Set([...s,...o])].map(n=>this.parseCoinNameFromType(n))}parseDataFromPythPriceFeed(e){let s=[...this.constants.whitelist.lending].find(o=>this.address.get(`core.coins.${o}.oracle.pyth.feed`)===e.id);if(s){let o=e.getPriceUnchecked();return {coinName:s,price:o.getPriceAsNumberUnchecked(),publishTime:Number(o.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,a){let s=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(a=a||(await this.scallopSuiKit.queryGetObject(s))?.data,a){let o=a;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),n=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((n?-1:1)*i)*(d?-1:1)}}return 0}async getPythPrices(e){let a=e.reduce((r,i)=>{let n=this.address.get(`core.coins.${i}.oracle.pyth.feedObject`);return n&&(r[n]?r[n].push(i):r[n]=[i]),r},{}),o=(await this.scallopSuiKit.queryGetObjects(Object.keys(a))).reduce((r,i)=>(a[i.objectId].forEach(n=>{r[n]=i;}),r),{});return (await Promise.all(Object.entries(o).map(async([r,i])=>({coinName:r,price:await this.getPythPrice(r,i)})))).reduce((r,i)=>(r[i.coinName]=i.price,r),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let a={},s=this.pythEndpoints,o=new Set(e);for(let r of s){let i=Array.from(o.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(i.length===0)break;let n=i.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(r,{timeout:4e3});try{let d=await this.queryClient.fetchQuery({queryKey:N.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(n),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let p=i[u][0],b=this.parseDataFromPythPriceFeed(l);a[p]=b.price,o.delete(p);});}catch(d){console.error(d.message);}if(o.size===0)break}return o.size>0&&(a={...a,...await this.getPythPrices(Array.from(o.values()))},o.clear()),a}parseAprToApy(e,a=365){return (1+e/a)**a-1}parseApyToApr(e,a=365){return ((1+e)**(1/a)-1)*a}getUnlockAt(e,a){let s=Math.floor(new Date().getTime()/1e3),o=a?Math.max(Math.floor(a/1e3)-s,0):0,r=0;if(o===0){let i=(e??1)*86400;r=Math.min(s+i,s+126144e3);}else {let i=Math.min(e?e*86400+o:o,126144e3);r=s+i;}return Ka(r)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},Qe=Ot;var Rt=class extends Se{constructor(e={}){e.baseUrl=e.indexerApiUrl??Et,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",N.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((a,s)=>(a[s.coinName]=s,a),{}),collaterals:e.data.collaterals.reduce((a,s)=>(a[s.coinName]=s,a),{})};throw Error("Failed to getMarket.")}async getMarketPools(){return (await this.getMarket()).pools}async getMarketPool(e){return (await this.getMarketPools())[e]}async getMarketCollaterals(){return (await this.getMarket()).collaterals}async getMarketCollateral(e){return (await this.getMarketCollaterals())[e]}async getSpools(){let e=await this.get("/api/spools/migrate",N.api.getSpools());if(e.status===200)return e.data.spools.reduce((a,s)=>(a[s.marketCoinName]=s,a),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",N.api.getBorrowIncentivePool());if(e.status===200)return e.data.borrowIncentivePools.reduce((a,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((o,r)=>(o[r.coinName]=r,o),{})),a[s.coinName]=s,a),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",N.api.getTotalValueLocked());if(e.status===200)return e.data;throw Error("Failed to getTotalValueLocked.")}async getCoinPrice(e){return (await this.getMarketPool(e))?.coinPrice??0}async getCoinPrices(){let e=await this.getMarketPools();return Object.entries(e).reduce((a,[s,o])=>(o&&(a[s]=o.coinPrice),a),{})}},$e=Rt;var ho=async({address:t,scallopSuiKit:e})=>{let a=t.get("borrowIncentive.query"),s=t.get("borrowIncentive.incentivePools"),o=`${a}::incentive_pools_query::incentive_pools_data`,r=[s];return (await e.queryInspectTxn({queryTarget:o,args:r}))?.events[0].parsedJson},Va=async(t,e=[...t.constants.whitelist.lending],a=false,s,o)=>{let r={};s=s??(await t.getMarketPools(void 0,{coinPrices:o,indexer:a})).pools,o=o??await t.getAllCoinPrices({marketPools:s});let i=await ho(t);for(let n of i?.incentive_pools??[]){let c={},d=Xt(t.utils,n),l=utils.normalizeStructTag(n.pool_type.name),u=t.utils.parseCoinNameFromType(l),p=o?.[u]??0,b=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[g,h]of Object.entries(d.poolPoints)){if(!h)continue;let C=h.pointType,P=t.utils.parseCoinNameFromType(C),D=t.utils.getCoinDecimal(P);if(D===void 0)throw new Error(`Coin decimal not found for ${P}`);let k=o?.[P]??0,R=t.utils.parseSymbol(P),_=t.utils.getCoinDecimal(P),F=zt(h,k,D,p,b);c[g]={symbol:R,coinName:P,coinType:C,coinDecimal:_,coinPrice:k,points:h.points,distributedPoint:h.distributedPoint,weightedAmount:h.weightedAmount,...F};}let m=S__default.default(d.staked),y=m.shiftedBy(-1*b),f=y.multipliedBy(p);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:l,coinDecimal:b,coinPrice:p,stakedAmount:m.toNumber(),stakedCoin:y.toNumber(),stakedValue:f.toNumber(),points:c};}return r},qa=async({utils:t},e,a=[...t.constants.whitelist.lending])=>{let s=t.address.get("borrowIncentive.query"),o=t.address.get("borrowIncentive.incentiveAccounts"),r=`${s}::incentive_account_query::incentive_account_data`,i=[o,e],c=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:i}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let p=Ht(t,u),b=p.poolType,m=t.parseCoinNameFromType(b);return a&&a.includes(m)&&(l[m]=p),l},{})},Qa=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("borrowIncentive.object"),o=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),i=await e.queryGetObject(o);if(i?.data?.content?.dataType!=="moveObject")return null;let c=i.data.content.fields.ve_sca_bind.fields.id.id,d=`${s}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,l=await e.queryGetDynamicFieldObject({parentId:c,name:{type:d,value:a}});return l?.data?.content?.dataType!=="moveObject"?null:l.data.content.fields.value.fields.id},$a=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("borrowIncentive.object"),o=t.get("borrowIncentive.incentiveAccounts"),r=t.get("core.object"),i=await e.queryGetObject(o);if(i?.data?.content?.dataType!=="moveObject")return null;let n=i.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:n,name:{type:`${s}::typed_id::TypedID<${r}::obligation::Obligation>`,value:a}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var So=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(t=>({totalPoolReward:S__default.default(t.balance).shiftedBy(-9).toNumber(),isClaimEnabled:t.enable_claim})),wo=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),Wa=async(t,e)=>{let a=t.address.get("loyaltyProgram.rewardPool"),s=await t.scallopSuiKit.queryGetObject(a);if(s?.data?.content?.dataType!=="moveObject")return null;let o=s.data.content.fields,{isClaimEnabled:r,totalPoolReward:i}=So.parse(o),n={pendingReward:0,totalPoolReward:i,isClaimEnabled:r};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return n;let c=t.address.get("loyaltyProgram.userRewardTableId"),d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return n;let l=d.data.content.fields;return n.pendingReward=wo.parse(l),n},ko=zod.z.object({reserve_ve_sca_key:zod.z.nullable(zod.z.object({fields:zod.z.object({id:zod.z.object({id:zod.z.string()})}),type:zod.z.string()})),enable_claim:zod.z.boolean()}).transform(t=>({reserveVeScaKey:t.reserve_ve_sca_key?.fields.id.id,isClaimEnabled:t.enable_claim})),Co=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),Ga=async(t,e)=>{let a=t.address.get("veScaLoyaltyProgram.veScaRewardPool"),s=await t.scallopSuiKit.queryGetObject(a);if(s?.data?.content?.dataType!=="moveObject")return null;let o=s.data.content.fields,{isClaimEnabled:r,reserveVeScaKey:i}=ko.parse(o),n={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:r},c;if(i&&(c=await t.getVeSca(i),n.totalPoolReward=c?.currentVeScaBalance??0),e=e??(await t.getVeScas())[0]?.keyObject,!e)return n;let d=t.address.get("veScaLoyaltyProgram.veScaRewardTableId"),l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:d,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(l?.data?.content?.dataType!=="moveObject")return n;let u=l.data.content.fields;n.pendingScaReward=Co.parse(u);let p=Math.max((c?.unlockAt??0)-Date.now(),0);return n.pendingVeScaReward=n.pendingScaReward*(Math.floor(p/1e3)/126144e3),n};var xo=[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"],We=async t=>{for(let e of xo)try{return await t(new client.SuiClient({url:e}))}catch(a){if(a.status!==429)throw a;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},Ao=async(t,e,a="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,o=false,r={};do{let i=await t.getDynamicFields({parentId:a,limit:10,cursor:s});if(!i)break;let{data:n,hasNextPage:c,nextCursor:d}=i;n.forEach(l=>{let u=`0x${l.name.value.name}`;e.has(u)&&(r[u]=l.objectId);}),o=c,s=d;}while(o);return r},Y=async(t,e,a,s=true)=>{let o=(await We(async r=>await r.getDynamicFieldObject({parentId:t,name:{type:e,value:a}}))).data;return s?o?.objectId:o?.content},Xa=async(t,e=[])=>{let a=new Set(e),s={},r=(await fetch(`https://sui.apis.scallop.io/addresses/${t}`).then(k=>k.json())).mainnet;if(!r)throw new Error("Failed to fetch addresses");let i=Object.keys(r.core.coins);if(i.length===0)throw new Error("Pools empty");let n=i.reduce((k,R)=>{if(a.size>0&&!a.has(R))return k;let _=r.core.coins[R];return _&&_.coinType&&k.push([R,_.coinType]),k},[]);if(n.length===0)throw new Error("No coinTypesPairs");let c=r.core.market,d=(await We(async k=>await k.getObject({id:c,options:{showContent:!0}}))).data;if(!(d&&d.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let l=d.content.fields,u=l.vault.fields.balance_sheets.fields.table.fields.id.id,p=l.collateral_stats.fields.table.fields.id.id,b=l.borrow_dynamics.fields.table.fields.id.id,m=l.interest_models.fields.table.fields.id.id,y=l.risk_models.fields.table.fields.id.id,f="0x1::type_name::TypeName",g="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",h="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",C="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",P="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",D=await We(async k=>await Ao(k,new Set(n.map(([,R])=>R))));return await Promise.all(n.map(async([k,R])=>{let _=R.slice(2),F=await Promise.all([Y(u,f,{name:_},true),Y(p,f,{name:_},true),Y(b,f,{name:_},true),Y(m,f,{name:_},true),Y(y,f,{name:_},true),Y(c,g,_,true),Y(c,h,_,true),Y(c,C,_,true),Y(c,P,_,false)]),{symbol:ee,metaData:V}=r.core.coins[k],T={spool:"",spoolReward:""},x=r.spool.pools[`s${k}`];if(x){let{id:M,rewardPoolId:Q}=x;T={spool:M,spoolReward:Q};}let A={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},O=`s${k}`,B=r.scoin.coins[O];if(B){let{coinType:M,treasury:Q,metaData:H,symbol:J}=B;A={sCoinType:M,sCoinTreasury:Q,sCoinMetadataId:H,sCoinSymbol:J};}let E={pythFeed:"",pythFeedObjectId:""};if(r.core.coins[k]?.oracle.pyth){let{feed:M,feedObject:Q}=r.core.coins[k].oracle.pyth;E={pythFeed:M,pythFeedObjectId:Q};}let{feed:v,feedObject:j}=r.core.coins[k].oracle.pyth,K=(await We(async M=>await M.getCoinMetadata({coinType:R})))?.decimals??0,q=T?`s${k}`:void 0;s[k]={coinName:k,symbol:ee,lendingPoolAddress:F[0]??"",collateralPoolAddress:F[1]??"",borrowDynamic:F[2]??"",interestModel:F[3]??"",riskModel:F[4],borrowFeeKey:F[5]??"",supplyLimitKey:F[6]??"",borrowLimitKey:F[7]??"",isolatedAssetKey:F[8]?.fields?.id.id??"",isIsolated:F[8]?.fields?.value??false,...T,...A,sCoinName:O,coinMetadataId:V,coinType:R,spoolName:q,decimals:K,...E,flashloanFeeObject:D[R]??""},await new Promise(M=>setTimeout(M,1e3));})),s};var za=async(t,e=[...t.constants.whitelist.lending],a,s,o,r=false)=>{let i=e.map(b=>t.utils.parseMarketCoinName(b)),n=i.filter(b=>t.constants.whitelist.spool.has(b));o=o??await t.utils.getCoinPrices(),s=s??(await t.getMarketPools(e,{indexer:r,coinPrices:o})).pools;let c=await t.getSpools(n,{indexer:r,marketPools:s,coinPrices:o}),[d,l,u]=await Promise.all([t.getCoinAmounts(e,a),t.getMarketCoinAmounts(i,a),t.getAllStakeAccounts(a)]),p={};return await Promise.allSettled(e.map(async b=>{let m=n.find(f=>f===t.utils.parseMarketCoinName(b)),y=t.utils.parseMarketCoinName(b);p[b]=await vt(t,b,a,r,s?.[b],m?c[m]:void 0,m?u[m]:[],d?.[b],l?.[y],o?.[b]??0);})),p},vt=async(t,e,a,s=false,o,r,i,n,c,d,l)=>{let u=t.utils.parseMarketCoinName(e);if(d=d??(await t.utils.getCoinPrices())?.[e]??0,o=o??await t.getMarketPool(e,{indexer:s,coinPrice:d}),!o)throw new Error(`Failed to fetch marketPool for ${e}`);r=r??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:s,marketPool:o,coinPrices:{[e]:d}}):void 0,i=i||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,a):[],n=n||await t.getCoinAmount(e,a),c=c||await t.getMarketCoinAmount(u,a),l=l||await t.getSCoinAmount(u,a);let p=t.utils.getCoinDecimal(e),b=S__default.default(0),m=S__default.default(0),y=S__default.default(0),f=S__default.default(0),g=S__default.default(0),h=S__default.default(0),C=S__default.default(0),P=S__default.default(0),D=S__default.default(0);if(r)for(let E of i){let v=S__default.default(E.staked),j=v.shiftedBy(-1*r.coinDecimal),K=v.multipliedBy(o?.conversionRate??1),q=K.shiftedBy(-1*r.coinDecimal),M=q.multipliedBy(r.coinPrice);b=b.plus(v),m=m.plus(j),y=y.plus(K),f=f.plus(q),g=g.plus(M),h=h.plus(v),C=h.shiftedBy(-1*r.coinDecimal);let H=r.currentPointIndex?S__default.default(r.currentPointIndex-E.index).dividedBy(1e9):1;P=P.plus(v.multipliedBy(H).plus(E.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),D=P.shiftedBy(-1*r.rewardCoinDecimal);}let k=S__default.default(c).plus(S__default.default(l)).multipliedBy(o?.conversionRate??1),R=k.shiftedBy(-1*p),_=R.multipliedBy(d??0),F=S__default.default(d??0).multipliedBy(o?.conversionRate??1),ee=S__default.default(c).plus(S__default.default(l)),V=ee.shiftedBy(-1*p),T=S__default.default(n),x=T.shiftedBy(-1*p),A=le(k,o?.supplyAmount??1/0).plus(y),O=le(R,o?.supplyCoin??1/0).plus(f);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:o?.sCoinType??"",coinDecimal:p,coinPrice:d??0,conversionRate:o?.conversionRate??1,marketCoinPrice:F.toNumber(),supplyApr:o?.supplyApr??0,supplyApy:o?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:k.plus(y).toNumber(),suppliedCoin:R.plus(f).toNumber(),suppliedValue:_.plus(g).toNumber(),stakedMarketAmount:b.toNumber(),stakedMarketCoin:m.toNumber(),stakedAmount:y.toNumber(),stakedCoin:f.toNumber(),stakedValue:g.toNumber(),unstakedMarketAmount:ee.toNumber(),unstakedMarketCoin:V.toNumber(),unstakedAmount:k.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:_.toNumber(),availableSupplyAmount:T.toNumber(),availableSupplyCoin:x.toNumber(),availableWithdrawAmount:A.toNumber(),availableWithdrawCoin:O.toNumber(),availableStakeAmount:ee.toNumber(),availableStakeCoin:V.toNumber(),availableUnstakeAmount:h.toNumber(),availableUnstakeCoin:C.toNumber(),availableClaimAmount:P.toNumber(),availableClaimCoin:D.toNumber(),isIsolated:o?o.isIsolated:false}},Ha=async(t,e,a,s,o=false)=>{a=a??await t.getMarketPools(void 0,{indexer:o}),s=s??await t.getAllCoinPrices({marketPools:a.pools});let[r,i]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),n=await t.scallopSuiKit.queryGetObjects(i.map(d=>d.id)),c={};return await Promise.allSettled(i.map(async(d,l)=>{c[d.keyId]=await Io(t,n[l]??d.id,e,o,a,s,r);})),c},Io=async(t,e,a,s=false,o,r,i)=>{o=o??await t.getMarketPools(void 0,{indexer:s}),r=r??await t.getAllCoinPrices({marketPools:o.pools}),i=i??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),a);let[n,c,d]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:r,marketPools:o.pools}),t.getBorrowIncentiveAccounts(e)]),l={},u={},p={},b=0,m=S__default.default(0),y=S__default.default(0),f=S__default.default(0),g=0,h=0,C=S__default.default(0),P=S__default.default(0);for(let T of Array.from(t.constants.whitelist.collateral)){let x=n?.collaterals.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),A=o.collaterals[T],O=t.utils.getCoinDecimal(T),B=r?.[T],E=i?.[T]??0;if(A&&B){let v=S__default.default(x?.amount??0),j=v.shiftedBy(-1*O),K=j.multipliedBy(B),q=K.multipliedBy(A.collateralFactor),M=K.multipliedBy(A.liquidationFactor),Q=S__default.default(E),H=Q.shiftedBy(-1*O);m=m.plus(K),y=y.plus(q),f=f.plus(M),v.isGreaterThan(0)&&b++,l[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:j.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:q.toNumber(),requiredCollateralValue:M.toNumber(),availableDepositAmount:Q.toNumber(),availableDepositCoin:H.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let D=[...new Set([...Object.values(o.pools).filter(T=>!!T).map(T=>T.coinName)])];for(let T of D){let x=n?.debts.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),A=o.pools[T],O=t.utils.getCoinDecimal(T),B=r?.[T],E=i?.[T]??0;if(A&&B){let v=x?.borrowIndex?A.borrowIndex/Number(x.borrowIndex)-1:0,j=S__default.default(x?.amount??0).multipliedBy(v+1),K=j.shiftedBy(-1*O),q=j,M=q.shiftedBy(-1*O),Q=S__default.default(E),H=Q.shiftedBy(-1*O),J=M.multipliedBy(B),ke=J.multipliedBy(A.borrowWeight);C=C.plus(J),P=P.plus(ke),j.isGreaterThan(0)&&g++,u[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,borrowedAmount:j.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:J.toNumber(),borrowedValueWithWeight:ke.toNumber(),borrowIndex:Number(x?.borrowIndex??0),requiredRepayAmount:q.toNumber(),requiredRepayCoin:M.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:Q.toNumber(),availableRepayCoin:H.toNumber()};}}for(let[T,x]of Object.entries(d)){if(!x)continue;let A=T,O=c[A];if(O){let B=[];Object.entries(x.pointList).forEach(([E,v])=>{let j=O.points[t.utils.parseSCoinTypeNameToMarketCoinName(E)];if(v&&j){let K=S__default.default(0),q=S__default.default(0),M=S__default.default(v.weightedAmount),H=j.currentPointIndex?Math.max(S__default.default(j.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(M.multipliedBy(H).plus(v.points)),q=K.shiftedBy(-1*j.coinDecimal);let J=S__default.default(1e12),ke=S__default.default(v.weightedAmount).div(S__default.default(x.debtAmount).multipliedBy(j.baseWeight).dividedBy(J)).isFinite()?S__default.default(v.weightedAmount).div(S__default.default(x.debtAmount).multipliedBy(j.baseWeight).dividedBy(J)).toNumber():1;K.isGreaterThanOrEqualTo(0)&&B.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,weightedBorrowAmount:M.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:q.toNumber(),boostValue:ke});}}),Object.keys(O.points).some(E=>{let v=O.points[E]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&x.debtAmount>0&&h++,p[A]={coinName:O.coinName,coinType:O.coinType,symbol:O.symbol,coinDecimal:O.coinDecimal,coinPrice:O.coinPrice,rewards:B};}}let k=f.isZero()?P.isGreaterThan(0)?S__default.default(100):S__default.default(0):P.dividedBy(f);k=k.isLessThan(1)?k:S__default.default(1);let R=m.minus(C).isGreaterThan(0)?m.minus(C):S__default.default(0),_=y.minus(P).isGreaterThan(0)?y.minus(P):S__default.default(0),F=P.isGreaterThan(0)?f:S__default.default(0),ee=P.minus(F).isGreaterThan(0)?P.minus(F):S__default.default(0),V={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:m.toNumber(),totalBorrowedValue:C.toNumber(),totalBalanceValue:R.toNumber(),totalBorrowCapacityValue:y.toNumber(),totalAvailableCollateralValue:_.toNumber(),totalBorrowedValueWithWeight:P.toNumber(),totalRequiredCollateralValue:F.toNumber(),totalUnhealthyCollateralValue:ee.toNumber(),totalRiskLevel:k.toNumber(),totalDepositedPools:b,totalBorrowedPools:g,totalRewardedPools:h,collaterals:l,debts:u,borrowIncentives:p};for(let[T,x]of Object.entries(V.collaterals)){if(!x)continue;let A=o.collaterals[T];if(A){let O=S__default.default(V.totalAvailableCollateralValue).dividedBy(A.collateralFactor).dividedBy(A.coinPrice).shiftedBy(A.coinDecimal);O=V.totalBorrowedValueWithWeight===0?S__default.default(x.depositedAmount):le(O.multipliedBy(xe(S__default.default(V.totalAvailableCollateralValue).dividedBy(A.collateralFactor).toNumber(),3,"increase")).toNumber(),x.depositedAmount,A.depositAmount),x.availableWithdrawAmount=O.toNumber(),x.availableWithdrawCoin=O.shiftedBy(-1*x.coinDecimal).toNumber();}}for(let[T,x]of Object.entries(V.debts)){if(!x)continue;let A=o.pools[T];if(A){let O=S__default.default(x.requiredRepayAmount).multipliedBy(xe(x.borrowedValue,3,"decrease")),B=S__default.default(V.totalAvailableCollateralValue).dividedBy(A.borrowWeight).shiftedBy(A.coinDecimal).dividedBy(A.coinPrice);B=V.totalAvailableCollateralValue!==0&&S__default.default(A.maxBorrowCoin).isGreaterThan(A.borrowCoin)?le(B.multipliedBy(xe(B.shiftedBy(-1*A.coinDecimal).multipliedBy(A.coinPrice).toNumber(),3,"increase")).toNumber(),A.supplyAmount):S__default.default(0),x.availableBorrowAmount=B.toNumber(),x.availableBorrowCoin=B.shiftedBy(-1*x.coinDecimal).toNumber(),x.requiredRepayAmount=O.toNumber(),x.requiredRepayCoin=O.shiftedBy(-1*x.coinDecimal).toNumber();}}return V},Ya=async(t,e=false)=>{let a=await t.getMarketPools(void 0,{indexer:e}),s=S__default.default(0),o=S__default.default(0),r=S__default.default(0);if(e){let n=await t.indexer.getTotalValueLocked();return {supplyValue:n.supplyValue,supplyValueChangeRatio:n.supplyValueChangeRatio,borrowValue:n.borrowValue,borrowValueChangeRatio:n.borrowValueChangeRatio,totalValue:n.totalValue,totalValueChangeRatio:n.totalValueChangeRatio,supplyLendingValue:n.supplyLendingValue,supplyLendingValueChangeRatio:n.supplyLendingValueChangeRatio,supplyCollateralValue:n.supplyCollateralValue,supplyCollateralValueChangeRatio:n.supplyCollateralValueChangeRatio}}for(let n of Object.values(a.pools))n&&(s=s.plus(S__default.default(n.supplyCoin).multipliedBy(n.coinPrice)),r=r.plus(S__default.default(n.borrowCoin).multipliedBy(n.coinPrice)));for(let n of Object.values(a.collaterals))n&&(o=o.plus(S__default.default(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:s.plus(o).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:r.toNumber(),totalValue:s.plus(o).minus(r).toNumber()}},Ja=async(t,e,a=false)=>{let s=await t.getAllCoinPrices({indexer:a}),o=await t.getMarketPools(void 0,{indexer:a,coinPrices:s}),[r,i,n,c]=await Promise.all([t.getLendings(void 0,e,{indexer:a,marketPools:o.pools,coinPrices:s}),t.getObligationAccounts(e,{indexer:a,market:o,coinPrices:s}),t.getBorrowIncentivePools(void 0,{marketPools:o.pools,coinPrices:s}),t.getVeScas({walletAddress:e,excludeEmpty:true})]),d=Object.values(r).filter(f=>!!f&&f.availableWithdrawCoin>0).map(f=>({suppliedCoin:f.availableWithdrawCoin,suppliedValue:f.suppliedValue,stakedCoin:f.availableUnstakeCoin,coinName:f.coinName,symbol:f.symbol,coinType:f.coinType,coinPrice:f.coinPrice,coinDecimals:f.coinDecimal,supplyApr:f.supplyApr,supplyApy:f.supplyApy,incentiveApr:isFinite(f.rewardApr)?f.rewardApr:0})),l=Object.values(i).filter(f=>!!f&&(f.totalBorrowedValueWithWeight>0||f.totalDepositedValue>0)).map(f=>({obligationId:f.obligationId,totalDebtsInUsd:f.totalBorrowedValueWithWeight,totalCollateralInUsd:f.totalDepositedValue,riskLevel:f.totalRiskLevel,availableCollateralInUsd:f.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:f.totalUnhealthyCollateralValue,collaterals:Object.values(f.collaterals).filter(g=>!!g&&g.depositedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,depositedCoin:g.depositedCoin,depositedValueInUsd:g.depositedValue})),borrowedPools:Object.values(f.debts).filter(g=>!!g&&g.borrowedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,borrowedCoin:g.borrowedCoin,borrowedValueInUsd:g.borrowedValueWithWeight,borrowApr:o.pools[g.coinName]?.borrowApr,borrowApy:o.pools[g.coinName]?.borrowApy,incentiveInfos:Object.values(n[g.coinName]?.points??{}).filter(h=>!!h&&isFinite(h.rewardApr)).map(h=>({coinName:h.coinName,symbol:h.symbol,coinType:h.coinType,incentiveApr:h.rewardApr}))}))})),u="sui",p="SUI",b=Object.values(r).reduce((f,g)=>{if(g){if(g.availableClaimCoin===0)return f;f[u]?f[u].pendingRewardInCoin+=g.availableClaimCoin:f[u]={symbol:p,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:s[u]??0,pendingRewardInCoin:g.availableClaimCoin};}return f},{}),m=Object.values(i).filter(f=>!!f).reduce((f,g)=>(Object.values(g.borrowIncentives).forEach(h=>{h?.rewards.forEach(C=>{if(C.availableClaimCoin===0)return f;f[C.coinName]?f[C.coinName].pendingRewardInCoin+=C.availableClaimCoin:f[C.coinName]={symbol:C.symbol,coinType:C.coinType,coinPrice:C.coinPrice,pendingRewardInCoin:C.availableClaimCoin};});}),f),{}),y=c.map(({keyId:f,lockedScaCoin:g,currentVeScaBalance:h,unlockAt:C})=>({veScaKey:f,coinPrice:s.sca??0,lockedScaInCoin:g,lockedScaInUsd:g*(s.sca??0),currentVeScaBalance:h,remainingLockPeriodInDays:C-Date.now()>0?(C-Date.now())/864e5:0,unlockAt:C}));return {totalSupplyValue:d.reduce((f,g)=>(f+=g.suppliedValue,f),0),...l.reduce((f,g)=>(f.totalDebtValue+=g.totalDebtsInUsd,f.totalCollateralValue+=g.totalCollateralInUsd,f),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:y.reduce((f,g)=>(f+=g.lockedScaInUsd,f),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(b).reduce((f,[g,h])=>(f.push({...h,coinName:"sui",pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),f),[]),borrowIncentives:Object.entries(m).reduce((f,[g,h])=>(f.push({coinName:g,...h,pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),f),[])},veScas:y}};var jt=async({address:t,scallopSuiKit:e},a,s)=>{let o=t.get(`core.coins.${a}.oracle.pyth.feedObject`);if(s=s||(await e.queryGetObject(o))?.data,s){let r=s;if(r.content&&"fields"in r.content){let i=r.content.fields,n=Number(i.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),c=Number(i.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),d=Number(i.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(i.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return d*10**((c?-1:1)*n)*(l?-1:1)}}return 0},Za=async({address:t,scallopSuiKit:e},a)=>{let s=a.reduce((i,n)=>{let c=t.get(`core.coins.${n}.oracle.pyth.feedObject`);return c&&(i[c]?i[c].push(n):i[c]=[n]),i},{}),r=(await e.queryGetObjects(Object.keys(s))).reduce((i,n)=>(s[n.objectId].forEach(c=>{i[c]=n;}),i),{});return (await Promise.all(Object.entries(r).map(async([i,n])=>({coinName:i,price:await jt({address:t,scallopSuiKit:e},i,n)})))).reduce((i,n)=>(i[n.coinName]=n.price,i),{})},es=async(t,e,a,s=false)=>{if(a=a??(s?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:a,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let o={};return t.constants.whitelist.scoin.forEach(r=>{let i=t.utils.parseCoinName(r);o[r]=S__default.default(a[i]??0).multipliedBy(e[i]?.conversionRate??1).toNumber();}),{...a,...o}};var ts=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("referral.bindingTableId"),o=await e.queryGetDynamicFieldObject({parentId:s,name:{type:"address",value:a}});return o?.data?.content?.dataType!=="moveObject"?null:o.data.content.fields.value};var as=async({utils:t},e)=>{let a=t.address.get("scoin.id"),s=[t.getSCoinTreasury(e)],o=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],r=`${a}::s_coin_converter::total_supply`,n=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:s,typeArgs:o}))?.results;if(n&&n[0]?.returnValues){let c=Uint8Array.from(n[0].returnValues[0][0]),d=n[0].returnValues[0][1];return Us__default.default(d==="u64","Result type is not u64"),S__default.default(bcs.bcs.u64().parse(c)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},ss=async({utils:t},e=[...t.constants.whitelist.scoin],a)=>{let s=a||t.suiKit.currentAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await _t({utils:t},r,s);o[r]=i;})),o},_t=async({utils:t},e,a)=>{let s=a||t.suiKit.currentAddress,o=t.parseSCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},_o=(t,e,a)=>{if(e===a)throw new Error("fromAsset and toAsset must be different");if(!t.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!t.constants.whitelist.scoin.has(a))throw new Error("toAsset is not supported")},os=async(t,e,a,s)=>{_o(t.utils,e,a);let o=t.utils.parseCoinName(e),r=t.utils.parseCoinName(a),i=await Promise.all([t.getMarketPool(o),t.getMarketPool(r)]);if(i.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(i.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let n=i[0].conversionRate,c=1/i[1].conversionRate,l=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[o]||!u[r])throw new Error("Failed to fetch the coin prices");if(u[r]===0)throw new Error("Price of toCoin cannot be zero");return u[o]/u[r]})();return S__default.default(n).multipliedBy(l).multipliedBy(c).toNumber()};var rs=async(t,e,a=t.address.get("core.oracles.switchboard.registryTableId"))=>{let s=[],o=e.map((n,c)=>{let d=t.utils.address.get(`core.coins.${n}.oracle.switchboard`);return d||(s.push({idx:c,coinName:n}),null)});if(s.length===0)return o;let i=s.map(n=>n.coinName).map(n=>{let c=t.utils.parseCoinType(n);if(!c)throw new Error(`Invalid coin name: ${n}`);return c});return await Promise.all(i.map(async(n,c)=>{let d={type:"0x1::type_name::TypeName",value:{name:n.slice(2)}},l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:d});if(!l?.data?.content||l.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${n}`);let u=l.data.content;o[c]=u.fields.value;})),o};var is=async({address:t,scallopSuiKit:e})=>{let a=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[s,o]=await Promise.all([e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:a,value:{dummy_field:false}}}),e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:a,value:{dummy_field:false}}})]);return {primary:s,secondary:o}},Bt=async(t,e)=>{if(e==="primary"&&!t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"))return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"))return console.error("Secondary price update policy vecset id is not set"),null;let a=n=>`${n}::rule::Rule`,s=Object.values(t.address.get("core.packages.pyth.lst")??{}).reduce((n,c)=>(n[a(c.object)]="pyth",n),{}),o={[a(t.address.get("core.packages.pyth.object"))]:"pyth",[a(t.address.get("core.packages.supra.object"))]:"supra",[a(t.address.get("core.packages.switchboard.object"))]:"switchboard",...s},r={},i=null;do{let n=await t.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:i,limit:10});if(!n)break;let{data:c,hasNextPage:d,nextCursor:l}=n;i=l;let u=c.map(b=>b.objectId);if((await t.scallopSuiKit.queryGetObjects(u)).forEach(b=>{if(!b.content||b.content.dataType!=="moveObject")return;let m=b.content.fields,y=m.name.fields.name,f=t.parseCoinNameFromType(`0x${y}`);if(!f)throw new Error(`Invalid asset name: ${f}`);r[f]||(r[f]=[]),m.value.fields.contents.forEach(h=>{r[f].push(o[`0x${h.fields.name}`]);});}),!d)break}while(i);return r};var Mt=class{indexer;utils;constructor(e){this.utils=e.utils??new Qe(e),this.indexer=e.indexer??new $e({queryClient:this.utils.queryClient,...e}),this.initIndexerFallback();}initIndexerFallback(){this.queryMarket=U.call(this,this.queryMarket),this.getMarketPools=U.call(this,this.getMarketPools),this.getMarketPool=U.call(this,this.getMarketPool),this.getMarketCollaterals=U.call(this,this.getMarketCollaterals),this.getMarketCollateral=U.call(this,this.getMarketCollateral),this.getSpools=U.call(this,this.getSpools),this.getSpool=U.call(this,this.getSpool),this.getBorrowIncentivePools=U.call(this,this.getBorrowIncentivePools),this.getLendings=U.call(this,this.getLendings),this.getLending=U.call(this,this.getLending),this.getObligationAccounts=U.call(this,this.getObligationAccounts),this.getObligationAccount=U.call(this,this.getObligationAccount),this.getTvl=U.call(this,this.getTvl);}async init(e=false){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.utils.address}async queryMarket(e){return await aa(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],a){return await oa(this,e,a?.indexer,a?.coinPrices)}async getMarketPool(e,a){return (await this.getMarketPools(void 0,a)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],a){return await ra(this,e,a?.indexer)}async getMarketCollateral(e,a){return await at(this,e,a?.indexer)}async getObligations(e=this.walletAddress){return await oe(this,e)}async queryObligation(e){return Re(this,e)}async getCoinAmounts(e,a=this.walletAddress){return await ia(this,e,a)}async getCoinAmount(e,a=this.walletAddress){return await ot(this,e,a)}async getMarketCoinAmounts(e,a=this.walletAddress){return await na(this,e,a)}async getMarketCoinAmount(e,a=this.walletAddress){return await rt(this,e,a)}async getPriceFromPyth(e){return await jt(this,e)}async getPricesFromPyth(e){return await Za(this,e)}async getSpools(e,a){return await Sa(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getSpool(e,a){return (await this.getSpools(void 0,a))[e]}async getAllStakeAccounts(e=this.walletAddress){return await ye(this,e)}async getStakeAccounts(e,a=this.walletAddress){return (await this.getAllStakeAccounts(a))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let a={};for(let s of e){let o=await mt(this,s);o&&(a[s]=o);}return a}async getStakePool(e){return await mt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let a={};return await Promise.allSettled(e.map(async s=>{let o=await yt(this,s);o&&(a[s]=o);})),a}async getStakeRewardPool(e){return await yt(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],a){return await Va(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getBorrowIncentiveAccounts(e,a){return await qa(this,e,a)}async getLendings(e,a=this.walletAddress,s){return await za(this,e,a,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,a=this.walletAddress,s){return await vt(this,e,a,s?.indexer)}async getObligationAccounts(e=this.walletAddress,a){return await Ha(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccount(e,a=this.walletAddress,s){let o=await this.getObligationAccounts(a,s);return Object.values(o).find(r=>r?.obligationId===e)}async getTvl(e){return await Ya(this,e?.indexer)}async getVeSca(e){return await ae(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:a=false}={}){return await Ke(this,e,a)}async getVeScaTreasuryInfo(){return await Oa(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await ts(this,e)}async getBindedObligationId(e){return await Qa(this,e)}async getBindedVeScaKey(e){return await $a(this,e)}async getLoyaltyProgramInfos(e){return await Wa(this,e)}async getVeScaLoyaltyProgramInfos(e){return await Ga(this,e)}async getSCoinTotalSupply(e){return await as(this,e)}async getSCoinAmounts(e,a=this.walletAddress){return await ss(this,e,a)}async getSCoinAmount(e,a=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await _t(this,s,a):0}async getSCoinSwapRate(e,a){return await os(this,e,a)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await ca(this,e)}async getPoolSupplyLimit(e){return await Ae(this.utils,e)}async getPoolBorrowLimit(e){return await Oe(this.utils,e)}async getIsolatedAssets(e=false){return await Jt(this,e)}async isIsolatedAsset(e){return se(this.utils,e)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return es(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return Xa(e)}async getUserPortfolio(e){return Ja(this,e?.walletAddress??this.walletAddress,e?.indexer??false)}async getPriceUpdatePolicies(){return await is(this)}async getAssetOracles(){let[e,a]=await Promise.all([Bt(this.utils,"primary"),Bt(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,o)=>(s[o]={primary:e?.[o]??[],secondary:a?.[o]??[]},s),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await rs(this,e)}},Ge=Mt;var Ft=class{query;usePythPullModel;useOnChainXOracleList;pythSponsoredFeeds;constructor(e){this.query=e.query??new Ge(e),this.usePythPullModel=e.usePythPullModel??true,this.useOnChainXOracleList=e.useOnChainXOracleList??true,this.pythSponsoredFeeds=[...new Set(e.pythSponsoredFeeds??[])];}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get suiKit(){return this.scallopSuiKit.suiKit}get address(){return this.utils.address}async init(e=false){await this.query.init(e);}createTxBlock(e){return Da(this,e)}async selectCoin(e,a,s,o=this.walletAddress){if(a==="sui"){let[r]=e.splitSUIFromGas([s]);return {takeCoin:r}}else {let r=this.utils.parseCoinType(a),i=await this.utils.selectCoins(s,r,o),[n,c]=e.takeAmountFromCoins(i,s);return {takeCoin:n,leftCoin:c}}}async selectMarketCoin(e,a,s,o=this.walletAddress){let r=this.utils.parseMarketCoinType(a),i=await this.utils.selectCoins(s,r,o),n=i.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(i,Math.min(s,n));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoin(e,a,s,o=this.walletAddress){let r=this.utils.parseSCoinType(a),i=await this.utils.selectCoins(s,r,o),n=i.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(i,Math.min(n,s));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoinOrMarketCoin(e,a,s,o=this.walletAddress){let r=s,i={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:d,takeCoin:l,totalAmount:u}=await this.selectSCoin(e,a,r,o);if(i.leftCoins.push(d),i.sCoins.push(l),r-=u,r>0){let{leftCoin:p,takeCoin:b}=await this.selectMarketCoin(e,a,s,o);e.transferObjects([p],o),i.marketCoins.push(b);}}catch{let{takeCoin:l,leftCoin:u}=await this.selectMarketCoin(e,a,s,o);i.leftCoins.push(u),i.marketCoins.push(l);}e.transferObjects(i.leftCoins,o);let n=i.marketCoins.length>0?i.marketCoins.length>1?e.mergeCoins(i.marketCoins[0],i.marketCoins.slice(1)):i.marketCoins[0]:void 0;return {sCoin:i.sCoins.length>0?i.sCoins.length>1?e.mergeCoins(i.sCoins[0],i.sCoins.slice(1)):i.sCoins[0]:void 0,marketCoin:n}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,a,s,o){return e.moveCall(a,s,o)}},Xe=Ft;var Dt=class{builder;networkType;constructor(e){this.builder=e.builder??new Xe(e),this.networkType=e.networkType??"mainnet";}get query(){return this.builder.query}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.builder.address}async init(e=false){await this.builder.init(e);}async queryMarket(){return await this.query.queryMarket()}async getObligations(e){let a=e??this.walletAddress;return await this.query.getObligations(a)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let a=e??this.walletAddress;return await this.query.getAllStakeAccounts(a)}async getStakeAccounts(e,a){let s=a??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=true){let a=this.builder.createTxBlock();return a.openObligationEntry(),e?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async depositCollateral(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await this.query.getObligations(n),d=o??c[0]?.id;if(d)await i.addCollateralQuick(a,e,d);else {let[l,u,p]=i.openObligation();await i.addCollateralQuick(a,e,l),i.returnObligation(l,p),i.transferObjects([u],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdrawCollateral(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=await n.takeCollateralQuick(a,e,o,r);return n.transferObjects([d],c),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async deposit(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.depositQuick(a,e);return r.transferObjects([n],i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=this.utils.parseMarketCoinName(e),d=await this.query.getStakeAccounts(c),l=o??d[0]?.id,u=await i.depositQuick(a,e,false);if(l)await i.stakeQuick(u,c,l);else {let p=i.createStakeAccount(c);await i.stakeQuick(u,c,p),i.transferObjects([p],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdraw(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.withdrawQuick(a,e);return r.transferObjects([n],i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async borrow(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);s&&d&&await n.unstakeObligationQuick(o,r);let l=await n.borrowQuick(a,e,o,r);return n.transferObjects([l],c),s&&d&&await n.stakeObligationWithVeScaQuick(o,r),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async repay(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);return s&&d&&await n.unstakeObligationQuick(o,r),await n.repayQuick(a,e,o),s&&d&&await n.stakeObligationWithVeScaQuick(o,r),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async flashLoan(e,a,s,o=true,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let[c,d]=i.borrowFlashLoan(a,e);return i.repayFlashLoan(await s(i,c),d,e),o?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async createStakeAccount(e,a=true,s){let o=this.builder.createTxBlock(),r=s??this.walletAddress;o.setSender(r);let i=o.createStakeAccount(e);return o.transferObjects([i],r),a?await this.scallopSuiKit.signAndSendTxn(o):o.txBlock}async stake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await this.query.getStakeAccounts(e),d=o??c[0]?.id;if(d)await i.stakeQuick(a,e,d);else {let l=i.createStakeAccount(e);await i.stakeQuick(a,e,l),i.transferObjects([l],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async unstake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await i.unstakeQuick(a,e,o);if(c){let d=this.utils.parseSCoinType(e);if(!d)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(i,c,d,wt(i));}return i.transferObjects([c],n),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async unstakeAndWithdraw(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await i.unstakeQuick(a,e,o,false),d=this.utils.parseCoinName(e);if(c){let l=i.withdraw(c,d);await this.utils.mergeSimilarCoins(i,l,this.utils.parseCoinType(d),wt(i)),i.transferObjects([l],n);}else throw new Error(`No stake found for ${e}`);return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async claim(e,a=true,s,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.claimQuick(e,s);return r.transferObjects(n,i),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stakeObligation(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;return r.setSender(i),await r.stakeObligationWithVeScaQuick(e,a),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async unstakeObligation(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;return r.setSender(i),await r.unstakeObligationQuick(e,a),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimBorrowIncentive(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);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 r.claimBorrowIncentiveQuick(l,e,a);n[l]?n[l].push(u):n[l]=[u];}return r.transferObjects(Object.values(n).map(l=>{let u=l[0];return l.length>1&&r.mergeCoins(u,l.slice(1)),u}),i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async migrateAllMarketCoin(e=true,a=true,s){let o=s??this.walletAddress,r=this.builder.createTxBlock();r.setSender(o);let i=[];for(let n of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:d}=await this.builder.selectMarketCoin(r,n,Number.MAX_SAFE_INTEGER,o);if(d){let l=r.mintSCoin(n,d);c.push(l);}}catch(d){if(!d.toString().includes("No valid coins found for the transaction"))throw d}if(e&&this.constants.whitelist.spool.has(n))try{let d=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,n);d&&c.push(d);}catch{}if(c.length>0){let d=c[0];c.length>1&&r.mergeCoins(d,c.slice(1));let l=this.utils.parseSCoinType(n);await this.utils.mergeSimilarCoins(r,d,l,o),i.push(d);}}return i.length>0&&r.transferObjects(i,o),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=true,a){let s=a??this.walletAddress,o=(await this.query.getVeScas({walletAddress:s})??[]).map(({keyObject:n})=>n);if(o.length===0)throw new Error("No veSCA found in the wallet");let r=[],i=this.builder.createTxBlock();if(i.setSender(s),await Promise.all(o.map(async n=>{try{let c=await i.redeemScaQuick({veScaKey:n,transferSca:!1});if(!c)return;r.push(c);}catch{}})),r.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return r.length>1&&i.mergeCoins(r[0],r.slice(1)),await this.utils.mergeSimilarCoins(i,r[0],"sca",s),e?await this.scallopSuiKit.signAndSendTxn(i):{tx:i.txBlock,scaCoin:r[0]}}async mintTestCoin(e,a,s=true,o){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let i=this.builder.createTxBlock(),n=o??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),d=this.address.get(`core.coins.${e}.treasury`),l=`${c}::${e}::mint`,u=i.moveCall(l,[d,a]);return i.transferObjects([u],n),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}},ze=Dt;var Kt=class{client;constructor(e){this.client=e.client??new ze(e);}async init(e=false){await this.client.init(e);}async createScallopClient(){return await this.init(),this.client}async createScallopBuilder(){return await this.init(),this.client.builder}async createScallopQuery(){return await this.init(),this.client.query}async createScallopUtils(){return await this.init(),this.client.utils}async createScallopIndexer(){return await this.init(),this.client.query.indexer}async getScallopConstants(){return await this.init(),this.client.constants}},ns=Kt;
|
|
2
|
-
exports.API_BASE_URL=
|
|
1
|
+
'use strict';var client=require('@mysten/sui/client'),transactions=require('@mysten/sui/transactions'),utils=require('@mysten/sui/utils'),suiKit=require('@scallop-io/sui-kit'),S=require('bignumber.js'),zod=require('zod'),pythSuiJs=require('@pythnetwork/pyth-sui-js'),bcs=require('@mysten/sui/bcs'),qs=require('assert'),io=require('axios'),queryCore=require('@tanstack/query-core');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var qs__default=/*#__PURE__*/_interopDefault(qs);var io__default=/*#__PURE__*/_interopDefault(io);var Et="https://sui.apis.scallop.io",Vt="https://sdk.api.scallop.io";var qt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var Ko=false,Lo=false,Ce="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Je="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var N={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePool:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:t=>["rpc","getInspectTxn",t],getObject:t=>["rpc","getObject",t],getObjects:t=>["rpc","getObjects",t],getOwnedObjects:t=>["rpc","getOwnedObjects",{...t,filter:JSON.stringify(t?.filter??void 0)}],getDynamicFields:t=>["rpc","getDynamicFields",t],getDynamicFieldObject:t=>["rpc","getDynamicFieldObject",t],getTotalVeScaTreasuryAmount:t=>["rpc","getTotalVeScaTreasuryAmount",{...t,refreshArgs:t?.refreshArgs?JSON.stringify(t?.refreshArgs):void 0,vescaAmountArgs:t?.vescaAmountArgs?JSON.stringify(t?.vescaAmountArgs):void 0}],getAllCoinBalances:t=>["rpc","getAllCoinBalances",t],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:()=>["oracle","getPythPriceIds"]}};var Ze=[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 Qo={core:{version:"0xee15d07800e2ad4852505c57cd86afea774af02c17388f8bd907de75f915b4f4",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",market:"0xa7f41efe3b551c20ad6d6cea6ccd0fd68d2e2eaaacdca5e62d956209f6a51312",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0xb7d7e1464936fbdcdd4913308b40335e662401029635289bdb317c7dde9d6c68",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"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:"17cd845b16e874485b2684f8b8d1517d744105dbb904eec30222717f4bc9ee0d",feedObject:"0xd779885c5246357e24cbde7348f2d81f756d9650975c02d81346b15d8b557ebf"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"6120ffcf96395c70aa77e72dcb900bf9d40dccab228efca59a17b90ce423d5e8",feedObject:"0x4c1d831576b60fec657e0c310943eff8c1f28197c552e57d1fefdc55edddb263"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"0x54e81607d636c3520a697b803a99a167fce7ccdf1bad7d210e2941d264515351",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}}},oracles:{xOracle:"0x0c09daac413e834f2fe69601c41e836022fa9a185df6b56a80f6bcd8a3ecb8a2",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryCap:"",registryTableId:"",state:""},pyth:{registry:"0xdcf813893649521abd27816ba8d946b0cb7fc98d776cc9adcecba54688ccc109",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c",lst:{afsui:{safeId:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",stakedSuiVaultId:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",configId:"0x67103edaadcd38b76f5df76d99adcad989260a5f16bfd411a67efbf858b2f7a2"},hasui:{configId:"0x5d14712cfd47fcb9e414c15a14273f9d2188dbb918239db75ee2769b5136f821",staking:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca"}}}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xb03fa00e2d9f17d78a9d48bd94d8852abec68c19d55e819096b1e062e69bfad1",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x3a0dbce719fc56a96bf8e8dd53cd57eb9c313642a88d99b86f51208762eba258",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",upgradeCap:""},pyth:{id:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",object:"0xe622909f9252d4ef1737c41ea430ef44203d8f5dc8e01e1b3950a31405bc54eb",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7",lst:{afsui:{id:"0xd45b20f4bbc7ab4b2b3874a4fa38aa440505d8010bba052df914892537e6b418",object:"0xd45b20f4bbc7ab4b2b3874a4fa38aa440505d8010bba052df914892537e6b418"},hasui:{id:"0xac62b68b386dab503a6ef64c97e55dffac34c8f908373025751a111b72b767dc",object:"0xac62b68b386dab503a6ef64c97e55dffac34c8f908373025751a111b72b767dc"}}},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",object:"0xe7511600c924f1d0ac4b3fa5de3ae26b8845545902b015dc5fc7894307365d7b",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:""}}},spool:{id:"0x472fc7d4c3534a8ec8c2f5d7a557a43050eab057aaab853e8910968ddc84fc9f",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{sweth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"},swusdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},swusdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},config:""},borrowIncentive:{id:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",query:"0xdbc22fe051d384691634cd3b9fe473b09723084a1e4c128728c42e2de3b2228f",incentivePools:"0xd214b7055554dd65f27a2c74366377dde63e66c498508ef3fc9f7d76a32b4465",incentiveAccounts:"0x717cd4d3e78e8c45f7570c0857f696f8c7a68248218a258aa49bff99b3ff7175",config:"0xe5fec608d3a30a1f75b24d2c67d227524075aa6f5ee22e5eccedacd9145b1d9d"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x5477d43c9f75faea312c0f02dd48b4e03d9cbf2b1a5436ddffb5edefbea18ff2",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0xe9fa5d464d28fe30ad060ea32af577c68c9e82aca48ad1f10f13f35338472778",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x709ce9b97a63c6815c385ffd31c354dcd8f760984610581be23b838af4c6f60b",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"},veScaLoyaltyProgram:{id:"0x120dd97cb2be154d3c0e65e697594bf9cd4a7ce36f0eea0f1d70601f4a0b83eb",object:"0x120dd97cb2be154d3c0e65e697594bf9cd4a7ce36f0eea0f1d70601f4a0b83eb",adminCap:"0x9877e840e32705b80cb375115d5ff9dcd58f0c68204b7e15aa431b8cb547aaca",veScaRewardPool:"0x1b4f09e30dbb6e1442f6710c52568295d120cc4ff2ae02449a11070b3faf2c86",veScaRewardTableId:"0xb63dc27b258ae4066544f58a987931a5a2f78ebe872319381b62eb65c3ac5560"},scoin:{id:"0x826a4934bee9487e558eed603cf42f30cdc4321d6f31083930791b95f903b9f9",coins:{ssui:{coinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",treasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09",metaData:"0xfc9f2b2aa98be8d2dc95603cd531bdb38bcb894c82929d435d84a1985282e838",symbol:"sSUI"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199",metaData:"0xf1bf00be79b48c064f99fa5d1d4389e44776a269888b57b2f9a923080882ea73",symbol:"sSCA"},safsui:{coinType:"0xe66ae8fd59e37f78e355dafb130b7c167ca4ec8792a424031a1a1eac96244ada::scallop_af_sui::SCALLOP_AF_SUI",treasury:"0xc57357a64593aa54bc23d7936129119b86876a200107481578f304762217061a",metaData:"0x42179b69f82ea26e3763345ee0fb1cea8b1bd355168b3241ceb727ec82bb0688",symbol:"safSUI"},shasui:{coinType:"0xbd01338d893255e7e53a41b1c021438d31f348c074809027fcad259e348529b5::scallop_ha_sui::SCALLOP_HA_SUI",treasury:"0xb987e7a4cd3c16247f422599882093375201487c46ece80f980a30227a385e75",metaData:"0x94a1bb23c6272d01f03bb5dec2a1915a41f154d14548157a099d5630197ce30d",symbol:"shaSUI"},susdc:{coinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",treasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",metaData:"0xad94e42c05ab0eb54c9d9a1bcf3689bcd330710d6b300956213aa35387b727c9",symbol:"sUSDC"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba",metaData:"0x63e749a506bbae17ca63fd41a270e2b9b0a08dade1964bfa620ecba94c8be4f9",symbol:"sDEEP"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d",metaData:"0x0cd9fb845663dd5e1f7c48a321ab1c523a54c70243711a5a115523945396e54f",symbol:"sFUD"}}}},$o={lending:new Set(["usdc","sui","afsui","hasui","sca","fud","deep"]),collateral:new Set(["usdc","sui","afsui","hasui","sca","deep"]),borrowing:new Set(["usdc","sui","afsui","hasui","sca","fud","deep"]),packages:new Set(["coinDecimalsRegistry","math","whitelist","x","protocol","protocolWhitelist","query","supra","pyth","switchboard","xOracle","testCoin"]),spool:new Set(["susdc","ssui"]),scoin:new Set(["susdc","ssui","safsui","shasui","ssca","sdeep","sfud"]),suiBridge:new Set(["sbeth","sbusdt","sbwbtc"]),wormhole:new Set(["wusdc","wusdt","weth","wbtc","wapt","wsol"]),oracles:new Set(["pyth","supra","switchboard"]),pythEndpoints:new Set(["https://hermes.pyth.network"]),deprecated:new Set(["wapt","wusdc","wusdt","weth","wbtc"]),borrowIncentiveRewards:new Set(["mpoints"]),rewardsAsPoint:new Set(["mpoints"]),emerging:new Set(["wal","deep","sca","cetus"])},Wo={usdc:{coinName:"usdc",symbol:"USDC",lendingPoolAddress:"0x13319d295914b390b22484373f20f822bca10314c34c227ae6e28df3d9aa8e01",collateralPoolAddress:"0x2fdcf63682577f6bfdd4296500067543ba9877d5d5e41ebd9e51b97ab071ce69",borrowDynamic:"0x7fd0660f0102789ad039542165c6cbc2d90ba3c1d9dbd4ac4ae8804d80817542",interestModel:"0xd4e7b06a79f63706523167f055296db641b0f8ddd6734c05e205f2de0fcefdd0",riskModel:"0x19e5993350186f192ffeb2cba0650b04c291390e149c8ac9b324ecf394daaa1a",borrowFeeKey:"",supplyLimitKey:"0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",borrowLimitKey:"0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",isolatedAssetKey:"",isIsolated:false,spool:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",spoolReward:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",sCoinType:"0x55ed015f9f006c0c96ad36ebe3b3570d088e8498f52defea48e5634c110e485c::scallop_usdc::SCALLOP_USDC",sCoinTreasury:"0x6ef82ef94472dcb8c2cdeac8df38874024c08570ca165986ba56d1e38fe0c0a3",sCoinMetadataId:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2",sCoinSymbol:"sUSDC",sCoinName:"susdc",coinMetadataId:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",spoolName:"susdc",decimals:6,pythFeed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",pythFeedObjectId:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab",flashloanFeeObject:"0x289c770f54b26a4175d57cc6061e3d05f96e52d352cb7c0a51e2e3bacb2aee30"},sui:{coinName:"sui",symbol:"SUI",lendingPoolAddress:"0xeb86ad67543c1ac2c4cbaf178d38a45ab27c2e69d60f0f8badd83f563f012c3c",collateralPoolAddress:"0xcba7bb07d4d3ce01d81e71d9def680aa8b417347bfd7834aee8fc3b85b61c9a1",borrowDynamic:"0xd47c2fd3dbb95ed06e5da92f6b99611ba94a36efa6a13d9b33b02519761cc84e",interestModel:"0x4742bb49aa49ab4e5d9dfa119cddc027d1b7811ac42ca1ce794818d4a4da68e7",riskModel:"0x6dc356e829cfca2d79f0d68a79b5ddd5296ad0c955a38e2fc397485e2b629367",borrowFeeKey:"",supplyLimitKey:"0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",borrowLimitKey:"0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",isolatedAssetKey:"",isIsolated:false,spool:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",spoolReward:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a",sCoinType:"0x88618204de2dfdc2597681a8441ee726b0dc13494c41e319c3264eb7b35fea90::scallop_sui::SCALLOP_SUI",sCoinTreasury:"0x03f1d94a40bd9f5d556bacb5c5245732b185572f6a29b36ad8b555d9a8a24f09",sCoinMetadataId:"",sCoinSymbol:"sSUI",sCoinName:"ssui",coinMetadataId:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",spoolName:"ssui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0x27614284a8f0a699ffd35aae8f2572c937ec76771cb21b0d7930ec4491a76ed4"},sca:{coinName:"sca",symbol:"SCA",lendingPoolAddress:"0xd08ef85bc753616ce0f1e3ac01bbc8bd1ee53e03b1e82aaa9690db5cd285ef4c",collateralPoolAddress:"0x4f59b8ef2cdd195830890cf0c01e29c159e48a6a6c766c64fd4b26cfa9ee58c6",borrowDynamic:"0x7f6e11fbd32b5d0223f03bfda67a5b48c551a09cfff88edc187591f9a4b0ab10",interestModel:"0xcb10daf0fee6f416463444f5b47aac0f0197a889bc60be2c4f90916f6a8d2faa",riskModel:"0x043f21a35bd1e1060a7c579db46e10cfd039d0b75d6bfd758de97b60434ae708",borrowFeeKey:"",supplyLimitKey:"0x8dd938856b972a10ea27ecab2af7ed78e48fc5f6ccedaf2b2119959f747dc2e3",borrowLimitKey:"0x04c7de61c5b42972f9bf6a8b1848e5fea2d037ee8deba81741ecd4a70aa80d30",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",sCoinTreasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199",sCoinMetadataId:"",sCoinSymbol:"sSCA",sCoinName:"ssca",coinMetadataId:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",spoolName:"ssca",decimals:9,pythFeed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",pythFeedObjectId:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985",flashloanFeeObject:"0xe04e46471754b6f48d81c549ecfec09de02733715a63bec02364c6ac7c4dd2dc"},fud:{coinName:"fud",symbol:"FUD",lendingPoolAddress:"0xc8a078d15ee7bbff49a14835f36951833d2d55c91ffd2972251dadbff8045ca8",collateralPoolAddress:"",borrowDynamic:"0x345a2fa0fe5d5d704fd8ad609a9b7529f22e3cda738ad26756ad2a85e5d43777",interestModel:"0xc84a22d8bca58e5f05673d1de2a7406b1b7bc9dcd15fd848ba6555c7ecab9d83",borrowFeeKey:"",supplyLimitKey:"0xf98419aecc37a3c5de716f8ec590f8991a5be34da72ce1a2da09531ff45adf7d",borrowLimitKey:"0x3d928a001c453c50004baa54e14b0a0e1b0907d9c613dfd76064fd7ed4e8beb8",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",sCoinTreasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d",sCoinMetadataId:"",sCoinSymbol:"sFUD",sCoinName:"sfud",coinMetadataId:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",spoolName:"sfud",decimals:5,pythFeed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",pythFeedObjectId:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2",flashloanFeeObject:"0x1ddda368a5f37d7b8c53879cb333ccfd520fc4a3e2fc98b9b5fdacd1a5945d5a"},deep:{coinName:"deep",symbol:"DEEP",lendingPoolAddress:"0xfb8e4f68c9b14034da7f1f4703013dda69ebbb4578f835825bcf92ab89c3b5ae",collateralPoolAddress:"",borrowDynamic:"0xbf983b12a8707b174c0b037096ba2fbf1b30e6efb9cce14fc35207de0a696f79",interestModel:"0xb7f04cd3aaaefe671a79f9aed8646ae085a7e6812c1604044977c9355e0769c8",borrowFeeKey:"",supplyLimitKey:"0x599528fdfdc253e90dfd0acf4f4a166b391e2aac1ca6528abbff63225b548fee",borrowLimitKey:"0xf4217e8ef9d9c32e8992092e910a77535a8124c19b8a762a673f227f5f765a4e",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",sCoinTreasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba",sCoinMetadataId:"",sCoinSymbol:"sDEEP",sCoinName:"sdeep",coinMetadataId:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",spoolName:"sdeep",decimals:6,pythFeed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",pythFeedObjectId:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed",flashloanFeeObject:"0xd54dfb677e9e011e2451375a7a2e318b4f2225c2a0b369bde0afcef8cbb1a863"},afsui:{coinName:"afsui",symbol:"afSUI",lendingPoolAddress:"0x8eb75cd4c5050c4c9950f11694bb32b644706d24b9129981df3b52d2080ad45d",collateralPoolAddress:"0x48c5455eb1a9f1422c617a89a41927e166cfb49b829100980d4369f9f079d75c",borrowDynamic:"0x8f5d749372526ef651b6ba6ffede9bf17b8a96f90cda2a64893366a1d5c89491",interestModel:"0x9e82e24542804156386df51ddce8399fca0981a77e710542847f981febf231e9",riskModel:"0xfe1b5c5a883d8693effb11b35965538f9777e3c3d89298db2b57252916df14bd",borrowFeeKey:"0xabc6422db2d4ee01635ddaeaa44ba68370eebd785d2c4632515f841ae9bc47d9",supplyLimitKey:"0x61a2054eb37f543c0d774da57f2c9542aad8d79a197f748ac08ef5df6cc47028",borrowLimitKey:"0x4459498a043872cd107ea917493fee0baf2d37a273c7538e1d6581cc61b92af8",isolatedAssetKey:"",isIsolated:false,spool:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",spoolReward:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e",sCoinType:"0xe66ae8fd59e37f78e355dafb130b7c167ca4ec8792a424031a1a1eac96244ada::scallop_af_sui::SCALLOP_AF_SUI",sCoinTreasury:"0xc57357a64593aa54bc23d7936129119b86876a200107481578f304762217061a",sCoinMetadataId:"0x42179b69f82ea26e3763345ee0fb1cea8b1bd355168b3241ceb727ec82bb0688",sCoinSymbol:"safSUI",sCoinName:"safsui",coinMetadataId:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",coinType:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",spoolName:"safsui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0xac87fde83d434554ec300c1334c9a622aa5b59e82a04334dc99e1cc1f75d4eae"},hasui:{coinName:"hasui",symbol:"haSUI",lendingPoolAddress:"0x7a7ca5e75f453de923284a54764819f27486bd7f6fd45147116bfc239ba8fb4d",collateralPoolAddress:"0xe1ad830b29eab6b72f11d7016ff87db4f3996f68a81ea621ec37f0b7df9a7ce5",borrowDynamic:"0x3545546a7fa2100bca3bab8739c11890a6ccce2cb2584c204a064e35005314b5",interestModel:"0xa280d2976e3475bebebb65e433f1998867916d1b51139bf90312c4434e8d9875",riskModel:"0x5b35d4a369961ff5de98ca1830d92b66d91b3651421ba9202e95329dc80493d6",borrowFeeKey:"0xef885c382d461c4fb14d1f3b3758c380c78a1a4b2a3d2fafe6e8649a60fdd7ab",supplyLimitKey:"0xc7385b1703693cbbc9c97227fe3fd5c91d7afda00e0da69d942c3260d78e45e0",borrowLimitKey:"0x65333e606eead786a999c8267bc9886b0fdbc298a8a8635a48a9c9b8838d9395",isolatedAssetKey:"",isIsolated:false,spool:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",spoolReward:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66",sCoinType:"0xbd01338d893255e7e53a41b1c021438d31f348c074809027fcad259e348529b5::scallop_ha_sui::SCALLOP_HA_SUI",sCoinTreasury:"0xb987e7a4cd3c16247f422599882093375201487c46ece80f980a30227a385e75",sCoinMetadataId:"0x94a1bb23c6272d01f03bb5dec2a1915a41f154d14548157a099d5630197ce30d",sCoinSymbol:"shaSUI",sCoinName:"shasui",coinMetadataId:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",spoolName:"shasui",decimals:9,pythFeed:"6120ffcf96395c70aa77e72dcb900bf9d40dccab228efca59a17b90ce423d5e8",pythFeedObjectId:"0x4c1d831576b60fec657e0c310943eff8c1f28197c552e57d1fefdc55edddb263",flashloanFeeObject:"0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e"}};var ee=86400,ne=1460,$=126144e3,et=1e10,tt=1e9;var zo=["supra","switchboard","pyth"],Ho=["primary","secondary"],Yo=["pyth"],Te=["afsui","hasui"],Qt={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 at=t=>({coinType:utils.normalizeStructTag(t.type.name),maxBorrowRate:Number(t.maxBorrowRate.value)/2**32,borrowRate:Number(t.interestRate.value)/2**32,borrowRateScale:Number(t.interestRateScale),borrowIndex:Number(t.borrowIndex),lastUpdated:Number(t.lastUpdated),cashAmount:Number(t.cash),debtAmount:Number(t.debt),marketCoinSupplyAmount:Number(t.marketCoinSupply),reserveAmount:Number(t.reserve),reserveFactor:Number(t.reserveFactor.value)/2**32,borrowWeight:Number(t.borrowWeight.value)/2**32,borrowFee:Number(t.borrowFeeRate.value)/2**32,baseBorrowRate:Number(t.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(t.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(t.borrowRateOnMidKink.value)/2**32,highKink:Number(t.highKink.value)/2**32,midKink:Number(t.midKink.value)/2**32,minBorrowAmount:Number(t.minBorrowAmount),isIsolated:t.isIsolated,supplyLimit:Number(t.supplyLimit),borrowLimit:Number(t.borrowLimit)}),st=(t,e)=>{let a=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(a);if(s===void 0)throw new Error(`Coin decimal not found for ${a}`);let o=24*365*3600,r=e.baseBorrowRate*o/e.borrowRateScale,i=e.borrowRateOnHighKink*o/e.borrowRateScale,n=e.borrowRateOnMidKink*o/e.borrowRateScale,c=e.maxBorrowRate*o/e.borrowRateScale,d=e.borrowRate*o/e.borrowRateScale,l=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=S__default.default(e.borrowIndex).multipliedBy(S__default.default(l).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=S__default.default(e.borrowIndex).plus(u),b=S__default.default(p).dividedBy(e.borrowIndex).minus(1),m=S__default.default(e.debtAmount).multipliedBy(b),y=m.plus(e.debtAmount),f=y.shiftedBy(-1*s),g=S__default.default(e.reserveAmount).plus(m.multipliedBy(e.reserveFactor)),h=g.shiftedBy(-1*s),C=S__default.default(y).plus(Math.max(e.cashAmount-g.toNumber(),0)),P=C.shiftedBy(-1*s),D=S__default.default(y).dividedBy(C);D=D.isFinite()?D:S__default.default(0);let k=S__default.default(d).multipliedBy(D).multipliedBy(1-e.reserveFactor);k=k.isFinite()?k:S__default.default(0);let R=C.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:S__default.default(1),{baseBorrowApr:r,baseBorrowApy:t.parseAprToApy(r),borrowAprOnHighKink:i,borrowApyOnHighKink:t.parseAprToApy(i),borrowAprOnMidKink:n,borrowApyOnMidKink:t.parseAprToApy(n),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(t.parseAprToApy(d),t.parseAprToApy(c)),borrowIndex:p.toNumber(),growthInterest:b.toNumber(),supplyAmount:C.toNumber(),supplyCoin:P.toNumber(),borrowAmount:y.toNumber(),borrowCoin:f.toNumber(),reserveAmount:g.toNumber(),reserveCoin:h.toNumber(),utilizationRate:D.toNumber(),supplyApr:k.toNumber(),supplyApy:t.parseAprToApy(k.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:S__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:S__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},Pe=t=>({coinType:utils.normalizeStructTag(t.type.name),isIsolated:t.isIsolated,collateralFactor:Number(t.collateralFactor.value)/4294967296,liquidationFactor:Number(t.liquidationFactor.value)/4294967296,liquidationDiscount:Number(t.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(t.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(t.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(t.maxCollateralAmount),totalCollateralAmount:Number(t.totalCollateralAmount)}),xe=(t,e)=>{let a=t.parseCoinNameFromType(e.coinType),s=t.getCoinDecimal(a);if(s===void 0)throw new Error(`Coin decimal not found for ${a}`);let o=S__default.default(e.maxCollateralAmount).shiftedBy(-1*s),r=S__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:o.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:r.toNumber()}},$t=t=>({stakeType:utils.normalizeStructTag(t.stakeType.fields.name),maxPoint:Number(t.maxDistributedPoint),distributedPoint:Number(t.distributedPoint),pointPerPeriod:Number(t.distributedPointPerPeriod),period:Number(t.pointDistributionTime),maxStake:Number(t.maxStake),staked:Number(t.stakes),index:Number(t.index),createdAt:Number(t.createdAt),lastUpdate:Number(t.lastUpdate)}),Wt=(t,e,a)=>{let o=S__default.default(t.pointPerPeriod).dividedBy(t.period),r=S__default.default(t.pointPerPeriod).dividedBy(t.period),i=r.gt(0)?S__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(r):S__default.default(0),n=t.createdAt,c=i.plus(t.lastUpdate).integerValue().toNumber(),d=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),l=S__default.default(t.maxPoint).minus(t.distributedPoint),u=S__default.default.minimum(S__default.default(d).multipliedBy(t.pointPerPeriod),l),p=S__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?S__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),b=S__default.default(t.distributedPoint).plus(u),m=S__default.default(t.staked),y=m.shiftedBy(-1*a),f=y.multipliedBy(e);return {distributedPointPerSec:o.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:b.toNumber(),startDate:new Date(n*1e3),endDate:new Date(c*1e3),stakedAmount:m.toNumber(),stakedCoin:y.toNumber(),stakedValue:f.toNumber()}},Gt=t=>({claimedRewards:Number(t.claimed_rewards),exchangeRateDenominator:Number(t.exchange_rate_denominator),exchangeRateNumerator:Number(t.exchange_rate_numerator),rewards:Number(t.rewards),spoolId:String(t.spool_id)}),Xt=(t,e,a,s,o)=>{let i=S__default.default(a.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),n=S__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=n.shiftedBy(-1*o),d=c.multipliedBy(s),l=S__default.default(e.rewards),u=l.shiftedBy(-1*o),p=u.multipliedBy(s),b=S__default.default(e.claimedRewards),m=b.shiftedBy(-1*o),y=m.multipliedBy(s),f=S__default.default(i).shiftedBy(-1*o).multipliedBy(31536e3).multipliedBy(s),g=f.dividedBy(a.stakedValue).isFinite()?f.dividedBy(a.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(g=1/0),{rewardApr:g,totalRewardAmount:n.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:p.toNumber(),claimedRewardAmount:b.toNumber(),claimedRewardCoin:m.toNumber(),claimedRewardValue:y.toNumber(),rewardPerSec:i.toNumber()}},ds=t=>({pointType:utils.normalizeStructTag(t.point_type.name),distributedPointPerPeriod:Number(t.distributed_point_per_period),period:Number(t.point_distribution_time),distributedPoint:Number(t.distributed_point),points:Number(t.points),index:Number(t.index),baseWeight:Number(t.base_weight),weightedAmount:Number(t.weighted_amount),lastUpdate:Number(t.last_update),createdAt:Number(t.created_at)}),zt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((a,s)=>{let o=ds(s),r=t.parseCoinNameFromType(o.pointType);return a[r]=o,a},{})}),Ht=(t,e,a,s,o)=>{let i=S__default.default(t.distributedPointPerPeriod).dividedBy(t.period),n=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=S__default.default.minimum(S__default.default(n).multipliedBy(t.distributedPointPerPeriod),S__default.default(t.points)),d=S__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?S__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),l=S__default.default(t.distributedPoint).plus(c),u=S__default.default(t.baseWeight),p=S__default.default(t.weightedAmount),b=p.shiftedBy(-1*o),m=b.multipliedBy(s),y=365*24*60*60,f=S__default.default(i).shiftedBy(-1*a),g=S__default.default(f).multipliedBy(y).multipliedBy(e),h=S__default.default(1e12),C=g.multipliedBy(S__default.default(t.baseWeight).dividedBy(h)).dividedBy(m).isFinite()&&t.points>0?g.multipliedBy(S__default.default(t.baseWeight).dividedBy(h)).dividedBy(m).toNumber():1/0;return {distributedPointPerSec:i.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:b.toNumber(),weightedStakedValue:m.toNumber(),rewardApr:C,rewardPerSec:f.toNumber()}},us=t=>({pointType:utils.normalizeStructTag(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),Yt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((a,s)=>{let o=us(s),r=t.parseCoinNameFromType(o.pointType);return a[r]=o,a},{})}),ce=(...t)=>S__default.default(t.reduce((e,a)=>new S__default.default(a).lt(e)?a:e));var Ae=(t,e,a)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),o=Math.max(Math.floor((s-1)/e),1)+1,r=Math.pow(10,-o);return r=a==="increase"?1-r:1+r,r},W=t=>{if(!(t&&t.content&&"fields"in t.content))throw new Error(`Failed to parse object ${t}`);let e=t.content.fields;if(typeof e=="object"&&"value"in e){let a=e.value;return typeof a=="object"&&"fields"in a?a.fields:a}else if(typeof e=="object")return e;return e};var ps=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()})}),fs="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Oe=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:fs,value:a}}),r=ps.safeParse(o?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getSupplyLimit for ${e}: ${a.message}`),"0"}};var bs=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.boolean()})}),Jt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",Zt=async(t,e=false)=>{if(!e)return t.utils.getSupportedPoolAddresses().filter(a=>!!a.isolatedAssetKey).map(a=>a.coinName);try{let a=t.address.get("core.market"),s=[];if(!a)return s;let o=!1,r=null,i=n=>n.name.type===Jt;do{let n=await t.scallopSuiKit.queryGetDynamicFields({parentId:a,cursor:r,limit:10});if(!n)break;let c=n.data.filter(i).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),n&&n.hasNextPage&&n.nextCursor?(o=!0,r=n.nextCursor):o=!1;}while(o);return s}catch(a){return console.error(a),[]}},re=async(t,e)=>{let a=t.constants.poolAddresses[e];if(a)return a.isIsolated;let s=t.address.get("core.market"),o=t.queryClient.getQueryData(["getDynamicFields",s]);if(o){let c=t.parseCoinType(e);return o.includes(c)}let r=t.parseCoinType(e).slice(2),i=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Jt,value:r}}),n=bs.safeParse(i?.data?.content);return n.success?n.data.fields.value:false};var ms=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()})}),ys="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Re=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),s=t.address.get("core.market");if(!s)return null;let o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:ys,value:a}}),r=ms.safeParse(o?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getBorrowLimit for ${e}: ${a.message}`),"0"}};var gs="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",ea=async({constants:t,scallopSuiKit:e},a,s)=>{let o=new Set(a),r=Object.fromEntries(Object.entries(t.coinTypeToCoinNameMap).filter(([d,l])=>o.has(l))),i=null,n=false,c=[];do{let d=await e.queryGetDynamicFields({parentId:gs,limit:10,cursor:i});if(!d)break;let{data:l,hasNextPage:u,nextCursor:p}=d,b=l.filter(m=>{let y=`0x${m.name.value.name}`;return !!r[y]}).map(m=>m.objectId)??[];c.push(...await e.queryGetObjects(b)),n=u,i=p;}while(n);return c.reduce((d,l)=>{if(l.content?.dataType==="moveObject"){let u=`0x${l.content.fields.name.fields.name}`,p=r[u];if(!p)return d;let m=+l.content.fields.value;d[p]=m/s;}return d},{})};var sa=async({utils:t,indexer:e},a=false,s)=>{s=s??await t.getCoinPrices()??{};let o={},r={};if(a){let p=await e.getMarket(),b=y=>{y.coinPrice=s[y.coinName]??y.coinPrice,y.coinWrappedType=t.getCoinWrappedType(y.coinName),o[y.coinName]=y;},m=y=>{y.coinPrice=s[y.coinName]??y.coinPrice,y.coinWrappedType=t.getCoinWrappedType(y.coinName),r[y.coinName]=y;};return Object.values(p.pools).filter(y=>!!y).forEach(b),Object.values(p.collaterals).filter(y=>!!y).forEach(m),{pools:o,collaterals:r}}let i=t.address.get("core.packages.query.id"),n=t.address.get("core.market"),c=`${i}::market_query::market_data`,d=[n],u=(await t.scallopSuiKit.queryInspectTxn({queryTarget:c,args:d}))?.events[0]?.parsedJson;for(let p of u?.pools??[]){let b=utils.normalizeStructTag(p.type.name),m=t.parseCoinNameFromType(b),y=s[m]??0;if(!t.constants.whitelist.lending.has(m))continue;let f=at({type:p.type,maxBorrowRate:p.maxBorrowRate,interestRate:p.interestRate,interestRateScale:p.interestRateScale,borrowIndex:p.borrowIndex,lastUpdated:p.lastUpdated,cash:p.cash,debt:p.debt,marketCoinSupply:p.marketCoinSupply,reserve:p.reserve,reserveFactor:p.reserveFactor,borrowWeight:p.borrowWeight,borrowFeeRate:p.borrowFeeRate,baseBorrowRatePerSec:p.baseBorrowRatePerSec,borrowRateOnHighKink:p.borrowRateOnHighKink,borrowRateOnMidKink:p.borrowRateOnMidKink,highKink:p.highKink,midKink:p.midKink,minBorrowAmount:p.minBorrowAmount,isIsolated:await re(t,m),supplyLimit:await Oe(t,m)??"0",borrowLimit:await Re(t,m)??"0"}),g=st(t,f);o[m]={coinName:m,symbol:t.parseSymbol(m),coinType:b,marketCoinType:t.parseMarketCoinType(m),sCoinType:t.parseSCoinType(t.parseMarketCoinName(m))??"",coinWrappedType:t.getCoinWrappedType(m),coinPrice:y,highKink:f.highKink,midKink:f.midKink,reserveFactor:f.reserveFactor,borrowWeight:f.borrowWeight,borrowFee:f.borrowFee,marketCoinSupplyAmount:f.marketCoinSupplyAmount,minBorrowAmount:f.minBorrowAmount,...g};}for(let p of u?.collaterals??[]){let b=utils.normalizeStructTag(p.type.name),m=t.parseCoinNameFromType(b),y=s[m]??0;if(!t.constants.whitelist.collateral.has(m))continue;let f=Pe({type:p.type,collateralFactor:p.collateralFactor,liquidationFactor:p.liquidationFactor,liquidationDiscount:p.liquidationDiscount,liquidationPenalty:p.liquidationPanelty,liquidationReserveFactor:p.liquidationReserveFactor,maxCollateralAmount:p.maxCollateralAmount,totalCollateralAmount:p.totalCollateralAmount,isIsolated:await re(t,m)}),g=xe(t,f);r[m]={coinName:m,symbol:t.parseSymbol(m),coinType:b,marketCoinType:t.parseMarketCoinType(m),coinWrappedType:t.getCoinWrappedType(m),coinPrice:y,collateralFactor:f.collateralFactor,liquidationFactor:f.liquidationFactor,liquidationDiscount:f.liquidationDiscount,liquidationPenalty:f.liquidationPenalty,liquidationReserveFactor:f.liquidationReserveFactor,...g};}return {pools:o,collaterals:r}},oa=async({utils:t,scallopSuiKit:e},a)=>{let s={balanceSheet:[],collateralStat:[],borrowDynamic:[],interestModel:[],riskModel:[],borrowFeeKey:[],supplyLimitKey:[],borrowLimitKey:[],isolatedAssetKey:[]},o=new Map;for(let d of a){let l=t.constants.poolAddresses[d],u={balanceSheet:l?.lendingPoolAddress,collateralStat:l?.collateralPoolAddress,borrowDynamic:l?.borrowDynamic,interestModel:l?.interestModel,riskModel:l?.riskModel,borrowFeeKey:l?.borrowFeeKey,supplyLimitKey:l?.supplyLimitKey,borrowLimitKey:l?.borrowLimitKey,isolatedAssetKey:l?.isolatedAssetKey};Object.entries(u).forEach(([p,b])=>{b&&s[p].push(b);}),o.set(d,u);}let r={showContent:true},i=await Promise.all([e.queryGetObjects(s.balanceSheet,r),e.queryGetObjects(s.collateralStat,r),e.queryGetObjects(s.borrowDynamic,r),e.queryGetObjects(s.interestModel,r),e.queryGetObjects(s.riskModel,r),e.queryGetObjects(s.borrowFeeKey,r),e.queryGetObjects(s.supplyLimitKey,r),e.queryGetObjects(s.borrowLimitKey,r)]),n={balanceSheet:new Map,collateralStat:new Map,borrowDynamic:new Map,interestModel:new Map,riskModel:new Map,borrowFeeKey:new Map,supplyLimitKey:new Map,borrowLimitKey:new Map,isolatedAssetKey:new Map,isIsolated:new Map};i.forEach((d,l)=>{let u=Object.keys(n)[l];d.forEach(p=>{n[u].set(p.objectId,p);});});let c={};for(let[d,l]of o)c[d]={balanceSheet:l.balanceSheet?n.balanceSheet.get(l.balanceSheet):void 0,collateralStat:l.collateralStat?n.collateralStat.get(l.collateralStat):void 0,borrowDynamic:l.borrowDynamic?n.borrowDynamic.get(l.borrowDynamic):void 0,interestModel:l.interestModel?n.interestModel.get(l.interestModel):void 0,riskModel:l.riskModel?n.riskModel.get(l.riskModel):void 0,borrowFeeKey:l.borrowFeeKey?n.borrowFeeKey.get(l.borrowFeeKey):void 0,supplyLimitKey:l.supplyLimitKey?n.supplyLimitKey.get(l.supplyLimitKey):void 0,borrowLimitKey:l.borrowLimitKey?n.borrowLimitKey.get(l.borrowLimitKey):void 0,isolatedAssetKey:l.isolatedAssetKey?n.isolatedAssetKey.get(l.isolatedAssetKey):void 0,isIsolated:t.constants.poolAddresses[d]?.isIsolated};return c},ra=async(t,e,a=false,s)=>{s=s??await t.utils.getCoinPrices();let o={},r={};if(a){let n=await t.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),o[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName),r[l.coinName]=l;};return Object.values(n.pools).filter(l=>!!l).forEach(c),Object.values(n.collaterals).filter(l=>!!l).forEach(d),{pools:o,collaterals:r}}let i=await oa(t,e);return await Promise.allSettled(e.map(async n=>{try{let c=await ws(t,n,a,s?.[n]??0,i[n]);c?.marketPool&&(o[n]=c?.marketPool),c?.collateral&&(r[n]=c.collateral);}catch(c){console.error(c);}})),{pools:o,collaterals:r}},Ss=({balanceSheet:t,borrowDynamic:e,collateralStat:a,interestModel:s,riskModel:o,borrowFeeKey:r,supplyLimitKey:i,borrowLimitKey:n,isIsolated:c})=>{if(!t||!e||!s)throw new Error("Missing required market objects");let d=W(t),l=W(s),u=W(e),p=r?W(r):{value:"0"},b=i?W(i):"0",m=n?W(n):"0",y=o?W(o):void 0,f=a?W(a):void 0,g=y&&f?{type:l.type.fields,isIsolated:c,collateralFactor:y.collateral_factor.fields,liquidationFactor:y.liquidation_factor.fields,liquidationPenalty:y.liquidation_penalty.fields,liquidationDiscount:y.liquidation_discount.fields,liquidationReserveFactor:y.liquidation_revenue_factor.fields,maxCollateralAmount:y.max_collateral_amount,totalCollateralAmount:f.amount}:void 0;return {type:l.type.fields,maxBorrowRate:l.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:l.revenue_factor.fields,borrowWeight:l.borrow_weight.fields,borrowFeeRate:p,baseBorrowRatePerSec:l.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:l.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:l.borrow_rate_on_mid_kink.fields,highKink:l.high_kink.fields,midKink:l.mid_kink.fields,minBorrowAmount:l.min_borrow_amount,isIsolated:c,supplyLimit:b,borrowLimit:m,parsedOriginMarketCollateral:g}},ws=async(t,e,a=false,s,o)=>{if(s=s??(await t.utils.getCoinPrices())?.[e],a){let l=await t.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=t.utils.getCoinWrappedType(l.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}if(o??=(await oa(t,[e]))[e],!o)throw new Error(`Failed to fetch required market objects for ${e}`);let r=Ss(o),i=at(r),n=st(t.utils,i),c=r.parsedOriginMarketCollateral?Pe(r.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s??0,highKink:i.highKink,midKink:i.midKink,reserveFactor:i.reserveFactor,borrowWeight:i.borrowWeight,borrowFee:i.borrowFee,marketCoinSupplyAmount:i.marketCoinSupplyAmount,minBorrowAmount:i.minBorrowAmount,...n},collateral:c?{...d(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...xe(t.utils,c)}:void 0}},ia=async({utils:t,indexer:e,scallopSuiKit:a},s=[...t.constants.whitelist.collateral],o=false)=>{let r=t.address.get("core.market"),i=await t.getCoinPrices()??{},n={};if(o){let d=await e.getMarketCollaterals(),l=u=>{s.includes(u.coinName)&&(u.coinPrice=i[u.coinName]??u.coinPrice,u.coinWrappedType=t.getCoinWrappedType(u.coinName),n[u.coinName]=u);};return Object.values(d).filter(u=>!!u).forEach(l),n}let c=await a.queryGetObject(r);return await Promise.allSettled(s.map(async d=>{let l=await ot({utils:t,indexer:e,scallopSuiKit:a},d,o,c?.data,i?.[d]);l&&(n[d]=l);})),n},ot=async({utils:t,indexer:e,scallopSuiKit:a},s,o=false,r,i)=>{if(i=i??(await t.getCoinPrices())?.[s],o){let P=await e.getMarketCollateral(s);return P.coinPrice=i??P.coinPrice,P.coinWrappedType=t.getCoinWrappedType(P.coinName),P}let n=t.address.get("core.market");if(r=r||(await a.queryGetObject(n))?.data,!(r&&r.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=r.content.fields,d=t.parseCoinType(s),l=c.risk_models.fields.table.fields.id.id,u=await a.queryGetDynamicFieldObject({parentId:l,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),p=u?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${u?.error?.code.toString()}: `);let b=p.content.fields.value.fields,m=c.collateral_stats.fields.table.fields.id.id,y=await a.queryGetDynamicFieldObject({parentId:m,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),f=y?.data;if(!(f&&f.content&&"fields"in f.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${s}: ${y?.error?.code.toString()}`);let g=f.content.fields.value.fields,h=Pe({type:b.type.fields,collateralFactor:b.collateral_factor.fields,liquidationFactor:b.liquidation_factor.fields,liquidationDiscount:b.liquidation_discount.fields,liquidationPenalty:b.liquidation_penalty.fields,liquidationReserveFactor:b.liquidation_revenue_factor.fields,maxCollateralAmount:b.max_collateral_amount,totalCollateralAmount:g.amount,isIsolated:await re(t,s)}),C=xe(t,h);return {coinName:s,symbol:t.parseSymbol(s),coinType:t.parseCoinType(s),marketCoinType:t.parseMarketCoinType(s),coinWrappedType:t.getCoinWrappedType(s),coinPrice:i??0,collateralFactor:h.collateralFactor,liquidationFactor:h.liquidationFactor,liquidationDiscount:h.liquidationDiscount,liquidationPenalty:h.liquidationPenalty,liquidationReserveFactor:h.liquidationReserveFactor,...C}},ie=async({utils:t},e)=>{let a=e,s=t.constants.protocolObjectId,o=[],r=false,i=null;do{let l=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:`${s}::obligation::ObligationKey`},options:{showContent:true},cursor:i,limit:10});if(!l)break;o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=true,i=l.nextCursor):r=false;}while(r);let n=o.filter(l=>!!l.data),c=[],d=await t.scallopSuiKit.queryGetObjects(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 p=l?.objectId,b=l?.content;if(p&&b&&"fields"in b){let m=b.fields,y=String(m.ownership.fields.of),f=await rt(t,d[u]);c.push({id:y,keyId:p,locked:f});}})),c},rt=async({scallopSuiKit:t},e)=>{let a=typeof e=="string"?(await t.queryGetObject(e))?.data:e,s=false;return a&&a?.content?.dataType==="moveObject"&&"lock_key"in a.content.fields&&(s=!!a.content.fields.lock_key),s},Ie=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("core.packages.query.id"),o=t.get("core.version"),r=t.get("core.market"),i=`${s}::obligation_query::obligation_data`,n=[o,r,a,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:i,args:n}))?.events[0]?.parsedJson},na=async({utils:t},e=[...t.constants.whitelist.lending],a)=>{let s=a??t.walletAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await it({utils:t},r,s);o[r]=i;})),o},it=async({utils:t},e,a)=>{let s=a??t.walletAddress,o=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},ca=async({utils:t},e,a)=>{e=e||[...t.constants.whitelist.lending].map(r=>t.parseMarketCoinName(r));let s=a??t.walletAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await nt({utils:t},r,s);o[r]=i;})),o},nt=async({utils:t},e,a)=>{let s=a??t.walletAddress,o=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},la=async({utils:t},e,a=1e4)=>{let s=[],o={},r=e.reduce((c,d)=>{let l=t.parseCoinType(d).slice(2);return c[l]=d,c},{}),i=e.map(c=>{let d=t.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),n=await t.scallopSuiKit.queryGetObjects(i);if(s.length>0){let c=await ea(t,s,a);o={...o,...c};}return o={...o,...n.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=d.content.fields,u=d.content.fields.name.fields.name,p=+l.value;c[r[u]]=p/a;}return c},{})},o};var Y=class extends Error{constructor(e){super(`Unsupported oracle type: ${e}`),this.name="UnsupportedOracleError";}},le=class extends Error{constructor(e,a){super(`Unsupported LST oracle update for: ${e} with oracle: ${a}`),this.name="UnsupportedLstOracleError";}};var se=class{constructor(e){this.registry=e;}get clockObject(){return {objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}}get utils(){return this.registry.utils}},ve=class extends se{constructor(a){super(a);this.registry=a;}oracleType="pyth";updatePrice(a,s,o,r){let{pythFeedObjectId:i,pythRegistryId:n,pythStateId:c,pythPackageId:d}=this.registry.getPackages(o);a.moveCall(`${d}::rule::set_price_as_${r}`,[s,c,i,n,a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[this.utils.parseCoinType(o)]);}},je=class extends se{constructor(a){super(a);this.registry=a;}oracleType="pyth";updatePrice(a,s,o,r){let{lst:i,pythFeedObjectId:n,pythStateId:c}=this.registry.getPackages(o);if(!i)throw new le(o,this.oracleType);let{id:d,configId:l,stakedSuiVaultId:u,safeId:p}=i;a.moveCall(`${d}::rule::set_price_as_${r}`,[s,c,n,l,u,p,a.sharedObjectRef(this.clockObject)]);}},Ne=class extends se{constructor(a){super(a);this.registry=a;}oracleType="pyth";updatePrice(a,s,o,r){let{lst:i,pythFeedObjectId:n,pythStateId:c}=this.registry.getPackages(o);if(!i)throw new le(o,this.oracleType);let{id:d,staking:l,configId:u}=i;a.moveCall(`${d}::rule::set_price_as_${r}`,[s,c,n,u,l,a.sharedObjectRef(this.clockObject)]);}},_e=class extends se{constructor(a){super(a);this.registry=a;}oracleType="supra";updatePrice(a,s,o,r){let{supraPackageId:i,supraHolderId:n,supraRegistryId:c}=this.registry.getPackages(o);a.moveCall(`${i}::rule::set_price_as_${r}`,[s,n,c,a.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(o)]);}},Be=class extends se{constructor(a){super(a);this.registry=a;}oracleType="switchboard";updatePrice(a,s,o,r){let{switchboardPackageId:i,switchboardAggregatorId:n,switchboardRegistryId:c}=this.registry.getPackages(o);a.moveCall(`${i}::rule::set_price_as_${r}`,[s,n,c,a.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(o)]);}};var de=class{constructor(e,a,s){this.tx=e;this.registry=a;this.strategies=new Map(Object.entries(s));}strategies},ct=class extends de{oracleName="pyth";SUPPORT_SUI_LST_SET=new Set(Te);constructor(e,a){super(e,a,{default:new ve(a),afsui:new je(a),hasui:new Ne(a)});}resolveStrategy(e){return this.strategies.get(e)??this.strategies.get("default")}updateXOracle(e,a,s){this.resolveStrategy(e).updatePrice(this.tx,s,e,a);}},lt=class extends de{oracleName="supra";constructor(e,a){super(e,a,{default:new _e(a)});}updateXOracle(e,a,s){let o=this.strategies.get("default");if(!o)throw new Y(this.oracleName);o.updatePrice(this.tx,s,e,a);}},dt=class extends de{oracleName="switchboard";constructor(e,a){super(e,a,{default:new Be(a)});}updateXOracle(e,a,s){let o=this.strategies.get("default");if(!o)throw new Y(this.oracleName);o.updatePrice(this.tx,s,e,a);}},ua=(t,e)=>{let a=e.oracleName;switch(a){case "pyth":return new ct(t,e);case "supra":return new lt(t,e);case "switchboard":return new dt(t,e);default:throw new Error(`Unsupported oracle type: ${a}`)}};var ks={afsui:"core.oracles.pyth.lst.afsui",hasui:"core.oracles.pyth.lst.hasui"},Me=class{constructor(e){this.utils=e;}getAddressPath(e){return this.utils.address.get(e)}get getXOraclePackages(){return {xOraclePackageId:this.getAddressPath("core.packages.xOracle.id"),xOracleId:this.getAddressPath("core.oracles.xOracle")}}},ue=class{constructor(e){this.xOraclePackageRegistry=e;}get utils(){return this.xOraclePackageRegistry.utils}get packageId(){return this.xOraclePackageRegistry.getAddressPath(`core.packages.${this.oracleName}.id`)}},ut=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="pyth";get getStaticPackages(){return {pythPackageId:this.packageId,pythRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.registry"),pythStateId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.state")}}getLstOracleConfigPackages(a){let s=ks[a];if(s)return this.xOraclePackageRegistry.getAddressPath(s)}getLstPackages(a){let s=this.xOraclePackageRegistry.getAddressPath(`core.packages.pyth.lst.${a}`),o=this.getLstOracleConfigPackages(a)??{};return {...s,...o}}resolvePythFeedForSuiLst(a){return Te.includes(a)?"sui":a}getPackages(a){let s=this.getLstPackages(a);return {...this.getStaticPackages,pythFeedObjectId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${this.resolvePythFeedForSuiLst(a)}.oracle.pyth.feedObject`),lst:s}}},pt=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="supra";getLstPackages(a){throw new Error("Method not implemented.")}getPackages(a){return {supraPackageId:this.packageId,supraRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.registry"),supraHolderId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.holder")}}},ft=class extends ue{constructor(a){super(a);this.xOraclePackageRegistry=a;}oracleName="switchboard";getLstPackages(a){throw new Error("Method not implemented.")}get getStaticPackages(){return {switchboardPackageId:this.packageId,switchboardRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.switchboard.registry")}}getPackages(a){return {...this.getStaticPackages,switchboardAggregatorId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${a}.oracle.switchboard`)}}};var pa=(t,e)=>{switch(t){case "pyth":return new ut(e);case "supra":return new pt(e);case "switchboard":return new ft(e);default:throw new Y(t)}};var bt=class{constructor(e,a,s,o){this.tx=e;this.builder=a;this.coinNames=s;this.options=o;}oracleName="pyth";filterSponsoredFeeds(){let{usePythPullModel:e,pythSponsoredFeeds:a}=this.options,s=new Set(a);return this.coinNames.filter(o=>{let r=!e&&!s.has(o);return e||r})}async updatePriceFeeds(){let e=new pythSuiJs.SuiPythClient(this.builder.suiKit.client,this.builder.address.get("core.oracles.pyth.state"),this.builder.address.get("core.oracles.pyth.wormholeState")),a=this.filterSponsoredFeeds();if(a.length===0)return;let s=a.map(r=>this.builder.address.get(`core.coins.${r}.oracle.pyth.feed`)),o=this.builder.utils.pythEndpoints??[...this.builder.constants.whitelist.pythEndpoints];for(let r of o)try{let n=await new pythSuiJs.SuiPriceServiceConnection(r).getPriceFeedsUpdateData(s);await e.updatePriceFeeds(this.tx.txBlock,n,s);break}catch(i){console.warn(`Failed to update price feeds with endpoint ${r}: ${i}`);}}},fa=(t,e,a,s,o)=>{switch(t){case "pyth":return new bt(e,a,s,o);case "supra":throw new Error("Supra price feed updater is not implemented yet.");case "switchboard":throw new Error("Switchboard price feed updater is not implemented yet.");default:throw new Error(`Unsupported oracle type: ${t}`)}};var Fe=class{constructor(e,a){this.txBlock=e;this.xOraclePackageRegistry=a;}get utils(){return this.xOraclePackageRegistry.utils}buildRequest(e){let{xOraclePackageId:a,xOracleId:s}=this.xOraclePackageRegistry.getXOraclePackages,o=`${a}::x_oracle::price_update_request`,r=[this.utils.parseCoinType(e)];return this.txBlock.moveCall(o,[s],r)}confirmRequest(e,a){let{xOraclePackageId:s,xOracleId:o}=this.xOraclePackageRegistry.getXOraclePackages,r=`${s}::x_oracle::confirm_price_update_request`,i=[this.utils.parseCoinType(e)];this.txBlock.moveCall(r,[o,a,this.txBlock.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],i);}};var pe=async(t,e,a=[...t.constants.whitelist.lending],s={})=>{a=[...new Set(a)];let o={usePythPullModel:t.usePythPullModel,useOnChainXOracleList:t.useOnChainXOracleList,pythSponsoredFeeds:t.pythSponsoredFeeds,...s},r=o.useOnChainXOracleList?await t.query.getAssetOracles():Qt,i=Object.entries(r).reduce((p,[b,{primary:m,secondary:y}])=>(p[b]={primary:new Set(m),secondary:new Set(y)},p),{}),n=new Set(Object.values(r).flatMap(({primary:p,secondary:b})=>[...p,...b])),c=(p,b)=>{let m=i[p];if(!m)return {isPrimary:false,isSecondary:false};let{primary:y,secondary:f}=m,g=y.has(b),h=f.has(b);return {isPrimary:g,isSecondary:h}},d=new Me(t.utils),l={};for(let p of n){let b=a.filter(m=>{let{isPrimary:y,isSecondary:f}=c(m,p);return !(!y&&!f)});b.length>0&&await fa(p,e,t,b,o).updatePriceFeeds(),l[p]=ua(e,pa(p,d));}let u=new Fe(e,d);for(let p of a){let b=r[p],m=u.buildRequest(p);Object.keys(b).forEach(y=>{b[y].forEach(g=>{let h=l[g];if(!h)throw new Y(g);h.updateXOracle(p,y,m);});}),u.confirmRequest(p,m);}};var I=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},fe=t=>{if(t===void 0)throw new Error("veSca not found")},mt=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},yt=(t,e,a)=>{fe(a),mt(a);let s=Math.floor(a/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let o=Math.floor((e-s)/86400);if(t>o)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-o}`)},ba=(t,e,a,s)=>{let o=s?Math.floor(s/1e3):void 0,r=!o,i=!r&&o*1e3<=new Date().getTime();if(r||i)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${i?"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 ${i?"renewing expired veSca":"initial lock"}`);else {if(fe(s),mt(s),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");a&&e&&yt(e,a,s);}},ma=(t,e)=>{if(fe(e),mt(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},ya=(t,e,a)=>{if(!a||a>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var be=async(...t)=>{let[e,a,s,o]=t;if(t.length===3&&s)return {obligationId:s};if(t.length===4&&s&&o)return {obligationId:s,obligationKey:o};let r=I(a),i=await ie(e,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return {obligationId:i[0].id,obligationKey:i[0].keyId}},Os=({builder:t,txBlock:e})=>{let a={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")},o=`${t.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,r=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {openObligation:()=>{let[i,n,c]=t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation`,[a.version]);return [i,n,c]},returnObligation:(i,n)=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::return_obligation`,[a.version,i,n]);},openObligationEntry:()=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation_entry`,[a.version]);},addCollateral:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::deposit_collateral::deposit_collateral`,[a.version,i,a.market,n],[d]);},takeCollateral:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::withdraw_collateral::withdraw_collateral`,[a.version,i,n,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[l])},deposit:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::mint::mint`,[a.version,a.market,i,r],[c])},depositEntry:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::mint::mint_entry`,[a.version,a.market,i,r],[c])},withdraw:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem`,[a.version,a.market,i,r],[c])},withdrawEntry:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem_entry`,[a.version,a.market,i,r],[c])},borrow:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow`,[a.version,i,n,a.market,a.coinDecimalsRegistry,c,a.xOracle,r],[l])},borrowWithReferral:(i,n,c,d,l)=>{let u=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_with_referral`,[a.version,i,n,a.market,a.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,a.xOracle,r],[u,o])},borrowEntry:(i,n,c,d)=>{let l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_entry`,[a.version,i,n,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[l])},repay:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::repay::repay`,[a.version,i,a.market,n,r],[d]);},borrowFlashLoan:(i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.protocolPkg}::flash_loan::borrow_flash_loan`,[a.version,a.market,i],[c])},repayFlashLoan:(i,n,c)=>{let d=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::flash_loan::repay_flash_loan`,[a.version,a.market,i,n],[d]);}}},Rs=({builder:t,txBlock:e})=>({addCollateralQuick:async(a,s,o)=>{let r=I(e),{obligationId:i}=await be(t,e,o);if(s==="sui"){let[n]=e.splitSUIFromGas([a]);e.addCollateral(i,n,s);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);e.addCollateral(i,c,s),e.transferObjects([n],r);}},takeCollateralQuick:async(a,s,o,r)=>{let i=await be(t,e,o,r),n=await t.utils.getObligationCoinNames(i.obligationId);return await pe(t,e,n),e.takeCollateral(i.obligationId,i.obligationKey,a,s)},depositQuick:async(a,s,o=true)=>{let r=I(e),i;if(s==="sui"){let[n]=e.splitSUIFromGas([a]);i=e.deposit(n,s);}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);e.transferObjects([n],r),i=e.deposit(c,s);}return o?e.mintSCoin(t.utils.parseMarketCoinName(s),i):i},withdrawQuick:async(a,s)=>{let o=I(e),r=t.utils.parseSCoinName(s);if(!r)throw new Error(`No sCoin for ${s}`);let{sCoin:i,marketCoin:n}=await t.selectSCoinOrMarketCoin(e,r,a,o);if(i){let c=e.burnSCoin(r,i);n?e.mergeCoins(n,[c]):n=c;}if(!n)throw new Error(`No market coin for ${s}`);return e.withdraw(n,s)},borrowQuick:async(a,s,o,r)=>{let i=await be(t,e,o,r),c=[...await t.utils.getObligationCoinNames(i.obligationId)??[],s];return await pe(t,e,c),e.borrow(i.obligationId,i.obligationKey,a,s)},borrowWithReferralQuick:async(a,s,o,r,i)=>{let n=await be(t,e,r,i),d=[...await t.utils.getObligationCoinNames(n.obligationId)??[],s];return await pe(t,e,d),e.borrowWithReferral(n.obligationId,n.obligationKey,o,a,s)},repayQuick:async(a,s,o)=>{let r=I(e),i=await be(t,e,o);if(s==="sui"){let[n]=e.splitSUIFromGas([a]);return e.repay(i.obligationId,n,s)}else {let{leftCoin:n,takeCoin:c}=await t.selectCoin(e,s,a,r);return e.transferObjects([n],r),e.repay(i.obligationId,c,s)}},updateAssetPricesQuick:async a=>await pe(t,e,a)}),ha=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Os({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Rs({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Sa=async(t,e)=>{let a={spool:[],spoolReward:[],sCoinTreasury:[]},s=new Map;for(let l of e){let u=t.constants.poolAddresses[l],p={spool:u?.spool,spoolReward:u?.spoolReward,sCoinTreasury:u?.sCoinTreasury};Object.entries(p).forEach(([b,m])=>{m&&a[b].push(m);}),s.set(l,p);}let[o,r,i]=await Promise.all([t.scallopSuiKit.queryGetObjects(a.spool),t.scallopSuiKit.queryGetObjects(a.spoolReward),t.scallopSuiKit.queryGetObjects(a.sCoinTreasury)]),n=l=>new Map(l.map(u=>[u.objectId,u])),c={spool:n(o),spoolReward:n(r),sCoinTreasury:n(i)},d={};for(let[l,u]of s)d[l]={spool:u.spool?c.spool.get(u.spool):void 0,spoolReward:u.spoolReward?c.spoolReward.get(u.spoolReward):void 0,sCoinTreasury:u.sCoinTreasury?c.sCoinTreasury.get(u.sCoinTreasury):void 0};return d},Is=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let a=W(t),s=W(e);return {stakeType:a.stake_type,maxDistributedPoint:a.max_distributed_point,distributedPoint:a.distributed_point,distributedPointPerPeriod:a.distributed_point_per_period,pointDistributionTime:a.point_distribution_time,maxStake:a.max_stakes,stakes:a.stakes,index:a.index,createdAt:a.created_at,lastUpdate:a.last_update,...s}},wa=async(t,e=[...t.constants.whitelist.spool],a=false,s,o)=>{let r=e.map(c=>t.utils.parseCoinName(c));if(s=s??(await t.getMarketPools(r,{indexer:a})).pools,o=o??await t.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${r}`);let i={};if(a){let c=await t.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=t.utils.parseCoinName(l.marketCoinName),p=t.utils.getSpoolRewardCoinName();l.coinPrice=o?.[u]??l.coinPrice,l.marketCoinPrice=o?.[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=o?.[p]??l.rewardCoinPrice,i[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),i}let n=await Sa(t,r);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=r[d],u=await vs(t,c,a,o,n[l]);u&&(i[c]=u);}catch(l){console.error(l);}})),i},vs=async(t,e,a=false,s,o)=>{let r=t.utils.parseCoinName(e);if(s=s||await t.getAllCoinPrices(),a){let f=await t.indexer.getSpool(e),g=t.utils.parseCoinName(e),h=t.utils.getSpoolRewardCoinName();return f.coinPrice=s?.[g]??f.coinPrice,f.marketCoinPrice=s?.[e]??f.marketCoinPrice,f.rewardCoinPrice=s?.[h]??f.rewardCoinPrice,f}o??=(await Sa(t,[r]))[r];let i=t.utils.getSpoolRewardCoinName();s=s||await t.utils.getCoinPrices();let n=Is(o),c=$t(n),d=s?.[e]??0,l=t.utils.getCoinDecimal(e),u=Wt(c,d,l),p=Gt(n),b=s?.[i]??0,m=t.utils.getCoinDecimal(i),y=Xt(c,p,u,b,m);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(r),marketCoinType:t.utils.parseMarketCoinType(r),rewardCoinType:t.utils.isMarketCoin(i)?t.utils.parseMarketCoinType(i):t.utils.parseCoinType(i),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(r),rewardCoinDecimal:t.utils.getCoinDecimal(i),coinPrice:s?.[r]??0,marketCoinPrice:d,rewardCoinPrice:b,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:p.exchangeRateNumerator,exchangeRateDenominator:p.exchangeRateDenominator,...y}},ye=async({utils:t},e)=>{let a=e||t.suiKit.currentAddress,s=t.address.get("spool.object"),o=`${s}::spool_account::SpoolAccount`,r=[],i=false,n=null;do{let u=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:o},options:{showContent:true,showType:true},cursor:n,limit:10});u&&(r.push(...u.data),u.hasNextPage&&u.nextCursor?(i=true,n=u.nextCursor):i=false);}while(i);let c=[...t.constants.whitelist.spool].reduce((u,p)=>(u[p]=[],u),{}),d=Object.keys(c).reduce((u,p)=>{let b=t.parseCoinName(p),m=t.parseMarketCoinType(b);return u[p]=`${s}::spool_account::SpoolAccount<${m}>`,u},{}),l=Object.entries(d).reduce((u,[p,b])=>(u[b]=p,u),{});for(let u of r.map(p=>p.data)){let p=u?.objectId,b=u?.type;if(p&&u?.content&&"fields"in u.content){let m=u.content.fields,y=String(m.spool_id),f=String(m.stake_type.fields.name),g=Number(m.stakes),h=Number(m.index),C=Number(m.points),P=Number(m.total_points),D={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},k=utils.normalizeStructTag(b),R=D[l[k]];R&&R.push({id:p,type:k,stakePoolId:y,stakeType:utils.normalizeStructTag(f),staked:g,index:h,points:C,totalPoints:P});}}return c},gt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.id`),s,o=await t.scallopSuiKit.queryGetObject(a);if(o?.data){let r=o.data,i=r.objectId,n=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),b=Number(c.max_stakes),m=String(c.stake_type.fields.name),y=Number(c.stakes),f=Number(c.index),g=Number(c.created_at),h=Number(c.last_update);s={id:i,type:utils.normalizeStructTag(n),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:b,stakeType:utils.normalizeStructTag(m),totalStaked:y,index:f,createdAt:g,lastUpdate:h};}}return s},ht=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.rewardPoolId`),s,o=await t.scallopSuiKit.queryGetObject(a);if(o?.data){let r=o.data,i=r.objectId,n=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),b=Number(c.claimed_rewards);s={id:i,type:utils.normalizeStructTag(n),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:b};}}return s};var Ca=async(...t)=>{let[e,a,s,o]=t;if(t.length===4&&o)return [o];let r=I(a),i=await ye(e,r);if(i[s].length===0)throw new Error(`No stake account id found for sender ${r}`);return i[s].map(n=>n.id)},_s=async(...t)=>{let[e,a,s,o]=t,r=I(a),i=await ye(e,r);if(i[s].length===0)throw new Error(`No stake account found for sender ${r}`);return o?i[s].filter(c=>c.id===o):i[s]},Ta=async(t,e,a,s,o,r,i=false)=>{try{let{takeCoin:n,leftCoin:c,totalAmount:d}=i?await t.selectSCoin(e,s,o,r):await t.selectMarketCoin(e,s,o,r);if(i){let l=e.burnSCoin(s,n);e.stake(a,l,s);}else e.stake(a,n,s);return e.transferObjects([c],r),d}catch{return 0}},Bs=({builder:t,txBlock:e})=>{let a={spoolPkg:t.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:o=>{let r=t.utils.parseMarketCoinType(o),i=t.address.get(`spool.pools.${o}.id`);return t.moveCall(e,`${a.spoolPkg}::user::new_spool_account`,[i,s],[r])},stake:(o,r,i)=>{let n=t.utils.parseMarketCoinType(i),c=t.address.get(`spool.pools.${i}.id`);t.moveCall(e,`${a.spoolPkg}::user::stake`,[c,o,r,s],[n]);},unstake:(o,r,i)=>{let n=t.utils.parseMarketCoinType(i),c=t.address.get(`spool.pools.${i}.id`);return t.moveCall(e,`${a.spoolPkg}::user::unstake`,[c,o,r,s],[n])},claim:(o,r)=>{let i=t.address.get(`spool.pools.${r}.id`),n=t.address.get(`spool.pools.${r}.rewardPoolId`),c=t.utils.parseMarketCoinType(r),d=t.utils.getSpoolRewardCoinName(),l=t.utils.parseCoinType(d);return t.moveCall(e,`${a.spoolPkg}::user::redeem_rewards`,[i,n,o,s],[c,l])}}},Ms=({builder:t,txBlock:e})=>({stakeQuick:async(a,s,o)=>{let r=I(e),i=await Ca(t,e,s,o);if(i.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof a=="number"){let n=await Ta(t,e,i[0],s,a,r);a-=n,a>0&&await Ta(t,e,i[0],s,a,r,true);}else e.stake(i[0],a,s);},unstakeQuick:async(a,s,o,r=true)=>{let i=await _s(t,e,s,o),n=[];for(let c of i){if(c.staked===0)continue;let d=Math.min(a,c.staked),l=await e.unstake(c.id,d,s);if(r){let u=await e.mintSCoin(s,l);n.push(u);}else n.push(l);if(a-=d,a<=0)break}if(n.length>0){let c=n[0];return n.length>1&&e.mergeCoins(c,n.slice(1)),c}},claimQuick:async(a,s)=>{let o=await Ca(t,e,a,s),r=[];for(let i of o){let n=await e.claim(i,a);r.push(n);}return r}}),Pa=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Bs({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Ms({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var De=async(...t)=>{let[e,a,s,o]=t;if(t.length===4&&s&&o&&typeof s=="string"){let c=await rt(e,s);return {obligationId:s,obligationKey:o,obligationLocked:c}}let r=I(a),i=await ie(e,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let n=i.find(c=>c.id===s||c.keyId===o);if(!n)throw new Error(`No obligation found for sender ${r} with id ${s} or key ${o}`);return {obligationId:n.id,obligationKey:n.keyId,obligationLocked:n.locked}},Ks=({builder:t,txBlock:e})=>{let a={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),config:t.address.get("borrowIncentive.config"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore")},s={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,a.obligationAccessStore,o]);},stakeObligationWithVesca:(r,i,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,a.obligationAccessStore,s.config,s.treasury,s.table,n,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o],[]);},unstakeObligation:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::unstake_v2`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o]);},claimBorrowIncentive:(r,i,n)=>{let c=t.utils.parseCoinType(n);return t.moveCall(e,`${a.borrowIncentivePkg}::user::redeem_rewards`,[a.config,a.incentivePools,a.incentiveAccounts,i,r,o],[c])},deactivateBoost:(r,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::deactivate_boost_v2`,[a.config,a.incentivePools,a.incentiveAccounts,r,i,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),o]);}}},Ls=({builder:t,txBlock:e})=>({stakeObligationQuick:async(a,s)=>{let{obligationId:o,obligationKey:r,obligationLocked:i}=await De(t,e,a,s),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${Je}::user::unstake`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!i||n)&&e.stakeObligation(o,r);},stakeObligationWithVeScaQuick:async(a,s,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:n}=await De(t,e,a,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Je}::user::unstake`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||d.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!n||c){let l=await t.query.getBindedVeScaKey(r)??o;l?e.stakeObligationWithVesca(r,i,l):e.stakeObligation(r,i);}},unstakeObligationQuick:async(a,s)=>{let{obligationId:o,obligationKey:r,obligationLocked:i}=await De(t,e,a,s);i&&e.unstakeObligation(o,r);},claimBorrowIncentiveQuick:async(a,s,o)=>{let{obligationId:r,obligationKey:i}=await De(t,e,s,o);return e.claimBorrowIncentive(r,i,a)}}),Aa=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ks({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Ls({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Qs=async(t,e)=>{let a=e||t.suiKit.currentAddress,o=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,r=[],i=false,n=null;do{let d=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:o},cursor:n,limit:10});d&&(r.push(...d.data),d&&d.hasNextPage&&d.nextCursor?(i=true,n=d.nextCursor):i=false);}while(i);return r.map(d=>d.data).filter(d=>!!d)},Ue=async({utils:t},e,a)=>{let s=await Qs(t,e),o=Array(s.length).fill(null),r=s.map(async(n,c)=>{let d=await oe(t,n);d&&(o[c]=d);});await Promise.allSettled(r);let i=o.filter(Boolean).sort((n,c)=>c.currentVeScaBalance-n.currentVeScaBalance);return a?i.filter(n=>n.lockedScaAmount!=="0"):i},Oa=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),oe=async(t,e)=>{let a=t.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=Oa.parse(e));let s,o=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!o)return;let r=o.data;if(r&&r.content&&r.content.dataType==="moveObject"&&"fields"in r.content){let i=r.content.fields.value.fields,n=Math.max(+i.unlock_at*1e3-Date.now(),0),c=String(i.locked_sca_amount),d=S__default.default(i.locked_sca_amount).shiftedBy(-9).toNumber(),l=d*(Math.floor(n/1e3)/126144e3);s={id:r.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:Oa.parse(o.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:S__default.default(i.unlock_at*1e3).toNumber()};}return s},$s=async(t,e)=>{let a=t.address.get("vesca.id"),s=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let o=new suiKit.SuiTxBlock,r=o.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}),i=`${a}::treasury::refresh`,n=[s,e,r],c=`${a}::treasury::total_ve_sca_amount`,d=[e,r],l=await Promise.all(n.map(async y=>typeof y=="string"?(await t.scallopSuiKit.queryGetObject(y))?.data:y)),u=await Promise.all(d.map(async y=>typeof y=="string"?(await t.scallopSuiKit.queryGetObject(y))?.data:y));o.moveCall(i,l),o.moveCall(c,u);let p=await o.txBlock.build({client:t.suiKit.client,onlyTransactionKind:true}),m=(await t.scallopSuiKit.queryClient.fetchQuery({queryKey:N.rpc.getTotalVeScaTreasuryAmount({refreshArgs:n,vescaAmountArgs:d,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(p)})).results;if(m&&m[1]?.returnValues){let y=Uint8Array.from(m[1].returnValues[0][0]),f=m[1].returnValues[0][1];return qs__default.default(f==="u64","Result type is not u64"),bcs.bcs.u64().parse(y)}return "0"},Ra=async t=>{let e=t.address.get("vesca.treasury"),a=await t.scallopSuiKit.queryGetObject(e);if(!a||a.data?.content?.dataType!=="moveObject")return null;let s=a.data.content.fields,o=S__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),r=S__default.default(await $s(t,a.data)??0).shiftedBy(-9).toNumber(),i=o>0?r/o*4:0;return {totalLockedSca:o,totalVeSca:r,averageLockingPeriod:i,averageLockingPeriodUnit:"year"}};var ge=async(...t)=>{let[e,a,s]=t;if(t.length===3&&s&&typeof s<"u"){let i=await oe(e.utils,s);return i||void 0}let o=I(a),r=await Ue(e,o);if(r.length!==0)return s?r.find(({keyId:i})=>(typeof s=="string"?s:s.objectId)===i):r[0]},St=async(...t)=>{let[e,a,s]=t;try{let o=await e.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:"0x2::object::ID",value:a}});if(!o?.data)return !1;let r=o.data.content.fields.value.fields.contents;return Array.isArray(r)&&r.length>0}catch(o){return console.error(o),false}},Gs=({builder:t,txBlock:e})=>{let a={id:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config"),subsTable:t.address.get("vesca.subsTable")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_key`,[a.config,a.table,a.treasury,o,r,s],[]),extendLockPeriod:(o,r)=>{t.moveCall(e,`${a.id}::ve_sca::extend_lock_period`,[a.config,o,a.table,a.treasury,r,s],[]);},extendLockAmount:(o,r)=>{t.moveCall(e,`${a.id}::ve_sca::lock_more_sca`,[a.config,o,a.table,a.treasury,r,s],[]);},renewExpiredVeSca:(o,r,i)=>{t.moveCall(e,`${a.id}::ve_sca::renew_expired_ve_sca`,[a.config,o,a.table,a.treasury,r,i,s],[]);},redeemSca:o=>t.moveCall(e,`${a.id}::ve_sca::redeem`,[a.config,o,a.table,a.treasury,s],[]),mintEmptyVeSca:()=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_placeholder_key`,[a.config,a.table],[]),splitVeSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::split`,[a.config,o,a.table,a.subsTable,e.pure.u64(r)]),mergeVeSca:(o,r)=>t.moveCall(e,`${a.id}::ve_sca::merge`,[a.config,o,r,a.table,a.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}},Xs=({builder:t,txBlock:e})=>({lockScaQuick:async({amountOrCoin:a,lockPeriodInDays:s,autoCheck:o=true,veScaKey:r})=>{let i=I(e),n=await ge(t,e,r),c,d=[];if(a!==void 0&&typeof a=="number"){let b=await t.utils.selectCoins(a,Ce,i),[m,y]=e.takeAmountFromCoins(b,a);c=m,d.push(y);}else c=a;let l=t.utils.getUnlockAt(s,n?.unlockAt);o&&ba(a,s,l,n?.unlockAt);let u=!n,p=!u&&n.unlockAt<=new Date().getTime();if(u||p){if(c)if(u){let b=e.lockSca(c,l);d.push(b);}else {if(n.lockedScaCoin!==0){let b=e.redeemSca(n.keyId);d.push(b);}e.renewExpiredVeSca(n.keyId,c,l);}}else c&&s?(e.extendLockPeriod(n.keyId,l),e.extendLockAmount(n.keyId,c)):s?e.extendLockPeriod(n.keyId,l):c&&e.extendLockAmount(n.keyId,c);d.length>0&&e.transferObjects(d,i);},extendLockPeriodQuick:async({lockPeriodInDays:a,veScaKey:s,autoCheck:o=true})=>{let r=await ge(t,e,s),i=t.utils.getUnlockAt(a,r?.unlockAt);o&&yt(a,i,r?.unlockAt),r&&e.extendLockPeriod(r.keyId,i);},extendLockAmountQuick:async({scaAmount:a,veScaKey:s,autoCheck:o=true})=>{let r=I(e),i=await ge(t,e,s);if(o&&ma(a,i?.unlockAt),i){let n=await t.utils.selectCoins(a,Ce,r),[c,d]=e.takeAmountFromCoins(n,a);e.extendLockAmount(i.keyId,c),e.transferObjects([d],r);}},renewExpiredVeScaQuick:async({scaAmount:a,lockPeriodInDays:s,veScaKey:o,autoCheck:r=true})=>{let i=I(e),n=await ge(t,e,o),c=t.utils.getUnlockAt(s,n?.unlockAt);if(r&&ya(a,s,n?.unlockAt),n){let d=[];if(n.lockedScaCoin!==0){let b=e.redeemSca(n.keyId);d.push(b);}let l=await t.utils.selectCoins(a,Ce,i),[u,p]=e.takeAmountFromCoins(l,a);d.push(p),e.renewExpiredVeSca(n.keyId,u,c),e.transferObjects(d,i);}},redeemScaQuick:async({veScaKey:a,transferSca:s})=>{let o=I(e),r=await ge(t,e,a);if(fe(r?.unlockAt),r){let i=e.redeemSca(r.keyId);if(s){e.transferObjects([i],o);return}return i}},splitVeScaQuick:async({splitAmount:a,veScaKey:s,transferVeScaKey:o=true})=>{let r=await St(t,s,t.address.get("vesca.subsTable")),i=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(r&&!i)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let n=e.splitVeSca(s,a);if(o){e.transferObjects([n],I(e));return}else return n},mergeVeScaQuick:async({targetVeScaKey:a,sourceVeScaKey:s})=>{let o=t.address.get("vesca.subsTableId"),[r,i]=await Promise.all([St(t,a,o),St(t,s,o)]),n=!!e.txBlock.blockData.transactions.find(l=>l.kind==="MoveCall"&&l.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((r||i)&&!n)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[c,d]=await Promise.all([oe(t.utils,s),oe(t.utils,a)]);if(!c||!d)throw new Error("Source or target veSCA not found");return c.unlockAt<d.unlockAt?e.extendLockPeriod(c.keyId,d.unlockAt/1e3):c.unlockAt>d.unlockAt&&e.extendLockPeriod(d.keyId,c.unlockAt/1e3),e.mergeVeSca(a,s)}}),ja=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Gs({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Xs({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Ys=({builder:t,txBlock:e})=>{let a={referralPgkId:t.address.get("referral.id"),referralBindings:t.address.get("referral.referralBindings"),referralRevenuePool:t.address.get("referral.referralRevenuePool"),authorizedWitnessList:t.address.get("referral.authorizedWitnessList"),referralTiers:t.address.get("referral.referralTiers"),version:t.address.get("referral.version")},s=t.address.get("vesca.table"),o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {bindToReferral:r=>{t.moveCall(e,`${a.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[a.referralBindings,e.pure.id(r),s,o],[]);},claimReferralTicket:r=>{let i=t.utils.parseCoinType(r);return t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[a.version,s,a.referralBindings,a.authorizedWitnessList,a.referralTiers,o],[i])},burnReferralTicket:(r,i)=>{let n=t.utils.parseCoinType(i);t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[a.version,r,a.referralRevenuePool,o],[n]);},claimReferralRevenue:(r,i)=>{let n=t.utils.parseCoinType(i);return t.moveCall(e,`${a.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[a.version,a.referralRevenuePool,r,o],[n])}}},Js=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(a,s=[...t.constants.whitelist.lending])=>{let o=I(e),r=[];for(let i of s)if(i==="sui"){let n=await e.claimReferralRevenue(a,i);r.push(n);}else {let n=await e.claimReferralRevenue(a,i);try{let c=await t.suiKit.suiInteractor.selectCoins(o,1/0,t.utils.parseCoinType(i));e.mergeCoins(n,c.slice(0,500));}catch{}finally{r.push(n);}}r.length>0&&e.transferObjects(r,o);}}),_a=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ys({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=Js({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var eo=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("loyaltyProgram.id"),scaRewardPool:t.address.get("loyaltyProgram.rewardPool")},s={object:t.address.get("vesca.object"),protocolConfig:t.address.get("vesca.config"),veScaTable:t.address.get("vesca.table"),subsTable:t.address.get("vesca.subsTable")},o={pkgId:t.address.get("veScaLoyaltyProgram.id"),veScaRewardPool:t.address.get("veScaLoyaltyProgram.veScaRewardPool")};return {claimLoyaltyRevenue:r=>t.moveCall(e,`${a.pkgId}::reward_pool::redeem_reward`,[a.scaRewardPool,r]),claimVeScaLoyaltyReward:r=>t.moveCall(e,`${o.pkgId}::ve_sca_reward::redeem_reward`,[o.veScaRewardPool,r,s.protocolConfig,s.veScaTable,s.subsTable])}},to=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let s=I(e);if(!a)throw new Error(`No veScaKey found for user ${s}`);let o=e.claimLoyaltyRevenue(a),r=t.constants.coinTypes.sca;if(!r)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,o,r,I(e)),e.transferObjects([o],s);},claimVeScaLoyaltyRewardQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let s=I(e);if(!a)throw new Error(`No veScaKey found for user ${s}`);let o=e.claimVeScaLoyaltyReward(a);e.transferObjects([o],s);}}),Ma=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=eo({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=to({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var so=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("scoin.id")};return {mintSCoin:(s,o)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid marketCoinName name: ${s}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(s),o],[r,t.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,o)=>{let r=t.utils.parseSCoinType(s);if(!r)throw new Error(`Invalid sCoin name: ${s}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(s),o],[r,t.utils.parseUnderlyingSCoinType(s)])}}},oo=({builder:t,txBlock:e})=>({mintSCoinQuick:async(a,s)=>{let o=I(e),{leftCoin:r,takeCoin:i}=await t.selectMarketCoin(e,a,s,o);return e.transferObjects([r],o),e.mintSCoin(a,i)},burnSCoinQuick:async(a,s)=>{let o=I(e),{leftCoin:r,takeCoin:i}=await t.selectSCoin(e,a,s,o);return e.transferObjects([r],o),e.burnSCoin(a,i)}}),Da=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=so({builder:t,txBlock:a}),o=new Proxy(a,{get:(i,n)=>n in s?Reflect.get(s,n):Reflect.get(i,n)}),r=oo({builder:t,txBlock:o});return new Proxy(o,{get:(i,n)=>n in r?Reflect.get(r,n):Reflect.get(i,n)})};var Ka=(t,e)=>{let a=ja(t,e),s=Ma(t,a),o=Aa(t,s),r=_a(t,o),i=Da(t,r),n=Pa(t,i),c=ha(t,n);return new Proxy(c,{get:(d,l)=>l in a?Reflect.get(a,l):l in o?Reflect.get(o,l):l in r?Reflect.get(r,l):l in n?Reflect.get(n,l):l in s?Reflect.get(s,l):l in i?Reflect.get(i,l):Reflect.get(d,l)})};var wt=class{_queryClient;constructor(e={}){this._queryClient=e.queryClient??new queryCore.QueryClient(this.defaultQueryClientConfig);}get queryClient(){return this._queryClient}set queryClient(e){this._queryClient=e;}get defaultQueryClientConfig(){return qt}},he=wt;var kt=class extends he{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??io__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,a,s,o){if(Array.isArray(a)){let r=a,i=s,n=o;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.post(e,i,n).then(c=>c)})}else {let r=a,i=s;return this.axiosInstance.post(e,r,i)}}async get(e,a,s){if(Array.isArray(a)){let o=a,r=s;return this.queryClient.fetchQuery({queryKey:o,queryFn:()=>this.axiosInstance.get(e,r).then(i=>i)})}else {let o=a;return this.axiosInstance.get(e,o)}}async put(e,a,s,o){if(Array.isArray(a)){let r=a,i=s,n=o;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.put(e,i,n).then(c=>c)})}else {let r=a,i=s;return this.axiosInstance.put(e,r,i)}}async delete(e,a,s){if(Array.isArray(a)){let o=a,r=s;return this.queryClient.fetchQuery({queryKey:o,queryFn:()=>this.axiosInstance.delete(e,r).then(i=>i)})}else {let o=a;return this.axiosInstance.delete(e,o)}}},Se=kt;async function no(t,e,...a){let s=a[a.length-1];if(typeof s=="object"&&s.indexer)try{return await t.apply(e,a)}catch(o){return console.warn(`Indexer requests failed: ${o.message}. Retrying without indexer..`),await t.apply(e,[...a.slice(0,-1),{...s,indexer:false}])}return await t.apply(e,a)}function E(t){return (...e)=>no(t,this,...e)}var La=t=>{let e=new Date(t*1e3),a=new Date(t*1e3);a.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&a.setUTCDate(a.getUTCDate()+1);let s=new Date().getTime();return a.getTime()-s>126144e3*1e3&&a.setUTCDate(a.getUTCDate()-1),Math.floor(a.getTime()/1e3)},we=t=>(t.endsWith("/")&&(t=t.slice(0,-1)),t),Ct=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e};var Tt={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:"",lst:{afsui:{safeId:"",stakedSuiVaultId:"",configId:""},hasui:{configId:"",staking:""}}}},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:"",lst:{afsui:{id:"",object:""},hasui:{id:"",object:""}}},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},veScaLoyaltyProgram:{id:"",object:"",veScaRewardPool:"",veScaRewardTableId:""},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:""}}}},Pt=class{constructor(e={}){this.params=e;this.scallopAxios=new Se({...this.defaultParamValues,...e}),this.network=e.network??"mainnet",this.addressId=e.addressId??this.defaultParamValues.addressId,this.auth=e.auth??"",e.forceAddressesInterface&&this.initializeForcedAddresses(e.forceAddressesInterface);}currentAddresses;addressId;network;auth;scallopAxios;addressMap=new Map;defaultParamValues={addressId:"67c44a103fe1b8c454eb9699",network:"mainnet"};initializeForcedAddresses(e){let a=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([s,o])=>{if(a.includes(s)){let r=s;this.addressMap.set(r,o),r===this.network&&(this.currentAddresses=o);}});}get axiosClient(){return this.scallopAxios}get queryClient(){return this.axiosClient.queryClient}get defaultValues(){return this.params.defaultValues}getId(){return this.addressId}get(e){if(this.currentAddresses)return e.split(".").reduce((s,o)=>typeof s=="object"?s[o]:s,this.currentAddresses)||void 0}set(e,a){if(this.currentAddresses){let s=e.split(".");s.reduce((o,r,i)=>{if(i===s.length-1)o[r]=a;else return o[r]},this.currentAddresses);}return this.currentAddresses}switchCurrentAddresses(e){return this.addressMap.has(e)&&(this.currentAddresses=this.addressMap.get(e),this.network=e),this.currentAddresses}getAddresses(e){return e?this.addressMap.get(e):this.currentAddresses??this.addressMap.get(this.network)}setAddresses(e,a){let s=a||this.network;s===this.network&&(this.currentAddresses=e),this.addressMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:a,network:s,auth:o,memo:r}=e??{},i=o||this.auth||void 0,n=s||this.network,c=a||this.currentAddresses||this.addressMap.get(n)||Tt;if(i!==void 0){this.addressMap.clear(),this.setAddresses(c,n);let d=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":o||this.auth}});if(d.status===201){for(let[l,u]of Object.entries(d.data))["localnet","devnet","testnet","mainnet"].includes(l)&&(l===this.network&&(this.currentAddresses=u),this.addressMap.set(l,u));return this.addressId=d.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("You don't have permission to access this request.")}async readApi({url:e,queryKey:a,config:s}){let o=await this.axiosClient.get(e,a,s);if(o.status===200)return o.data;throw Error(`Error: ${o.status}; Failed to read ${e} ${o.statusText}`)}async read(e){let a=e||this.addressId||void 0;if(a!==void 0){let s=await(async()=>{let r=(this.params.urls?.addresses??[Et]).map(i=>`${we(i)}/addresses/${a}`);for(let i of r)try{return await this.readApi({url:i,queryKey:N.api.getAddresses({addressId:a})})}catch(n){console.error(`${n}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??Tt}})(),o=r=>["localnet","devnet","testnet","mainnet"].includes(r);for(let[r,i]of Object.entries(s))o(r)&&typeof i=="object"&&(r===this.network&&(this.currentAddresses=i),this.addressMap.set(r,i));return this.addressId=s.id,this.getAllAddresses()}else throw Error("Please provide API addresses id.")}async update(e){let{id:a,addresses:s,network:o,auth:r,memo:i}=e??{},n=r||this.auth||void 0,c=a||this.addressId||void 0,d=o||this.network,l=s||this.currentAddresses||this.addressMap.get(d)||Tt;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(n!==void 0){a!==this.addressId&&this.addressMap.clear(),this.setAddresses(l,d);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:i}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(u.status===200){for(let[p,b]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(p)&&(p===this.network&&(this.currentAddresses=b),this.addressMap.set(p,b));return this.addressId=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,a){let s=a||this.auth||void 0,o=e||this.addressId||void 0;if(o===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this.axiosClient.delete(`/addresses/${o}`,{headers:{"Content-Type":"application/json","api-key":a||this.auth}})).status===200)this.addressId=void 0,this.currentAddresses=void 0,this.addressMap.clear();else throw Error("Failed to delete addresses.");else throw Error("You don't have permission to access this request.")}},Ee=Pt;var Ua=t=>Object.keys(t).length===0,xt={lending:new Set,borrowing:new Set,collateral:new Set,packages:new Set,scoin:new Set,spool:new Set,borrowIncentiveRewards:new Set,rewardsAsPoint:new Set,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},lo=t=>Object.entries(t).filter(([e,a])=>!!a&&(Array.isArray(a)||a instanceof Set)).reduce((e,[a,s])=>(e[a]=s instanceof Set?s:new Set(s),e),{}),At=class extends Ee{constructor(a={}){super(a);this.params=a;}_poolAddresses={};_whitelist=xt;coinDecimals={};coinNameToOldMarketCoinTypeMap={};scoinRawNameToSCoinNameMap={};scoinTypeToSCoinNameMap={};wormholeCoinTypeToCoinNameMap={};voloCoinTypeToCoinNameMap={};suiBridgeCoinTypeToCoinNameMap={};coinTypes={};sCoinTypes={};coinTypeToCoinNameMap={};supportedBorrowIncentiveRewards=new Set;get protocolObjectId(){return this.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){let a=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"];return this.isAddressInitialized()&&!Ua(this.poolAddresses)&&a.every(s=>this.whitelist[s].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(a,s)=>a[s]??xt[s]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(a,s)=>a[s]??void 0})}get defaultValues(){return this.params.defaultValues}isAddressInitialized({networkType:a="mainnet"}={}){let s=this.getAddresses(a);return !!s&&!Ua(s)}parseToOldMarketCoin(a){return `${this.protocolObjectId}::reserve::MarketCoin<${a}>`}async init({networkType:a="mainnet",force:s=false,addressId:o,constantsParams:r=this.params}={}){let i=this.getAddresses(a);if((!i||Object.keys(i).length===0||s)&&await this.read(o),r.forcePoolAddressInterface&&(this._poolAddresses=r.forcePoolAddressInterface),r.forceWhitelistInterface&&(this._whitelist=lo(r.forceWhitelistInterface)),this.isInitialized&&!s){this.initConstants();return}let[n,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((d,l)=>{let u=l,p=n[u];return d[u]=p instanceof Set?p:Array.isArray(p)?new Set(p):new Set,d},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([d])=>Object.values(this._whitelist).some(l=>l.has(d))).map(([d,l])=>{let u=Object.fromEntries(Object.entries(l).map(([p,b])=>[p,typeof b=="boolean"?b??false:b||void 0]));return [d,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[s,o.decimals]),...Object.entries(this.poolAddresses).filter(([s,o])=>!!o?.sCoinName).map(([s,o])=>[o.sCoinName,o.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[s,o?.coinType]),...Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinName&&o.sCoinType).map(([s,o])=>[o.sCoinName,o.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([s,o])=>[o,s])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&this.whitelist.wormhole.has(s)).map(([s,o])=>[o.coinType,o.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o).map(([s,o])=>[o.coinName,this.parseToOldMarketCoin(o.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinType&&o.sCoinName).map(([s,o])=>[suiKit.parseStructTag(o.sCoinType).name,o.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinType&&o.sCoinName).map(([s,o])=>[o.sCoinType,o.sCoinName]));let a=this.poolAddresses.vsui?.coinType;a&&(this.voloCoinTypeToCoinNameMap={[a]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&this.whitelist.suiBridge.has(o.coinName)).map(([s,o])=>[o.coinType,o.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,o])=>!!o&&o.sCoinName&&o.sCoinType).map(([s,o])=>[o.sCoinName,o.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(s=>!!s).map(s=>s.sCoinName?[s.coinName,s.sCoinName]:[s.coinName]).flat()]);}async readWhiteList(){let a=await(async()=>{let s=(this.params.urls?.whitelist??["https://sui.apis.scallop.io/pool/whitelist"]).map(we);for(let o of s)try{return await this.readApi({url:o,queryKey:N.api.getWhiteList()})}catch(r){console.error(`${r}`);}return this.defaultValues?.whitelist??xt})();return Object.fromEntries(Object.entries(a).filter(([s,o])=>Array.isArray(o)||o instanceof Set).map(([s,o])=>[s,o instanceof Set?o:new Set(o)]))}async readPoolAddresses(){let a=(this.params.urls?.poolAddresses??["https://sui.apis.scallop.io/pool/addresses"]).map(we);for(let s of a)try{return await this.readApi({url:s,queryKey:N.api.getPoolAddresses()})}catch(o){console.error(`${o}`);}return this.defaultValues?.poolAddresses??{}}},Ve=At;var Ea=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??Ze:Ze},new suiKit.SuiKit({...t,...e})};var bo=10,qe=(t,e)=>{let a={...t};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?a[s]=qe(t[s]||{},e[s]):a[s]=e[s];return a},Qe=class{constructor(e=10){this.capacity=e;this.refillRate=this.capacity/1e3,this.tokens=this.capacity,this.lastRefillTime=Date.now();}tokens;lastRefillTime;refillRate;refill(){let e=Date.now(),s=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+s),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(a=>setTimeout(a,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}},Ot=class extends he{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Ea(e),this._tokensPerSecond=e.tokensPerSecond??bo,this.rateLimiter=new Qe(this._tokensPerSecond),this._walletAddress=e.walletAddress??this.suiKit.currentAddress;}switchFullNodes(e){this.suiKit.suiInteractor.switchFullNodes(e);}get client(){return this.suiKit.client}get walletAddress(){return this._walletAddress}set walletAddress(e){this._walletAddress=e;}get tokensPerSecond(){return this._tokensPerSecond}set tokensPerSecond(e){this._tokensPerSecond=e,this.rateLimiter=new Qe(this._tokensPerSecond);}get currentFullNode(){try{return this.suiKit.suiInteractor.currentFullNode}catch{return ""}}signAndSendTxn(e,a){return this.suiKit.signAndSendTxn(e,a)}async callWithRateLimiter(e,a){return await this.queryClient.fetchQuery({queryKey:e,queryFn:()=>this.rateLimiter.execute(a)})}async queryGetNormalizedMoveFunction(e){let{address:a,module:s,name:o}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(N.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:a,module:s,function:o}))}async queryGetObject(e,a){return a={...a,showOwner:true,showContent:true,showType:true},await this.callWithRateLimiter(N.rpc.getObject({objectId:e,options:a,node:this.currentFullNode}),()=>this.client.getObject({id:e,options:a}))}async queryGetObjects(e,a){if(e.length===0)return [];a??={showContent:true,showOwner:true,showType:true};let s=await this.callWithRateLimiter(N.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:a?.showOwner,showContent:a?.showContent,showType:a?.showType}));return s.forEach(o=>{let r=N.rpc.getObject({objectId:o.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:r}).forEach(([n,c])=>{c||(c={data:c}),this.queryClient.setQueryData(n,qe(c,{data:o,error:null}),{updatedAt:Date.now()});});}),s}async queryGetOwnedObjects(e){let a=await this.callWithRateLimiter(N.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return a&&a.data.length>0&&a.data.filter(s=>!!s.data).forEach(s=>{let o=N.rpc.getObject({objectId:s.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:o}).forEach(([i,n])=>{this.queryClient.setQueryData(i,qe(n,{data:s.data,error:null}),{updatedAt:Date.now()});});}),a}async queryGetDynamicFields(e){return await this.callWithRateLimiter(N.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let a=await this.callWithRateLimiter(N.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(a?.data){let s=N.rpc.getObject({objectId:a.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:s}).forEach(([r,i])=>{this.queryClient.setQueryData(r,qe(i,{data:a.data,error:null}),{updatedAt:Date.now()});});}return a}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(N.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let a=await this.client.getAllBalances({owner:e});return a?a.reduce((o,r)=>(r.totalBalance!=="0"&&(o[suiKit.normalizeStructTag(r.coinType)]=r),o),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:a,typeArgs:s}){let o=new suiKit.SuiTxBlock;if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");let i=await Promise.all((a??[]).map(async n=>{if(typeof n!="string")return n;let c=(await this.queryGetObject(n))?.data;return c||n}));return o.moveCall(e,i,s),await this.callWithRateLimiter(N.rpc.getInspectTxn({queryTarget:e,args:a,typeArgs:s,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(o))}},$e=Ot;var It=class{pythEndpoints;scallopSuiKit;constants;constructor(e={}){this.constants=e.scallopConstants??new Ve(e),this.scallopSuiKit=e.scallopSuiKit??new $e({queryClient:this.constants.queryClient,...e}),this.pythEndpoints=e.pythEndpoints??["https://hermes.pyth.network"];}get walletAddress(){return this.scallopSuiKit.walletAddress}get suiKit(){return this.scallopSuiKit.suiKit}get queryClient(){return this.constants.queryClient}get address(){return this.constants}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isMarketCoin(e){let a=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(a)}async init({force:e=false}={}){await this.constants.init({force:e});}parseCoinName(e){return e.slice(1)}parseSymbol(e){return this.isMarketCoin(e)?this.constants.poolAddresses[this.parseCoinName(e)]?.sCoinSymbol??"":this.constants.poolAddresses[e]?.symbol??""}parseCoinType(e,a=false){return a?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let a=`s${e}`;return this.constants.whitelist.scoin.has(a)?a: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 a=this.parseCoinName(e);return this.parseCoinType(a)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,true)}parseMarketCoinName(e){return `s${e}`}getSpoolRewardCoinName=()=>"sui";getCoinDecimal(e){return this.constants.coinDecimals[e]??0}getCoinWrappedType(e){if(this.isSuiBridgeAsset(e))return {from:"Sui Bridge",type:"Asset from Sui Bridge"};if(this.isWormholeAsset(e))return {from:"Wormhole",type:"Portal from Ethereum"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:a,module:s,name:o,typeParams:r}=suiKit.parseStructTag(e);return a===this.constants.protocolObjectId&&s==="reserve"&&o==="MarketCoin"?this.parseMarketCoinName((typeof r[0]=="string"?suiKit.parseStructTag(r[0]):r[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||suiKit.parseStructTag(e).name.toLowerCase()}async selectCoins(e,a=suiKit.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,a)}async mergeSimilarCoins(e,a,s,o=this.walletAddress){try{let r=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,o);r.length>0&&e.mergeCoins(a,r.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let a=await Ie(this,e);if(!a)return;let s=a.collaterals.map(n=>`0x${n.type.name}`),o=a.debts.map(n=>`0x${n.type.name}`);return [...new Set([...s,...o])].map(n=>this.parseCoinNameFromType(n))}parseDataFromPythPriceFeed(e){let s=[...this.constants.whitelist.lending].find(o=>this.address.get(`core.coins.${o}.oracle.pyth.feed`)===e.id);if(s){let o=e.getPriceUnchecked();return {coinName:s,price:o.getPriceAsNumberUnchecked(),publishTime:Number(o.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,a){let s=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(a=a||(await this.scallopSuiKit.queryGetObject(s))?.data,a){let o=a;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),n=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((n?-1:1)*i)*(d?-1:1)}}return 0}async getPythPrices(e){let a=e.reduce((r,i)=>{let n=this.address.get(`core.coins.${i}.oracle.pyth.feedObject`);return n&&(r[n]?r[n].push(i):r[n]=[i]),r},{}),o=(await this.scallopSuiKit.queryGetObjects(Object.keys(a))).reduce((r,i)=>(a[i.objectId].forEach(n=>{r[n]=i;}),r),{});return (await Promise.all(Object.entries(o).map(async([r,i])=>({coinName:r,price:await this.getPythPrice(r,i)})))).reduce((r,i)=>(r[i.coinName]=i.price,r),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let a={},s=this.pythEndpoints,o=new Set(e);for(let r of s){let i=Array.from(o.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(i.length===0)break;let n=i.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(r,{timeout:4e3});try{let d=await this.queryClient.fetchQuery({queryKey:N.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(n),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let p=i[u][0],b=this.parseDataFromPythPriceFeed(l);a[p]=b.price,o.delete(p);});}catch(d){console.error(d.message);}if(o.size===0)break}return o.size>0&&(a={...a,...await this.getPythPrices(Array.from(o.values()))},o.clear()),a}parseAprToApy(e,a=365){return (1+e/a)**a-1}parseApyToApr(e,a=365){return ((1+e)**(1/a)-1)*a}getUnlockAt(e,a){let s=Math.floor(new Date().getTime()/1e3),o=a?Math.max(Math.floor(a/1e3)-s,0):0,r=0;if(o===0){let i=(e??1)*86400;r=Math.min(s+i,s+126144e3);}else {let i=Math.min(e?e*86400+o:o,126144e3);r=s+i;}return La(r)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},We=It;var vt=class extends Se{constructor(e={}){e.baseUrl=e.indexerApiUrl??Vt,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",N.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((a,s)=>(a[s.coinName]=s,a),{}),collaterals:e.data.collaterals.reduce((a,s)=>(a[s.coinName]=s,a),{})};throw Error("Failed to getMarket.")}async getMarketPools(){return (await this.getMarket()).pools}async getMarketPool(e){return (await this.getMarketPools())[e]}async getMarketCollaterals(){return (await this.getMarket()).collaterals}async getMarketCollateral(e){return (await this.getMarketCollaterals())[e]}async getSpools(){let e=await this.get("/api/spools/migrate",N.api.getSpools());if(e.status===200)return e.data.spools.reduce((a,s)=>(a[s.marketCoinName]=s,a),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",N.api.getBorrowIncentivePool());if(e.status===200)return e.data.borrowIncentivePools.reduce((a,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((o,r)=>(o[r.coinName]=r,o),{})),a[s.coinName]=s,a),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",N.api.getTotalValueLocked());if(e.status===200)return e.data;throw Error("Failed to getTotalValueLocked.")}async getCoinPrice(e){return (await this.getMarketPool(e))?.coinPrice??0}async getCoinPrices(){let e=await this.getMarketPools();return Object.entries(e).reduce((a,[s,o])=>(o&&(a[s]=o.coinPrice),a),{})}},Ge=vt;var wo=async({address:t,scallopSuiKit:e})=>{let a=t.get("borrowIncentive.query"),s=t.get("borrowIncentive.incentivePools"),o=`${a}::incentive_pools_query::incentive_pools_data`,r=[s];return (await e.queryInspectTxn({queryTarget:o,args:r}))?.events[0].parsedJson},qa=async(t,e=[...t.constants.whitelist.lending],a=false,s,o)=>{let r={};s=s??(await t.getMarketPools(void 0,{coinPrices:o,indexer:a})).pools,o=o??await t.getAllCoinPrices({marketPools:s});let i=await wo(t);for(let n of i?.incentive_pools??[]){let c={},d=zt(t.utils,n),l=utils.normalizeStructTag(n.pool_type.name),u=t.utils.parseCoinNameFromType(l),p=o?.[u]??0,b=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[g,h]of Object.entries(d.poolPoints)){if(!h)continue;let C=h.pointType,P=t.utils.parseCoinNameFromType(C),D=t.utils.getCoinDecimal(P);if(D===void 0)throw new Error(`Coin decimal not found for ${P}`);let k=o?.[P]??0,R=t.utils.parseSymbol(P),_=t.utils.getCoinDecimal(P),F=Ht(h,k,D,p,b);c[g]={symbol:R,coinName:P,coinType:C,coinDecimal:_,coinPrice:k,points:h.points,distributedPoint:h.distributedPoint,weightedAmount:h.weightedAmount,...F};}let m=S__default.default(d.staked),y=m.shiftedBy(-1*b),f=y.multipliedBy(p);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:l,coinDecimal:b,coinPrice:p,stakedAmount:m.toNumber(),stakedCoin:y.toNumber(),stakedValue:f.toNumber(),points:c};}return r},Qa=async({utils:t},e,a=[...t.constants.whitelist.lending])=>{let s=t.address.get("borrowIncentive.query"),o=t.address.get("borrowIncentive.incentiveAccounts"),r=`${s}::incentive_account_query::incentive_account_data`,i=[o,e],c=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:i}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let p=Yt(t,u),b=p.poolType,m=t.parseCoinNameFromType(b);return a&&a.includes(m)&&(l[m]=p),l},{})},$a=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("borrowIncentive.object"),o=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),i=await e.queryGetObject(o);if(i?.data?.content?.dataType!=="moveObject")return null;let c=i.data.content.fields.ve_sca_bind.fields.id.id,d=`${s}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,l=await e.queryGetDynamicFieldObject({parentId:c,name:{type:d,value:a}});return l?.data?.content?.dataType!=="moveObject"?null:l.data.content.fields.value.fields.id},Wa=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("borrowIncentive.object"),o=t.get("borrowIncentive.incentiveAccounts"),r=t.get("core.object"),i=await e.queryGetObject(o);if(i?.data?.content?.dataType!=="moveObject")return null;let n=i.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:n,name:{type:`${s}::typed_id::TypedID<${r}::obligation::Obligation>`,value:a}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var ko=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(t=>({totalPoolReward:S__default.default(t.balance).shiftedBy(-9).toNumber(),isClaimEnabled:t.enable_claim})),Co=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),Ga=async(t,e)=>{let a=t.address.get("loyaltyProgram.rewardPool"),s=await t.scallopSuiKit.queryGetObject(a);if(s?.data?.content?.dataType!=="moveObject")return null;let o=s.data.content.fields,{isClaimEnabled:r,totalPoolReward:i}=ko.parse(o),n={pendingReward:0,totalPoolReward:i,isClaimEnabled:r};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return n;let c=t.address.get("loyaltyProgram.userRewardTableId"),d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return n;let l=d.data.content.fields;return n.pendingReward=Co.parse(l),n},To=zod.z.object({reserve_ve_sca_key:zod.z.nullable(zod.z.object({fields:zod.z.object({id:zod.z.object({id:zod.z.string()})}),type:zod.z.string()})),enable_claim:zod.z.boolean()}).transform(t=>({reserveVeScaKey:t.reserve_ve_sca_key?.fields.id.id,isClaimEnabled:t.enable_claim})),Po=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),Xa=async(t,e)=>{let a=t.address.get("veScaLoyaltyProgram.veScaRewardPool"),s=await t.scallopSuiKit.queryGetObject(a);if(s?.data?.content?.dataType!=="moveObject")return null;let o=s.data.content.fields,{isClaimEnabled:r,reserveVeScaKey:i}=To.parse(o),n={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:r},c;if(i&&(c=await t.getVeSca(i),n.totalPoolReward=c?.currentVeScaBalance??0),e=e??(await t.getVeScas())[0]?.keyObject,!e)return n;let d=t.address.get("veScaLoyaltyProgram.veScaRewardTableId"),l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:d,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(l?.data?.content?.dataType!=="moveObject")return n;let u=l.data.content.fields;n.pendingScaReward=Po.parse(u);let p=Math.max((c?.unlockAt??0)-Date.now(),0);return n.pendingVeScaReward=n.pendingScaReward*(Math.floor(p/1e3)/126144e3),n};var Oo=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"],Xe=async t=>{for(let e of Oo)try{return await t(new client.SuiClient({url:e}))}catch(a){if(a.status!==429)throw a;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},Ro=async(t,e,a="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,o=false,r={};do{let i=await t.getDynamicFields({parentId:a,limit:10,cursor:s});if(!i)break;let{data:n,hasNextPage:c,nextCursor:d}=i;n.forEach(l=>{let u=`0x${l.name.value.name}`;e.has(u)&&(r[u]=l.objectId);}),o=c,s=d;}while(o);return r},J=async(t,e,a,s=true)=>{let o=(await Xe(async r=>await r.getDynamicFieldObject({parentId:t,name:{type:e,value:a}}))).data;return s?o?.objectId:o?.content},za=async(t,e=[])=>{let a=new Set(e),s={},r=(await fetch(`https://sui.apis.scallop.io/addresses/${t}`).then(k=>k.json())).mainnet;if(!r)throw new Error("Failed to fetch addresses");let i=Object.keys(r.core.coins);if(i.length===0)throw new Error("Pools empty");let n=i.reduce((k,R)=>{if(a.size>0&&!a.has(R))return k;let _=r.core.coins[R];return _&&_.coinType&&k.push([R,_.coinType]),k},[]);if(n.length===0)throw new Error("No coinTypesPairs");let c=r.core.market,d=(await Xe(async k=>await k.getObject({id:c,options:{showContent:!0}}))).data;if(!(d&&d.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let l=d.content.fields,u=l.vault.fields.balance_sheets.fields.table.fields.id.id,p=l.collateral_stats.fields.table.fields.id.id,b=l.borrow_dynamics.fields.table.fields.id.id,m=l.interest_models.fields.table.fields.id.id,y=l.risk_models.fields.table.fields.id.id,f="0x1::type_name::TypeName",g="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",h="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",C="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",P="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",D=await Xe(async k=>await Ro(k,new Set(n.map(([,R])=>R))));return await Promise.all(n.map(async([k,R])=>{let _=R.slice(2),F=await Promise.all([J(u,f,{name:_},true),J(p,f,{name:_},true),J(b,f,{name:_},true),J(m,f,{name:_},true),J(y,f,{name:_},true),J(c,g,_,true),J(c,h,_,true),J(c,C,_,true),J(c,P,_,false)]),{symbol:te,metaData:V}=r.core.coins[k],T={spool:"",spoolReward:""},x=r.spool.pools[`s${k}`];if(x){let{id:M,rewardPoolId:Q}=x;T={spool:M,spoolReward:Q};}let A={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},O=`s${k}`,B=r.scoin.coins[O];if(B){let{coinType:M,treasury:Q,metaData:H,symbol:Z}=B;A={sCoinType:M,sCoinTreasury:Q,sCoinMetadataId:H,sCoinSymbol:Z};}let U={pythFeed:"",pythFeedObjectId:""};if(r.core.coins[k]?.oracle.pyth){let{feed:M,feedObject:Q}=r.core.coins[k].oracle.pyth;U={pythFeed:M,pythFeedObjectId:Q};}let{feed:v,feedObject:j}=r.core.coins[k].oracle.pyth,K=(await Xe(async M=>await M.getCoinMetadata({coinType:R})))?.decimals??0,q=T?`s${k}`:void 0;s[k]={coinName:k,symbol:te,lendingPoolAddress:F[0]??"",collateralPoolAddress:F[1]??"",borrowDynamic:F[2]??"",interestModel:F[3]??"",riskModel:F[4],borrowFeeKey:F[5]??"",supplyLimitKey:F[6]??"",borrowLimitKey:F[7]??"",isolatedAssetKey:F[8]?.fields?.id.id??"",isIsolated:F[8]?.fields?.value??false,...T,...A,sCoinName:O,coinMetadataId:V,coinType:R,spoolName:q,decimals:K,...U,flashloanFeeObject:D[R]??""},await new Promise(M=>setTimeout(M,1e3));})),s};var Ha=async(t,e=[...t.constants.whitelist.lending],a,s,o,r=false)=>{let i=e.map(b=>t.utils.parseMarketCoinName(b)),n=i.filter(b=>t.constants.whitelist.spool.has(b));o=o??await t.utils.getCoinPrices(),s=s??(await t.getMarketPools(e,{indexer:r,coinPrices:o})).pools;let c=await t.getSpools(n,{indexer:r,marketPools:s,coinPrices:o}),[d,l,u]=await Promise.all([t.getCoinAmounts(e,a),t.getMarketCoinAmounts(i,a),t.getAllStakeAccounts(a)]),p={};return await Promise.allSettled(e.map(async b=>{let m=n.find(f=>f===t.utils.parseMarketCoinName(b)),y=t.utils.parseMarketCoinName(b);p[b]=await Nt(t,b,a,r,s?.[b],m?c[m]:void 0,m?u[m]:[],d?.[b],l?.[y],o?.[b]??0);})),p},Nt=async(t,e,a,s=false,o,r,i,n,c,d,l)=>{let u=t.utils.parseMarketCoinName(e);if(d=d??(await t.utils.getCoinPrices())?.[e]??0,o=o??await t.getMarketPool(e,{indexer:s,coinPrice:d}),!o)throw new Error(`Failed to fetch marketPool for ${e}`);r=r??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:s,marketPool:o,coinPrices:{[e]:d}}):void 0,i=i||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,a):[],n=n||await t.getCoinAmount(e,a),c=c||await t.getMarketCoinAmount(u,a),l=l||await t.getSCoinAmount(u,a);let p=t.utils.getCoinDecimal(e),b=S__default.default(0),m=S__default.default(0),y=S__default.default(0),f=S__default.default(0),g=S__default.default(0),h=S__default.default(0),C=S__default.default(0),P=S__default.default(0),D=S__default.default(0);if(r)for(let U of i){let v=S__default.default(U.staked),j=v.shiftedBy(-1*r.coinDecimal),K=v.multipliedBy(o?.conversionRate??1),q=K.shiftedBy(-1*r.coinDecimal),M=q.multipliedBy(r.coinPrice);b=b.plus(v),m=m.plus(j),y=y.plus(K),f=f.plus(q),g=g.plus(M),h=h.plus(v),C=h.shiftedBy(-1*r.coinDecimal);let H=r.currentPointIndex?S__default.default(r.currentPointIndex-U.index).dividedBy(1e9):1;P=P.plus(v.multipliedBy(H).plus(U.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),D=P.shiftedBy(-1*r.rewardCoinDecimal);}let k=S__default.default(c).plus(S__default.default(l)).multipliedBy(o?.conversionRate??1),R=k.shiftedBy(-1*p),_=R.multipliedBy(d??0),F=S__default.default(d??0).multipliedBy(o?.conversionRate??1),te=S__default.default(c).plus(S__default.default(l)),V=te.shiftedBy(-1*p),T=S__default.default(n),x=T.shiftedBy(-1*p),A=ce(k,o?.supplyAmount??1/0).plus(y),O=ce(R,o?.supplyCoin??1/0).plus(f);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:o?.sCoinType??"",coinDecimal:p,coinPrice:d??0,conversionRate:o?.conversionRate??1,marketCoinPrice:F.toNumber(),supplyApr:o?.supplyApr??0,supplyApy:o?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:k.plus(y).toNumber(),suppliedCoin:R.plus(f).toNumber(),suppliedValue:_.plus(g).toNumber(),stakedMarketAmount:b.toNumber(),stakedMarketCoin:m.toNumber(),stakedAmount:y.toNumber(),stakedCoin:f.toNumber(),stakedValue:g.toNumber(),unstakedMarketAmount:te.toNumber(),unstakedMarketCoin:V.toNumber(),unstakedAmount:k.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:_.toNumber(),availableSupplyAmount:T.toNumber(),availableSupplyCoin:x.toNumber(),availableWithdrawAmount:A.toNumber(),availableWithdrawCoin:O.toNumber(),availableStakeAmount:te.toNumber(),availableStakeCoin:V.toNumber(),availableUnstakeAmount:h.toNumber(),availableUnstakeCoin:C.toNumber(),availableClaimAmount:P.toNumber(),availableClaimCoin:D.toNumber(),isIsolated:o?o.isIsolated:false}},Ya=async(t,e,a,s,o=false)=>{a=a??await t.getMarketPools(void 0,{indexer:o}),s=s??await t.getAllCoinPrices({marketPools:a.pools});let[r,i]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),n=await t.scallopSuiKit.queryGetObjects(i.map(d=>d.id)),c={};return await Promise.allSettled(i.map(async(d,l)=>{c[d.keyId]=await jo(t,n[l]??d.id,e,o,a,s,r);})),c},jo=async(t,e,a,s=false,o,r,i)=>{o=o??await t.getMarketPools(void 0,{indexer:s}),r=r??await t.getAllCoinPrices({marketPools:o.pools}),i=i??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),a);let[n,c,d]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:r,marketPools:o.pools}),t.getBorrowIncentiveAccounts(e)]),l={},u={},p={},b=0,m=S__default.default(0),y=S__default.default(0),f=S__default.default(0),g=0,h=0,C=S__default.default(0),P=S__default.default(0);for(let T of Array.from(t.constants.whitelist.collateral)){let x=n?.collaterals.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),A=o.collaterals[T],O=t.utils.getCoinDecimal(T),B=r?.[T],U=i?.[T]??0;if(A&&B){let v=S__default.default(x?.amount??0),j=v.shiftedBy(-1*O),K=j.multipliedBy(B),q=K.multipliedBy(A.collateralFactor),M=K.multipliedBy(A.liquidationFactor),Q=S__default.default(U),H=Q.shiftedBy(-1*O);m=m.plus(K),y=y.plus(q),f=f.plus(M),v.isGreaterThan(0)&&b++,l[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:j.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:q.toNumber(),requiredCollateralValue:M.toNumber(),availableDepositAmount:Q.toNumber(),availableDepositCoin:H.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let D=[...new Set([...Object.values(o.pools).filter(T=>!!T).map(T=>T.coinName)])];for(let T of D){let x=n?.debts.find(v=>{let j=t.utils.parseCoinNameFromType(v.type.name);return T===j}),A=o.pools[T],O=t.utils.getCoinDecimal(T),B=r?.[T],U=i?.[T]??0;if(A&&B){let v=x?.borrowIndex?A.borrowIndex/Number(x.borrowIndex)-1:0,j=S__default.default(x?.amount??0).multipliedBy(v+1),K=j.shiftedBy(-1*O),q=j,M=q.shiftedBy(-1*O),Q=S__default.default(U),H=Q.shiftedBy(-1*O),Z=M.multipliedBy(B),ke=Z.multipliedBy(A.borrowWeight);C=C.plus(Z),P=P.plus(ke),j.isGreaterThan(0)&&g++,u[T]={coinName:T,coinType:t.utils.parseCoinType(T),symbol:t.utils.parseSymbol(T),coinDecimal:O,coinPrice:B,borrowedAmount:j.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:Z.toNumber(),borrowedValueWithWeight:ke.toNumber(),borrowIndex:Number(x?.borrowIndex??0),requiredRepayAmount:q.toNumber(),requiredRepayCoin:M.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:Q.toNumber(),availableRepayCoin:H.toNumber()};}}for(let[T,x]of Object.entries(d)){if(!x)continue;let A=T,O=c[A];if(O){let B=[];Object.entries(x.pointList).forEach(([U,v])=>{let j=O.points[t.utils.parseSCoinTypeNameToMarketCoinName(U)];if(v&&j){let K=S__default.default(0),q=S__default.default(0),M=S__default.default(v.weightedAmount),H=j.currentPointIndex?Math.max(S__default.default(j.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(M.multipliedBy(H).plus(v.points)),q=K.shiftedBy(-1*j.coinDecimal);let Z=S__default.default(1e12),ke=S__default.default(v.weightedAmount).div(S__default.default(x.debtAmount).multipliedBy(j.baseWeight).dividedBy(Z)).isFinite()?S__default.default(v.weightedAmount).div(S__default.default(x.debtAmount).multipliedBy(j.baseWeight).dividedBy(Z)).toNumber():1;K.isGreaterThanOrEqualTo(0)&&B.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,weightedBorrowAmount:M.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:q.toNumber(),boostValue:ke});}}),Object.keys(O.points).some(U=>{let v=O.points[U]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&x.debtAmount>0&&h++,p[A]={coinName:O.coinName,coinType:O.coinType,symbol:O.symbol,coinDecimal:O.coinDecimal,coinPrice:O.coinPrice,rewards:B};}}let k=f.isZero()?P.isGreaterThan(0)?S__default.default(100):S__default.default(0):P.dividedBy(f);k=k.isLessThan(1)?k:S__default.default(1);let R=m.minus(C).isGreaterThan(0)?m.minus(C):S__default.default(0),_=y.minus(P).isGreaterThan(0)?y.minus(P):S__default.default(0),F=P.isGreaterThan(0)?f:S__default.default(0),te=P.minus(F).isGreaterThan(0)?P.minus(F):S__default.default(0),V={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:m.toNumber(),totalBorrowedValue:C.toNumber(),totalBalanceValue:R.toNumber(),totalBorrowCapacityValue:y.toNumber(),totalAvailableCollateralValue:_.toNumber(),totalBorrowedValueWithWeight:P.toNumber(),totalRequiredCollateralValue:F.toNumber(),totalUnhealthyCollateralValue:te.toNumber(),totalRiskLevel:k.toNumber(),totalDepositedPools:b,totalBorrowedPools:g,totalRewardedPools:h,collaterals:l,debts:u,borrowIncentives:p};for(let[T,x]of Object.entries(V.collaterals)){if(!x)continue;let A=o.collaterals[T];if(A){let O=S__default.default(V.totalAvailableCollateralValue).dividedBy(A.collateralFactor).dividedBy(A.coinPrice).shiftedBy(A.coinDecimal);O=V.totalBorrowedValueWithWeight===0?S__default.default(x.depositedAmount):ce(O.multipliedBy(Ae(S__default.default(V.totalAvailableCollateralValue).dividedBy(A.collateralFactor).toNumber(),3,"increase")).toNumber(),x.depositedAmount,A.depositAmount),x.availableWithdrawAmount=O.toNumber(),x.availableWithdrawCoin=O.shiftedBy(-1*x.coinDecimal).toNumber();}}for(let[T,x]of Object.entries(V.debts)){if(!x)continue;let A=o.pools[T];if(A){let O=S__default.default(x.requiredRepayAmount).multipliedBy(Ae(x.borrowedValue,3,"decrease")),B=S__default.default(V.totalAvailableCollateralValue).dividedBy(A.borrowWeight).shiftedBy(A.coinDecimal).dividedBy(A.coinPrice);B=V.totalAvailableCollateralValue!==0&&S__default.default(A.maxBorrowCoin).isGreaterThan(A.borrowCoin)?ce(B.multipliedBy(Ae(B.shiftedBy(-1*A.coinDecimal).multipliedBy(A.coinPrice).toNumber(),3,"increase")).toNumber(),A.supplyAmount):S__default.default(0),x.availableBorrowAmount=B.toNumber(),x.availableBorrowCoin=B.shiftedBy(-1*x.coinDecimal).toNumber(),x.requiredRepayAmount=O.toNumber(),x.requiredRepayCoin=O.shiftedBy(-1*x.coinDecimal).toNumber();}}return V},Ja=async(t,e=false)=>{let a=await t.getMarketPools(void 0,{indexer:e}),s=S__default.default(0),o=S__default.default(0),r=S__default.default(0);if(e){let n=await t.indexer.getTotalValueLocked();return {supplyValue:n.supplyValue,supplyValueChangeRatio:n.supplyValueChangeRatio,borrowValue:n.borrowValue,borrowValueChangeRatio:n.borrowValueChangeRatio,totalValue:n.totalValue,totalValueChangeRatio:n.totalValueChangeRatio,supplyLendingValue:n.supplyLendingValue,supplyLendingValueChangeRatio:n.supplyLendingValueChangeRatio,supplyCollateralValue:n.supplyCollateralValue,supplyCollateralValueChangeRatio:n.supplyCollateralValueChangeRatio}}for(let n of Object.values(a.pools))n&&(s=s.plus(S__default.default(n.supplyCoin).multipliedBy(n.coinPrice)),r=r.plus(S__default.default(n.borrowCoin).multipliedBy(n.coinPrice)));for(let n of Object.values(a.collaterals))n&&(o=o.plus(S__default.default(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:s.plus(o).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:r.toNumber(),totalValue:s.plus(o).minus(r).toNumber()}},Za=async(t,e,a=false)=>{let s=await t.getAllCoinPrices({indexer:a}),o=await t.getMarketPools(void 0,{indexer:a,coinPrices:s}),[r,i,n,c]=await Promise.all([t.getLendings(void 0,e,{indexer:a,marketPools:o.pools,coinPrices:s}),t.getObligationAccounts(e,{indexer:a,market:o,coinPrices:s}),t.getBorrowIncentivePools(void 0,{marketPools:o.pools,coinPrices:s}),t.getVeScas({walletAddress:e,excludeEmpty:true})]),d=Object.values(r).filter(f=>!!f&&f.availableWithdrawCoin>0).map(f=>({suppliedCoin:f.availableWithdrawCoin,suppliedValue:f.suppliedValue,stakedCoin:f.availableUnstakeCoin,coinName:f.coinName,symbol:f.symbol,coinType:f.coinType,coinPrice:f.coinPrice,coinDecimals:f.coinDecimal,supplyApr:f.supplyApr,supplyApy:f.supplyApy,incentiveApr:isFinite(f.rewardApr)?f.rewardApr:0})),l=Object.values(i).filter(f=>!!f&&(f.totalBorrowedValueWithWeight>0||f.totalDepositedValue>0)).map(f=>({obligationId:f.obligationId,totalDebtsInUsd:f.totalBorrowedValueWithWeight,totalCollateralInUsd:f.totalDepositedValue,riskLevel:f.totalRiskLevel,availableCollateralInUsd:f.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:f.totalUnhealthyCollateralValue,collaterals:Object.values(f.collaterals).filter(g=>!!g&&g.depositedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,depositedCoin:g.depositedCoin,depositedValueInUsd:g.depositedValue})),borrowedPools:Object.values(f.debts).filter(g=>!!g&&g.borrowedCoin>0).map(g=>({coinName:g.coinName,symbol:g.symbol,coinDecimals:g.coinDecimal,coinType:g.coinType,coinPrice:g.coinPrice,borrowedCoin:g.borrowedCoin,borrowedValueInUsd:g.borrowedValueWithWeight,borrowApr:o.pools[g.coinName]?.borrowApr,borrowApy:o.pools[g.coinName]?.borrowApy,incentiveInfos:Object.values(n[g.coinName]?.points??{}).filter(h=>!!h&&isFinite(h.rewardApr)).map(h=>({coinName:h.coinName,symbol:h.symbol,coinType:h.coinType,incentiveApr:h.rewardApr}))}))})),u="sui",p="SUI",b=Object.values(r).reduce((f,g)=>{if(g){if(g.availableClaimCoin===0)return f;f[u]?f[u].pendingRewardInCoin+=g.availableClaimCoin:f[u]={symbol:p,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:s[u]??0,pendingRewardInCoin:g.availableClaimCoin};}return f},{}),m=Object.values(i).filter(f=>!!f).reduce((f,g)=>(Object.values(g.borrowIncentives).forEach(h=>{h?.rewards.forEach(C=>{if(C.availableClaimCoin===0)return f;f[C.coinName]?f[C.coinName].pendingRewardInCoin+=C.availableClaimCoin:f[C.coinName]={symbol:C.symbol,coinType:C.coinType,coinPrice:C.coinPrice,pendingRewardInCoin:C.availableClaimCoin};});}),f),{}),y=c.map(({keyId:f,lockedScaCoin:g,currentVeScaBalance:h,unlockAt:C})=>({veScaKey:f,coinPrice:s.sca??0,lockedScaInCoin:g,lockedScaInUsd:g*(s.sca??0),currentVeScaBalance:h,remainingLockPeriodInDays:C-Date.now()>0?(C-Date.now())/864e5:0,unlockAt:C}));return {totalSupplyValue:d.reduce((f,g)=>(f+=g.suppliedValue,f),0),...l.reduce((f,g)=>(f.totalDebtValue+=g.totalDebtsInUsd,f.totalCollateralValue+=g.totalCollateralInUsd,f),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:y.reduce((f,g)=>(f+=g.lockedScaInUsd,f),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(b).reduce((f,[g,h])=>(f.push({...h,coinName:"sui",pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),f),[]),borrowIncentives:Object.entries(m).reduce((f,[g,h])=>(f.push({coinName:g,...h,pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),f),[])},veScas:y}};var _t=async({address:t,scallopSuiKit:e},a,s)=>{let o=t.get(`core.coins.${a}.oracle.pyth.feedObject`);if(s=s||(await e.queryGetObject(o))?.data,s){let r=s;if(r.content&&"fields"in r.content){let i=r.content.fields,n=Number(i.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),c=Number(i.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),d=Number(i.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(i.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return d*10**((c?-1:1)*n)*(l?-1:1)}}return 0},es=async({address:t,scallopSuiKit:e},a)=>{let s=a.reduce((i,n)=>{let c=t.get(`core.coins.${n}.oracle.pyth.feedObject`);return c&&(i[c]?i[c].push(n):i[c]=[n]),i},{}),r=(await e.queryGetObjects(Object.keys(s))).reduce((i,n)=>(s[n.objectId].forEach(c=>{i[c]=n;}),i),{});return (await Promise.all(Object.entries(r).map(async([i,n])=>({coinName:i,price:await _t({address:t,scallopSuiKit:e},i,n)})))).reduce((i,n)=>(i[n.coinName]=n.price,i),{})},ts=async(t,e,a,s=false)=>{if(a=a??(s?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:a,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let o={};return t.constants.whitelist.scoin.forEach(r=>{let i=t.utils.parseCoinName(r);o[r]=S__default.default(a[i]??0).multipliedBy(e[i]?.conversionRate??1).toNumber();}),{...a,...o}};var as=async({address:t,scallopSuiKit:e},a)=>{let s=t.get("referral.bindingTableId"),o=await e.queryGetDynamicFieldObject({parentId:s,name:{type:"address",value:a}});return o?.data?.content?.dataType!=="moveObject"?null:o.data.content.fields.value};var ss=async({utils:t},e)=>{let a=t.address.get("scoin.id"),s=[t.getSCoinTreasury(e)],o=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],r=`${a}::s_coin_converter::total_supply`,n=(await t.scallopSuiKit.queryInspectTxn({queryTarget:r,args:s,typeArgs:o}))?.results;if(n&&n[0]?.returnValues){let c=Uint8Array.from(n[0].returnValues[0][0]),d=n[0].returnValues[0][1];return qs__default.default(d==="u64","Result type is not u64"),S__default.default(bcs.bcs.u64().parse(c)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},os=async({utils:t},e=[...t.constants.whitelist.scoin],a)=>{let s=a||t.suiKit.currentAddress,o={};return await Promise.allSettled(e.map(async r=>{let i=await Mt({utils:t},r,s);o[r]=i;})),o},Mt=async({utils:t},e,a)=>{let s=a||t.suiKit.currentAddress,o=t.parseSCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:o});return S__default.default(r?.totalBalance??"0").toNumber()},Mo=(t,e,a)=>{if(e===a)throw new Error("fromAsset and toAsset must be different");if(!t.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!t.constants.whitelist.scoin.has(a))throw new Error("toAsset is not supported")},rs=async(t,e,a,s)=>{Mo(t.utils,e,a);let o=t.utils.parseCoinName(e),r=t.utils.parseCoinName(a),i=await Promise.all([t.getMarketPool(o),t.getMarketPool(r)]);if(i.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(i.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let n=i[0].conversionRate,c=1/i[1].conversionRate,l=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[o]||!u[r])throw new Error("Failed to fetch the coin prices");if(u[r]===0)throw new Error("Price of toCoin cannot be zero");return u[o]/u[r]})();return S__default.default(n).multipliedBy(l).multipliedBy(c).toNumber()};var is=async(t,e,a=t.address.get("core.oracles.switchboard.registryTableId"))=>{let s=[],o=e.map((n,c)=>{let d=t.utils.address.get(`core.coins.${n}.oracle.switchboard`);return d||(s.push({idx:c,coinName:n}),null)});if(s.length===0)return o;let i=s.map(n=>n.coinName).map(n=>{let c=t.utils.parseCoinType(n);if(!c)throw new Error(`Invalid coin name: ${n}`);return c});return await Promise.all(i.map(async(n,c)=>{let d={type:"0x1::type_name::TypeName",value:{name:n.slice(2)}},l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:d});if(!l?.data?.content||l.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${n}`);let u=l.data.content;o[c]=u.fields.value;})),o};var ns=async({address:t,scallopSuiKit:e})=>{let a=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[s,o]=await Promise.all([e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:a,value:{dummy_field:false}}}),e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:a,value:{dummy_field:false}}})]);return {primary:s,secondary:o}},Ft=async(t,e)=>{if(e==="primary"&&!t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"))return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"))return console.error("Secondary price update policy vecset id is not set"),null;let a=n=>`${n}::rule::Rule`,s=Object.values(t.address.get("core.packages.pyth.lst")??{}).reduce((n,c)=>(n[a(c.object)]="pyth",n),{}),o={[a(t.address.get("core.packages.pyth.object"))]:"pyth",[a(t.address.get("core.packages.supra.object"))]:"supra",[a(t.address.get("core.packages.switchboard.object"))]:"switchboard",...s},r={},i=null;do{let n=await t.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:i,limit:10});if(!n)break;let{data:c,hasNextPage:d,nextCursor:l}=n;i=l;let u=c.map(b=>b.objectId);if((await t.scallopSuiKit.queryGetObjects(u)).forEach(b=>{if(!b.content||b.content.dataType!=="moveObject")return;let m=b.content.fields,y=m.name.fields.name,f=t.parseCoinNameFromType(`0x${y}`);if(!f)throw new Error(`Invalid asset name: ${f}`);r[f]||(r[f]=[]),m.value.fields.contents.forEach(h=>{r[f].push(o[`0x${h.fields.name}`]);});}),!d)break}while(i);return r};var Dt=class{indexer;utils;constructor(e){this.utils=e.utils??new We(e),this.indexer=e.indexer??new Ge({queryClient:this.utils.queryClient,...e}),this.initIndexerFallback();}initIndexerFallback(){this.queryMarket=E.call(this,this.queryMarket),this.getMarketPools=E.call(this,this.getMarketPools),this.getMarketPool=E.call(this,this.getMarketPool),this.getMarketCollaterals=E.call(this,this.getMarketCollaterals),this.getMarketCollateral=E.call(this,this.getMarketCollateral),this.getSpools=E.call(this,this.getSpools),this.getSpool=E.call(this,this.getSpool),this.getBorrowIncentivePools=E.call(this,this.getBorrowIncentivePools),this.getLendings=E.call(this,this.getLendings),this.getLending=E.call(this,this.getLending),this.getObligationAccounts=E.call(this,this.getObligationAccounts),this.getObligationAccount=E.call(this,this.getObligationAccount),this.getTvl=E.call(this,this.getTvl);}async init(e=false){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.utils.address}async queryMarket(e){return await sa(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],a){return await ra(this,e,a?.indexer,a?.coinPrices)}async getMarketPool(e,a){return (await this.getMarketPools(void 0,a)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],a){return await ia(this,e,a?.indexer)}async getMarketCollateral(e,a){return await ot(this,e,a?.indexer)}async getObligations(e=this.walletAddress){return await ie(this,e)}async queryObligation(e){return Ie(this,e)}async getCoinAmounts(e,a=this.walletAddress){return await na(this,e,a)}async getCoinAmount(e,a=this.walletAddress){return await it(this,e,a)}async getMarketCoinAmounts(e,a=this.walletAddress){return await ca(this,e,a)}async getMarketCoinAmount(e,a=this.walletAddress){return await nt(this,e,a)}async getPriceFromPyth(e){return await _t(this,e)}async getPricesFromPyth(e){return await es(this,e)}async getSpools(e,a){return await wa(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getSpool(e,a){return (await this.getSpools(void 0,a))[e]}async getAllStakeAccounts(e=this.walletAddress){return await ye(this,e)}async getStakeAccounts(e,a=this.walletAddress){return (await this.getAllStakeAccounts(a))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let a={};for(let s of e){let o=await gt(this,s);o&&(a[s]=o);}return a}async getStakePool(e){return await gt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let a={};return await Promise.allSettled(e.map(async s=>{let o=await ht(this,s);o&&(a[s]=o);})),a}async getStakeRewardPool(e){return await ht(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],a){return await qa(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getBorrowIncentiveAccounts(e,a){return await Qa(this,e,a)}async getLendings(e,a=this.walletAddress,s){return await Ha(this,e,a,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,a=this.walletAddress,s){return await Nt(this,e,a,s?.indexer)}async getObligationAccounts(e=this.walletAddress,a){return await Ya(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccount(e,a=this.walletAddress,s){let o=await this.getObligationAccounts(a,s);return Object.values(o).find(r=>r?.obligationId===e)}async getTvl(e){return await Ja(this,e?.indexer)}async getVeSca(e){return await oe(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:a=false}={}){return await Ue(this,e,a)}async getVeScaTreasuryInfo(){return await Ra(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await as(this,e)}async getBindedObligationId(e){return await $a(this,e)}async getBindedVeScaKey(e){return await Wa(this,e)}async getLoyaltyProgramInfos(e){return await Ga(this,e)}async getVeScaLoyaltyProgramInfos(e){return await Xa(this,e)}async getSCoinTotalSupply(e){return await ss(this,e)}async getSCoinAmounts(e,a=this.walletAddress){return await os(this,e,a)}async getSCoinAmount(e,a=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await Mt(this,s,a):0}async getSCoinSwapRate(e,a){return await rs(this,e,a)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await la(this,e)}async getPoolSupplyLimit(e){return await Oe(this.utils,e)}async getPoolBorrowLimit(e){return await Re(this.utils,e)}async getIsolatedAssets(e=false){return await Zt(this,e)}async isIsolatedAsset(e){return re(this.utils,e)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return ts(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return za(e)}async getUserPortfolio(e){return Za(this,e?.walletAddress??this.walletAddress,e?.indexer??false)}async getPriceUpdatePolicies(){return await ns(this)}async getAssetOracles(){let[e,a]=await Promise.all([Ft(this.utils,"primary"),Ft(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,o)=>(s[o]={primary:e?.[o]??[],secondary:a?.[o]??[]},s),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await is(this,e)}},ze=Dt;var Kt=class{query;usePythPullModel;useOnChainXOracleList;pythSponsoredFeeds;constructor(e){this.query=e.query??new ze(e),this.usePythPullModel=e.usePythPullModel??true,this.useOnChainXOracleList=e.useOnChainXOracleList??true,this.pythSponsoredFeeds=[...new Set(e.pythSponsoredFeeds??[])];}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get suiKit(){return this.scallopSuiKit.suiKit}get address(){return this.utils.address}async init(e=false){await this.query.init(e);}createTxBlock(e){return Ka(this,e)}async selectCoin(e,a,s,o=this.walletAddress){if(a==="sui"){let[r]=e.splitSUIFromGas([s]);return {takeCoin:r}}else {let r=this.utils.parseCoinType(a),i=await this.utils.selectCoins(s,r,o),[n,c]=e.takeAmountFromCoins(i,s);return {takeCoin:n,leftCoin:c}}}async selectMarketCoin(e,a,s,o=this.walletAddress){let r=this.utils.parseMarketCoinType(a),i=await this.utils.selectCoins(s,r,o),n=i.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(i,Math.min(s,n));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoin(e,a,s,o=this.walletAddress){let r=this.utils.parseSCoinType(a),i=await this.utils.selectCoins(s,r,o),n=i.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(i,Math.min(n,s));return {takeCoin:c,leftCoin:d,totalAmount:n}}async selectSCoinOrMarketCoin(e,a,s,o=this.walletAddress){let r=s,i={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:d,takeCoin:l,totalAmount:u}=await this.selectSCoin(e,a,r,o);if(i.leftCoins.push(d),i.sCoins.push(l),r-=u,r>0){let{leftCoin:p,takeCoin:b}=await this.selectMarketCoin(e,a,s,o);e.transferObjects([p],o),i.marketCoins.push(b);}}catch{let{takeCoin:l,leftCoin:u}=await this.selectMarketCoin(e,a,s,o);i.leftCoins.push(u),i.marketCoins.push(l);}e.transferObjects(i.leftCoins,o);let n=i.marketCoins.length>0?i.marketCoins.length>1?e.mergeCoins(i.marketCoins[0],i.marketCoins.slice(1)):i.marketCoins[0]:void 0;return {sCoin:i.sCoins.length>0?i.sCoins.length>1?e.mergeCoins(i.sCoins[0],i.sCoins.slice(1)):i.sCoins[0]:void 0,marketCoin:n}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,a,s,o){return e.moveCall(a,s,o)}},He=Kt;var Lt=class{builder;networkType;constructor(e){this.builder=e.builder??new He(e),this.networkType=e.networkType??"mainnet";}get query(){return this.builder.query}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.builder.address}async init(e=false){await this.builder.init(e);}async queryMarket(){return await this.query.queryMarket()}async getObligations(e){let a=e??this.walletAddress;return await this.query.getObligations(a)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let a=e??this.walletAddress;return await this.query.getAllStakeAccounts(a)}async getStakeAccounts(e,a){let s=a??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=true){let a=this.builder.createTxBlock();return a.openObligationEntry(),e?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async depositCollateral(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await this.query.getObligations(n),d=o??c[0]?.id;if(d)await i.addCollateralQuick(a,e,d);else {let[l,u,p]=i.openObligation();await i.addCollateralQuick(a,e,l),i.returnObligation(l,p),i.transferObjects([u],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdrawCollateral(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=await n.takeCollateralQuick(a,e,o,r);return n.transferObjects([d],c),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async deposit(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.depositQuick(a,e);return r.transferObjects([n],i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=this.utils.parseMarketCoinName(e),d=await this.query.getStakeAccounts(c),l=o??d[0]?.id,u=await i.depositQuick(a,e,false);if(l)await i.stakeQuick(u,c,l);else {let p=i.createStakeAccount(c);await i.stakeQuick(u,c,p),i.transferObjects([p],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdraw(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.withdrawQuick(a,e);return r.transferObjects([n],i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async borrow(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);s&&d&&await n.unstakeObligationQuick(o,r);let l=await n.borrowQuick(a,e,o,r);return n.transferObjects([l],c),s&&d&&await n.stakeObligationWithVeScaQuick(o,r),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async repay(e,a,s=true,o,r,i){let n=this.builder.createTxBlock(),c=i??this.walletAddress;n.setSender(c);let d=this.constants.whitelist.lending.has(e);return s&&d&&await n.unstakeObligationQuick(o,r),await n.repayQuick(a,e,o),s&&d&&await n.stakeObligationWithVeScaQuick(o,r),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async flashLoan(e,a,s,o=true,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let[c,d]=i.borrowFlashLoan(a,e);return i.repayFlashLoan(await s(i,c),d,e),o?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async createStakeAccount(e,a=true,s){let o=this.builder.createTxBlock(),r=s??this.walletAddress;o.setSender(r);let i=o.createStakeAccount(e);return o.transferObjects([i],r),a?await this.scallopSuiKit.signAndSendTxn(o):o.txBlock}async stake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await this.query.getStakeAccounts(e),d=o??c[0]?.id;if(d)await i.stakeQuick(a,e,d);else {let l=i.createStakeAccount(e);await i.stakeQuick(a,e,l),i.transferObjects([l],n);}return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async unstake(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await i.unstakeQuick(a,e,o);if(c){let d=this.utils.parseSCoinType(e);if(!d)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(i,c,d,Ct(i));}return i.transferObjects([c],n),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async unstakeAndWithdraw(e,a,s=true,o,r){let i=this.builder.createTxBlock(),n=r??this.walletAddress;i.setSender(n);let c=await i.unstakeQuick(a,e,o,false),d=this.utils.parseCoinName(e);if(c){let l=i.withdraw(c,d);await this.utils.mergeSimilarCoins(i,l,this.utils.parseCoinType(d),Ct(i)),i.transferObjects([l],n);}else throw new Error(`No stake found for ${e}`);return s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async claim(e,a=true,s,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);let n=await r.claimQuick(e,s);return r.transferObjects(n,i),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stakeObligation(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;return r.setSender(i),await r.stakeObligationWithVeScaQuick(e,a),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async unstakeObligation(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;return r.setSender(i),await r.unstakeObligationQuick(e,a),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimBorrowIncentive(e,a,s=true,o){let r=this.builder.createTxBlock(),i=o??this.walletAddress;r.setSender(i);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 r.claimBorrowIncentiveQuick(l,e,a);n[l]?n[l].push(u):n[l]=[u];}return r.transferObjects(Object.values(n).map(l=>{let u=l[0];return l.length>1&&r.mergeCoins(u,l.slice(1)),u}),i),s?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async migrateAllMarketCoin(e=true,a=true,s){let o=s??this.walletAddress,r=this.builder.createTxBlock();r.setSender(o);let i=[];for(let n of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:d}=await this.builder.selectMarketCoin(r,n,Number.MAX_SAFE_INTEGER,o);if(d){let l=r.mintSCoin(n,d);c.push(l);}}catch(d){if(!d.toString().includes("No valid coins found for the transaction"))throw d}if(e&&this.constants.whitelist.spool.has(n))try{let d=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,n);d&&c.push(d);}catch{}if(c.length>0){let d=c[0];c.length>1&&r.mergeCoins(d,c.slice(1));let l=this.utils.parseSCoinType(n);await this.utils.mergeSimilarCoins(r,d,l,o),i.push(d);}}return i.length>0&&r.transferObjects(i,o),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=true,a){let s=a??this.walletAddress,o=(await this.query.getVeScas({walletAddress:s})??[]).map(({keyObject:n})=>n);if(o.length===0)throw new Error("No veSCA found in the wallet");let r=[],i=this.builder.createTxBlock();if(i.setSender(s),await Promise.all(o.map(async n=>{try{let c=await i.redeemScaQuick({veScaKey:n,transferSca:!1});if(!c)return;r.push(c);}catch{}})),r.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return r.length>1&&i.mergeCoins(r[0],r.slice(1)),await this.utils.mergeSimilarCoins(i,r[0],"sca",s),e?await this.scallopSuiKit.signAndSendTxn(i):{tx:i.txBlock,scaCoin:r[0]}}async mintTestCoin(e,a,s=true,o){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let i=this.builder.createTxBlock(),n=o??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),d=this.address.get(`core.coins.${e}.treasury`),l=`${c}::${e}::mint`,u=i.moveCall(l,[d,a]);return i.transferObjects([u],n),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}},Ye=Lt;var Ut=class{client;constructor(e){this.client=e.client??new Ye(e);}async init(e=false){await this.client.init(e);}async createScallopClient(){return await this.init(),this.client}async createScallopBuilder(){return await this.init(),this.client.builder}async createScallopQuery(){return await this.init(),this.client.query}async createScallopUtils(){return await this.init(),this.client.utils}async createScallopIndexer(){return await this.init(),this.client.query.indexer}async getScallopConstants(){return await this.init(),this.client.constants}},cs=Ut;
|
|
2
|
+
exports.API_BASE_URL=Et;exports.DEFAULT_CACHE_OPTIONS=qt;exports.IS_VE_SCA_TEST=Ko;exports.MAX_LOCK_DURATION=$;exports.MAX_LOCK_ROUNDS=ne;exports.MIN_INITIAL_LOCK_AMOUNT=et;exports.MIN_TOP_UP_AMOUNT=tt;exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID=Je;exports.RPC_PROVIDERS=Ze;exports.SCA_COIN_TYPE=Ce;exports.SDK_API_BASE_URL=Vt;exports.SUPPORT_ORACLES=zo;exports.SUPPORT_ORACLE_LST=Yo;exports.SUPPORT_SUI_LST=Te;exports.Scallop=cs;exports.ScallopAddress=Ee;exports.ScallopBuilder=He;exports.ScallopClient=Ye;exports.ScallopConstants=Ve;exports.ScallopIndexer=Ge;exports.ScallopQuery=ze;exports.ScallopSuiKit=$e;exports.ScallopUtils=We;exports.TEST_ADDRESSES=Qo;exports.TEST_POOL_ADDRESSES=Wo;exports.TEST_WHITELIST=$o;exports.UNLOCK_ROUND_DURATION=ee;exports.USE_TEST_ADDRESS=Lo;exports.X_ORACLE_LIST=Qt;exports.X_ORACLE_RULES=Ho;exports.queryKeys=N;
|